diff options
Diffstat (limited to 'Snippets/subset-fpgm.py')
-rwxr-xr-x | Snippets/subset-fpgm.py | 51 |
1 files changed, 26 insertions, 25 deletions
diff --git a/Snippets/subset-fpgm.py b/Snippets/subset-fpgm.py index d06c3f5f..636e2155 100755 --- a/Snippets/subset-fpgm.py +++ b/Snippets/subset-fpgm.py @@ -4,13 +4,13 @@ from fontTools.ttLib import TTFont import sys if len(sys.argv) < 2: - print("usage: subset-fpgm.py fontfile.ttf func-number...") - sys.exit(1) + print("usage: subset-fpgm.py fontfile.ttf func-number...") + sys.exit(1) fontfile = sys.argv[1] func_nums = [int(x) for x in sys.argv[2:]] font = TTFont(fontfile) -fpgm = font['fpgm'] +fpgm = font["fpgm"] # Parse fpgm asm = fpgm.program.getAssembly() @@ -18,39 +18,40 @@ funcs = {} stack = [] tokens = iter(asm) for token in tokens: - if token.startswith("PUSH") or token.startswith("NPUSH"): - for token in tokens: - try: - num = int(token) - stack.append(num) - except ValueError: - break - if token.startswith("FDEF"): - num = stack.pop() - body = [] - for token in tokens: - if token.startswith("ENDF"): - break - body.append(token) - funcs[num] = body - continue - assert 0, "Unexpected token in fpgm: %s" % token + if token.startswith("PUSH") or token.startswith("NPUSH"): + for token in tokens: + try: + num = int(token) + stack.append(num) + except ValueError: + break + if token.startswith("FDEF"): + num = stack.pop() + body = [] + for token in tokens: + if token.startswith("ENDF"): + break + body.append(token) + funcs[num] = body + continue + assert 0, "Unexpected token in fpgm: %s" % token # Subset! -funcs = {i:funcs[i] for i in func_nums} +funcs = {i: funcs[i] for i in func_nums} # Put it back together: asm = [] if funcs: - asm.append("PUSH[ ]") + asm.append("PUSH[ ]") nums = sorted(funcs.keys()) asm.extend(str(i) for i in nums) for i in nums: - asm.append("FDEF[ ]") - asm.extend(funcs[i]) - asm.append("ENDF[ ]") + asm.append("FDEF[ ]") + asm.extend(funcs[i]) + asm.append("ENDF[ ]") import pprint + pprint.pprint(asm) fpgm.program.fromAssembly(asm) |