summaryrefslogtreecommitdiff
path: root/tools/stringmangle.py
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetworks.com>2020-07-15 20:06:55 -0400
committerGitHub <noreply@github.com>2020-07-15 20:06:55 -0400
commit3eb15671ee08db71a92434593e38c4c741498944 (patch)
tree84f6dcd439a9fd6fe195d7f736ae9a418fd4d3d0 /tools/stringmangle.py
parentc71ff7a60e9b0083b40232967ca352e4dd63e732 (diff)
parent47b13e9bc0de0a7ee53aedb09b6bf33e63e4444c (diff)
Merge pull request #6731 from opensourcerouting/style-string-prep
*: string coding style
Diffstat (limited to 'tools/stringmangle.py')
-rw-r--r--tools/stringmangle.py59
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()