marked.js
54 lines
| 1.7 KiB
| application/javascript
|
JavascriptLexer
MinRK
|
r14206 | // Node.js script for markdown to html conversion | ||
// This applies the same math extraction and marked settings | ||||
// that we use in the live notebook. | ||||
// IPython static_path dir relative to here: | ||||
var static_path = __dirname + "/../../html/static/"; | ||||
var fs = require('fs'); | ||||
var IPython; | ||||
// marked can be loaded with require, | ||||
// the others must be execfiled | ||||
var marked = require(static_path + 'components/marked/lib/marked.js'); | ||||
eval(fs.readFileSync(static_path + "components/highlight.js/build/highlight.pack.js", 'utf8')); | ||||
eval(fs.readFileSync(static_path + "base/js/namespace.js", 'utf8')); | ||||
eval(fs.readFileSync(static_path + "base/js/utils.js", 'utf8')); | ||||
eval(fs.readFileSync(static_path + "notebook/js/mathjaxutils.js", 'utf8')); | ||||
// this is copied from notebook.main. Should it be moved somewhere we can reuse it? | ||||
marked.setOptions({ | ||||
gfm : true, | ||||
tables: true, | ||||
langPrefix: "language-", | ||||
highlight: function(code, lang) { | ||||
if (!lang) { | ||||
// no language, no highlight | ||||
return code; | ||||
} | ||||
var highlighted; | ||||
try { | ||||
highlighted = hljs.highlight(lang, code, false); | ||||
} catch(err) { | ||||
highlighted = hljs.highlightAuto(code); | ||||
} | ||||
return highlighted.value; | ||||
} | ||||
}); | ||||
// read the markdown from stdin | ||||
var md=''; | ||||
process.stdin.on("data", function (data) { | ||||
md += data; | ||||
}); | ||||
// perform the md2html transform once stdin is complete | ||||
process.stdin.on("end", function () { | ||||
var text_and_math = IPython.mathjaxutils.remove_math(md); | ||||
var text = text_and_math[0]; | ||||
var math = text_and_math[1]; | ||||
var html = marked.parser(marked.lexer(text)); | ||||
html = IPython.mathjaxutils.replace_math(html, math); | ||||
process.stdout.write(html); | ||||
}); | ||||