"""Simple script to replace @DATE@ and friends with real information. Usage: rewrite.py boilerplate.tex [VAR=value] ... <template >output """ import string import sys import time def get_info(fp): s = fp.read() d = {} start = string.find(s, r"\date{") if start >= 0: end = string.find(s, "}", start) date = s[start+6:end] if date == r"\today": date = time.strftime("%B %d, %Y", time.localtime(time.time())) d["DATE"] = date return d def main(): s = sys.stdin.read() if "@" in s: # yes, we actully need to load the replacement values d = get_info(open(sys.argv[1])) for arg in sys.argv[2:]: name, value = string.split(arg, "=", 1) d[name] = value start = 0 while 1: start = string.find(s, "@", start) if start < 0: break end = string.find(s, "@", start+1) name = s[start+1:end] if name: value = d.get(name) if value is None: start = end + 1 else: s = s[:start] + value + s[end+1:] start = start + len(value) else: # "@@" --> "@" s = s[:start] + s[end:] start = end sys.stdout.write(s) if __name__ == "__main__": main()