[VARC] Implement XML read/write

This commit is contained in:
Behdad Esfahbod 2023-12-20 11:32:26 -07:00
parent cfc66a3a82
commit 735859f929
2 changed files with 42 additions and 18 deletions

View File

@ -1949,13 +1949,9 @@ class CFF2Index(BaseConverter):
def xmlRead(self, attrs, content, font): def xmlRead(self, attrs, content, font):
if self._itemClass is not None: if self._itemClass is not None:
lst = []
content = [t for t in content if isinstance(t, tuple)]
for eltName, eltAttrs, eltContent in content:
obj = self._itemClass() obj = self._itemClass()
obj.fromXML(eltName, eltAttrs, eltContent, font) obj.fromXML(None, attrs, content, font)
lst.append(obj) return obj
return lst
elif self._converter is not None: elif self._converter is not None:
return self._converter.xmlRead(attrs, content, font) return self._converter.xmlRead(attrs, content, font)
else: else:

View File

@ -253,23 +253,50 @@ class VarComponent:
if self.axisIndicesIndex is not None: if self.axisIndicesIndex is not None:
attrs.append(("axisIndicesIndex", self.axisIndicesIndex)) attrs.append(("axisIndicesIndex", self.axisIndicesIndex))
attrs.append(("axisValues", self.axisValues))
# XXX TODO if self.axisValuesVarIndex != NO_VARIATION_INDEX:
attrs.append(("axisValuesVarIndex", self.axisValuesVarIndex))
if self.transformVarIndex != NO_VARIATION_INDEX:
attrs.append(("transformVarIndex", self.transformVarIndex))
for attr_name, mapping in VAR_TRANSFORM_MAPPING.items():
v = getattr(self.transform, attr_name)
if v != mapping.defaultValue:
attrs.append((attr_name, fl2str(v, mapping.fractionalBits)))
writer.simpletag("VarComponent", attrs) writer.simpletag("VarComponent", attrs)
writer.newline() writer.newline()
def fromXML(self, name, attrs, content, ttFont): def fromXML(self, name, attrs, content, ttFont):
self.flags = safeEval(attrs["flags"]) & VarComponentFlags.RETAIN_FLAGS self.flags = safeEval(attrs["flags"])
self.glyphName = attrs["glyphName"] self.glyphName = attrs["glyphName"]
# XXX TODO assert ("axisIndicesIndex" in attrs) == ("axisValues" in attrs)
assert ("AxisIndicesIndex" in attrs) == ("AxisValuesIndex" in attrs) if "axisIndicesIndex" in attrs:
if "AxisIndicesIndex" in attrs: self.axisIndicesIndex = safeEval(attrs["axisIndicesIndex"])
self.AxisIndicesIndex = safeEval(attrs["AxisIndicesIndex"]) self.axisValues = safeEval(attrs["axisValues"])
self.AxisValuesIndex = safeEval(attrs["AxisValuesIndex"]) else:
if "TransformIndex" in attrs: self.axisIndicesIndex = None
self.TransformIndex = safeEval(attrs["TransformIndex"]) self.axisValues = ()
if "axisValuesVarIndex" in attrs:
self.axisValuesVarIndex = safeEval(attrs["axisValuesVarIndex"])
else:
self.axisValuesVarIndex = NO_VARIATION_INDEX
if "transformVarIndex" in attrs:
self.transformVarIndex = safeEval(attrs["transformVarIndex"])
else:
self.transformVarIndex = NO_VARIATION_INDEX
self.transform = DecomposedTransform()
for attr_name, mapping in VAR_TRANSFORM_MAPPING.items():
if attr_name in attrs:
setattr(
self.transform,
attr_name,
safeEval(attrs[attr_name]),
)
def applyTransformDeltas(self, deltas): def applyTransformDeltas(self, deltas):
i = 0 i = 0
@ -305,7 +332,6 @@ class VarComponent:
class VarCompositeGlyph: class VarCompositeGlyph:
def __init__(self, components=None): def __init__(self, components=None):
self.components = components if components is not None else [] self.components = components if components is not None else []
@ -331,7 +357,9 @@ class VarCompositeGlyph:
xmlWriter.newline() xmlWriter.newline()
def fromXML(self, name, attrs, content, font): def fromXML(self, name, attrs, content, font):
if name == "VarComponent": content = [c for c in content if isinstance(c, tuple)]
for name, attrs, content in content:
assert name == "VarComponent"
component = VarComponent() component = VarComponent()
component.fromXML(name, attrs, content, font) component.fromXML(name, attrs, content, font)
self.components.append(component) self.components.append(component)