Method code for $foundation.parse_msg()

[Turn on line numbering]
arg name, branch;
var parser, name, def, b, parts, x, yes, m, mb, full, varkeys;

if (!(def = (| .msg_definer(name) |))) {
    name = (> ._parse_msg_part(name, .all_msgs().keys()) <);
    def = (> .msg_definer(name) <);
}
if (!branch)
    return [def, name, "general"];
if (listlen(branch) > 2)
    throw(~badmsg, "Too many message branches");
m = [];
varkeys = (| def.get_msg_attr(name, 'varkeys) |) || #[];
for b in ((> def.get_msg_attr(name, 'branches) <)) {
    parts = explode(b, ".", "b");
    full = [];
    if (dict_contains(varkeys, parts[1])) {
        if ((mb = (| ._parse_msg_part(branch[1], [parts[1]]) |)))
            full += [mb] + sublist(branch, 2);
    } else if ((mb = (| ._parse_msg_part(branch[1], [parts[1]]) |))) {
        full += [mb];
    }
    if (full)
        m += [full];
}
branch = branch.join(".");
if (listlen(m) == 1)
    full = m[1];
else if (listlen(m) > 1)
    throw(~ambig, "Multiple branches match the name '" + branch + "'", m);
else
    throw(~nomatch, "No branches of " + name + " match '" + branch + "'");
if ((parser = (| def.get_msg_attr(name, 'parser) |)))
    return .(parser)(def, name, @full);
return [def, name, join(full, ".")];

["// Created 26-Mar-1995 as a part of ColdCore, see: @help Credit"]

the Cold Dark