]>
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 = [ | |
9 | (re.compile(r'(?<!\\n)"\s*\n\s*"', re.M), r''), | |
10 | ] | |
11 | pri_res = [ | |
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"'), | |
19 | ] | |
20 | ||
21 | def main(): | |
22 | argp = argparse.ArgumentParser(description = 'C string mangler') | |
23 | argp.add_argument('--unwrap', action = 'store_const', const = True) | |
24 | argp.add_argument('--pri8-16-32', action = 'store_const', const = True) | |
25 | argp.add_argument('files', type = str, nargs = '+') | |
26 | args = argp.parse_args() | |
27 | ||
28 | regexes = [] | |
29 | if args.unwrap: | |
30 | regexes.extend(wrap_res) | |
31 | if args.pri8_16_32: | |
32 | regexes.extend(pri_res) | |
33 | if len(regexes) == 0: | |
34 | sys.stderr.write('no action selected to execute\n') | |
35 | sys.exit(1) | |
36 | ||
37 | l = 0 | |
38 | ||
39 | for fn in args.files: | |
40 | sys.stderr.write(fn + '\033[K\r') | |
41 | with open(fn, 'r') as ifd: | |
42 | data = ifd.read() | |
43 | ||
44 | newdata = data | |
45 | n = 0 | |
46 | for regex, repl in regexes: | |
47 | newdata, m = regex.subn(repl, newdata) | |
48 | n += m | |
49 | ||
50 | if n > 0: | |
51 | sys.stderr.write('changed: %s\n' % fn) | |
52 | with open(fn + '.new', 'w') as ofd: | |
53 | ofd.write(newdata) | |
54 | os.rename(fn + '.new', fn) | |
55 | l += 1 | |
56 | ||
57 | sys.stderr.write('%d files changed.\n' % (l)) | |
58 | ||
59 | main() |