def mf2_serialize_message()

in python/moz/l10n/formats/mf2/serialize.py [0:0]


def mf2_serialize_message(message: Message) -> str:
    """
    Serialize a message using MessageFormat 2 syntax.

    Does not validate the message before serialization;
    for that, use `mf2_validate_message()`.
    """
    if (
        isinstance(message, PatternMessage)
        and not message.declarations
        and (
            not message.pattern
            or not isinstance(part0 := message.pattern[0], str)
            or not complex_start_re.match(part0)
        )
    ):
        # simple message
        return "".join(mf2_serialize_pattern(message.pattern))

    res = ""
    for name, expr in message.declarations.items():
        # TODO: Fix order by dependencies
        if isinstance(expr.arg, VariableRef) and expr.arg.name == name:
            res += ".input "
        else:
            res += f".local ${name} = "
        for s in _expression(expr):
            res += s
        res += "\n"

    if isinstance(message, PatternMessage):
        for s in _quoted_pattern(message.pattern):
            res += s
    else:
        assert isinstance(message, SelectMessage)
        res += ".match"
        for sel in message.selectors:
            res += f" ${sel.name}"
        for keys, pattern in message.variants.items():
            res += "\n"
            for key in keys:
                res += "* " if isinstance(key, CatchallKey) else f"{_literal(key)} "
            for s in _quoted_pattern(pattern):
                res += s
    return res