COLR: set {BaseGlyph,Layer}RecordArray to None when no colorGlyphsV0 in populateCOLRv0
Same when LayerV1List is empty. All these fields are optional in v1
This commit is contained in:
parent
2981e5f6ca
commit
f2df149db3
@ -142,7 +142,7 @@ def populateCOLRv0(
|
|||||||
Args:
|
Args:
|
||||||
table: a raw otTables.COLR() object (not ttLib's table_C_O_L_R_).
|
table: a raw otTables.COLR() object (not ttLib's table_C_O_L_R_).
|
||||||
colorGlyphsV0: map of base glyph names to lists of (layer glyph names,
|
colorGlyphsV0: map of base glyph names to lists of (layer glyph names,
|
||||||
color palette index) tuples.
|
color palette index) tuples. Can be empty.
|
||||||
glyphMap: a map from glyph names to glyph indices, as returned from
|
glyphMap: a map from glyph names to glyph indices, as returned from
|
||||||
TTFont.getReverseGlyphMap(), to optionally sort base records by GID.
|
TTFont.getReverseGlyphMap(), to optionally sort base records by GID.
|
||||||
"""
|
"""
|
||||||
@ -167,11 +167,14 @@ def populateCOLRv0(
|
|||||||
layerRec.PaletteIndex = paletteIndex
|
layerRec.PaletteIndex = paletteIndex
|
||||||
layerRecords.append(layerRec)
|
layerRecords.append(layerRec)
|
||||||
|
|
||||||
|
table.BaseGlyphRecordArray = table.LayerRecordArray = None
|
||||||
|
if baseGlyphRecords:
|
||||||
|
table.BaseGlyphRecordArray = ot.BaseGlyphRecordArray()
|
||||||
|
table.BaseGlyphRecordArray.BaseGlyphRecord = baseGlyphRecords
|
||||||
|
if layerRecords:
|
||||||
|
table.LayerRecordArray = ot.LayerRecordArray()
|
||||||
|
table.LayerRecordArray.LayerRecord = layerRecords
|
||||||
table.BaseGlyphRecordCount = len(baseGlyphRecords)
|
table.BaseGlyphRecordCount = len(baseGlyphRecords)
|
||||||
table.BaseGlyphRecordArray = ot.BaseGlyphRecordArray()
|
|
||||||
table.BaseGlyphRecordArray.BaseGlyphRecord = baseGlyphRecords
|
|
||||||
table.LayerRecordArray = ot.LayerRecordArray()
|
|
||||||
table.LayerRecordArray.LayerRecord = layerRecords
|
|
||||||
table.LayerRecordCount = len(layerRecords)
|
table.LayerRecordCount = len(layerRecords)
|
||||||
|
|
||||||
|
|
||||||
@ -209,18 +212,13 @@ def buildCOLR(
|
|||||||
else:
|
else:
|
||||||
# unless explicitly requested for v1 or have variations, in which case
|
# unless explicitly requested for v1 or have variations, in which case
|
||||||
# we encode all color glyph as v1
|
# we encode all color glyph as v1
|
||||||
colorGlyphsV0, colorGlyphsV1 = None, colorGlyphs
|
colorGlyphsV0, colorGlyphsV1 = {}, colorGlyphs
|
||||||
|
|
||||||
colr = ot.COLR()
|
colr = ot.COLR()
|
||||||
|
|
||||||
if colorGlyphsV0:
|
populateCOLRv0(colr, colorGlyphsV0, glyphMap)
|
||||||
populateCOLRv0(colr, colorGlyphsV0, glyphMap)
|
|
||||||
else:
|
|
||||||
colr.BaseGlyphRecordCount = colr.LayerRecordCount = 0
|
|
||||||
colr.BaseGlyphRecordArray = colr.LayerRecordArray = None
|
|
||||||
|
|
||||||
if colorGlyphsV1:
|
colr.LayerV1List, colr.BaseGlyphV1List = buildColrV1(colorGlyphsV1, glyphMap)
|
||||||
colr.LayerV1List, colr.BaseGlyphV1List = buildColrV1(colorGlyphsV1, glyphMap)
|
|
||||||
|
|
||||||
if version is None:
|
if version is None:
|
||||||
version = 1 if (varStore or colorGlyphsV1) else 0
|
version = 1 if (varStore or colorGlyphsV1) else 0
|
||||||
@ -538,7 +536,9 @@ class LayerV1ListBuilder:
|
|||||||
def buildPaint(self, paint: _PaintInput) -> ot.Paint:
|
def buildPaint(self, paint: _PaintInput) -> ot.Paint:
|
||||||
return self.tableBuilder.build(ot.Paint, paint)
|
return self.tableBuilder.build(ot.Paint, paint)
|
||||||
|
|
||||||
def build(self) -> ot.LayerV1List:
|
def build(self) -> Optional[ot.LayerV1List]:
|
||||||
|
if not self.layers:
|
||||||
|
return None
|
||||||
layers = ot.LayerV1List()
|
layers = ot.LayerV1List()
|
||||||
layers.LayerCount = len(self.layers)
|
layers.LayerCount = len(self.layers)
|
||||||
layers.Paint = self.layers
|
layers.Paint = self.layers
|
||||||
@ -564,7 +564,7 @@ def _format_glyph_errors(errors: Mapping[str, Exception]) -> str:
|
|||||||
def buildColrV1(
|
def buildColrV1(
|
||||||
colorGlyphs: _ColorGlyphsDict,
|
colorGlyphs: _ColorGlyphsDict,
|
||||||
glyphMap: Optional[Mapping[str, int]] = None,
|
glyphMap: Optional[Mapping[str, int]] = None,
|
||||||
) -> Tuple[ot.LayerV1List, ot.BaseGlyphV1List]:
|
) -> Tuple[Optional[ot.LayerV1List], ot.BaseGlyphV1List]:
|
||||||
if glyphMap is not None:
|
if glyphMap is not None:
|
||||||
colorGlyphItems = sorted(
|
colorGlyphItems = sorted(
|
||||||
colorGlyphs.items(), key=lambda item: glyphMap[item[0]]
|
colorGlyphs.items(), key=lambda item: glyphMap[item[0]]
|
||||||
|
@ -1144,8 +1144,7 @@ def test_build_layerv1list_empty():
|
|||||||
# 2 v1 glyphs, none in LayerV1List
|
# 2 v1 glyphs, none in LayerV1List
|
||||||
assert colr.table.BaseGlyphV1List.BaseGlyphCount == 2
|
assert colr.table.BaseGlyphV1List.BaseGlyphCount == 2
|
||||||
assert len(colr.table.BaseGlyphV1List.BaseGlyphV1Record) == 2
|
assert len(colr.table.BaseGlyphV1List.BaseGlyphV1Record) == 2
|
||||||
assert colr.table.LayerV1List.LayerCount == 0
|
assert colr.table.LayerV1List is None
|
||||||
assert len(colr.table.LayerV1List.Paint) == 0
|
|
||||||
|
|
||||||
|
|
||||||
def _paint_names(paints) -> List[str]:
|
def _paint_names(paints) -> List[str]:
|
||||||
@ -1528,7 +1527,7 @@ class BuildCOLRTest(object):
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
assert len(colr.table.LayerV1List.Paint) == 0, "PaintColrLayers should be gone"
|
assert colr.table.LayerV1List is None, "PaintColrLayers should be gone"
|
||||||
assert colr.table.BaseGlyphV1List.BaseGlyphCount == 1
|
assert colr.table.BaseGlyphV1List.BaseGlyphCount == 1
|
||||||
paint = colr.table.BaseGlyphV1List.BaseGlyphV1Record[0].Paint
|
paint = colr.table.BaseGlyphV1List.BaseGlyphV1Record[0].Paint
|
||||||
assert paint.Format == ot.PaintFormat.PaintGlyph
|
assert paint.Format == ot.PaintFormat.PaintGlyph
|
||||||
|
Loading…
x
Reference in New Issue
Block a user