|
@@ -462,10 +462,64 @@ class HtmlPrinter {
|
|
|
print('<span class="kwd">'+w+' </span>');
|
|
|
}
|
|
|
|
|
|
- function processDoc(doc) {
|
|
|
+ function processDoc(doc : String) {
|
|
|
if( doc == null )
|
|
|
return;
|
|
|
- doc = ~/\[([^\]]+)\]/g.replace(doc,"<code>$1</code>");
|
|
|
+
|
|
|
+ // unixify line endings
|
|
|
+ doc = doc.split("\r\n").join("\n").split("\r").join("\n");
|
|
|
+
|
|
|
+ // process [] blocks
|
|
|
+ var rx = ~/\[/;
|
|
|
+ var tmp = new StringBuf();
|
|
|
+ var codes = new List();
|
|
|
+ while (rx.match(doc)) {
|
|
|
+ tmp.add( rx.matchedLeft() );
|
|
|
+
|
|
|
+ var code = rx.matchedRight();
|
|
|
+ var brackets = 1;
|
|
|
+ var i = 0;
|
|
|
+ while( i < code.length && brackets > 0 ) {
|
|
|
+ switch( code.charCodeAt(i++) ) {
|
|
|
+ case 91: brackets++;
|
|
|
+ case 93: brackets--;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ doc = code.substr(i);
|
|
|
+ code = code.substr(0, i-1);
|
|
|
+ code = ~/&/g.replace(code, "&");
|
|
|
+ code = ~/</g.replace(code, "<");
|
|
|
+ code = ~/>/g.replace(code, ">");
|
|
|
+ var tag = "##__code__"+codes.length+"##";
|
|
|
+ if( code.indexOf('\n') != -1 ) {
|
|
|
+ tmp.add("<pre>");
|
|
|
+ tmp.add(tag);
|
|
|
+ tmp.add("</pre>");
|
|
|
+ codes.add(code.split("\t").join(" "));
|
|
|
+ } else {
|
|
|
+ tmp.add("<code>");
|
|
|
+ tmp.add(tag);
|
|
|
+ tmp.add("</code>");
|
|
|
+ codes.add(code);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ tmp.add(doc);
|
|
|
+
|
|
|
+ // separate into paragraphs
|
|
|
+ var parts = ~/\n[ \t]*\n/g.split(tmp.toString());
|
|
|
+ if( parts.length == 1 )
|
|
|
+ doc = parts[0];
|
|
|
+ else
|
|
|
+ doc = Lambda.map(parts,function(x) { return "<p>"+StringTools.trim(x)+"</p>"; }).join("\n");
|
|
|
+
|
|
|
+ // trim stars
|
|
|
+ doc = ~/^([ \t]*)\*+/gm.replace(doc, "$1");
|
|
|
+ doc = ~/\**[ \t]*$/gm.replace(doc, "");
|
|
|
+
|
|
|
+ // put back code parts
|
|
|
+ var i = 0;
|
|
|
+ for( c in codes )
|
|
|
+ doc = doc.split("##__code__"+(i++)+"##").join(c);
|
|
|
print(doc);
|
|
|
}
|
|
|
|