This commit is contained in:
Kovid Goyal 2018-09-03 07:42:20 +05:30
parent db6d0dd2cb
commit 4777eeacef
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -29,6 +29,7 @@ real_nibbles = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'.', 'E', 'E-', None, '-'] '.', 'E', 'E-', None, '-']
real_nibbles_map = {x:i for i, x in enumerate(real_nibbles)} real_nibbles_map = {x:i for i, x in enumerate(real_nibbles)}
class ByteCode(dict): class ByteCode(dict):
def read_byte(self, b0, data, index): def read_byte(self, b0, data, index):
@ -119,6 +120,7 @@ class ByteCode(dict):
f = self.write_float if isinstance(value, float) else self.write_int f = self.write_float if isinstance(value, float) else self.write_int
return f(value, encoding) return f(value, encoding)
class Dict(ByteCode): class Dict(ByteCode):
operand_encoding = cff_dict_operand_encoding operand_encoding = cff_dict_operand_encoding
@ -235,44 +237,45 @@ class Dict(ByteCode):
last = v last = v
return self.encode_array(out) return self.encode_array(out)
class TopDict(Dict): class TopDict(Dict):
TABLE = ( TABLE = (
#opcode name argument type default # opcode name argument type default
((12, 30), 'ROS', ('SID','SID','number'), None, ), ((12, 30), 'ROS', ('SID','SID','number'), None,),
((12, 20), 'SyntheticBase', 'number', None, ), ((12, 20), 'SyntheticBase', 'number', None,),
(0, 'version', 'SID', None, ), (0, 'version', 'SID', None,),
(1, 'Notice', 'SID', None, ), (1, 'Notice', 'SID', None,),
((12, 0), 'Copyright', 'SID', None, ), ((12, 0), 'Copyright', 'SID', None,),
(2, 'FullName', 'SID', None, ), (2, 'FullName', 'SID', None,),
((12, 38), 'FontName', 'SID', None, ), ((12, 38), 'FontName', 'SID', None,),
(3, 'FamilyName', 'SID', None, ), (3, 'FamilyName', 'SID', None,),
(4, 'Weight', 'SID', None, ), (4, 'Weight', 'SID', None,),
((12, 1), 'isFixedPitch', 'number', 0, ), ((12, 1), 'isFixedPitch', 'number', 0,),
((12, 2), 'ItalicAngle', 'number', 0, ), ((12, 2), 'ItalicAngle', 'number', 0,),
((12, 3), 'UnderlinePosition', 'number', None, ), ((12, 3), 'UnderlinePosition', 'number', None,),
((12, 4), 'UnderlineThickness', 'number', 50, ), ((12, 4), 'UnderlineThickness', 'number', 50,),
((12, 5), 'PaintType', 'number', 0, ), ((12, 5), 'PaintType', 'number', 0,),
((12, 6), 'CharstringType', 'number', 2, ), ((12, 6), 'CharstringType', 'number', 2,),
((12, 7), 'FontMatrix', 'array', [0.001,0,0,0.001,0,0], ), ((12, 7), 'FontMatrix', 'array', [0.001,0,0,0.001,0,0],),
(13, 'UniqueID', 'number', None, ), (13, 'UniqueID', 'number', None,),
(5, 'FontBBox', 'array', [0,0,0,0], ), (5, 'FontBBox', 'array', [0,0,0,0],),
((12, 8), 'StrokeWidth', 'number', 0, ), ((12, 8), 'StrokeWidth', 'number', 0,),
(14, 'XUID', 'array', None, ), (14, 'XUID', 'array', None,),
((12, 21), 'PostScript', 'SID', None, ), ((12, 21), 'PostScript', 'SID', None,),
((12, 22), 'BaseFontName', 'SID', None, ), ((12, 22), 'BaseFontName', 'SID', None,),
((12, 23), 'BaseFontBlend', 'delta', None, ), ((12, 23), 'BaseFontBlend', 'delta', None,),
((12, 31), 'CIDFontVersion', 'number', 0, ), ((12, 31), 'CIDFontVersion', 'number', 0,),
((12, 32), 'CIDFontRevision', 'number', 0, ), ((12, 32), 'CIDFontRevision', 'number', 0,),
((12, 33), 'CIDFontType', 'number', 0, ), ((12, 33), 'CIDFontType', 'number', 0,),
((12, 34), 'CIDCount', 'number', 8720, ), ((12, 34), 'CIDCount', 'number', 8720,),
(15, 'charset', 'number', 0, ), (15, 'charset', 'number', 0,),
((12, 35), 'UIDBase', 'number', None, ), ((12, 35), 'UIDBase', 'number', None,),
(16, 'Encoding', 'number', 0, ), (16, 'Encoding', 'number', 0,),
(18, 'Private', ('number','number'), None, ), (18, 'Private', ('number','number'), None,),
((12, 37), 'FDSelect', 'number', None, ), ((12, 37), 'FDSelect', 'number', None,),
((12, 36), 'FDArray', 'number', None, ), ((12, 36), 'FDArray', 'number', None,),
(17, 'CharStrings', 'number', None, ), (17, 'CharStrings', 'number', None,),
) )
# We will not write these operators out # We will not write these operators out
@ -281,31 +284,31 @@ class TopDict(Dict):
'UIDBase', 'Encoding', 'FDSelect', 'FDArray'} 'UIDBase', 'Encoding', 'FDSelect', 'FDArray'}
OFFSETS = {'charset', 'Encoding', 'CharStrings', 'Private'} OFFSETS = {'charset', 'Encoding', 'CharStrings', 'Private'}
class PrivateDict(Dict): class PrivateDict(Dict):
TABLE = ( TABLE = (
# opcode name argument type default # opcode name argument type default
(6, 'BlueValues', 'delta', None, ), (6, 'BlueValues', 'delta', None,),
(7, 'OtherBlues', 'delta', None, ), (7, 'OtherBlues', 'delta', None,),
(8, 'FamilyBlues', 'delta', None, ), (8, 'FamilyBlues', 'delta', None,),
(9, 'FamilyOtherBlues', 'delta', None, ), (9, 'FamilyOtherBlues', 'delta', None,),
((12, 9), 'BlueScale', 'number', 0.039625, ), ((12, 9), 'BlueScale', 'number', 0.039625,),
((12, 10), 'BlueShift', 'number', 7, ), ((12, 10), 'BlueShift', 'number', 7,),
((12, 11), 'BlueFuzz', 'number', 1, ), ((12, 11), 'BlueFuzz', 'number', 1,),
(10, 'StdHW', 'number', None, ), (10, 'StdHW', 'number', None,),
(11, 'StdVW', 'number', None, ), (11, 'StdVW', 'number', None,),
((12, 12), 'StemSnapH', 'delta', None, ), ((12, 12), 'StemSnapH', 'delta', None,),
((12, 13), 'StemSnapV', 'delta', None, ), ((12, 13), 'StemSnapV', 'delta', None,),
((12, 14), 'ForceBold', 'number', 0, ), ((12, 14), 'ForceBold', 'number', 0,),
((12, 15), 'ForceBoldThreshold', 'number', None, ), # deprecated ((12, 15), 'ForceBoldThreshold', 'number', None,), # deprecated
((12, 16), 'lenIV', 'number', None, ), # deprecated ((12, 16), 'lenIV', 'number', None,), # deprecated
((12, 17), 'LanguageGroup', 'number', 0, ), ((12, 17), 'LanguageGroup', 'number', 0,),
((12, 18), 'ExpansionFactor', 'number', 0.06, ), ((12, 18), 'ExpansionFactor', 'number', 0.06,),
((12, 19), 'initialRandomSeed', 'number', 0, ), ((12, 19), 'initialRandomSeed', 'number', 0,),
(20, 'defaultWidthX', 'number', 0, ), (20, 'defaultWidthX', 'number', 0,),
(21, 'nominalWidthX', 'number', 0, ), (21, 'nominalWidthX', 'number', 0,),
(19, 'Subrs', 'number', None, ), (19, 'Subrs', 'number', None,),
) )
OFFSETS = {'Subrs'} OFFSETS = {'Subrs'}