Skip to content

Commit f4ea60e

Browse files
authored
Merge pull request #36 from jenskutilek/ttf-instructions-composite-flags
TTF composite flags
2 parents 7c3b85a + 42a7a1f commit f4ea60e

File tree

417 files changed

+5711
-7678
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

417 files changed

+5711
-7678
lines changed

Lib/extractor/formats/opentype.py

+20-22
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,13 @@
1212
from extractor.stream import InstructionStream
1313
from extractor.tools import RelaxedInfo, copyAttr
1414

15+
16+
TRUETYPE_INSTRUCTIONS_KEY = "public.truetype.instructions"
17+
TRUETYPE_ROUND_KEY = "public.truetype.roundOffsetToGrid"
18+
TRUETYPE_METRICS_KEY = "public.truetype.useMyMetrics"
19+
TRUETYPE_OVERLAP_KEY = "public.truetype.overlap"
20+
OBJECT_LIBS_KEY = "public.objectLibs"
21+
1522
# ----------------
1623
# Public Functions
1724
# ----------------
@@ -93,7 +100,7 @@ def extractInstructions(source, destination):
93100
if "glyf" not in source:
94101
return
95102

96-
lib = destination.lib["public.truetype.instructions"] = {
103+
lib = destination.lib[TRUETYPE_INSTRUCTIONS_KEY] = {
97104
"formatVersion": 1,
98105
"maxFunctionDefs": 0,
99106
"maxInstructionDefs": 0,
@@ -149,7 +156,7 @@ def extractGlyphPrograms(source, destination):
149156

150157
hash_pen = HashPointPen(dest_glyph.width, destination)
151158
dest_glyph.drawPoints(hash_pen)
152-
lib = dest_glyph.lib["public.truetype.instructions"] = {
159+
lib = dest_glyph.lib[TRUETYPE_INSTRUCTIONS_KEY] = {
153160
"formatVersion": "1",
154161
"id": hash_pen.hash,
155162
}
@@ -192,33 +199,24 @@ def _byteCodeToTtxAssembly(program):
192199

193200
def _extractCompositeFlags(glyph, dest_glyph):
194201
# Find the lib key or add it
195-
if (
196-
"public.objectLibs" not in dest_glyph.lib
197-
or "public.objectIdentifiers"
198-
not in dest_glyph.lib["public.objectLibs"]
199-
):
200-
dest_glyph.lib["public.objectLibs"] = {
201-
"public.objectIdentifiers": {}
202-
}
203-
object_ids = dest_glyph.lib["public.objectLibs"][
204-
"public.objectIdentifiers"
205-
]
202+
if OBJECT_LIBS_KEY not in dest_glyph.lib:
203+
dest_glyph.lib[OBJECT_LIBS_KEY] = {}
204+
object_libs = dest_glyph.lib[OBJECT_LIBS_KEY]
206205

207206
for ci, c in enumerate(glyph.components):
208207
flags = {}
209-
if c.flags & ROUND_XY_TO_GRID:
210-
flags["round"] = True
211-
if c.flags & USE_MY_METRICS:
212-
flags["useMyMetrics"] = True
213-
if c.flags & OVERLAP_COMPOUND:
214-
flags["overlap"] = True
208+
flags[TRUETYPE_ROUND_KEY] = bool(c.flags & ROUND_XY_TO_GRID)
209+
flags[TRUETYPE_METRICS_KEY] = bool(c.flags & USE_MY_METRICS)
215210

216211
if flags:
217212
identifier = f"component{ci}"
218213
dest_glyph.components[ci].identifier = identifier
219-
object_ids[identifier] = {
220-
"public.truetype.instructions": flags
221-
}
214+
object_libs[identifier] = flags
215+
216+
# Overlap is stored directly in the glyph lib
217+
dest_glyph.lib["public.truetype.overlap"] = bool(
218+
c.flags & OVERLAP_COMPOUND
219+
)
222220

223221

224222
# ----

tests/data/ibm_plex/IBM Plex Serif-Text-FL_extracted.ufo/glyphs/A_E_acute.glif

+14-19
Original file line numberDiff line numberDiff line change
@@ -10,28 +10,23 @@
1010
<dict>
1111
<key>public.objectLibs</key>
1212
<dict>
13-
<key>public.objectIdentifiers</key>
13+
<key>component0</key>
1414
<dict>
15-
<key>component0</key>
16-
<dict>
17-
<key>public.truetype.instructions</key>
18-
<dict>
19-
<key>round</key>
20-
<true/>
21-
<key>useMyMetrics</key>
22-
<true/>
23-
</dict>
24-
</dict>
25-
<key>component1</key>
26-
<dict>
27-
<key>public.truetype.instructions</key>
28-
<dict>
29-
<key>round</key>
30-
<true/>
31-
</dict>
32-
</dict>
15+
<key>public.truetype.roundOffsetToGrid</key>
16+
<true/>
17+
<key>public.truetype.useMyMetrics</key>
18+
<true/>
19+
</dict>
20+
<key>component1</key>
21+
<dict>
22+
<key>public.truetype.roundOffsetToGrid</key>
23+
<true/>
24+
<key>public.truetype.useMyMetrics</key>
25+
<false/>
3326
</dict>
3427
</dict>
28+
<key>public.truetype.overlap</key>
29+
<false/>
3530
</dict>
3631
</lib>
3732
</glyph>

tests/data/ibm_plex/IBM Plex Serif-Text-FL_extracted.ufo/glyphs/A_acute.glif

+14-19
Original file line numberDiff line numberDiff line change
@@ -10,28 +10,23 @@
1010
<dict>
1111
<key>public.objectLibs</key>
1212
<dict>
13-
<key>public.objectIdentifiers</key>
13+
<key>component0</key>
1414
<dict>
15-
<key>component0</key>
16-
<dict>
17-
<key>public.truetype.instructions</key>
18-
<dict>
19-
<key>round</key>
20-
<true/>
21-
<key>useMyMetrics</key>
22-
<true/>
23-
</dict>
24-
</dict>
25-
<key>component1</key>
26-
<dict>
27-
<key>public.truetype.instructions</key>
28-
<dict>
29-
<key>round</key>
30-
<true/>
31-
</dict>
32-
</dict>
15+
<key>public.truetype.roundOffsetToGrid</key>
16+
<true/>
17+
<key>public.truetype.useMyMetrics</key>
18+
<true/>
19+
</dict>
20+
<key>component1</key>
21+
<dict>
22+
<key>public.truetype.roundOffsetToGrid</key>
23+
<true/>
24+
<key>public.truetype.useMyMetrics</key>
25+
<false/>
3326
</dict>
3427
</dict>
28+
<key>public.truetype.overlap</key>
29+
<false/>
3530
</dict>
3631
</lib>
3732
</glyph>

tests/data/ibm_plex/IBM Plex Serif-Text-FL_extracted.ufo/glyphs/A_breve.glif

+14-19
Original file line numberDiff line numberDiff line change
@@ -10,28 +10,23 @@
1010
<dict>
1111
<key>public.objectLibs</key>
1212
<dict>
13-
<key>public.objectIdentifiers</key>
13+
<key>component0</key>
1414
<dict>
15-
<key>component0</key>
16-
<dict>
17-
<key>public.truetype.instructions</key>
18-
<dict>
19-
<key>round</key>
20-
<true/>
21-
<key>useMyMetrics</key>
22-
<true/>
23-
</dict>
24-
</dict>
25-
<key>component1</key>
26-
<dict>
27-
<key>public.truetype.instructions</key>
28-
<dict>
29-
<key>round</key>
30-
<true/>
31-
</dict>
32-
</dict>
15+
<key>public.truetype.roundOffsetToGrid</key>
16+
<true/>
17+
<key>public.truetype.useMyMetrics</key>
18+
<true/>
19+
</dict>
20+
<key>component1</key>
21+
<dict>
22+
<key>public.truetype.roundOffsetToGrid</key>
23+
<true/>
24+
<key>public.truetype.useMyMetrics</key>
25+
<false/>
3326
</dict>
3427
</dict>
28+
<key>public.truetype.overlap</key>
29+
<false/>
3530
</dict>
3631
</lib>
3732
</glyph>

tests/data/ibm_plex/IBM Plex Serif-Text-FL_extracted.ufo/glyphs/A_breveacute.glif

+14-19
Original file line numberDiff line numberDiff line change
@@ -10,28 +10,23 @@
1010
<dict>
1111
<key>public.objectLibs</key>
1212
<dict>
13-
<key>public.objectIdentifiers</key>
13+
<key>component0</key>
1414
<dict>
15-
<key>component0</key>
16-
<dict>
17-
<key>public.truetype.instructions</key>
18-
<dict>
19-
<key>round</key>
20-
<true/>
21-
<key>useMyMetrics</key>
22-
<true/>
23-
</dict>
24-
</dict>
25-
<key>component1</key>
26-
<dict>
27-
<key>public.truetype.instructions</key>
28-
<dict>
29-
<key>round</key>
30-
<true/>
31-
</dict>
32-
</dict>
15+
<key>public.truetype.roundOffsetToGrid</key>
16+
<true/>
17+
<key>public.truetype.useMyMetrics</key>
18+
<true/>
19+
</dict>
20+
<key>component1</key>
21+
<dict>
22+
<key>public.truetype.roundOffsetToGrid</key>
23+
<true/>
24+
<key>public.truetype.useMyMetrics</key>
25+
<false/>
3326
</dict>
3427
</dict>
28+
<key>public.truetype.overlap</key>
29+
<false/>
3530
</dict>
3631
</lib>
3732
</glyph>

tests/data/ibm_plex/IBM Plex Serif-Text-FL_extracted.ufo/glyphs/A_brevedotbelow.glif

+21-27
Original file line numberDiff line numberDiff line change
@@ -11,36 +11,30 @@
1111
<dict>
1212
<key>public.objectLibs</key>
1313
<dict>
14-
<key>public.objectIdentifiers</key>
14+
<key>component0</key>
1515
<dict>
16-
<key>component0</key>
17-
<dict>
18-
<key>public.truetype.instructions</key>
19-
<dict>
20-
<key>round</key>
21-
<true/>
22-
<key>useMyMetrics</key>
23-
<true/>
24-
</dict>
25-
</dict>
26-
<key>component1</key>
27-
<dict>
28-
<key>public.truetype.instructions</key>
29-
<dict>
30-
<key>round</key>
31-
<true/>
32-
</dict>
33-
</dict>
34-
<key>component2</key>
35-
<dict>
36-
<key>public.truetype.instructions</key>
37-
<dict>
38-
<key>round</key>
39-
<true/>
40-
</dict>
41-
</dict>
16+
<key>public.truetype.roundOffsetToGrid</key>
17+
<true/>
18+
<key>public.truetype.useMyMetrics</key>
19+
<true/>
20+
</dict>
21+
<key>component1</key>
22+
<dict>
23+
<key>public.truetype.roundOffsetToGrid</key>
24+
<true/>
25+
<key>public.truetype.useMyMetrics</key>
26+
<false/>
27+
</dict>
28+
<key>component2</key>
29+
<dict>
30+
<key>public.truetype.roundOffsetToGrid</key>
31+
<true/>
32+
<key>public.truetype.useMyMetrics</key>
33+
<false/>
4234
</dict>
4335
</dict>
36+
<key>public.truetype.overlap</key>
37+
<false/>
4438
</dict>
4539
</lib>
4640
</glyph>

tests/data/ibm_plex/IBM Plex Serif-Text-FL_extracted.ufo/glyphs/A_brevegrave.glif

+14-19
Original file line numberDiff line numberDiff line change
@@ -10,28 +10,23 @@
1010
<dict>
1111
<key>public.objectLibs</key>
1212
<dict>
13-
<key>public.objectIdentifiers</key>
13+
<key>component0</key>
1414
<dict>
15-
<key>component0</key>
16-
<dict>
17-
<key>public.truetype.instructions</key>
18-
<dict>
19-
<key>round</key>
20-
<true/>
21-
<key>useMyMetrics</key>
22-
<true/>
23-
</dict>
24-
</dict>
25-
<key>component1</key>
26-
<dict>
27-
<key>public.truetype.instructions</key>
28-
<dict>
29-
<key>round</key>
30-
<true/>
31-
</dict>
32-
</dict>
15+
<key>public.truetype.roundOffsetToGrid</key>
16+
<true/>
17+
<key>public.truetype.useMyMetrics</key>
18+
<true/>
19+
</dict>
20+
<key>component1</key>
21+
<dict>
22+
<key>public.truetype.roundOffsetToGrid</key>
23+
<true/>
24+
<key>public.truetype.useMyMetrics</key>
25+
<false/>
3326
</dict>
3427
</dict>
28+
<key>public.truetype.overlap</key>
29+
<false/>
3530
</dict>
3631
</lib>
3732
</glyph>

tests/data/ibm_plex/IBM Plex Serif-Text-FL_extracted.ufo/glyphs/A_brevehook.glif

+14-19
Original file line numberDiff line numberDiff line change
@@ -10,28 +10,23 @@
1010
<dict>
1111
<key>public.objectLibs</key>
1212
<dict>
13-
<key>public.objectIdentifiers</key>
13+
<key>component0</key>
1414
<dict>
15-
<key>component0</key>
16-
<dict>
17-
<key>public.truetype.instructions</key>
18-
<dict>
19-
<key>round</key>
20-
<true/>
21-
<key>useMyMetrics</key>
22-
<true/>
23-
</dict>
24-
</dict>
25-
<key>component1</key>
26-
<dict>
27-
<key>public.truetype.instructions</key>
28-
<dict>
29-
<key>round</key>
30-
<true/>
31-
</dict>
32-
</dict>
15+
<key>public.truetype.roundOffsetToGrid</key>
16+
<true/>
17+
<key>public.truetype.useMyMetrics</key>
18+
<true/>
19+
</dict>
20+
<key>component1</key>
21+
<dict>
22+
<key>public.truetype.roundOffsetToGrid</key>
23+
<true/>
24+
<key>public.truetype.useMyMetrics</key>
25+
<false/>
3326
</dict>
3427
</dict>
28+
<key>public.truetype.overlap</key>
29+
<false/>
3530
</dict>
3631
</lib>
3732
</glyph>

0 commit comments

Comments
 (0)