Monday, November 08, 2010 at 12:03 AM.
system.verbs.builtins.html.data.standardMacros.nestedTableDisplayer
on nestedTableDisplayer (adrtable, border=1, linecolor="#FFFFFF") { //a recursive table display in HTML local (indentlevel = 0); on renderOneTable (adrtable) { local (htmltext = ""); on add (s) { htmltext = htmltext + string.filledstring ("\t", indentlevel) + s + "\r"}; local (i, adritem); bundle { //add table head local (s = "<table "); if indentlevel > 0 { s = s + "width=\"100%\""}; s = s + "border=\"" + border + "\" cellpadding=\"3\" cellspacing=\"0\">"; add (s); indentlevel++}; for i = 1 to sizeof (adrtable^) { adritem = @adrtable^ [i]; add ("<tr bgcolor=\"" + linecolor + "\">"); indentlevel++; add ("<td valign=\"top\">" + nameof (adritem^) + ":</td>"); add ("<td valign=\"top\" align=\"left\">"); indentlevel++; case typeof (adritem^) { tabletype { local (s = renderOneTable (adritem)); s = string.mid (s, 1, sizeof (s) - 1); //pop off trailing \r local (oldlevel = indentlevel); indentlevel = 0; add (s); indentlevel = oldlevel}; binarytype { add ("<font size=\"-1\">(binary, type = " + getbinarytype (adritem^) + ", size = " + sizeof (adritem^) + ")</font>")}} else { local (s = string (adritem^)); s = string.replaceall (s, "<", "<"); if sizeof (s) == 0 { s = " "}; if s contains "\r" { s = "<pre>" + s + "</pre>"; s = string.replaceall (s, "\r\n", "\r")}; add ("<font size=\"-1\">" + s + "</font>")}; add ("</td>"); indentlevel--; add ("</tr>"); indentlevel--}; add ("</table>"); indentlevel--; return (htmltext)}; return (renderOneTable (adrtable))}
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.