Skip to content

Commit

Permalink
Merge pull request #36 from jenskutilek/ttf-instructions-composite-flags
Browse files Browse the repository at this point in the history
TTF composite flags
  • Loading branch information
benkiel authored Apr 19, 2021
2 parents 7c3b85a + 42a7a1f commit f4ea60e
Show file tree
Hide file tree
Showing 417 changed files with 5,711 additions and 7,678 deletions.
42 changes: 20 additions & 22 deletions Lib/extractor/formats/opentype.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,13 @@
from extractor.stream import InstructionStream
from extractor.tools import RelaxedInfo, copyAttr


TRUETYPE_INSTRUCTIONS_KEY = "public.truetype.instructions"
TRUETYPE_ROUND_KEY = "public.truetype.roundOffsetToGrid"
TRUETYPE_METRICS_KEY = "public.truetype.useMyMetrics"
TRUETYPE_OVERLAP_KEY = "public.truetype.overlap"
OBJECT_LIBS_KEY = "public.objectLibs"

# ----------------
# Public Functions
# ----------------
Expand Down Expand Up @@ -93,7 +100,7 @@ def extractInstructions(source, destination):
if "glyf" not in source:
return

lib = destination.lib["public.truetype.instructions"] = {
lib = destination.lib[TRUETYPE_INSTRUCTIONS_KEY] = {
"formatVersion": 1,
"maxFunctionDefs": 0,
"maxInstructionDefs": 0,
Expand Down Expand Up @@ -149,7 +156,7 @@ def extractGlyphPrograms(source, destination):

hash_pen = HashPointPen(dest_glyph.width, destination)
dest_glyph.drawPoints(hash_pen)
lib = dest_glyph.lib["public.truetype.instructions"] = {
lib = dest_glyph.lib[TRUETYPE_INSTRUCTIONS_KEY] = {
"formatVersion": "1",
"id": hash_pen.hash,
}
Expand Down Expand Up @@ -192,33 +199,24 @@ def _byteCodeToTtxAssembly(program):

def _extractCompositeFlags(glyph, dest_glyph):
# Find the lib key or add it
if (
"public.objectLibs" not in dest_glyph.lib
or "public.objectIdentifiers"
not in dest_glyph.lib["public.objectLibs"]
):
dest_glyph.lib["public.objectLibs"] = {
"public.objectIdentifiers": {}
}
object_ids = dest_glyph.lib["public.objectLibs"][
"public.objectIdentifiers"
]
if OBJECT_LIBS_KEY not in dest_glyph.lib:
dest_glyph.lib[OBJECT_LIBS_KEY] = {}
object_libs = dest_glyph.lib[OBJECT_LIBS_KEY]

for ci, c in enumerate(glyph.components):
flags = {}
if c.flags & ROUND_XY_TO_GRID:
flags["round"] = True
if c.flags & USE_MY_METRICS:
flags["useMyMetrics"] = True
if c.flags & OVERLAP_COMPOUND:
flags["overlap"] = True
flags[TRUETYPE_ROUND_KEY] = bool(c.flags & ROUND_XY_TO_GRID)
flags[TRUETYPE_METRICS_KEY] = bool(c.flags & USE_MY_METRICS)

if flags:
identifier = f"component{ci}"
dest_glyph.components[ci].identifier = identifier
object_ids[identifier] = {
"public.truetype.instructions": flags
}
object_libs[identifier] = flags

# Overlap is stored directly in the glyph lib
dest_glyph.lib["public.truetype.overlap"] = bool(
c.flags & OVERLAP_COMPOUND
)


# ----
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,28 +10,23 @@
<dict>
<key>public.objectLibs</key>
<dict>
<key>public.objectIdentifiers</key>
<key>component0</key>
<dict>
<key>component0</key>
<dict>
<key>public.truetype.instructions</key>
<dict>
<key>round</key>
<true/>
<key>useMyMetrics</key>
<true/>
</dict>
</dict>
<key>component1</key>
<dict>
<key>public.truetype.instructions</key>
<dict>
<key>round</key>
<true/>
</dict>
</dict>
<key>public.truetype.roundOffsetToGrid</key>
<true/>
<key>public.truetype.useMyMetrics</key>
<true/>
</dict>
<key>component1</key>
<dict>
<key>public.truetype.roundOffsetToGrid</key>
<true/>
<key>public.truetype.useMyMetrics</key>
<false/>
</dict>
</dict>
<key>public.truetype.overlap</key>
<false/>
</dict>
</lib>
</glyph>
Original file line number Diff line number Diff line change
Expand Up @@ -10,28 +10,23 @@
<dict>
<key>public.objectLibs</key>
<dict>
<key>public.objectIdentifiers</key>
<key>component0</key>
<dict>
<key>component0</key>
<dict>
<key>public.truetype.instructions</key>
<dict>
<key>round</key>
<true/>
<key>useMyMetrics</key>
<true/>
</dict>
</dict>
<key>component1</key>
<dict>
<key>public.truetype.instructions</key>
<dict>
<key>round</key>
<true/>
</dict>
</dict>
<key>public.truetype.roundOffsetToGrid</key>
<true/>
<key>public.truetype.useMyMetrics</key>
<true/>
</dict>
<key>component1</key>
<dict>
<key>public.truetype.roundOffsetToGrid</key>
<true/>
<key>public.truetype.useMyMetrics</key>
<false/>
</dict>
</dict>
<key>public.truetype.overlap</key>
<false/>
</dict>
</lib>
</glyph>
Original file line number Diff line number Diff line change
Expand Up @@ -10,28 +10,23 @@
<dict>
<key>public.objectLibs</key>
<dict>
<key>public.objectIdentifiers</key>
<key>component0</key>
<dict>
<key>component0</key>
<dict>
<key>public.truetype.instructions</key>
<dict>
<key>round</key>
<true/>
<key>useMyMetrics</key>
<true/>
</dict>
</dict>
<key>component1</key>
<dict>
<key>public.truetype.instructions</key>
<dict>
<key>round</key>
<true/>
</dict>
</dict>
<key>public.truetype.roundOffsetToGrid</key>
<true/>
<key>public.truetype.useMyMetrics</key>
<true/>
</dict>
<key>component1</key>
<dict>
<key>public.truetype.roundOffsetToGrid</key>
<true/>
<key>public.truetype.useMyMetrics</key>
<false/>
</dict>
</dict>
<key>public.truetype.overlap</key>
<false/>
</dict>
</lib>
</glyph>
Original file line number Diff line number Diff line change
Expand Up @@ -10,28 +10,23 @@
<dict>
<key>public.objectLibs</key>
<dict>
<key>public.objectIdentifiers</key>
<key>component0</key>
<dict>
<key>component0</key>
<dict>
<key>public.truetype.instructions</key>
<dict>
<key>round</key>
<true/>
<key>useMyMetrics</key>
<true/>
</dict>
</dict>
<key>component1</key>
<dict>
<key>public.truetype.instructions</key>
<dict>
<key>round</key>
<true/>
</dict>
</dict>
<key>public.truetype.roundOffsetToGrid</key>
<true/>
<key>public.truetype.useMyMetrics</key>
<true/>
</dict>
<key>component1</key>
<dict>
<key>public.truetype.roundOffsetToGrid</key>
<true/>
<key>public.truetype.useMyMetrics</key>
<false/>
</dict>
</dict>
<key>public.truetype.overlap</key>
<false/>
</dict>
</lib>
</glyph>
Original file line number Diff line number Diff line change
Expand Up @@ -11,36 +11,30 @@
<dict>
<key>public.objectLibs</key>
<dict>
<key>public.objectIdentifiers</key>
<key>component0</key>
<dict>
<key>component0</key>
<dict>
<key>public.truetype.instructions</key>
<dict>
<key>round</key>
<true/>
<key>useMyMetrics</key>
<true/>
</dict>
</dict>
<key>component1</key>
<dict>
<key>public.truetype.instructions</key>
<dict>
<key>round</key>
<true/>
</dict>
</dict>
<key>component2</key>
<dict>
<key>public.truetype.instructions</key>
<dict>
<key>round</key>
<true/>
</dict>
</dict>
<key>public.truetype.roundOffsetToGrid</key>
<true/>
<key>public.truetype.useMyMetrics</key>
<true/>
</dict>
<key>component1</key>
<dict>
<key>public.truetype.roundOffsetToGrid</key>
<true/>
<key>public.truetype.useMyMetrics</key>
<false/>
</dict>
<key>component2</key>
<dict>
<key>public.truetype.roundOffsetToGrid</key>
<true/>
<key>public.truetype.useMyMetrics</key>
<false/>
</dict>
</dict>
<key>public.truetype.overlap</key>
<false/>
</dict>
</lib>
</glyph>
Original file line number Diff line number Diff line change
Expand Up @@ -10,28 +10,23 @@
<dict>
<key>public.objectLibs</key>
<dict>
<key>public.objectIdentifiers</key>
<key>component0</key>
<dict>
<key>component0</key>
<dict>
<key>public.truetype.instructions</key>
<dict>
<key>round</key>
<true/>
<key>useMyMetrics</key>
<true/>
</dict>
</dict>
<key>component1</key>
<dict>
<key>public.truetype.instructions</key>
<dict>
<key>round</key>
<true/>
</dict>
</dict>
<key>public.truetype.roundOffsetToGrid</key>
<true/>
<key>public.truetype.useMyMetrics</key>
<true/>
</dict>
<key>component1</key>
<dict>
<key>public.truetype.roundOffsetToGrid</key>
<true/>
<key>public.truetype.useMyMetrics</key>
<false/>
</dict>
</dict>
<key>public.truetype.overlap</key>
<false/>
</dict>
</lib>
</glyph>
Original file line number Diff line number Diff line change
Expand Up @@ -10,28 +10,23 @@
<dict>
<key>public.objectLibs</key>
<dict>
<key>public.objectIdentifiers</key>
<key>component0</key>
<dict>
<key>component0</key>
<dict>
<key>public.truetype.instructions</key>
<dict>
<key>round</key>
<true/>
<key>useMyMetrics</key>
<true/>
</dict>
</dict>
<key>component1</key>
<dict>
<key>public.truetype.instructions</key>
<dict>
<key>round</key>
<true/>
</dict>
</dict>
<key>public.truetype.roundOffsetToGrid</key>
<true/>
<key>public.truetype.useMyMetrics</key>
<true/>
</dict>
<key>component1</key>
<dict>
<key>public.truetype.roundOffsetToGrid</key>
<true/>
<key>public.truetype.useMyMetrics</key>
<false/>
</dict>
</dict>
<key>public.truetype.overlap</key>
<false/>
</dict>
</lib>
</glyph>
Loading

0 comments on commit f4ea60e

Please sign in to comment.