in python/moz/l10n/formats/xliff/serialize.py [0:0]
def set_pattern(el: etree._Element, pattern: Pattern) -> None:
parent = el
prev = None
def add_text(text: str) -> None:
if prev is None:
parent.text = (parent.text or "") + text
else:
prev.tail = (prev.tail or "") + text
for part in pattern:
if isinstance(part, str):
add_text(part)
elif isinstance(part, Markup):
name = clark_name(el.nsmap, part.name)
if part.kind == "close":
if part.options:
raise ValueError(
f"Options on closing markup are not supported: {part}"
)
if parent.tag != name or parent == el:
raise ValueError(f"Improper element nesting for {part} in {parent}")
node = parent
parent = cast(etree._Element, parent.getparent())
else:
attrib = {}
for key, value in part.options.items():
if isinstance(value, VariableRef):
raise ValueError(
f"Unsupported markup with variable option: {part}"
)
attrib[clark_name(el.nsmap, key)] = value
node = etree.SubElement(parent, name, attrib)
if part.kind == "standalone":
prev = node
else: # 'open'
parent = node
prev = None
else:
assert isinstance(part, Expression)
part_source = part.attributes.get("source", None)
if isinstance(part_source, str):
add_text(part_source)
else:
raise ValueError(f"Unsupported expression: {part}")