[Turn on line numbering]arg name, attr, value; var branch, p, varkeys, sub, m, attrs; if (!value) value = ["general"]; attrs = defined_msgs[name]; for branch in (value) { sub = explode(branch, "."); if (listlen(sub) > 2) throw(~msgbad, "Too many message branches '" + branch + "'."); for p in (sub) { if (p[1] == "(" || p == "*") varkeys++; else if (!$code_lib.valid_message_id(p)) throw(~msgbad, "Branch '" + p + "' contains invalid characters."); } } if (varkeys) { varkeys = #[]; for branch in (value) { if ("(" in branch || "*" in branch) { if ((m = regexp(branch, "\.\(([^)]+)\)$"))) { sub = strsed(branch, "\.\(([^)]+)\)$", ""); value = replace(value, branch in value, sub + ".*"); varkeys = dict_add(varkeys, sub, m[1]); } else if ((branch = strsed(branch, "\.\*$", ""))) { varkeys = dict_add(varkeys, branch, "$" + branch); } else { throw(~msgbad, "Variable branch part must be last."); } } } attrs = dict_add(attrs, 'varkeys, varkeys); } else if (dict_contains(attrs, 'varkeys)) { attrs = dict_del(attrs, 'varkeys); } return [attrs, value];
// Created 27-Mar-1995 as a part of ColdCore, see: @help Credit