|
|
// 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/";
|
|
|
|
|
|
// Excerpt from the example in require.js docs
|
|
|
// http://requirejs.org/docs/node.html
|
|
|
var requirejs = require('requirejs');
|
|
|
requirejs.config({
|
|
|
//Pass the top-level main.js/index.js require
|
|
|
//function to requirejs so that node modules
|
|
|
//are loaded relative to the top-level JS file.
|
|
|
nodeRequire: require,
|
|
|
baseUrl: static_path,
|
|
|
});
|
|
|
|
|
|
requirejs([
|
|
|
'fs',
|
|
|
'components/marked/lib/marked',
|
|
|
'components/highlight.js/build/highlight.pack',
|
|
|
'base/js/utils',
|
|
|
'notebook/js/mathjaxutils',
|
|
|
], function(fs, marked, hljs, utils, mathjaxutils) {
|
|
|
|
|
|
// 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 = mathjaxutils.remove_math(md);
|
|
|
var text = text_and_math[0];
|
|
|
var math = text_and_math[1];
|
|
|
var html = marked.parser(marked.lexer(text));
|
|
|
html = mathjaxutils.replace_math(html, math);
|
|
|
process.stdout.write(html);
|
|
|
});
|
|
|
|
|
|
});
|
|
|
|