Skip to content

Commit 5a5c1d0

Browse files
committed
wire up the ignore suffix as optional argument
1 parent 5f05f7c commit 5a5c1d0

27 files changed

+1270
-11
lines changed

kernFeatureWriter.py

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
tag_heb = '_HEB'
2828
tag_rtl = '_RTL'
2929
tag_exception = 'EXC_'
30-
tag_ignore = '.cxt'
3130

3231

3332
# helpers
@@ -97,6 +96,9 @@ def __init__(self):
9796
# pairs involving groups a bit smaller).
9897
self.dissolve_single = False
9998

99+
# ignore pairs which contain glyphs using the following suffix
100+
self.ignore_suffix = None
101+
100102

101103
class KerningSanitizer(object):
102104
'''
@@ -188,7 +190,7 @@ def report(self):
188190
class KernProcessor(object):
189191
def __init__(
190192
self, groups=None, kerning=None, reference_groups=None,
191-
option_dissolve=False
193+
option_dissolve=False, ignore_suffix=None
192194
):
193195

194196
# kerning dicts containing pair-value combinations
@@ -216,6 +218,8 @@ def __init__(
216218
self.kerning = kerning
217219
self.reference_groups = reference_groups
218220

221+
self.ignore_suffix = ignore_suffix
222+
219223
if kerning:
220224
if option_dissolve:
221225
groups, kerning = self._dissolve_singleton_groups(
@@ -368,13 +372,13 @@ def _sanityCheck(self):
368372
f'Pairs not processed: {num_unprocessed}\n'
369373
)
370374

371-
def _explode(self, leftGlyphList, rightGlyphList):
375+
def _explode(self, glyph_list_a, glyph_list_b):
372376
'''
373377
Return a list of tuples, containing all possible combinations
374378
of elements in both input lists.
375379
'''
376380

377-
return list(itertools.product(leftGlyphList, rightGlyphList))
381+
return list(itertools.product(glyph_list_a, glyph_list_b))
378382

379383
def _find_exceptions(self):
380384
'''
@@ -384,13 +388,14 @@ def _find_exceptions(self):
384388

385389
for pair in list(self.kerning.keys())[::-1]:
386390

387-
# Skip pairs in which the name of the
388-
# left glyph contains the ignore tag.
389-
if tag_ignore in pair[0]:
390-
del self.kerning[pair]
391-
continue
391+
# Skip pairs containing the ignore suffix.
392+
# Not a very sophisticated feature.
393+
if self.ignore_suffix:
394+
if any([item.endswith(self.ignore_suffix) for item in pair]):
395+
del self.kerning[pair]
396+
continue
392397

393-
# Looking for pre-defined exception pairs, and filtering them out.
398+
# Filter pre-defined exception pairs.
394399
if any([tag_exception in item for item in pair]):
395400
self.predefined_exceptions[pair] = self.kerning[pair]
396401
del self.kerning[pair]
@@ -648,6 +653,7 @@ def __init__(self, font, args=None):
648653
self.subtable_size = args.subtable_size
649654
self.write_trimmed_pairs = args.write_trimmed_pairs
650655
self.dissolve_single = args.dissolve_single
656+
self.ignore_suffix = args.ignore_suffix
651657
self.trimmedPairs = 0
652658

653659
if self.f:
@@ -662,7 +668,7 @@ def __init__(self, font, args=None):
662668
ks.report()
663669
kp = KernProcessor(
664670
ks.groups, ks.kerning, ks.reference_groups,
665-
self.dissolve_single)
671+
self.dissolve_single, self.ignore_suffix)
666672

667673
fea_data = self._make_fea_data(kp)
668674
self.header = self.make_header(args)
@@ -944,6 +950,18 @@ def get_args(args=None):
944950
default=defaults.dissolve_single,
945951
help='dissolve single-element groups to glyph names')
946952

953+
parser.add_argument(
954+
'--ignore_suffix',
955+
action='store',
956+
default=defaults.ignore_suffix,
957+
metavar='.xxx',
958+
help=(
959+
'do not write pairs containing this suffix. '
960+
'This is a rudimentary feature, not working if a '
961+
'suffixed glyph is part of a kerning group.'
962+
)
963+
)
964+
947965
return parser.parse_args(args)
948966

