Merge pull request #2593 from fonttools/fix-ufo2ft-regression

Fix ufo2ft regression by bringing back the env var for now
This commit is contained in:
Cosimo Lupo 2022-04-22 11:13:23 +01:00 committed by GitHub
commit badeb75d90
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 30 additions and 4 deletions

View File

@ -11,7 +11,11 @@ from fontTools.ttLib.tables.otBase import (
)
from fontTools.ttLib.tables import otBase
from fontTools.feaLib.ast import STATNameStatement
from fontTools.otlLib.optimize.gpos import compact_lookup
from fontTools.otlLib.optimize.gpos import (
compact_lookup,
GPOS_COMPACT_MODE_DEFAULT,
GPOS_COMPACT_MODE_ENV_KEY,
)
from fontTools.otlLib.error import OpenTypeLibError
from functools import reduce
import logging
@ -1410,7 +1414,13 @@ class PairPosBuilder(LookupBuilder):
# Compact the lookup
# This is a good moment to do it because the compaction should create
# smaller subtables, which may prevent overflows from happening.
level = self.font.cfg["fontTools.otlLib.optimize.gpos:COMPRESSION_LEVEL"]
# Keep reading the value from the ENV until ufo2ft switches to the config system
env_level = os.environ.get(GPOS_COMPACT_MODE_ENV_KEY, GPOS_COMPACT_MODE_DEFAULT)
if len(env_level) == 1 and env_level in "0123456789":
env_level = int(env_level)
else:
raise ValueError(f"Bad {GPOS_COMPACT_MODE_ENV_KEY}={env_level}")
level = self.font.cfg.get("fontTools.otlLib.optimize.gpos:COMPRESSION_LEVEL", env_level)
if level and level != 0:
log.info("Compacting GPOS...")
compact_lookup(self.font, level, lookup)

View File

@ -15,6 +15,12 @@ log = logging.getLogger(__name__)
COMPRESSION_LEVEL = OPTIONS[f"{__name__}:COMPRESSION_LEVEL"]
# Kept because ufo2ft depends on it, to be removed once ufo2ft uses the config instead
# https://github.com/fonttools/fonttools/issues/2592
GPOS_COMPACT_MODE_ENV_KEY = "FONTTOOLS_GPOS_COMPACT_MODE"
GPOS_COMPACT_MODE_DEFAULT = "0"
def compact(font: TTFont, level: int) -> TTFont:
# Ideal plan:
# 1. Find lookups of Lookup Type 2: Pair Adjustment Positioning Subtable

View File

@ -15,7 +15,11 @@ from fontTools.varLib.models import nonNone, allNone, allEqual, allEqualTo
from fontTools.varLib.varStore import VarStoreInstancer
from functools import reduce
from fontTools.otlLib.builder import buildSinglePos
from fontTools.otlLib.optimize.gpos import compact_pair_pos
from fontTools.otlLib.optimize.gpos import (
compact_pair_pos,
GPOS_COMPACT_MODE_DEFAULT,
GPOS_COMPACT_MODE_ENV_KEY,
)
log = logging.getLogger("fontTools.varLib.merger")
@ -846,7 +850,13 @@ def merge(merger, self, lst):
# Compact the merged subtables
# This is a good moment to do it because the compaction should create
# smaller subtables, which may prevent overflows from happening.
level = merger.font.cfg["fontTools.otlLib.optimize.gpos:COMPRESSION_LEVEL"]
# Keep reading the value from the ENV until ufo2ft switches to the config system
env_level = os.environ.get(GPOS_COMPACT_MODE_ENV_KEY, GPOS_COMPACT_MODE_DEFAULT)
if len(env_level) == 1 and env_level in "0123456789":
env_level = int(env_level)
else:
raise ValueError(f"Bad {GPOS_COMPACT_MODE_ENV_KEY}={env_level}")
level = merger.font.cfg.get("fontTools.otlLib.optimize.gpos:COMPRESSION_LEVEL", env_level)
if level and level != 0:
log.info("Compacting GPOS...")
self.SubTable = compact_pair_pos(merger.font, level, self.SubTable)