in python/moz/l10n/formats/android/serialize.py [0:0]
def entity_definition(entry: Entry[str] | Entry[Message]) -> str:
if len(entry.id) != 1 or not xml_name.fullmatch(entry.id[0]):
raise ValueError(f"Invalid entity identifier: {entry.id}")
name = entry.id[0]
if not xml_name.fullmatch(name):
raise ValueError(f"Invalid entity name: {name}")
# Characters not allowed in XML EntityValue text
escape = str.maketrans({"&": "&", "%": "%", '"': """})
if isinstance(entry.value, str):
value = entry.value.translate(escape)
elif isinstance(entry.value, PatternMessage) and not entry.value.declarations:
value = ""
for part in entry.value.pattern:
if isinstance(part, str):
value += part.translate(escape)
else:
ref = entity_name(part) if isinstance(part, Expression) else None
if ref and xml_name.fullmatch(ref):
value += f"&{ref};"
else:
raise ValueError(f"Unsupported entity part: {part}")
else:
raise ValueError(f"Unsupported entity value: {entry.value}")
return f'<!ENTITY {name} "{value}">'