949967

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
<?xml version='1.0' encoding='UTF-8'?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>ascender</key>
6+
<integer>730</integer>
7+
<key>capHeight</key>
8+
<integer>670</integer>
9+
<key>copyright</key>
10+
<string>Copyright 2014 - 2021 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'.</string>
11+
<key>descender</key>
12+
<integer>-240</integer>
13+
<key>familyName</key>
14+
<string>kern_example</string>
15+
<key>guidelines</key>
16+
<array/>
17+
<key>italicAngle</key>
18+
<integer>0</integer>
19+
<key>openTypeHheaAscender</key>
20+
<integer>1003</integer>
21+
<key>openTypeHheaDescender</key>
22+
<integer>-336</integer>
23+
<key>openTypeHheaLineGap</key>
24+
<integer>0</integer>
25+
<key>openTypeNameDesigner</key>
26+
<string>Frank Grießhammer</string>
27+
<key>openTypeNameLicense</key>
28+
<string>This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: http://scripts.sil.org/OFL. This Font Software is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the SIL Open Font License for the specific language, permissions and limitations governing your use of this Font Software.</string>
29+
<key>openTypeNameLicenseURL</key>
30+
<string>http://scripts.sil.org/OFL</string>
31+
<key>openTypeNameManufacturer</key>
32+
<string>Adobe Systems Incorporated</string>
33+
<key>openTypeNameManufacturerURL</key>
34+
<string>http://www.adobe.com/type</string>
35+
<key>openTypeOS2CodePageRanges</key>
36+
<array>
37+
<integer>0</integer>
38+
<integer>1</integer>
39+
<integer>2</integer>
40+
<integer>3</integer>
41+
<integer>4</integer>
42+
<integer>7</integer>
43+
<integer>8</integer>
44+
<integer>29</integer>
45+
</array>
46+
<key>openTypeOS2Panose</key>
47+
<array>
48+
<integer>2</integer>
49+
<integer>4</integer>
50+
<integer>6</integer>
51+
<integer>3</integer>
52+
<integer>5</integer>
53+
<integer>4</integer>
54+
<integer>5</integer>
55+
<integer>2</integer>
56+
<integer>2</integer>
57+
<integer>4</integer>
58+
</array>
59+
<key>openTypeOS2TypoAscender</key>
60+
<integer>730</integer>
61+
<key>openTypeOS2TypoDescender</key>
62+
<integer>-270</integer>
63+
<key>openTypeOS2TypoLineGap</key>
64+
<integer>0</integer>
65+
<key>openTypeOS2UnicodeRanges</key>
66+
<array>
67+
<integer>0</integer>
68+
<integer>1</integer>
69+
<integer>2</integer>
70+
<integer>7</integer>
71+
<integer>9</integer>
72+
<integer>29</integer>
73+
<integer>32</integer>
74+
<integer>33</integer>
75+
<integer>57</integer>
76+
</array>
77+
<key>openTypeOS2VendorID</key>
78+
<string>ADBO</string>
79+
<key>openTypeOS2WinAscent</key>
80+
<integer>1036</integer>
81+
<key>openTypeOS2WinDescent</key>
82+
<integer>335</integer>
83+
<key>postscriptBlueFuzz</key>
84+
<integer>0</integer>
85+
<key>postscriptBlueScale</key>
86+
<real>0.0375</real>
87+
<key>postscriptBlueShift</key>
88+
<integer>7</integer>
89+
<key>postscriptBlueValues</key>
90+
<array>
91+
<integer>-15</integer>
92+
<integer>0</integer>
93+
<integer>475</integer>
94+
<integer>488</integer>
95+
<integer>527</integer>
96+
<integer>540</integer>
97+
<integer>549</integer>
98+
<integer>563</integer>
99+
<integer>647</integer>
100+
<integer>660</integer>
101+
<integer>670</integer>
102+
<integer>685</integer>
103+
<integer>730</integer>
104+
<integer>750</integer>
105+
</array>
106+
<key>postscriptFamilyBlues</key>
107+
<array>
108+
<integer>-15</integer>
109+
<integer>0</integer>
110+
<integer>475</integer>
111+
<integer>488</integer>
112+
<integer>527</integer>
113+
<integer>540</integer>
114+
<integer>549</integer>
115+
<integer>563</integer>
116+
<integer>647</integer>
117+
<integer>660</integer>
118+
<integer>670</integer>
119+
<integer>685</integer>
120+
<integer>730</integer>
121+
<integer>750</integer>
122+
</array>
123+
<key>postscriptFamilyOtherBlues</key>
124+
<array>
125+
<integer>-250</integer>
126+
<integer>-240</integer>
127+
</array>
128+
<key>postscriptFontName</key>
129+
<string>kern_example</string>
130+
<key>postscriptForceBold</key>
131+
<false/>
132+
<key>postscriptOtherBlues</key>
133+
<array>
134+
<integer>-250</integer>
135+
<integer>-240</integer>
136+
</array>
137+
<key>postscriptStemSnapH</key>
138+
<array>
139+
<integer>46</integer>
140+
<integer>36</integer>
141+
</array>
142+
<key>postscriptStemSnapV</key>
143+
<array>
144+
<integer>85</integer>
145+
<integer>95</integer>
146+
</array>
147+
<key>postscriptUnderlinePosition</key>
148+
<integer>-75</integer>
149+
<key>postscriptUnderlineThickness</key>
150+
<integer>50</integer>
151+
<key>styleName</key>
152+
<string>Regular</string>
153+
<key>trademark</key>
154+
<string>Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.</string>
155+
<key>unitsPerEm</key>
156+
<integer>1000</integer>
157+
<key>xHeight</key>
158+
<integer>475</integer>
159+
</dict>
160+
</plist>
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<glyph name="A" format="2">
3+
<unicode hex="0041"/>
4+
<advance width="664"/>
5+
<outline>
6+
<contour>
7+
<point x="5" y="0" type="line"/>
8+
<point x="234" y="0" type="line"/>
9+
<point x="234" y="41" type="line"/>
10+
<point x="125" y="56" type="line"/>
11+
<point x="105" y="56" type="line"/>
12+
<point x="5" y="41" type="line"/>
13+
</contour>
14+
<contour>
15+
<point x="71" y="0" type="line"/>
16+
<point x="118" y="0" type="line"/>
17+
<point x="314" y="576" type="line"/>
18+
<point x="319" y="591" type="line"/>
19+
<point x="299" y="591" type="line"/>
20+
<point x="497" y="0" type="line"/>
21+
<point x="595" y="0" type="line"/>
22+
<point x="365" y="675" type="line"/>
23+
<point x="302" y="675" type="line"/>
24+
</contour>
25+
<contour>
26+
<point x="177" y="217" type="line"/>
27+
<point x="463" y="217" type="line"/>
28+
<point x="463" y="264" type="line"/>
29+
<point x="177" y="264" type="line"/>
30+
</contour>
31+
<contour>
32+
<point x="381" y="0" type="line"/>
33+
<point x="653" y="0" type="line"/>
34+
<point x="653" y="41" type="line"/>
35+
<point x="529" y="56" type="line"/>
36+
<point x="507" y="56" type="line"/>
37+
<point x="381" y="41" type="line"/>
38+
</contour>
39+
</outline>
40+
<anchor name="aboveUC" x="331" y="690"/>
41+
<anchor name="belowLC" x="315" y="-20"/>
42+
<anchor name="ogonek" x="539" y="0"/>
43+
</glyph>
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<glyph name="Adieresis" format="2">
3+
<unicode hex="00C4"/>
4+
<advance width="664"/>
5+
<outline>
6+
<contour>
7+
<point x="219" y="745" type="curve" smooth="yes"/>
8+
<point x="251" y="745"/>
9+
<point x="276" y="768"/>
10+
<point x="276" y="800" type="curve" smooth="yes"/>
11+
<point x="276" y="832"/>
12+
<point x="251" y="855"/>
13+
<point x="219" y="855" type="curve" smooth="yes"/>
14+
<point x="188" y="855"/>
15+
<point x="161" y="832"/>
16+
<point x="161" y="800" type="curve" smooth="yes"/>
17+
<point x="161" y="768"/>
18+
<point x="188" y="745"/>
19+
</contour>
20+
<contour>
21+
<point x="442" y="745" type="curve" smooth="yes"/>
22+
<point x="473" y="745"/>
23+
<point x="500" y="768"/>
24+
<point x="500" y="800" type="curve" smooth="yes"/>
25+
<point x="500" y="832"/>
26+
<point x="473" y="855"/>
27+
<point x="442" y="855" type="curve" smooth="yes"/>
28+
<point x="410" y="855"/>
29+
<point x="385" y="832"/>
30+
<point x="385" y="800" type="curve" smooth="yes"/>
31+
<point x="385" y="768"/>
32+
<point x="410" y="745"/>
33+
</contour>
34+
<component base="A"/>
35+
</outline>
36+
<lib>
37+
<dict>
38+
<key>public.markColor</key>
39+
<string>0,1,0.8,0.2</string>
40+
</dict>
41+
</lib>
42+
</glyph>

0 commit comments

Comments
 (0)