Use enum's for repacker state.
This commit is contained in:
parent
4acad94b93
commit
d92fd2665c
@ -1,6 +1,7 @@
|
|||||||
from fontTools.config import OPTIONS
|
from fontTools.config import OPTIONS
|
||||||
from fontTools.misc.textTools import Tag, bytesjoin
|
from fontTools.misc.textTools import Tag, bytesjoin
|
||||||
from .DefaultTable import DefaultTable
|
from .DefaultTable import DefaultTable
|
||||||
|
from enum import IntEnum
|
||||||
import sys
|
import sys
|
||||||
import array
|
import array
|
||||||
import struct
|
import struct
|
||||||
@ -36,6 +37,17 @@ class OTLOffsetOverflowError(Exception):
|
|||||||
def __str__(self):
|
def __str__(self):
|
||||||
return repr(self.value)
|
return repr(self.value)
|
||||||
|
|
||||||
|
class RepackerState(IntEnum):
|
||||||
|
# Pack only with fontTools, don't allow sharing between extensions.
|
||||||
|
PURE_FT = 1
|
||||||
|
|
||||||
|
# Attempt to pack with harfbuzz (allowing sharing between extensions)
|
||||||
|
# use fontTools to attempt overflow resolution.
|
||||||
|
HB_FT = 2
|
||||||
|
|
||||||
|
# Fallback if HB/FT packing gets stuck. Pack only with fontTools, don't allow sharing between
|
||||||
|
# extensions.
|
||||||
|
FT_FALLBACK = 3
|
||||||
|
|
||||||
class BaseTTXConverter(DefaultTable):
|
class BaseTTXConverter(DefaultTable):
|
||||||
|
|
||||||
@ -52,17 +64,6 @@ class BaseTTXConverter(DefaultTable):
|
|||||||
self.table = tableClass()
|
self.table = tableClass()
|
||||||
self.table.decompile(reader, font)
|
self.table.decompile(reader, font)
|
||||||
|
|
||||||
# Pack only with fontTools, don't allow sharing between extensions.
|
|
||||||
MODE_PURE_FT = 1
|
|
||||||
|
|
||||||
# Attempt to pack with harfbuzz (allowing sharing between extensions)
|
|
||||||
# use fontTools to attempt overflow resolution.
|
|
||||||
MODE_HB_FT = 2
|
|
||||||
|
|
||||||
# Fallback if HB/FT packing gets stuck. Pack only with fontTools, don't allow sharing between
|
|
||||||
# extensions.
|
|
||||||
MODE_FT_FALLBACK = 3
|
|
||||||
|
|
||||||
def compile(self, font):
|
def compile(self, font):
|
||||||
"""Compiles the table into binary. Called automatically on save."""
|
"""Compiles the table into binary. Called automatically on save."""
|
||||||
|
|
||||||
@ -110,9 +111,9 @@ class BaseTTXConverter(DefaultTable):
|
|||||||
if (use_hb_repack in (None, True)
|
if (use_hb_repack in (None, True)
|
||||||
and have_uharfbuzz
|
and have_uharfbuzz
|
||||||
and self.tableTag in ("GSUB", "GPOS")):
|
and self.tableTag in ("GSUB", "GPOS")):
|
||||||
mode = self.MODE_HB_FT
|
state = RepackerState.HB_FT
|
||||||
else:
|
else:
|
||||||
mode = self.MODE_PURE_FT
|
state = RepackerState.PURE_FT
|
||||||
|
|
||||||
hb_first_error_logged = False
|
hb_first_error_logged = False
|
||||||
lastOverflowRecord = None
|
lastOverflowRecord = None
|
||||||
@ -120,15 +121,15 @@ class BaseTTXConverter(DefaultTable):
|
|||||||
try:
|
try:
|
||||||
writer = OTTableWriter(tableTag=self.tableTag)
|
writer = OTTableWriter(tableTag=self.tableTag)
|
||||||
self.table.compile(writer, font)
|
self.table.compile(writer, font)
|
||||||
if mode == self.MODE_HB_FT:
|
if state == RepackerState.HB_FT:
|
||||||
return self.tryPackingHarfbuzz(writer, hb_first_error_logged)
|
return self.tryPackingHarfbuzz(writer, hb_first_error_logged)
|
||||||
elif mode == self.MODE_PURE_FT:
|
elif state == RepackerState.PURE_FT:
|
||||||
return self.tryPackingFontTools(writer)
|
return self.tryPackingFontTools(writer)
|
||||||
elif mode == self.MODE_FT_FALLBACK:
|
elif state == RepackerState.FT_FALLBACK:
|
||||||
self.tryPackingFontTools(writer)
|
self.tryPackingFontTools(writer)
|
||||||
log.info("Re-enabling sharing between extensions and switching back to "
|
log.debug("Re-enabling sharing between extensions and switching back to "
|
||||||
"harfbuzz+fontTools packing.")
|
"harfbuzz+fontTools packing.")
|
||||||
mode = self.MODE_HB_FT
|
state = RepackerState.HB_FT
|
||||||
|
|
||||||
except OTLOffsetOverflowError as e:
|
except OTLOffsetOverflowError as e:
|
||||||
hb_first_error_logged = True
|
hb_first_error_logged = True
|
||||||
@ -138,10 +139,10 @@ class BaseTTXConverter(DefaultTable):
|
|||||||
if ok:
|
if ok:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if mode is self.MODE_HB_FT:
|
if state is RepackerState.HB_FT:
|
||||||
log.info("Harfbuzz packing out of resolutions, disabling sharing between extensions and "
|
log.debug("Harfbuzz packing out of resolutions, disabling sharing between extensions and "
|
||||||
"switching to fontTools only packing.")
|
"switching to fontTools only packing.")
|
||||||
mode = self.MODE_FT_FALLBACK
|
state = RepackerState.FT_FALLBACK
|
||||||
else:
|
else:
|
||||||
raise
|
raise
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user