Skip to content

Commit

Permalink
Add feature support for missing OS/2, hhea and vhea fields
Browse files Browse the repository at this point in the history
Tune up algebraic calculations
Add flag to keep MVAR values not overridden, delete those values by
  default
  • Loading branch information
skef committed Jun 10, 2024
1 parent df384ca commit 40e1ae6
Show file tree
Hide file tree
Showing 28 changed files with 2,266 additions and 1,749 deletions.
3 changes: 3 additions & 0 deletions c/addfeatures/cb.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -717,6 +717,9 @@ void cbConvert(cbCtx h, int flags, const char *clientVers, const char *infile,
if (otherflags & OTHERFLAGS_LOOKUP_FINAL_NAMES) {
hotConvertFlags |= HOT_LOOKUP_FINAL_NAMES;
}
if (otherflags & OTHERFLAGS_KEEP_MVAR) {
hotConvertFlags |= HOT_KEEP_MVAR;
}

hotSetConvertFlags(h->hot.ctx, hotConvertFlags);

Expand Down
1 change: 1 addition & 0 deletions c/addfeatures/cb.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,5 +76,6 @@ void CTL_CDECL cbWarning(cbCtx h, const char *fmt, ...);
#define OTHERFLAGS_VERBOSE (1 << 15)
#define OTHERFLAGS_FINAL_NAMES (1 << 16)
#define OTHERFLAGS_LOOKUP_FINAL_NAMES (1 << 17)
#define OTHERFLAGS_KEEP_MVAR (1 << 18)

#endif // ADDFEATURES_CB_H_
1,218 changes: 654 additions & 564 deletions c/addfeatures/hotconv/FeatLexer.cpp

Large diffs are not rendered by default.

36 changes: 20 additions & 16 deletions c/addfeatures/hotconv/FeatLexer.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,22 +29,26 @@ class FeatLexer : public antlr4::Lexer {
HA_BTL = 64, VA_BTL = 65, HA_BSL = 66, VA_BSL = 67, GDEF = 68, GLYPH_CLASS_DEF = 69,
ATTACH = 70, LIG_CARET_BY_POS = 71, LIG_CARET_BY_IDX = 72, HEAD = 73,
FONT_REVISION = 74, HHEA = 75, ASCENDER = 76, DESCENDER = 77, LINE_GAP = 78,
CARET_OFFSET = 79, NAME = 80, NAMEID = 81, OS_2 = 82, FS_TYPE = 83,
FS_TYPE_v = 84, OS2_LOWER_OP_SIZE = 85, OS2_UPPER_OP_SIZE = 86, PANOSE = 87,
TYPO_ASCENDER = 88, TYPO_DESCENDER = 89, TYPO_LINE_GAP = 90, WIN_ASCENT = 91,
WIN_DESCENT = 92, X_HEIGHT = 93, CAP_HEIGHT = 94, WEIGHT_CLASS = 95,
WIDTH_CLASS = 96, VENDOR = 97, UNICODE_RANGE = 98, CODE_PAGE_RANGE = 99,
FAMILY_CLASS = 100, STAT = 101, ELIDED_FALLBACK_NAME = 102, ELIDED_FALLBACK_NAME_ID = 103,
DESIGN_AXIS = 104, AXIS_VALUE = 105, FLAG = 106, LOCATION = 107, AXIS_EAVN = 108,
AXIS_OSFA = 109, VHEA = 110, VERT_TYPO_ASCENDER = 111, VERT_TYPO_DESCENDER = 112,
VERT_TYPO_LINE_GAP = 113, VMTX = 114, VERT_ORIGIN_Y = 115, VERT_ADVANCE_Y = 116,
LCBRACE = 117, RCBRACE = 118, LBRACKET = 119, RBRACKET = 120, LPAREN = 121,
RPAREN = 122, HYPHEN = 123, PLUS = 124, SEMI = 125, EQUALS = 126, MARKER = 127,
COMMA = 128, COLON = 129, STRVAL = 130, LNAME = 131, GCLASS = 132, AXISUNIT = 133,
CID = 134, ESCGNAME = 135, NAMELABEL = 136, EXTNAME = 137, POINTNUM = 138,
NUMEXT = 139, NUMOCT = 140, NUM = 141, A_WHITESPACE = 142, A_LABEL = 143,
A_LBRACE = 144, A_CLOSE = 145, A_LINE = 146, I_WHITESPACE = 147, I_RPAREN = 148,
IFILE = 149, I_LPAREN = 150
CARET_OFFSET = 79, CARET_SLOPE_RISE = 80, CARET_SLOPE_RUN = 81, NAME = 82,
NAMEID = 83, OS_2 = 84, FS_TYPE = 85, FS_TYPE_v = 86, OS2_LOWER_OP_SIZE = 87,
OS2_UPPER_OP_SIZE = 88, PANOSE = 89, TYPO_ASCENDER = 90, TYPO_DESCENDER = 91,
TYPO_LINE_GAP = 92, WIN_ASCENT = 93, WIN_DESCENT = 94, X_HEIGHT = 95,
CAP_HEIGHT = 96, SUBSCRIPT_X_SIZE = 97, SUBSCRIPT_X_OFFSET = 98, SUBSCRIPT_Y_SIZE = 99,
SUBSCRIPT_Y_OFFSET = 100, SUPERSCRIPT_X_SIZE = 101, SUPERSCRIPT_X_OFFSET = 102,
SUPERSCRIPT_Y_SIZE = 103, SUPERSCRIPT_Y_OFFSET = 104, STRIKEOUT_SIZE = 105,
STRIKEOUT_POSITION = 106, WEIGHT_CLASS = 107, WIDTH_CLASS = 108, VENDOR = 109,
UNICODE_RANGE = 110, CODE_PAGE_RANGE = 111, FAMILY_CLASS = 112, STAT = 113,
ELIDED_FALLBACK_NAME = 114, ELIDED_FALLBACK_NAME_ID = 115, DESIGN_AXIS = 116,
AXIS_VALUE = 117, FLAG = 118, LOCATION = 119, AXIS_EAVN = 120, AXIS_OSFA = 121,
VHEA = 122, VERT_TYPO_ASCENDER = 123, VERT_TYPO_DESCENDER = 124, VERT_TYPO_LINE_GAP = 125,
VMTX = 126, VERT_ORIGIN_Y = 127, VERT_ADVANCE_Y = 128, LCBRACE = 129,
RCBRACE = 130, LBRACKET = 131, RBRACKET = 132, LPAREN = 133, RPAREN = 134,
HYPHEN = 135, PLUS = 136, SEMI = 137, EQUALS = 138, MARKER = 139, COMMA = 140,
COLON = 141, STRVAL = 142, LNAME = 143, GCLASS = 144, AXISUNIT = 145,
CID = 146, ESCGNAME = 147, NAMELABEL = 148, EXTNAME = 149, POINTNUM = 150,
NUMEXT = 151, NUMOCT = 152, NUM = 153, A_WHITESPACE = 154, A_LABEL = 155,
A_LBRACE = 156, A_CLOSE = 157, A_LINE = 158, I_WHITESPACE = 159, I_RPAREN = 160,
IFILE = 161, I_LPAREN = 162
};

enum {
Expand Down
38 changes: 37 additions & 1 deletion c/addfeatures/hotconv/FeatLexer.interp

Large diffs are not rendered by default.

260 changes: 142 additions & 118 deletions c/addfeatures/hotconv/FeatLexer.tokens
Original file line number Diff line number Diff line change
Expand Up @@ -77,77 +77,89 @@ ASCENDER=76
DESCENDER=77
LINE_GAP=78
CARET_OFFSET=79
NAME=80
NAMEID=81
OS_2=82
FS_TYPE=83
FS_TYPE_v=84
OS2_LOWER_OP_SIZE=85
OS2_UPPER_OP_SIZE=86
PANOSE=87
TYPO_ASCENDER=88
TYPO_DESCENDER=89
TYPO_LINE_GAP=90
WIN_ASCENT=91
WIN_DESCENT=92
X_HEIGHT=93
CAP_HEIGHT=94
WEIGHT_CLASS=95
WIDTH_CLASS=96
VENDOR=97
UNICODE_RANGE=98
CODE_PAGE_RANGE=99
FAMILY_CLASS=100
STAT=101
ELIDED_FALLBACK_NAME=102
ELIDED_FALLBACK_NAME_ID=103
DESIGN_AXIS=104
AXIS_VALUE=105
FLAG=106
LOCATION=107
AXIS_EAVN=108
AXIS_OSFA=109
VHEA=110
VERT_TYPO_ASCENDER=111
VERT_TYPO_DESCENDER=112
VERT_TYPO_LINE_GAP=113
VMTX=114
VERT_ORIGIN_Y=115
VERT_ADVANCE_Y=116
LCBRACE=117
RCBRACE=118
LBRACKET=119
RBRACKET=120
LPAREN=121
RPAREN=122
HYPHEN=123
PLUS=124
SEMI=125
EQUALS=126
MARKER=127
COMMA=128
COLON=129
STRVAL=130
LNAME=131
GCLASS=132
AXISUNIT=133
CID=134
ESCGNAME=135
NAMELABEL=136
EXTNAME=137
POINTNUM=138
NUMEXT=139
NUMOCT=140
NUM=141
A_WHITESPACE=142
A_LABEL=143
A_LBRACE=144
A_CLOSE=145
A_LINE=146
I_WHITESPACE=147
I_RPAREN=148
IFILE=149
I_LPAREN=150
CARET_SLOPE_RISE=80
CARET_SLOPE_RUN=81
NAME=82
NAMEID=83
OS_2=84
FS_TYPE=85
FS_TYPE_v=86
OS2_LOWER_OP_SIZE=87
OS2_UPPER_OP_SIZE=88
PANOSE=89
TYPO_ASCENDER=90
TYPO_DESCENDER=91
TYPO_LINE_GAP=92
WIN_ASCENT=93
WIN_DESCENT=94
X_HEIGHT=95
CAP_HEIGHT=96
SUBSCRIPT_X_SIZE=97
SUBSCRIPT_X_OFFSET=98
SUBSCRIPT_Y_SIZE=99
SUBSCRIPT_Y_OFFSET=100
SUPERSCRIPT_X_SIZE=101
SUPERSCRIPT_X_OFFSET=102
SUPERSCRIPT_Y_SIZE=103
SUPERSCRIPT_Y_OFFSET=104
STRIKEOUT_SIZE=105
STRIKEOUT_POSITION=106
WEIGHT_CLASS=107
WIDTH_CLASS=108
VENDOR=109
UNICODE_RANGE=110
CODE_PAGE_RANGE=111
FAMILY_CLASS=112
STAT=113
ELIDED_FALLBACK_NAME=114
ELIDED_FALLBACK_NAME_ID=115
DESIGN_AXIS=116
AXIS_VALUE=117
FLAG=118
LOCATION=119
AXIS_EAVN=120
AXIS_OSFA=121
VHEA=122
VERT_TYPO_ASCENDER=123
VERT_TYPO_DESCENDER=124
VERT_TYPO_LINE_GAP=125
VMTX=126
VERT_ORIGIN_Y=127
VERT_ADVANCE_Y=128
LCBRACE=129
RCBRACE=130
LBRACKET=131
RBRACKET=132
LPAREN=133
RPAREN=134
HYPHEN=135
PLUS=136
SEMI=137
EQUALS=138
MARKER=139
COMMA=140
COLON=141
STRVAL=142
LNAME=143
GCLASS=144
AXISUNIT=145
CID=146
ESCGNAME=147
NAMELABEL=148
EXTNAME=149
POINTNUM=150
NUMEXT=151
NUMOCT=152
NUM=153
A_WHITESPACE=154
A_LABEL=155
A_LBRACE=156
A_CLOSE=157
A_LINE=158
I_WHITESPACE=159
I_RPAREN=160
IFILE=161
I_LPAREN=162
'anon'=1
'anonymous'=2
'include'=5
Expand Down Expand Up @@ -225,50 +237,62 @@ I_LPAREN=150
'Descender'=77
'LineGap'=78
'CaretOffset'=79
'name'=80
'nameid'=81
'OS/2'=82
'FSType'=83
'fsType'=84
'LowerOpSize'=85
'UpperOpSize'=86
'Panose'=87
'TypoAscender'=88
'TypoDescender'=89
'TypoLineGap'=90
'winAscent'=91
'winDescent'=92
'XHeight'=93
'CapHeight'=94
'WeightClass'=95
'WidthClass'=96
'Vendor'=97
'UnicodeRange'=98
'CodePageRange'=99
'FamilyClass'=100
'STAT'=101
'ElidedFallbackName'=102
'ElidedFallbackNameID'=103
'DesignAxis'=104
'AxisValue'=105
'flag'=106
'location'=107
'ElidableAxisValueName'=108
'OlderSiblingFontAttribute'=109
'vhea'=110
'VertTypoAscender'=111
'VertTypoDescender'=112
'VertTypoLineGap'=113
'vmtx'=114
'VertOriginY'=115
'VertAdvanceY'=116
'}'=118
'['=119
']'=120
'-'=123
'+'=124
';'=125
'='=126
'\''=127
','=128
':'=129
'CaretSlopeRise'=80
'CaretSlopeRun'=81
'name'=82
'nameid'=83
'OS/2'=84
'FSType'=85
'fsType'=86
'LowerOpSize'=87
'UpperOpSize'=88
'Panose'=89
'TypoAscender'=90
'TypoDescender'=91
'TypoLineGap'=92
'winAscent'=93
'winDescent'=94
'XHeight'=95
'CapHeight'=96
'SubscriptXSize'=97
'SubscriptXOffset'=98
'SubscriptYSize'=99
'SubscriptYOffset'=100
'SuperscriptXSize'=101
'SuperscriptXOffset'=102
'SuperscriptYSize'=103
'SuperscriptYOffset'=104
'StrikeoutSize'=105
'StrikeoutPosition'=106
'WeightClass'=107
'WidthClass'=108
'Vendor'=109
'UnicodeRange'=110
'CodePageRange'=111
'FamilyClass'=112
'STAT'=113
'ElidedFallbackName'=114
'ElidedFallbackNameID'=115
'DesignAxis'=116
'AxisValue'=117
'flag'=118
'location'=119
'ElidableAxisValueName'=120
'OlderSiblingFontAttribute'=121
'vhea'=122
'VertTypoAscender'=123
'VertTypoDescender'=124
'VertTypoLineGap'=125
'vmtx'=126
'VertOriginY'=127
'VertAdvanceY'=128
'}'=130
'['=131
']'=132
'-'=135
'+'=136
';'=137
'='=138
'\''=139
','=140
':'=141
12 changes: 12 additions & 0 deletions c/addfeatures/hotconv/FeatLexerBase.g4
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,8 @@ DESCENDER : 'Descender' ;
LINE_GAP : 'LineGap' ;

CARET_OFFSET : 'CaretOffset' ;
CARET_SLOPE_RISE : 'CaretSlopeRise' ;
CARET_SLOPE_RUN : 'CaretSlopeRun' ;

NAME : 'name' ;
NAMEID : 'nameid' ;
Expand All @@ -114,6 +116,16 @@ WIN_ASCENT : 'winAscent' ;
WIN_DESCENT : 'winDescent' ;
X_HEIGHT : 'XHeight' ;
CAP_HEIGHT : 'CapHeight' ;
SUBSCRIPT_X_SIZE : 'SubscriptXSize' ;
SUBSCRIPT_X_OFFSET : 'SubscriptXOffset' ;
SUBSCRIPT_Y_SIZE : 'SubscriptYSize' ;
SUBSCRIPT_Y_OFFSET : 'SubscriptYOffset' ;
SUPERSCRIPT_X_SIZE : 'SuperscriptXSize' ;
SUPERSCRIPT_X_OFFSET : 'SuperscriptXOffset' ;
SUPERSCRIPT_Y_SIZE : 'SuperscriptYSize' ;
SUPERSCRIPT_Y_OFFSET : 'SuperscriptYOffset' ;
STRIKEOUT_SIZE : 'StrikeoutSize' ;
STRIKEOUT_POSITION : 'StrikeoutPosition' ;
WEIGHT_CLASS : 'WeightClass' ;
WIDTH_CLASS : 'WidthClass' ;
VENDOR : 'Vendor' ;
Expand Down
Loading

0 comments on commit 40e1ae6

Please sign in to comment.