#!/usr/bin/env python

def render(data):
    from mako.template import Template
    from mako.lookup import TemplateLookup

    lookup = TemplateLookup(["."])
    return Template(data, lookup=lookup).render()

def main(argv=None):
    from os.path import isfile
    from sys import stdin

    if argv is None:
        import sys
        argv = sys.argv

    from optparse import OptionParser

    parser = OptionParser("usage: %prog [FILENAME]")

    opts, args = parser.parse_args(argv[1:])
    if len(args) not in (0, 1):
        parser.error("wrong number of arguments") # Will exit

    if (len(args) == 0) or (args[0] == "-"):
        fo = stdin
    else:
        filename = args[0]
        if not isfile(filename):
            raise SystemExit("error: can't find %s" % filename)
        fo = open(filename)

    data = fo.read()
    print render(data)

if __name__ == "__main__":
    main()
