diff options
Diffstat (limited to 'scripts/build')
-rwxr-xr-x[-rw-r--r--] | scripts/build/complay.py | 0 | ||||
-rwxr-xr-x | scripts/build/file2lines.py | 96 |
2 files changed, 96 insertions, 0 deletions
diff --git a/scripts/build/complay.py b/scripts/build/complay.py index ce760185015..ce760185015 100644..100755 --- a/scripts/build/complay.py +++ b/scripts/build/complay.py diff --git a/scripts/build/file2lines.py b/scripts/build/file2lines.py new file mode 100755 index 00000000000..1a8cf897656 --- /dev/null +++ b/scripts/build/file2lines.py @@ -0,0 +1,96 @@ +#!/usr/bin/python +## +## license:BSD-3-Clause +## copyright-holders:Vas Crabb + +import io +import os +import os.path +import re +import sys + + +def write_output(text): + try: + dst.write(text) + except IOError: + if dstfile is not None: + sys.stderr.write('Error writing to output file \'%s\'\n' % dstfile) + dst.close() + os.remove(dstfile) + else: + sys.stderr.write('Error writing to output\n') + sys.exit(3) + + +if __name__ == '__main__': + if (len(sys.argv) > 4) or (len(sys.argv) < 2): + print('Usage:') + print(' file2lines <source.txt> [<output.h> [<varname>]]') + sys.exit(0 if len(sys.argv) <= 1 else 1) + + srcfile = sys.argv[1] + dstfile = sys.argv[2] if len(sys.argv) >= 3 else None + if len(sys.argv) >= 4: + varname = sys.argv[3] + else: + varname = os.path.basename(srcfile) + base, ext = os.path.splitext(varname) + if ext.lower() == '.txt': + varname = base + varname = 'lines_' + re.sub('[^0-9A-Za-z_]', '_', varname) + + dst = None + try: + with io.open(srcfile, 'r', encoding='utf-8') as src: + if dstfile is not None: + try: + dst = io.open(dstfile, 'w', encoding='utf-8') + except IOError: + sys.stderr.write('Unable to open output file \'%s\'\n' % dstfile) + sys.exit(3) + else: + dst = sys.stdout + write_output(u'char const *const %s[] = {\n' % varname) + for line in src: + if line[-1] == u'\n': + line = line[:-1] + write_output(u'\t\t"') + i = 0 + while i < len(line): + for j in range(i, len(line) + 1): + if j < len(line): + ch = line[j] + if (ch < u' ') or (ch > u'~') or (ch in u'\"\\'): + break + if j > i: + write_output(line[i:j]) + if j < len(line): + ch = line[j] + if ch == u'\a': + write_output(u'\\a') + elif ch == u'\f': + write_output(u'\\f') + elif ch == u'\t': + write_output(u'\\t') + elif ch == u'\v': + write_output(u'\\v') + elif ch in u'\"\\': + write_output(u'\\' + ch) + else: + ch = ord(ch) + if ch < 0x20: + write_output(u'\\{0:03o}'.format(ch)) + elif ch < 0x10000: + write_output(u'\\u{0:04X}'.format(ch)) + else: + write_output(u'\\U{0:08X}'.format(ch)) + i = j + 1 + write_output(u'",\n') + write_output(u'\t\tnullptr };\n') + except IOError: + sys.stderr.write('Error reading input file \'%s\'\n' % srcfile) + if (dstfile is not None) and (dst is not None): + dst.close() + os.remove(dstfile) + sys.exit(2) |