Folded CFF2 classes into CFF classes. Removed:

TopDict2Decompiler
PrivateDict2Decompiler
PrivateDict2Compiler
Working towards using one set of classes for both CFF2 and CFF data.
This commit is contained in:
ReadRoberts 2017-05-09 11:28:11 -07:00 committed by Miguel Sousa
parent c33ae5c96a
commit 1c53437e39
2 changed files with 7 additions and 25 deletions

View File

@ -1705,6 +1705,7 @@ topDictOperators = [
(24, 'VarStore', 'number', None, VarStoreConverter()), (24, 'VarStore', 'number', None, VarStoreConverter()),
] ]
# We use topDictOperators2 only for deleting CFF operators that are removed in CFF2, and for default values
topDictOperators2 = [ topDictOperators2 = [
# opcode name argument type default converter # opcode name argument type default converter
(25, 'maxstack', 'number', None, None), (25, 'maxstack', 'number', None, None),
@ -1723,6 +1724,8 @@ blendOp = 23
privateDictOperators = [ privateDictOperators = [
# opcode name argument type default converter # opcode name argument type default converter
(22, "vsindex", 'number', None, None),
(blendOp, kBlendDictOpName, 'blendList', None, None), # This is for reading to/from XML: it not written to CFF.
(6, 'BlueValues', 'delta', None, None), (6, 'BlueValues', 'delta', None, None),
(7, 'OtherBlues', 'delta', None, None), (7, 'OtherBlues', 'delta', None, None),
(8, 'FamilyBlues', 'delta', None, None), (8, 'FamilyBlues', 'delta', None, None),
@ -1745,6 +1748,7 @@ privateDictOperators = [
(19, 'Subrs', 'number', None, SubrsConverter()), (19, 'Subrs', 'number', None, SubrsConverter()),
] ]
# We use privateDictOperators2 only for deleting CFF operators that are removed in CFF2, and for default values
privateDictOperators2 = [ privateDictOperators2 = [
# opcode name argument type default converter # opcode name argument type default converter
(22, "vsindex", 'number', None, None), (22, "vsindex", 'number', None, None),
@ -1781,27 +1785,15 @@ def addConverters(table):
table[i] = op, name, arg, default, conv table[i] = op, name, arg, default, conv
addConverters(privateDictOperators) addConverters(privateDictOperators)
addConverters(privateDictOperators2)
addConverters(topDictOperators) addConverters(topDictOperators)
addConverters(topDictOperators2)
class TopDictDecompiler(psCharStrings.DictDecompiler): class TopDictDecompiler(psCharStrings.DictDecompiler):
operators = buildOperatorDict(topDictOperators) operators = buildOperatorDict(topDictOperators)
class TopDict2Decompiler(psCharStrings.DictDecompiler):
operators = buildOperatorDict(topDictOperators2)
class PrivateDictDecompiler(psCharStrings.DictDecompiler): class PrivateDictDecompiler(psCharStrings.DictDecompiler):
operators = buildOperatorDict(privateDictOperators) operators = buildOperatorDict(privateDictOperators)
class PrivateDict2Decompiler(psCharStrings.DictDecompiler):
operators = buildOperatorDict(privateDictOperators2)
def __init__(self, strings, parent):
self.parent = parent
super(PrivateDict2Decompiler, self).__init__(strings)
class DictCompiler(object): class DictCompiler(object):
maxBlendStack = 0 maxBlendStack = 0
@ -2071,9 +2063,6 @@ class PrivateDictCompiler(DictCompiler):
topDict.maxstack = numStack topDict.maxstack = numStack
topDict.rawDict['maxstack'] = numStack topDict.rawDict['maxstack'] = numStack
class PrivateDict2Compiler(PrivateDictCompiler):
opcodes = buildOpcodeDict(privateDictOperators2)
class BaseDict(object): class BaseDict(object):
def __init__(self, strings=None, file=None, offset=None): def __init__(self, strings=None, file=None, offset=None):
@ -2087,7 +2076,7 @@ class BaseDict(object):
def decompile(self, data): def decompile(self, data):
log.log(DEBUG, " length %s is %d", self.__class__.__name__, len(data)) log.log(DEBUG, " length %s is %d", self.__class__.__name__, len(data))
dec = self.decompilerClass(self.strings) dec = self.decompilerClass(self.strings, self)
dec.decompile(data) dec.decompile(data)
self.rawDict = dec.getDict() self.rawDict = dec.getDict()
self.postDecompile() self.postDecompile()
@ -2193,10 +2182,6 @@ class TopDict(BaseDict):
class TopDict2(TopDict): class TopDict2(TopDict):
defaults = buildDefaults(topDictOperators2) defaults = buildDefaults(topDictOperators2)
converters = buildConverters(topDictOperators2)
compilerClass = TopDictCompiler
order = buildOrder(topDictOperators2)
decompilerClass = TopDict2Decompiler
def __init__(self, strings=None, file=None, offset=None, GlobalSubrs=None, cff2GetGlyphOrder = None): def __init__(self, strings=None, file=None, offset=None, GlobalSubrs=None, cff2GetGlyphOrder = None):
BaseDict.__init__(self, strings, file, offset) BaseDict.__init__(self, strings, file, offset)
@ -2253,10 +2238,6 @@ class PrivateDict(BaseDict):
class PrivateDict2(PrivateDict): class PrivateDict2(PrivateDict):
defaults = buildDefaults(privateDictOperators2) defaults = buildDefaults(privateDictOperators2)
converters = buildConverters(privateDictOperators2)
order = buildOrder(privateDictOperators2)
decompilerClass = PrivateDict2Decompiler
compilerClass = PrivateDict2Compiler
def __init__(self, strings=None, file=None, offset=None, parent= None): def __init__(self, strings=None, file=None, offset=None, parent= None):
super(PrivateDict2, self).__init__(strings, file, offset, parent) super(PrivateDict2, self).__init__(strings, file, offset, parent)

View File

@ -1167,10 +1167,11 @@ class DictDecompiler(ByteCodeBase):
operandEncoding = cffDictOperandEncoding operandEncoding = cffDictOperandEncoding
def __init__(self, strings): def __init__(self, strings, parent = None):
self.stack = [] self.stack = []
self.strings = strings self.strings = strings
self.dict = {} self.dict = {}
self.parent = parent
def getDict(self): def getDict(self):
assert len(self.stack) == 0, "non-empty stack" assert len(self.stack) == 0, "non-empty stack"