Line | |
---|
1 | """Simple script to replace @DATE@ and friends with real information.
|
---|
2 |
|
---|
3 | Usage: rewrite.py boilerplate.tex [VAR=value] ... <template >output
|
---|
4 | """
|
---|
5 |
|
---|
6 | import sys
|
---|
7 | import time
|
---|
8 |
|
---|
9 |
|
---|
10 | def get_info(fp):
|
---|
11 | s = fp.read()
|
---|
12 |
|
---|
13 | d = {}
|
---|
14 | start = s.find(r"\date{")
|
---|
15 | if start >= 0:
|
---|
16 | end = s.find("}", start)
|
---|
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
|
---|
22 |
|
---|
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:]:
|
---|
30 | name, value = arg.split("=", 1)
|
---|
31 | d[name] = value
|
---|
32 | start = 0
|
---|
33 | while 1:
|
---|
34 | start = s.find("@", start)
|
---|
35 | if start < 0:
|
---|
36 | break
|
---|
37 | end = s.find("@", start+1)
|
---|
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()
|
---|
Note:
See
TracBrowser
for help on using the repository browser.