#!/usr/bin/env python3

import csv
import os
import pprint
import re
import sys

__dir__ = os.path.abspath(os.path.dirname(__file__))

def main(argv):

    rewrites = []
    with open(os.path.join(__dir__, 'rewrites.csv'), newline='') as f:
        c = csv.DictReader(f)
        for r in c:
            rewrites.append((re.compile(('\\b'+r['from']+'\\b').encode('utf-8')), r['to'].encode('utf-8')))

    for fname in argv:
        with open(fname, 'rb') as f:
            data = f.read()

        for a, b in rewrites:
            data = a.sub(b, data)

        with open(fname, 'wb') as f:
            f.write(data)

    return 0


if __name__ == "__main__":
    sys.exit(main(sys.argv[1:]))
