#!/usr/bin/env python

from __future__ import print_function

import re
import sys

refs = {}
complete_file = ""

for line in open(sys.argv[1], "r"):
    complete_file += line

for m in re.findall("\\[\\[(.+)\\]\\]\n=+ ([^\n]+)", complete_file):
    ref, title = m
    refs["<<" + ref + ">>"] = "<<" + ref + ", " + title + ">>"


def translate(match):
    try:
        return refs[match.group(0)]
    except KeyError:
        return ""


rc = re.compile("|".join(map(re.escape, sorted(refs, reverse=True))))
for line in open(sys.argv[1], "r"):
    print(rc.sub(translate, line), end="")
