diff options
| author | David Lamparter <equinox@diac24.net> | 2020-07-14 10:18:09 +0200 |
|---|---|---|
| committer | David Lamparter <equinox@diac24.net> | 2020-07-14 10:37:24 +0200 |
| commit | 93195af63f5cfcd0745524dc24561c277340a3bc (patch) | |
| tree | 2679f726f5510e2cb099f2d89a94480f2c41de50 /tools/stringmangle.py | |
| parent | 57edbd370e1d0009f1303a229d8aa9245eadb29e (diff) | |
tools: add source code string mangler
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Diffstat (limited to 'tools/stringmangle.py')
| -rw-r--r-- | tools/stringmangle.py | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/tools/stringmangle.py b/tools/stringmangle.py new file mode 100644 index 0000000000..a2eb37336a --- /dev/null +++ b/tools/stringmangle.py @@ -0,0 +1,59 @@ +# 2020 by David Lamparter, placed in the public domain. + +import sys +import os +import re +import argparse + +wrap_res = [ + (re.compile(r'(?<!\\n)"\s*\n\s*"', re.M), r''), +] +pri_res = [ + (re.compile(r'(PRI[udx][0-9]+)\s*\n\s*"', re.M), r'\1"'), + (re.compile(r'"\s*PRI([udx])32\s*"'), r'\1'), + (re.compile(r'"\s*PRI([udx])32'), r'\1"'), + (re.compile(r'"\s*PRI([udx])16\s*"'), r'h\1'), + (re.compile(r'"\s*PRI([udx])16'), r'h\1"'), + (re.compile(r'"\s*PRI([udx])8\s*"'), r'hh\1'), + (re.compile(r'"\s*PRI([udx])8'), r'hh\1"'), +] + +def main(): + argp = argparse.ArgumentParser(description = 'C string mangler') + argp.add_argument('--unwrap', action = 'store_const', const = True) + argp.add_argument('--pri8-16-32', action = 'store_const', const = True) + argp.add_argument('files', type = str, nargs = '+') + args = argp.parse_args() + + regexes = [] + if args.unwrap: + regexes.extend(wrap_res) + if args.pri8_16_32: + regexes.extend(pri_res) + if len(regexes) == 0: + sys.stderr.write('no action selected to execute\n') + sys.exit(1) + + l = 0 + + for fn in args.files: + sys.stderr.write(fn + '\033[K\r') + with open(fn, 'r') as ifd: + data = ifd.read() + + newdata = data + n = 0 + for regex, repl in regexes: + newdata, m = regex.subn(repl, newdata) + n += m + + if n > 0: + sys.stderr.write('changed: %s\n' % fn) + with open(fn + '.new', 'w') as ofd: + ofd.write(newdata) + os.rename(fn + '.new', fn) + l += 1 + + sys.stderr.write('%d files changed.\n' % (l)) + +main() |
