namespace JSDOC { class PrettyPrint : Object { // pretty simple... static string escapeHTML(string str) { return str.replace("&","&"). replace(">",">"). replace("<","<"). replace("\"","""); } public static string toPretty(string str) { var txs = new TextStream(str); var tr = new TokenReader(null); tr.keepComments = true; tr.keepWhite = true; var toks = tr.tokenize(txs); //var sp = new ScopeParser(new Collapse(toks)); //sp.buildSymbolTree(); // sp.mungeSymboltree(); var r = ""; //r += sp.warnings.join("
"); //r == "
"; var cs = ""; // current style.. // loop through and print it...? for (var i = 0;i < toks.length; i++) { var ns = toStyle(toks.get(i),cs); if (ns != cs) { // change of style if (cs.length > 0) { r += ""; }; r +=""; cs = ns; } if (toks.get(i).identifier != null) { r += "" + escapeHTML(toks.get(i).data) + ""; continue; } r += escapeHTML(toks.get(i).data); //.replace(/\n/g, "
\n"); } if (cs.length > 0) r += "
"; return ""+r+""; } static string toStyle(Token tok, string cs) { if (tok.isName(TokenName.SPACE) || tok.isName(TokenName.NEWLINE) ) { return cs; } if (tok.isName(TokenName.MULTI_LINE_COMM) || tok.isName(TokenName.JSDOC) || tok.isName(TokenName.SINGLE_LINE_COMM) ) { return "comment"; } if (tok.isType(TokenType.STRN)) { return "string"; } // other 'vary things?? if (tok.isType(TokenType.NAME) || tok.data == "." || tok.isName(TokenName.THIS)) { return "var"; } var r = new Regex("^[a-zA-Z]+"); if (r.match(tok.data)) { return "keyword"; } return "syntax"; } } }