[VARC] Implement XML read/write
This commit is contained in:
parent
cfc66a3a82
commit
735859f929
@ -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 = []
|
obj = self._itemClass()
|
||||||
content = [t for t in content if isinstance(t, tuple)]
|
obj.fromXML(None, attrs, content, font)
|
||||||
for eltName, eltAttrs, eltContent in content:
|
return obj
|
||||||
obj = self._itemClass()
|
|
||||||
obj.fromXML(eltName, eltAttrs, eltContent, font)
|
|
||||||
lst.append(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:
|
||||||
|
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user