[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