Fred Drake | 3cae66b | 2001-07-17 16:46:14 +0000 | [diff] [blame] | 1 | """Simple script to replace @DATE@ and friends with real information. |
| 2 | |
| 3 | Usage: rewrite.py boilerplate.tex [VAR=value] ... <template >output |
| 4 | """ |
| 5 | |
Fred Drake | 3cae66b | 2001-07-17 16:46:14 +0000 | [diff] [blame] | 6 | import sys |
| 7 | import time |
| 8 | |
| 9 | |
| 10 | def get_info(fp): |
| 11 | s = fp.read() |
| 12 | |
| 13 | d = {} |
Fred Drake | 071972e | 2002-10-16 15:30:17 +0000 | [diff] [blame] | 14 | start = s.find(r"\date{") |
Fred Drake | 3cae66b | 2001-07-17 16:46:14 +0000 | [diff] [blame] | 15 | if start >= 0: |
Fred Drake | 071972e | 2002-10-16 15:30:17 +0000 | [diff] [blame] | 16 | end = s.find("}", start) |
Fred Drake | 3cae66b | 2001-07-17 16:46:14 +0000 | [diff] [blame] | 17 | date = s[start+6:end] |
| 18 | if date == r"\today": |
| 19 | date = time.strftime("%B %d, %Y", time.localtime(time.time())) |
| 20 | d["DATE"] = date |
| 21 | return d |
Fred Drake | 6f75a36 | 2003-10-02 16:30:17 +0000 | [diff] [blame] | 22 | |
Fred Drake | 3cae66b | 2001-07-17 16:46:14 +0000 | [diff] [blame] | 23 | |
| 24 | def main(): |
| 25 | s = sys.stdin.read() |
| 26 | if "@" in s: |
| 27 | # yes, we actully need to load the replacement values |
| 28 | d = get_info(open(sys.argv[1])) |
| 29 | for arg in sys.argv[2:]: |
Fred Drake | 071972e | 2002-10-16 15:30:17 +0000 | [diff] [blame] | 30 | name, value = arg.split("=", 1) |
Fred Drake | 3cae66b | 2001-07-17 16:46:14 +0000 | [diff] [blame] | 31 | d[name] = value |
| 32 | start = 0 |
| 33 | while 1: |
Fred Drake | 071972e | 2002-10-16 15:30:17 +0000 | [diff] [blame] | 34 | start = s.find("@", start) |
Fred Drake | 3cae66b | 2001-07-17 16:46:14 +0000 | [diff] [blame] | 35 | if start < 0: |
| 36 | break |
Fred Drake | 071972e | 2002-10-16 15:30:17 +0000 | [diff] [blame] | 37 | end = s.find("@", start+1) |
Fred Drake | 3cae66b | 2001-07-17 16:46:14 +0000 | [diff] [blame] | 38 | name = s[start+1:end] |
| 39 | if name: |
| 40 | value = d.get(name) |
| 41 | if value is None: |
| 42 | start = end + 1 |
| 43 | else: |
| 44 | s = s[:start] + value + s[end+1:] |
| 45 | start = start + len(value) |
| 46 | else: |
| 47 | # "@@" --> "@" |
| 48 | s = s[:start] + s[end:] |
| 49 | start = end |
| 50 | sys.stdout.write(s) |
| 51 | |
| 52 | |
| 53 | if __name__ == "__main__": |
| 54 | main() |