diff options
Diffstat (limited to 'debian/uncrustify-trinity/uncrustify-trinity-0.78.1/scripts/make_punctuator_table.py')
-rwxr-xr-x | debian/uncrustify-trinity/uncrustify-trinity-0.78.1/scripts/make_punctuator_table.py | 189 |
1 files changed, 0 insertions, 189 deletions
diff --git a/debian/uncrustify-trinity/uncrustify-trinity-0.78.1/scripts/make_punctuator_table.py b/debian/uncrustify-trinity/uncrustify-trinity-0.78.1/scripts/make_punctuator_table.py deleted file mode 100755 index f3d90081..00000000 --- a/debian/uncrustify-trinity/uncrustify-trinity-0.78.1/scripts/make_punctuator_table.py +++ /dev/null @@ -1,189 +0,0 @@ -#! /usr/bin/env python -# -# Creates a possibly faster lookup table for tokens, etc. -# -# @author Ben Gardner -# @author Matthew Woehlke -# @license GPL v2+ -# -import argparse -import os -import sys - - -# ----------------------------------------------------------------------------- -def scan_file(file_path): - cur_token = '' - token_idx = 0 - args = [] - - fd = open(file_path, 'r') - for line in fd: - line = line.strip() - if line.startswith('static const chunk_tag_t'): - idx = line.find('[') - if idx > 0: - cur_token = line[25:idx].strip() - token_idx = 0 - else: - if len(cur_token) > 0: - idx1 = line.find('{') - idx2 = line.find('CT_') - if idx1 >= 0 and idx2 > idx1: - tok = line[idx1 + 1:idx2].strip() - if tok.startswith('R"'): - pos_paren_open = tok.find('(') - pos_paren_close = tok.rfind(')') - - if pos_paren_open == -1 or pos_paren_close == -1: - sys.stderr.write( - 'raw string parenthesis not found\n') - sys.exit(-1) - - tok = tok[pos_paren_open+1:pos_paren_close] - else: - tok = tok[1:-2] # strip off open quotes and commas - args.append([tok, '%s[%d]' % (cur_token, token_idx)]) - token_idx += 1 - return args - - -# ----------------------------------------------------------------------------- -def build_table(db, prev, arr): - # do the current level first - k = sorted(db) - if len(k) <= 0: - return - k.sort() - - start_idx = len(arr) - num_left = len(k) - - for i in k: - en = db[i] - # [ char, full-string, left-in-group, next_index, table-entry ] - num_left -= 1 - arr.append([en[0], prev + en[0], num_left, 0, en[2]]) - - # update the one-up level index - if len(prev) > 0: - for idx in range(0, len(arr)): - if arr[idx][1] == prev: - arr[idx][3] = start_idx - break - - # Now do each sub level - for i in k: - en = db[i] - build_table(en[3], prev + en[0], arr) - - -# ----------------------------------------------------------------------------- -def add_to_db(entry, db_top): - """ - find or create the entry for the first char - """ - strng = entry[0] - db_cur = db_top - for idx in range(0, len(strng)): - if not strng[idx] in db_cur: - db_cur[strng[idx]] = [strng[idx], 0, None, {}] - - dbe = db_cur[strng[idx]] - - if idx == len(strng) - 1: - dbe[2] = entry - else: - db_cur = dbe[3] - - -# ----------------------------------------------------------------------------- -def quote(s): - return '\'{}\''.format(s) - - -# ----------------------------------------------------------------------------- -def escape(s): - return quote(s.replace('\'', '\\\'')) - - -# ----------------------------------------------------------------------------- -def write_entry(out, max_len, ch, left_in_group, next_idx, tag, idx, tok): - out.write( - ' {{ {:>4}, {:>3d}, {:>3d}, {:{}} }}, // {:3d}: {}'.format( - ch, left_in_group, next_idx, tag, max_len, idx, tok).rstrip()) - out.write('\n') - - -# ----------------------------------------------------------------------------- -def main(): - parser = argparse.ArgumentParser(description='Generate punctuator_table.h') - parser.add_argument('output', type=str, - help='location of punctuator_table.h to write') - parser.add_argument('header', type=str, - help='location of symbols_table.h to read') - args = parser.parse_args() - - root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - pl = scan_file(args.header) - pl.sort() - - db = {} - for a in pl: - add_to_db(a, db) - - arr = [] - build_table(db, '', arr) - - max_len = len('nullptr') - for i in arr: - rec = i[4] - if rec is not None and (len(rec[1]) + 1) > max_len: - max_len = len(rec[1]) + 1 - - in_name = os.path.basename(args.header) - out_name = os.path.basename(args.output) - guard = out_name.replace('.', '_').upper() - - with open(args.output, 'wt') as out: - out.write( - '/**\n' - ' * @file {out_name}\n' - ' * Automatically generated by <code>{script}</code>\n' - ' * from {in_name}.\n' - ' */\n' - '\n' - '#ifndef SRC_{guard}_\n' - '#define SRC_{guard}_\n' - '\n' - '// *INDENT-OFF*\n' - 'static const lookup_entry_t punc_table[] =\n' - '{{\n'.format( - in_name=in_name, out_name=out_name, guard=guard, - script=os.path.relpath(__file__, root))) - - idx = 0 - - for i in arr: - rec = i[4] - if len(i[0]) == 0: - write_entry(out, max_len, '0', '0', '0', 'nullptr', idx, '') - elif rec is None: - write_entry(out, max_len, escape(i[0]), i[2], i[3], - 'nullptr', idx, quote(i[1])) - else: - write_entry(out, max_len, escape(i[0]), i[2], i[3], - '&' + rec[1], idx, quote(i[1])) - idx += 1 - - out.write( - '}};\n' - '// *INDENT-ON*\n' - '\n' - '#endif /* SRC_{guard}_ */\n'.format(guard=guard)) - -# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -if __name__ == '__main__': - main() |