// 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); });