[Turn on line numbering]arg name, @def; var article, match, flag, type, tmps, ignore; // used to parse $has_name names and name templates [name, flag] = (> $parse_lib.opt(name, "u?nique", "p?roper", "n?ormal", "i?gnore") <); name = name.join(); // Parse +prop +norm +uniq and +ignore flags if (flag) { def = [@def, ["p?roper", "p", 1, ""]][1]; flag = (| flag.last() |) || def; if (flag[1] == "i?gnore") { article = 'prop; ignore = 1; } else { switch (flag[1]) { case "n?ormal": type = 'normal; case "u?nique": type = 'uniq; case "p?roper": type = 'prop; } article = type; } } else { article = 'prop; } [name, @tmps] = name.split(" *, *"); // Check to see if the name already has articles in it. if (!ignore) { if ((match = name.regexp("^the +(.*)$"))) { article = 'uniq; name = match[1]; } else if ((match = name.regexp("^(a|an) +(.*)$"))) { article = 'normal; name = match[2]; } // Complain if the flag does not agree with the given article if (type && article != type) throw(~article, "Conflicting name types " + type + " and " + article); } return [[name, article], tmps];
// Created 27-Mar-1995 as a part of ColdCore, see: @help Credit