62 lines
1.6 KiB
JavaScript
62 lines
1.6 KiB
JavaScript
JSDOC.PluginManager.registerPlugin(
|
|
"JSDOC.publishSrcHilite",
|
|
{
|
|
onPublishSrc: function(src) {
|
|
if (src.path in JsHilite.cache) {
|
|
return; // already generated src code
|
|
}
|
|
else JsHilite.cache[src.path] = true;
|
|
|
|
try {
|
|
var sourceCode = IO.readFile(src.path);
|
|
}
|
|
catch(e) {
|
|
print(e.message);
|
|
quit();
|
|
}
|
|
|
|
var hiliter = new JsHilite(sourceCode, src.charset);
|
|
src.hilited = hiliter.hilite();
|
|
}
|
|
}
|
|
);
|
|
|
|
function JsHilite(src, charset) {
|
|
|
|
var tr = new JSDOC.TokenReader();
|
|
|
|
tr.keepComments = true;
|
|
tr.keepDocs = true;
|
|
tr.keepWhite = true;
|
|
|
|
this.tokens = tr.tokenize(new JSDOC.TextStream(src));
|
|
|
|
// TODO is redefining toString() the best way?
|
|
JSDOC.Token.prototype.toString = function() {
|
|
return "<span class=\""+this.type+"\">"+this.data.replace(/</g, "<")+"</span>";
|
|
}
|
|
|
|
if (!charset) charset = "utf-8";
|
|
|
|
this.header = '<html><head><meta http-equiv="content-type" content="text/html; charset='+charset+'"> '+
|
|
"<style>\n\
|
|
.KEYW {color: #933;}\n\
|
|
.COMM {color: #bbb; font-style: italic;}\n\
|
|
.NUMB {color: #393;}\n\
|
|
.STRN {color: #393;}\n\
|
|
.REGX {color: #339;}\n\
|
|
.line {border-right: 1px dotted #666; color: #666; font-style: normal;}\n\
|
|
</style></head><body><pre>";
|
|
this.footer = "</pre></body></html>";
|
|
this.showLinenumbers = true;
|
|
}
|
|
|
|
JsHilite.cache = {};
|
|
|
|
JsHilite.prototype.hilite = function() {
|
|
var hilited = this.tokens.join("");
|
|
var line = 1;
|
|
if (this.showLinenumbers) hilited = hilited.replace(/(^|\n)/g, function(m){return m+"<span class='line'>"+((line<10)? " ":"")+((line<100)? " ":"")+(line++)+"</span> "});
|
|
|
|
return this.header+hilited+this.footer;
|
|
} |