diff --git a/src/hb-cff-interp-common.hh b/src/hb-cff-interp-common.hh index 24b7daf55..c15336dea 100644 --- a/src/hb-cff-interp-common.hh +++ b/src/hb-cff-interp-common.hh @@ -30,184 +30,184 @@ namespace CFF { using namespace OT; -enum OpCode { - /* === Dict operators === */ +typedef unsigned int OpCode; +/* === Dict operators === */ - /* One byte operators (0-31) */ - OpCode_version, /* 0 CFF Top */ - OpCode_Notice, /* 1 CFF Top */ - OpCode_FullName, /* 2 CFF Top */ - OpCode_FamilyName, /* 3 CFF Top */ - OpCode_Weight, /* 4 CFF Top */ - OpCode_FontBBox, /* 5 CFF Top */ - OpCode_BlueValues, /* 6 CFF Private, CFF2 Private */ - OpCode_OtherBlues, /* 7 CFF Private, CFF2 Private */ - OpCode_FamilyBlues, /* 8 CFF Private, CFF2 Private */ - OpCode_FamilyOtherBlues, /* 9 CFF Private, CFF2 Private */ - OpCode_StdHW, /* 10 CFF Private, CFF2 Private */ - OpCode_StdVW, /* 11 CFF Private, CFF2 Private */ - OpCode_escape, /* 12 All. Shared with CS */ - OpCode_UniqueID, /* 13 CFF Top */ - OpCode_XUID, /* 14 CFF Top */ - OpCode_charset, /* 15 CFF Top (0) */ - OpCode_Encoding, /* 16 CFF Top (0) */ - OpCode_CharStrings, /* 17 CFF Top, CFF2 Top */ - OpCode_Private, /* 18 CFF Top, CFF2 FD */ - OpCode_Subrs, /* 19 CFF Private, CFF2 Private */ - OpCode_defaultWidthX, /* 20 CFF Private (0) */ - OpCode_nominalWidthX, /* 21 CFF Private (0) */ - OpCode_vsindexdict, /* 22 CFF2 Private/CS */ - OpCode_blenddict, /* 23 CFF2 Private/CS */ - OpCode_vstore, /* 24 CFF2 Top */ - OpCode_reserved25, /* 25 */ - OpCode_reserved26, /* 26 */ - OpCode_reserved27, /* 27 */ +/* One byte operators (0-31) */ +#define OpCode_version 0 /* CFF Top */ +#define OpCode_Notice 1 /* CFF Top */ +#define OpCode_FullName 2 /* CFF Top */ +#define OpCode_FamilyName 3 /* CFF Top */ +#define OpCode_Weight 4 /* CFF Top */ +#define OpCode_FontBBox 5 /* CFF Top */ +#define OpCode_BlueValues 6 /* CFF Private, CFF2 Private */ +#define OpCode_OtherBlues 7 /* CFF Private, CFF2 Private */ +#define OpCode_FamilyBlues 8 /* CFF Private, CFF2 Private */ +#define OpCode_FamilyOtherBlues 9 /* CFF Private, CFF2 Private */ +#define OpCode_StdHW 10 /* CFF Private, CFF2 Private */ +#define OpCode_StdVW 11 /* CFF Private, CFF2 Private */ +#define OpCode_escape 12 /* All. Shared with CS */ +#define OpCode_UniqueID 13 /* CFF Top */ +#define OpCode_XUID 14 /* CFF Top */ +#define OpCode_charset 15 /* CFF Top (0) */ +#define OpCode_Encoding 16 /* CFF Top (0) */ +#define OpCode_CharStrings 17 /* CFF Top, CFF2 Top */ +#define OpCode_Private 18 /* CFF Top, CFF2 FD */ +#define OpCode_Subrs 19 /* CFF Private, CFF2 Private */ +#define OpCode_defaultWidthX 20 /* CFF Private (0) */ +#define OpCode_nominalWidthX 21 /* CFF Private (0) */ +#define OpCode_vsindexdict 22 /* CFF2 Private/CS */ +#define OpCode_blenddict 23 /* CFF2 Private/CS */ +#define OpCode_vstore 24 /* CFF2 Top */ +#define OpCode_reserved25 25 +#define OpCode_reserved26 26 +#define OpCode_reserved27 27 - /* Numbers */ - OpCode_shortint, /* 28 16-bit integer, All */ - OpCode_longintdict, /* 29 32-bit integer, All */ - OpCode_BCD, /* 30 real number, CFF2 Top/FD */ - OpCode_reserved31, /* 31 */ +/* Numbers */ +#define OpCode_shortint 28 /* 16-bit integer, All */ +#define OpCode_longintdict 29 /* 32-bit integer, All */ +#define OpCode_BCD 30 /* real number, CFF2 Top/FD */ +#define OpCode_reserved31 31 - /* 1-byte integers */ - OpCode_OneByteIntFirst = 32, /* All. beginning of the range of first byte ints */ - OpCode_OneByteIntLast = 246, /* All. ending of the range of first byte int */ +/* 1-byte integers */ +#define OpCode_OneByteIntFirst 32 /* All. beginning of the range of first byte ints */ +#define OpCode_OneByteIntLast 246 /* All. ending of the range of first byte int */ - /* 2-byte integers */ - OpCode_TwoBytePosInt0, /* 247 All. first byte of two byte positive int (+108 to +1131) */ - OpCode_TwoBytePosInt1, - OpCode_TwoBytePosInt2, - OpCode_TwoBytePosInt3, +/* 2-byte integers */ +#define OpCode_TwoBytePosInt0 247 /* All. first byte of two byte positive int (+108 to +1131) */ +#define OpCode_TwoBytePosInt1 248 +#define OpCode_TwoBytePosInt2 249 +#define OpCode_TwoBytePosInt3 250 - OpCode_TwoByteNegInt0, /* 251 All. first byte of two byte negative int (-1131 to -108) */ - OpCode_TwoByteNegInt1, - OpCode_TwoByteNegInt2, - OpCode_TwoByteNegInt3, +#define OpCode_TwoByteNegInt0 251 /* All. first byte of two byte negative int (-1131 to -108) */ +#define OpCode_TwoByteNegInt1 252 +#define OpCode_TwoByteNegInt2 253 +#define OpCode_TwoByteNegInt3 254 - /* Two byte escape operators 12, (0-41) */ - OpCode_ESC_Base = 256, - OpCode_Copyright = OpCode_ESC_Base, /* Make_OpCode_ESC (0) CFF Top */ - OpCode_isFixedPitch, /* Make_OpCode_ESC (1) CFF Top (false) */ - OpCode_ItalicAngle, /* Make_OpCode_ESC (2) CFF Top (0) */ - OpCode_UnderlinePosition, /* Make_OpCode_ESC (3) CFF Top (-100) */ - OpCode_UnderlineThickness, /* Make_OpCode_ESC (4) CFF Top (50) */ - OpCode_PaintType, /* Make_OpCode_ESC (5) CFF Top (0) */ - OpCode_CharstringType, /* Make_OpCode_ESC (6) CFF Top (2) */ - OpCode_FontMatrix, /* Make_OpCode_ESC (7) CFF Top, CFF2 Top (.001 0 0 .001 0 0)*/ - OpCode_StrokeWidth, /* Make_OpCode_ESC (8) CFF Top (0) */ - OpCode_BlueScale, /* Make_OpCode_ESC (9) CFF Private, CFF2 Private (0.039625) */ - OpCode_BlueShift, /* Make_OpCode_ESC (10) CFF Private, CFF2 Private (7) */ - OpCode_BlueFuzz, /* Make_OpCode_ESC (11) CFF Private, CFF2 Private (1) */ - OpCode_StemSnapH, /* Make_OpCode_ESC (12) CFF Private, CFF2 Private */ - OpCode_StemSnapV, /* Make_OpCode_ESC (13) CFF Private, CFF2 Private */ - OpCode_ForceBold, /* Make_OpCode_ESC (14) CFF Private (false) */ - OpCode_reservedESC15, /* Make_OpCode_ESC (15) */ - OpCode_reservedESC16, /* Make_OpCode_ESC (16) */ - OpCode_LanguageGroup, /* Make_OpCode_ESC (17) CFF Private, CFF2 Private (0) */ - OpCode_ExpansionFactor, /* Make_OpCode_ESC (18) CFF Private, CFF2 Private (0.06) */ - OpCode_initialRandomSeed, /* Make_OpCode_ESC (19) CFF Private (0) */ - OpCode_SyntheticBase, /* Make_OpCode_ESC (20) CFF Top */ - OpCode_PostScript, /* Make_OpCode_ESC (21) CFF Top */ - OpCode_BaseFontName, /* Make_OpCode_ESC (22) CFF Top */ - OpCode_BaseFontBlend, /* Make_OpCode_ESC (23) CFF Top */ - OpCode_reservedESC24, /* Make_OpCode_ESC (24) */ - OpCode_reservedESC25, /* Make_OpCode_ESC (25) */ - OpCode_reservedESC26, /* Make_OpCode_ESC (26) */ - OpCode_reservedESC27, /* Make_OpCode_ESC (27) */ - OpCode_reservedESC28, /* Make_OpCode_ESC (28) */ - OpCode_reservedESC29, /* Make_OpCode_ESC (29) */ - OpCode_ROS, /* Make_OpCode_ESC (30) CFF Top_CID */ - OpCode_CIDFontVersion, /* Make_OpCode_ESC (31) CFF Top_CID (0) */ - OpCode_CIDFontRevision, /* Make_OpCode_ESC (32) CFF Top_CID (0) */ - OpCode_CIDFontType, /* Make_OpCode_ESC (33) CFF Top_CID (0) */ - OpCode_CIDCount, /* Make_OpCode_ESC (34) CFF Top_CID (8720) */ - OpCode_UIDBase, /* Make_OpCode_ESC (35) CFF Top_CID */ - OpCode_FDArray, /* Make_OpCode_ESC (36) CFF Top_CID, CFF2 Top */ - OpCode_FDSelect, /* Make_OpCode_ESC (37) CFF Top_CID, CFF2 Top */ - OpCode_FontName, /* Make_OpCode_ESC (38) CFF Top_CID */ +/* Two byte escape operators 12, (0-41) */ +#define OpCode_ESC_Base 256 +#define Make_OpCode_ESC(byte2) ((OpCode)(OpCode_ESC_Base + (byte2))) - /* === CharString operators === */ - - OpCode_hstem = 1, /* 1 CFF, CFF2 */ - OpCode_Reserved2, - OpCode_vstem, /* 3 CFF, CFF2 */ - OpCode_vmoveto, /* 4 CFF, CFF2 */ - OpCode_rlineto, /* 5 CFF, CFF2 */ - OpCode_hlineto, /* 6 CFF, CFF2 */ - OpCode_vlineto, /* 7 CFF, CFF2 */ - OpCode_rrcurveto, /* 8 CFF, CFF2 */ - OpCode_Reserved9, - OpCode_callsubr, /* 10 CFF, CFF2 */ - OpCode_return, /* 11 CFF */ - // OpCode_escape, /* 12 CFF, CFF2 */ - OpCode_Reserved13 = 13, - OpCode_endchar, /* 14 CFF */ - OpCode_vsindexcs, /* 15 CFF2 */ - OpCode_blendcs, /* 16 CFF2 */ - OpCode_Reserved17, - OpCode_hstemhm, /* 18 CFF, CFF2 */ - OpCode_hintmask, /* 19 CFF, CFF2 */ - OpCode_cntrmask, /* 20 CFF, CFF2 */ - OpCode_rmoveto, /* 21 CFF, CFF2 */ - OpCode_hmoveto, /* 22 CFF, CFF2 */ - OpCode_vstemhm, /* 23 CFF, CFF2 */ - OpCode_rcurveline, /* 24 CFF, CFF2 */ - OpCode_rlinecurve, /* 25 CFF, CFF2 */ - OpCode_vvcurveto, /* 26 CFF, CFF2 */ - OpCode_hhcurveto, /* 27 CFF, CFF2 */ - // OpCode_shortint, /* 28 CFF, CFF2 */ - OpCode_callgsubr = 29, /* 29 CFF, CFF2 */ - OpCode_vhcurveto, /* 30 CFF, CFF2 */ - OpCode_hvcurveto, /* 31 CFF, CFF2 */ - - OpCode_fixedcs = 255, /* 32-bit fixed */ - - /* Two byte escape operators 12, (0-41) */ - OpCode_ReservedESC0 = OpCode_ESC_Base, /* Make_OpCode_ESC (0) */ - OpCode_ReservedESC1, /* Make_OpCode_ESC (1) */ - OpCode_ReservedESC2, /* Make_OpCode_ESC (2) */ - OpCode_and, /* Make_OpCode_ESC (3) CFF */ - OpCode_or, /* Make_OpCode_ESC (4) CFF */ - OpCode_not, /* Make_OpCode_ESC (5) CFF */ - OpCode_ReservedESC6, /* Make_OpCode_ESC (6) */ - OpCode_ReservedESC7, /* Make_OpCode_ESC (7) */ - OpCode_ReservedESC8, /* Make_OpCode_ESC (8) */ - OpCode_abs, /* Make_OpCode_ESC (9) CFF */ - OpCode_add, /* Make_OpCode_ESC (10) CFF */ - OpCode_sub, /* Make_OpCode_ESC (11) CFF */ - OpCode_div, /* Make_OpCode_ESC (12) CFF */ - OpCode_ReservedESC13, /* Make_OpCode_ESC (13) */ - OpCode_neg, /* Make_OpCode_ESC (14) CFF */ - OpCode_eq, /* Make_OpCode_ESC (15) CFF */ - OpCode_ReservedESC16, /* Make_OpCode_ESC (16) */ - OpCode_ReservedESC17, /* Make_OpCode_ESC (17) */ - OpCode_drop, /* Make_OpCode_ESC (18) CFF */ - OpCode_ReservedESC19, /* Make_OpCode_ESC (19) */ - OpCode_put, /* Make_OpCode_ESC (20) CFF */ - OpCode_get, /* Make_OpCode_ESC (21) CFF */ - OpCode_ifelse, /* Make_OpCode_ESC (22) CFF */ - OpCode_random, /* Make_OpCode_ESC (23) CFF */ - OpCode_mul, /* Make_OpCode_ESC (24) CFF */ - // OpCode_reservedESC25, /* Make_OpCode_ESC (25) */ - OpCode_sqrt = OpCode_mul+2, /* Make_OpCode_ESC (26) CFF */ - OpCode_dup, /* Make_OpCode_ESC (27) CFF */ - OpCode_exch, /* Make_OpCode_ESC (28) CFF */ - OpCode_index, /* Make_OpCode_ESC (29) CFF */ - OpCode_roll, /* Make_OpCode_ESC (30) CFF */ - OpCode_reservedESC31, /* Make_OpCode_ESC (31) */ - OpCode_reservedESC32, /* Make_OpCode_ESC (32) */ - OpCode_reservedESC33, /* Make_OpCode_ESC (33) */ - OpCode_hflex, /* Make_OpCode_ESC (34) CFF, CFF2 */ - OpCode_flex, /* Make_OpCode_ESC (35) CFF, CFF2 */ - OpCode_hflex1, /* Make_OpCode_ESC (36) CFF, CFF2 */ - OpCode_flex1 /* Make_OpCode_ESC (37) CFF, CFF2 */ -}; - -inline OpCode Make_OpCode_ESC (unsigned char byte2) { return (OpCode)(OpCode_ESC_Base + byte2); } inline OpCode Unmake_OpCode_ESC (OpCode op) { return (OpCode)(op - OpCode_ESC_Base); } inline bool Is_OpCode_ESC (OpCode op) { return op >= OpCode_ESC_Base; } inline unsigned int OpCode_Size (OpCode op) { return Is_OpCode_ESC (op)? 2: 1; } +#define OpCode_Copyright Make_OpCode_ESC(0) /* CFF Top */ +#define OpCode_isFixedPitch Make_OpCode_ESC(1) /* CFF Top (false) */ +#define OpCode_ItalicAngle Make_OpCode_ESC(2) /* CFF Top (0) */ +#define OpCode_UnderlinePosition Make_OpCode_ESC(3) /* CFF Top (-100) */ +#define OpCode_UnderlineThickness Make_OpCode_ESC(4) /* CFF Top (50) */ +#define OpCode_PaintType Make_OpCode_ESC(5) /* CFF Top (0) */ +#define OpCode_CharstringType Make_OpCode_ESC(6) /* CFF Top (2) */ +#define OpCode_FontMatrix Make_OpCode_ESC(7) /* CFF Top, CFF2 Top (.001 0 0 .001 0 0)*/ +#define OpCode_StrokeWidth Make_OpCode_ESC(8) /* CFF Top (0) */ +#define OpCode_BlueScale Make_OpCode_ESC(9) /* CFF Private, CFF2 Private (0.039625) */ +#define OpCode_BlueShift Make_OpCode_ESC(10) /* CFF Private, CFF2 Private (7) */ +#define OpCode_BlueFuzz Make_OpCode_ESC(11) /* CFF Private, CFF2 Private (1) */ +#define OpCode_StemSnapH Make_OpCode_ESC(12) /* CFF Private, CFF2 Private */ +#define OpCode_StemSnapV Make_OpCode_ESC(13) /* CFF Private, CFF2 Private */ +#define OpCode_ForceBold Make_OpCode_ESC(14) /* CFF Private (false) */ +#define OpCode_reservedESC15 Make_OpCode_ESC(15) +#define OpCode_reservedESC16 Make_OpCode_ESC(16) +#define OpCode_LanguageGroup Make_OpCode_ESC(17) /* CFF Private, CFF2 Private (0) */ +#define OpCode_ExpansionFactor Make_OpCode_ESC(18) /* CFF Private, CFF2 Private (0.06) */ +#define OpCode_initialRandomSeed Make_OpCode_ESC(19) /* CFF Private (0) */ +#define OpCode_SyntheticBase Make_OpCode_ESC(20) /* CFF Top */ +#define OpCode_PostScript Make_OpCode_ESC(21) /* CFF Top */ +#define OpCode_BaseFontName Make_OpCode_ESC(22) /* CFF Top */ +#define OpCode_BaseFontBlend Make_OpCode_ESC(23) /* CFF Top */ +#define OpCode_reservedESC24 Make_OpCode_ESC(24) +#define OpCode_reservedESC25 Make_OpCode_ESC(25) +#define OpCode_reservedESC26 Make_OpCode_ESC(26) +#define OpCode_reservedESC27 Make_OpCode_ESC(27) +#define OpCode_reservedESC28 Make_OpCode_ESC(28) +#define OpCode_reservedESC29 Make_OpCode_ESC(29) +#define OpCode_ROS Make_OpCode_ESC(30) /* CFF Top_CID */ +#define OpCode_CIDFontVersion Make_OpCode_ESC(31) /* CFF Top_CID (0) */ +#define OpCode_CIDFontRevision Make_OpCode_ESC(32) /* CFF Top_CID (0) */ +#define OpCode_CIDFontType Make_OpCode_ESC(33) /* CFF Top_CID (0) */ +#define OpCode_CIDCount Make_OpCode_ESC(34) /* CFF Top_CID (8720) */ +#define OpCode_UIDBase Make_OpCode_ESC(35) /* CFF Top_CID */ +#define OpCode_FDArray Make_OpCode_ESC(36) /* CFF Top_CID, CFF2 Top */ +#define OpCode_FDSelect Make_OpCode_ESC(37) /* CFF Top_CID, CFF2 Top */ +#define OpCode_FontName Make_OpCode_ESC(38) /* CFF Top_CID */ + + /* === CharString operators === */ + +#define OpCode_hstem 1 /* CFF, CFF2 */ +#define OpCode_Reserved2 2 +#define OpCode_vstem 3 /* CFF, CFF2 */ +#define OpCode_vmoveto 4 /* CFF, CFF2 */ +#define OpCode_rlineto 5 /* CFF, CFF2 */ +#define OpCode_hlineto 6 /* CFF, CFF2 */ +#define OpCode_vlineto 7 /* CFF, CFF2 */ +#define OpCode_rrcurveto 8 /* CFF, CFF2 */ +#define OpCode_Reserved9 9 +#define OpCode_callsubr 10 /* CFF, CFF2 */ +#define OpCode_return 11 /* CFF */ +// #define OpCode_escape 12 /* CFF, CFF2 */ +#define OpCode_Reserved13 13 +#define OpCode_endchar 14 /* CFF */ +#define OpCode_vsindexcs 15 /* CFF2 */ +#define OpCode_blendcs 16 /* CFF2 */ +#define OpCode_Reserved17 17 +#define OpCode_hstemhm 18 /* CFF, CFF2 */ +#define OpCode_hintmask 19 /* CFF, CFF2 */ +#define OpCode_cntrmask 20 /* CFF, CFF2 */ +#define OpCode_rmoveto 21 /* CFF, CFF2 */ +#define OpCode_hmoveto 22 /* CFF, CFF2 */ +#define OpCode_vstemhm 23 /* CFF, CFF2 */ +#define OpCode_rcurveline 24 /* CFF, CFF2 */ +#define OpCode_rlinecurve 25 /* CFF, CFF2 */ +#define OpCode_vvcurveto 26 /* CFF, CFF2 */ +#define OpCode_hhcurveto 27 /* CFF, CFF2 */ +// #define OpCode_shortint 28 /* CFF, CFF2 */ +#define OpCode_callgsubr 29 /* CFF, CFF2 */ +#define OpCode_vhcurveto 30 /* CFF, CFF2 */ +#define OpCode_hvcurveto 31 /* CFF, CFF2 */ + +#define OpCode_fixedcs 255 /* 32-bit fixed */ + +/* Two byte escape operators 12, (0-41) */ +#define OpCode_ReservedESC0 Make_OpCode_ESC(0) +#define OpCode_ReservedESC1 Make_OpCode_ESC(1) +#define OpCode_ReservedESC2 Make_OpCode_ESC(2) +#define OpCode_and Make_OpCode_ESC(3) /* CFF */ +#define OpCode_or Make_OpCode_ESC(4) /* CFF */ +#define OpCode_not Make_OpCode_ESC(5) /* CFF */ +#define OpCode_ReservedESC6 Make_OpCode_ESC(6) +#define OpCode_ReservedESC7 Make_OpCode_ESC(7) +#define OpCode_ReservedESC8 Make_OpCode_ESC(8) +#define OpCode_abs Make_OpCode_ESC(9) /* CFF */ +#define OpCode_add Make_OpCode_ESC(10) /* CFF */ +#define OpCode_sub Make_OpCode_ESC(11) /* CFF */ +#define OpCode_div Make_OpCode_ESC(12) /* CFF */ +#define OpCode_ReservedESC13 Make_OpCode_ESC(13) +#define OpCode_neg Make_OpCode_ESC(14) /* CFF */ +#define OpCode_eq Make_OpCode_ESC(15) /* CFF */ +#define OpCode_ReservedESC16 Make_OpCode_ESC(16) +#define OpCode_ReservedESC17 Make_OpCode_ESC(17) +#define OpCode_drop Make_OpCode_ESC(18) /* CFF */ +#define OpCode_ReservedESC19 Make_OpCode_ESC(19) +#define OpCode_put Make_OpCode_ESC(20) /* CFF */ +#define OpCode_get Make_OpCode_ESC(21) /* CFF */ +#define OpCode_ifelse Make_OpCode_ESC(22) /* CFF */ +#define OpCode_random Make_OpCode_ESC(23) /* CFF */ +#define OpCode_mul Make_OpCode_ESC(24) /* CFF */ +// #define OpCode_reservedESC25 Make_OpCode_ESC(25) +#define OpCode_sqrt Make_OpCode_ESC(26) /* CFF */ +#define OpCode_dup Make_OpCode_ESC(27) /* CFF */ +#define OpCode_exch Make_OpCode_ESC(28) /* CFF */ +#define OpCode_index Make_OpCode_ESC(29) /* CFF */ +#define OpCode_roll Make_OpCode_ESC(30) /* CFF */ +#define OpCode_reservedESC31 Make_OpCode_ESC(31) +#define OpCode_reservedESC32 Make_OpCode_ESC(32) +#define OpCode_reservedESC33 Make_OpCode_ESC(33) +#define OpCode_hflex Make_OpCode_ESC(34) /* CFF, CFF2 */ +#define OpCode_flex Make_OpCode_ESC(35) /* CFF, CFF2 */ +#define OpCode_hflex1 Make_OpCode_ESC(36) /* CFF, CFF2 */ +#define OpCode_flex1 Make_OpCode_ESC(37) /* CFF, CFF2 */ + struct Number { inline void init (void) @@ -668,7 +668,7 @@ struct InterpEnv if (op == OpCode_escape) { if (unlikely (!substr.avail ())) return false; - op = Make_OpCode_ESC (substr[1]); + op = Make_OpCode_ESC(substr[1]); substr.inc (); } substr.inc ();