#!/usr/bin/python

# An Unicode-aware grep. It searches patterns in UTF-8 encoded files.
# Of course, it is far from having all the options of GNU grep...

import re
import sys
import locale

myencoding = locale.getpreferredencoding()

if len(sys.argv) <= 1:
    sys.stderr.write("Usage: %s pattern [file ...]\n" % sys.argv[0])
    sys.exit(1)

pattern = re.compile(sys.argv[1])

if len(sys.argv) == 2:
    for rawline in sys.stdin.xreadlines():
        line = rawline.decode('utf-8')
        if pattern.search(line):
            sys.stdout.write(line.encode(myencoding))
else:
    multiple = (len(sys.argv) > 2)
    for filename in sys.argv[2:]:
        ufile = open(filename) # TODO: use codecs instead?
        for  rawline in ufile.xreadlines():
            line = rawline.decode('utf-8')
            if pattern.search(line):
                if multiple:
                    sys.stdout.write("%s: " % filename)
                sys.stdout.write(line.encode(myencoding))
