[Turn on line numbering]arg line, @defaults; var out, newlist, part, v, opt, t, keys, key, x; // submit: [["template", value], [...]]; // => if value is 1, it will take the next part of the string // receive: [["template", "flag", bool, value]], [...]]; line = line.explode_quoted(); out = []; newlist = []; [(defaults ?= [])] = defaults; while (line) { [x, @line] = line; if (x && x[1] in ["-", "+"]) { opt = 0; v = ""; part = x.subrange(2); if ("=" in part) { part = part.explode("=", 1); [part, v] = part; } for t in (defaults) { if (part.match_template(t[1])) { opt = [t[1], part, x[1] == "+"]; if ((| t[2] |) && !v && line) { [v, @line] = line; if (v == "=") [(v ?= ""), @line] = line; } opt += [v]; } } if (!opt) opt = [0, part, x[1] == "+", ""]; out += [opt]; } else { newlist += [x]; } } return [newlist, out];
// Created 27-Mar-1995 as a part of ColdCore, see: @help Credit