+ private class WikiTag implements Node.Stream.Functor {
+ public WikiTag(Node n, Scope s) { }
+ public Node.Stream wrap(final Node.Stream kids) {
+ return new Node.Stream() {
+ public boolean _read(Node n) {
+ if (!kids.read(n)) return false;
+ System.out.println("kids.cdata == " + n.cdata);
+ if (n.cdata == null) return true;
+
+ // FIXME: links, code, and math
+ n.cdata = n.cdata.replaceAll("__([^_]+)__", "<u>$1</u>");
+ n.cdata = n.cdata.replaceAll("\\~\\~([^\\~]+)\\~\\~", "<i>$1</i>");
+ n.cdata = n.cdata.replaceAll("\\*\\*([^\\*]+)\\*\\*", "<b>$1</b>");
+ n.cdata = n.cdata.replaceAll("==([^=]+)==", "<h2>$1</h2>");
+ n.cdata = n.cdata.replaceAll("=<h2>([^=]+)</h2>=", "<h3>$1</h3>");
+ n.cdata = n.cdata.replaceAll("=<h3>([^=]+)</h3>=", "<h4>$1</h4>");
+ n.cdata = n.cdata.replaceAll("(\n|\r\n)[ ]*(\n|\r\n)", "\n<br/><br/>\n");
+ return true;
+ } };
+ }
+ }
+