new object $html_format: $formatter;
var $root created_on = 837902808;
var $root flags = ['variables, 'methods, 'code, 'core];
var $root inited = 1;
var $root managed = [$html_format];
var $root manager = $html_format;
public method ._eval_ctext() {
arg data, vars, @unexpand;
var out, uflags, token;
out = "";
if (type(data) != 'list)
data = [data];
for token in (data) {
refresh();
switch (type(token)) {
case 'frob:
switch (class(token)) {
case $generator:
[token, vars] = ((| vars['evaluator] |) || $bs_eval).eval_generator(token, vars);
if (type(token) == 'string) {
out += token;
} else {
[token, vars] = ._eval_ctext(token, vars, 1);
out += token;
}
case $format:
[token, vars] = .eval_formatter(token, vars);
out += token;
}
case 'string:
out += unexpand ? token : (token.to_html());
case 'list:
[token, vars] = ._eval_ctext(token, vars, @unexpand);
out += token;
default:
out += token;
}
}
return [out, vars];
};
public method .do_action() {
arg vars, flags, args;
[args, vars] = ._eval_ctext(args[1], vars);
(| (vars['receiver]).register_action(args, vars['this], flags.getkey("token")) |);
return [("\\" + args) + "\\", vars];
};
public method .do_anchor() {
arg vars, flags, args;
[args, vars] = ._eval_ctext([args[1]], vars);
return [[("/" + (args[1])) + "/"], vars];
};
public method .do_b() {
arg vars, flags, args;
var out, a;
[args, vars] = ._eval_ctext(args, vars);
return [("<b>" + args) + "</b>", vars];
};
public method .do_br() {
arg vars, flags, args;
return ["\n<br>", vars];
};
public method .do_columnize() {
arg vars, flags, args;
var cols, l, out, i;
cols = (| flags.getkey("cols") |) || "*";
[args, vars] = ._eval_ctext(args, vars);
out = "\n<table border=0>\n";
while (args) {
if ((args.length()) > cols)
[l, args] = [args.subrange(1, cols), args.subrange(cols + 1)];
else
[l, args] = [args, []];
out += ("<tr><td>" + (l.join("</td><td>"))) + "</td></tr>\n";
}
out += "</table>\n";
return [out, vars];
};
public method .do_dd() {
arg vars, flags, args;
var c;
c = (| vars['columned] |);
[args, vars] = ._eval_ctext(args, vars);
if (c)
return [("<td>" + args) + "</td></tr>", vars];
return ["<dd>" + args, vars];
};
public method .do_detail() {
arg vars, flags, args;
var det;
det = flags.getkey("name");
return [((((("<a href=\"/bin/describe?target=" + ((vars['this]).objname())) + "&detail=") + ($http.encode(det))) + "\">") + det) + "</a></b>", vars];
};
public method .do_dfn() {
arg vars, flags, args;
var out, a;
[args, vars] = ._eval_ctext(args, vars);
return [("\n<blockquote>" + args) + "</blockquote>", vars];
};
public method .do_dl() {
arg vars, flags, args;
var out, token, c, cm;
c = (| vars['columned] |);
cm = (| flags.getkey("columned") |) || 0;
vars = vars.add('columned, cm);
[args, vars] = ._eval_ctext(args, vars);
if (c)
vars = vars.add('columned, c);
else if (vars.contains('columned))
vars = vars.del('columned);
if (cm)
return [("\n<blockquote><table cols=2 border=0>\n" + args) + "\n</table></blockquote>\n", vars];
return [("\n<dl>\n" + args) + "\n</dl>\n", vars];
};
public method .do_dt() {
arg vars, flags, args;
var term, c;
c = (| vars['columned] |);
[args, vars] = ._eval_ctext(args, vars);
if (c)
return [("\n<tr><td>" + args) + "</td>", vars];
return ["\n<dt>" + args, vars];
};
public method .do_em() {
arg vars, flags, args;
var out, a;
[args, vars] = ._eval_ctext(args, vars);
return [("<em>" + args) + "</em>", vars];
};
public method .do_hr() {
arg vars, flags, args;
return ["\n<hr size=1 noshade>\n", vars];
};
public method .do_i() {
arg vars, flags, args;
var out, a;
[args, vars] = ._eval_ctext(args, vars);
return [("<i>" + args) + "</i>", vars];
};
public method .do_invoke() {
arg vars, flags, args;
var object, method, eacharg;
[args, vars] = ._eval_ctext(args, vars);
object = flags.getkey("object");
method = flags.getkey("method");
return [((((("<a href=\"/" + (object.subrange(2))) + "/") + method) + "\">") + args) + "</a>", vars];
};
public method .do_lh() {
arg vars, flags, args;
[args, vars] = ._eval_ctext(args, vars);
return ["\n<lh>" + args, vars];
};
public method .do_li() {
arg vars, flags, args;
[args, vars] = ._eval_ctext(args, vars);
return ["\n<li>" + args, vars];
};
public method .do_link() {
arg vars, flags, args;
var node;
[args, vars] = ._eval_ctext([args[1]], vars);
node = (| flags.getkey("node") |);
if (node)
return [((("<a href=\"/bin/help?node=" + node) + "\">") + args) + "</a>", vars];
return [">>ERROR: Invalid node<<", vars];
};
public method .do_method() {
arg vars, flags, args;
var out, vars, m;
m = (flags[1])[1];
[out, vars] = ._eval_ctext(args, vars);
return [((("<a href=\"/bin/method?target=" + m) + "\"><tt>") + out) + "</tt></a>", vars];
};
public method .do_np() {
arg vars, flags, args;
return ["\n<p>\n", vars];
};
public method .do_obj() {
arg vars, flags, args;
var gateway, argname, context, object, name;
context = flags.getkey("context");
name = flags.getkey("name");
object = args[1];
// nix this once we figure out why its not always staying a symbol
if (type(context) == 'string)
context = tosym(context);
switch (context) {
case 'look:
[gateway, argname] = ["describe", "target"];
case 'display:
[gateway, argname] = ["display", "target"];
case 'exit:
[gateway, argname] = ["describe", "target"];
object = object.dest();
}
return [((((((("<a href=\"/bin/" + gateway) + "?") + argname) + "=") + object) + "\">") + name) + "</a>", vars];
};
public method .do_ol() {
arg vars, flags, args;
var out, header, line, token;
[args, vars] = ._eval_ctext(args, vars);
return [("\n<ol>\n" + args) + "\n</ol>\n", vars];
};
public method .do_p() {
arg vars, flags, args;
return ["\n<p>\n", vars];
};
public method .do_quote() {
arg vars, flags, args;
return [("<pre>" + ((((args[1]).replace("&", "&")).replace("<", "<")).replace(">", ">"))) + "</pre>", vars];
};
public method .do_subj() {
arg vars, flags, args;
var out, word, l;
[args, vars] = ._eval_ctext(args, vars);
l = (| flags.getkey("level") |) || "4";
return [((((("<h" + l) + ">") + args) + "</h") + l) + ">\n", vars];
};
public method .do_table() {
arg vars, flags, args;
var cols, tcs, tc;
tcs = (| vars['table_cols] |);
tc = (| vars['table_col] |);
if ((cols = (| flags.getkey("cols") |)) && ("%" in cols))
vars = vars.add('table_cols, cols.explode(","));
[args, vars] = ._eval_ctext(args, vars);
vars = tcs ? (vars.add('table_cols, tcs)) : (vars.del('table_cols));
vars = tc ? (vars.add('table_col, tc)) : (vars.del('table_col));
return [("\n<table border=0>" + args) + "\n</table>\n", vars];
};
public method .do_td() {
arg vars, flags, args;
var f, n, c, width;
c = vars['table_col];
vars = vars.add('table_col, c + 1);
width = (| (vars['table_cols])[c] |);
f = "";
if ((n = (| flags.getkey("rowspan") |)))
f += " rowspan=" + n;
if ((n = (| flags.getkey("colspan") |)))
f += " colspan=" + n;
if (width)
f += (" width=\"" + width) + "\"";
[args, vars] = ._eval_ctext(args, vars);
return [((("\n<td valign=top" + f) + ">") + args) + "</td>", vars];
};
public method .do_th() {
arg vars, flags, args;
var f, n, c, width;
c = vars['table_col];
vars = vars.add('table_col, c + 1);
width = (| (vars['table_cols])[c] |);
f = "";
if ((n = (| flags.getkey("rowspan") |)))
f += " rowspan=" + n;
if ((n = (| flags.getkey("colspan") |)))
f += " colspan=" + n;
if (width)
f += (" width=\"" + width) + "\"";
[args, vars] = ._eval_ctext(args, vars);
return [((("\n<th align=left valign=top" + f) + ">") + args) + "</td>", vars];
};
public method .do_tr() {
arg vars, flags, args;
vars = vars.add('table_col, 1);
[args, vars] = ._eval_ctext(args, vars);
return [("\n<tr>" + args) + "</tr>", vars];
};
public method .do_tt() {
arg vars, flags, args;
var out, a;
[args, vars] = ._eval_ctext(args, vars);
return [("<tt>" + args) + "</tt>", vars];
};
public method .do_ul() {
arg vars, flags, args;
var out, header, line, token;
[args, vars] = ._eval_ctext(args, vars);
return [("\n<ul>\n" + args) + "\n</ul>\n", vars];
};
public method .do_web() {
arg vars, flags, args;
[args, vars] = ._eval_ctext([args[1]], vars);
return [((((args + "<a href=\"") + (flags.getkey("src"))) + "\">") + (flags.getkey("name"))) + "</a>", vars];
};
public method .eval_formatter() {
arg form, vars;
var flags, i, text;
form = form.eval_flags(vars);
catch ~methodnf {
return .(form[4])(vars, form[2], form[3]);
} with {
[text, vars] = ._eval_ctext(form[3], vars);
if ((vars['time]) == 'post)
return ["<%l%l>%l</%l>".format(form[1], map i in (form[2]) to ((((" " + (i[1])) + "=\"") + (i[2])) + "\"").join(""), text, form[1]), vars];
form = (<$format, [form[1], form[2], text, form[4]]>);
return [[form], vars];
}
};
public method .format() {
arg data, vars;
var str, len, line, out;
str = (> (._eval_ctext(data, vars))[1] <) + "<br>";
return str_to_buf(str + "\n");
if ((strlen(str) < 2) || (substr(str, strlen(str) - 1) != "\n"))
str += "\n";
return str_to_buf(str + "<br>");
};