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.ttLib.tables import otBase
from fontTools.feaLib.ast import STATNameStatement 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 fontTools.otlLib.error import OpenTypeLibError
from functools import reduce from functools import reduce
import logging import logging
@ -1410,7 +1414,13 @@ class PairPosBuilder(LookupBuilder):
# Compact the lookup # Compact the lookup
# This is a good moment to do it because the compaction should create # This is a good moment to do it because the compaction should create
# smaller subtables, which may prevent overflows from happening. # 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: if level and level != 0:
log.info("Compacting GPOS...") log.info("Compacting GPOS...")
compact_lookup(self.font, level, lookup) compact_lookup(self.font, level, lookup)

View File

@ -15,6 +15,12 @@ log = logging.getLogger(__name__)
COMPRESSION_LEVEL = OPTIONS[f"{__name__}:COMPRESSION_LEVEL"] 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: def compact(font: TTFont, level: int) -> TTFont:
# Ideal plan: # Ideal plan:
# 1. Find lookups of Lookup Type 2: Pair Adjustment Positioning Subtable # 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 fontTools.varLib.varStore import VarStoreInstancer
from functools import reduce from functools import reduce
from fontTools.otlLib.builder import buildSinglePos 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") log = logging.getLogger("fontTools.varLib.merger")
@ -846,7 +850,13 @@ def merge(merger, self, lst):
# Compact the merged subtables # Compact the merged subtables
# This is a good moment to do it because the compaction should create # This is a good moment to do it because the compaction should create
# smaller subtables, which may prevent overflows from happening. # 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: if level and level != 0:
log.info("Compacting GPOS...") log.info("Compacting GPOS...")
self.SubTable = compact_pair_pos(merger.font, level, self.SubTable) self.SubTable = compact_pair_pos(merger.font, level, self.SubTable)