diff --git a/Lib/fontTools/cffLib/specializer.py b/Lib/fontTools/cffLib/specializer.py index 51f3e6c6f..d6915606c 100644 --- a/Lib/fontTools/cffLib/specializer.py +++ b/Lib/fontTools/cffLib/specializer.py @@ -5,6 +5,26 @@ from __future__ import print_function, division, absolute_import from fontTools.misc.py23 import * + +def stringToProgram(string): + if isinstance(string, basestring): + string = string.split() + program = [] + for token in string: + try: + token = int(token) + except ValueError: + try: + token = float(token) + except ValueError: + pass + program.append(token) + return program + +def programToString(program): + return ' '.join(str(x) for x in program) + + def programToCommands(program): """Takes a T2CharString program list and returns list of commands. Each command is a two-tuple of commandname,arg-list. The commandname might @@ -53,7 +73,6 @@ def commandsToProgram(commands): return program - def _everyN(el, n): """Group the list el into groups of size n""" if len(el) % n != 0: raise ValueError(el) @@ -496,22 +515,13 @@ if __name__ == '__main__': if len(sys.argv) == 1: import doctest sys.exit(doctest.testmod().failed) - program = [] - for token in sys.argv[1:]: - try: - token = int(token) - except ValueError: - try: - token = float(token) - except ValueError: - pass - program.append(token) - print("Program:"); print(program) + program = stringToProgram(sys.argv[1:]) + print("Program:"); print(programToString(program)) commands = programToCommands(program) print("Commands:"); print(commands) program2 = commandsToProgram(commands) - print("Program from commands:"); print(program2) + print("Program from commands:"); print(programToString(program2)) assert program == program2 - print("Generalized program:"); print(generalizeProgram(program)) - print("Specialized program:"); print(specializeProgram(program)) + print("Generalized program:"); print(programToString(generalizeProgram(program))) + print("Specialized program:"); print(programToString(specializeProgram(program))) diff --git a/Tests/cffLib/specializer_test.py b/Tests/cffLib/specializer_test.py index 3cc67d107..70603e8c3 100644 --- a/Tests/cffLib/specializer_test.py +++ b/Tests/cffLib/specializer_test.py @@ -1,32 +1,15 @@ from __future__ import print_function, division, absolute_import -from fontTools.cffLib.specializer import generalizeProgram, specializeProgram +from fontTools.cffLib.specializer import programToString, stringToProgram, generalizeProgram, specializeProgram import unittest -def charstr2program(string): - program = [] - for token in string.split(): - try: - token = int(token) - except ValueError: - try: - token = float(token) - except ValueError: - pass - program.append(token) - return program - - -def program2charstr(lst): - return ' '.join(str(x) for x in lst) - def get_generalized_charstr(charstr): - return program2charstr(generalizeProgram(charstr2program(charstr))) + return programToString(generalizeProgram(stringToProgram(charstr))) def get_specialized_charstr(charstr, **kwargs): - return program2charstr(specializeProgram(charstr2program(charstr), **kwargs)) + return programToString(specializeProgram(stringToProgram(charstr), **kwargs)) class CFFGeneralizeProgramTest(unittest.TestCase):