diff options
author | ridiculousfish <corydoras@ridiculousfish.com> | 2012-01-02 17:02:30 -0800 |
---|---|---|
committer | ridiculousfish <corydoras@ridiculousfish.com> | 2012-01-02 17:02:30 -0800 |
commit | 6abf3db13ef2f2cce5a238e40c497a56d5e9b7a9 (patch) | |
tree | 9a57839f6f5ab91b8c9552e484c31a4fb06118b8 /internalize_scripts.py | |
parent | 99000e68b71468ce2c10674cc4cad5e0ce244167 (diff) |
Added internalize_scripts.py in preparation for ending reliance on "standard" scripts in /usr/local/share
Diffstat (limited to 'internalize_scripts.py')
-rwxr-xr-x | internalize_scripts.py | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/internalize_scripts.py b/internalize_scripts.py new file mode 100755 index 00000000..8b447aa0 --- /dev/null +++ b/internalize_scripts.py @@ -0,0 +1,92 @@ +#!/usr/bin/python + +import string, sys, os.path + +escapes = {} +escapes['\a'] = r'\a' +escapes['\b'] = r'\b' +escapes['\f'] = r'\f' +escapes['\n'] = r'\n' +escapes['\r'] = r'\r' +#escapes['\t'] = r'\t' +# Let's replace tabs with four spaces +# so the text looks nicely indented in the C source +escapes['\t'] = r' ' +escapes['\v'] = r'\v' +# escapes['\''] = r'\'' +escapes['\"'] = r'\"' +escapes['\\'] = r'\\' + +def escape(c): + if c in escapes: + return escapes[c] + elif c not in string.printable: + return "\\x%x" % ord(c) + else: + return c + +def stringize(line): + newline = '"' + for c in line: + newline += escape(c) + newline += '"' + return newline + +class cfunc: + def __init__(self, name, lines): + self.name = name + self.lines = lines + + def cdef(self): + result = "" + result += "static const char * const %s = \n\t" % self.cfunc_name() + result += '\n\t'.join(self.lines) + result += ';\n' + return result + + def cfunc_name(self): + munged_name = string.replace(self.name, '-', '_') + return "function_%s" % munged_name + +funcs = [] +for file in sys.argv[1:]: + fd = open(file, 'r') + newlines = [] + for line in fd: + newlines.append(stringize(line)) + fd.close() + name = os.path.basename(file) + name, ext = os.path.splitext(name) + funcs.append(cfunc(name, newlines)) + +# Sort our functions by name +funcs.sort(key=cfunc.cfunc_name) + +# Output our header +fd = open('builtin_scripts.h', 'w') +fd.write('/* This file is generated by internalize_scripts.py */\n\n') +fd.write("""struct builtin_script_t { + const char *name; + const char *def; +};""") + +fd.write('\n') +fd.write('\n') +fd.write('extern const struct builtin_script_t builtin_scripts[%d];\n' % len(funcs)) +fd.write('\n') +fd.close() + +# Output the function definitions +fd = open('builtin_scripts.cpp', 'w') +fd.write('/* This file is generated by internalize_scripts.py */\n\n') +fd.write('#include "builtin_scripts.h"\n\n') +for func in funcs: + fd.write(func.cdef()) + fd.write('\n') + +# Output the refs +func_refs = ["{%s, %s}" % (stringize(func.name), func.cfunc_name()) for func in funcs] +fd.write('const struct builtin_script_t builtin_scripts[%d] =\n' % len(funcs)) +fd.write('{\n\t') +fd.write(',\n\t'.join(func_refs)) +fd.write('\n};\n') |