Method code for $foundation.parse_msg()

[Turn off line numbering]
  1: arg name, branch;
  2: var parser, name, def, b, parts, x, yes, m, mb, full, varkeys;
  3: 
  4: if (!(def = (| .msg_definer(name) |))) {
  5:     name = (> ._parse_msg_part(name, .all_msgs().keys()) <);
  6:     def = (> .msg_definer(name) <);
  7: }
  8: if (!branch)
  9:     return [def, name, "general"];
 10: if (listlen(branch) > 2)
 11:     throw(~badmsg, "Too many message branches");
 12: m = [];
 13: varkeys = (| def.get_msg_attr(name, 'varkeys) |) || #[];
 14: for b in ((> def.get_msg_attr(name, 'branches) <)) {
 15:     parts = explode(b, ".", "b");
 16:     full = [];
 17:     if (dict_contains(varkeys, parts[1])) {
 18:         if ((mb = (| ._parse_msg_part(branch[1], [parts[1]]) |)))
 19:             full += [mb] + sublist(branch, 2);
 20:     } else if ((mb = (| ._parse_msg_part(branch[1], [parts[1]]) |))) {
 21:         full += [mb];
 22:     }
 23:     if (full)
 24:         m += [full];
 25: }
 26: branch = branch.join(".");
 27: if (listlen(m) == 1)
 28:     full = m[1];
 29: else if (listlen(m) > 1)
 30:     throw(~ambig, "Multiple branches match the name '" + branch + "'", m);
 31: else
 32:     throw(~nomatch, "No branches of " + name + " match '" + branch + "'");
 33: if ((parser = (| def.get_msg_attr(name, 'parser) |)))
 34:     return .(parser)(def, name, @full);
 35: return [def, name, join(full, ".")];

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

the Cold Dark