1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
"""Routines for converting Chaining rules to and from XML."""
def _toXML(self, root):
self._makeglyphslots(root, "input", self.input)
return root
@classmethod
def fromXML(klass, el):
"""Creates a rule from a lxml Element object."""
from fontFeatures import Routine, RoutineReference
rule = klass(
klass._slotArray(klass, el.find("input")),
precontext=klass._slotArray(klass, el.find("precontext")),
postcontext=klass._slotArray(klass, el.find("postcontext")),
address=el.get("address"),
languages=el.get("languages"),
flags=int(el.get("flags") or 0),
)
lookupsxml = el.find("lookups")
rule.lookups = []
for slot in lookupsxml:
routines = []
for lu in slot:
if lu.tag == "routinereference":
routines.append(RoutineReference.fromXML(lu))
elif lu.tag == "routine":
routines.append(Routine.fromXML(lu))
rule.lookups.append(routines)
return rule
|