Method code for $foundation._parse_msg_branches()

[Turn off line numbering]
  1: arg name, attr, value;
  2: var branch, p, varkeys, sub, m, attrs;
  3: 
  4: if (!value)
  5:     value = ["general"];
  6: attrs = defined_msgs[name];
  7: for branch in (value) {
  8:     sub = explode(branch, ".");
  9:     if (listlen(sub) > 2)
 10:         throw(~msgbad, "Too many message branches '" + branch + "'.");
 11:     for p in (sub) {
 12:         if (p[1] == "(" || p == "*")
 13:             varkeys++;
 14:         else if (!$code_lib.valid_message_id(p))
 15:             throw(~msgbad, "Branch '" + p + "' contains invalid characters.");
 16:     }
 17: }
 18: if (varkeys) {
 19:     varkeys = #[];
 20:     for branch in (value) {
 21:         if ("(" in branch || "*" in branch) {
 22:             if ((m = regexp(branch, "\.\(([^)]+)\)$"))) {
 23:                 sub = strsed(branch, "\.\(([^)]+)\)$", "");
 24:                 value = replace(value, branch in value, sub + ".*");
 25:                 varkeys = dict_add(varkeys, sub, m[1]);
 26:             } else if ((branch = strsed(branch, "\.\*$", ""))) {
 27:                 varkeys = dict_add(varkeys, branch, "$" + branch);
 28:             } else {
 29:                 throw(~msgbad, "Variable branch part must be last.");
 30:             }
 31:         }
 32:     }
 33:     attrs = dict_add(attrs, 'varkeys, varkeys);
 34: } else if (dict_contains(attrs, 'varkeys)) {
 35:     attrs = dict_del(attrs, 'varkeys);
 36: }
 37: return [attrs, value];

// Created 27-Mar-1995 as a part of ColdCore, see: @help Credit

Tlon