]>
Commit | Line | Data |
---|---|---|
93195af6 DL |
1 | # 2020 by David Lamparter, placed in the public domain. |
2 | ||
3 | import sys | |
4 | import os | |
5 | import re | |
6 | import argparse | |
7 | ||
8 | wrap_res = [ | |
701a0192 | 9 | (re.compile(r'(?<!\\n)"\s*\n\s*"', re.M), r""), |
93195af6 DL |
10 | ] |
11 | pri_res = [ | |
701a0192 | 12 | (re.compile(r'(PRI[udx][0-9]+)\s*\n\s*"', re.M), r'\1"'), |
13 | (re.compile(r'"\s*PRI([udx])32\s*"'), r"\1"), | |
14 | (re.compile(r'"\s*PRI([udx])32'), r'\1"'), | |
15 | (re.compile(r'"\s*PRI([udx])16\s*"'), r"h\1"), | |
16 | (re.compile(r'"\s*PRI([udx])16'), r'h\1"'), | |
17 | (re.compile(r'"\s*PRI([udx])8\s*"'), r"hh\1"), | |
18 | (re.compile(r'"\s*PRI([udx])8'), r'hh\1"'), | |
93195af6 DL |
19 | ] |
20 | ||
701a0192 | 21 | |
93195af6 | 22 | def main(): |
701a0192 | 23 | argp = argparse.ArgumentParser(description="C string mangler") |
24 | argp.add_argument("--unwrap", action="store_const", const=True) | |
25 | argp.add_argument("--pri8-16-32", action="store_const", const=True) | |
26 | argp.add_argument("files", type=str, nargs="+") | |
93195af6 DL |
27 | args = argp.parse_args() |
28 | ||
29 | regexes = [] | |
30 | if args.unwrap: | |
31 | regexes.extend(wrap_res) | |
32 | if args.pri8_16_32: | |
33 | regexes.extend(pri_res) | |
34 | if len(regexes) == 0: | |
701a0192 | 35 | sys.stderr.write("no action selected to execute\n") |
93195af6 DL |
36 | sys.exit(1) |
37 | ||
38 | l = 0 | |
39 | ||
40 | for fn in args.files: | |
701a0192 | 41 | sys.stderr.write(fn + "\033[K\r") |
42 | with open(fn, "r") as ifd: | |
93195af6 DL |
43 | data = ifd.read() |
44 | ||
45 | newdata = data | |
46 | n = 0 | |
47 | for regex, repl in regexes: | |
48 | newdata, m = regex.subn(repl, newdata) | |
49 | n += m | |
50 | ||
51 | if n > 0: | |
701a0192 | 52 | sys.stderr.write("changed: %s\n" % fn) |
53 | with open(fn + ".new", "w") as ofd: | |
93195af6 | 54 | ofd.write(newdata) |
701a0192 | 55 | os.rename(fn + ".new", fn) |
93195af6 DL |
56 | l += 1 |
57 | ||
701a0192 | 58 | sys.stderr.write("%d files changed.\n" % (l)) |
59 | ||
93195af6 DL |
60 | |
61 | main() |