SYZOJ's renderer for markdown, math and highlight.
let { markdown, highlight } = require('syzoj-renderer');
console.log(await markdown(text));
console.log(await highlight(code, language));text is the Markdown text to be rendered.
cache is null or a object with two functions to manipulate a Key-Value store (key is hashed before passing to cache):
async get(string key)async set(string key, string value)
filterFunction(html) is a function to filter rendered HTML. It can be used to prevent XSS attack. Should return filtered HTML.
options is a object, may contain:
markdownIt: Overrides default options innew MarkdownIt(options). (See markdown-it)markdownItMath: Overrides default options inmarkdownIt.use(MathdownItMath, options). (See markdown-it-math-loose)markdownItMergeCells: Set to false to disable markdown-it-merge-cells in markdown tables, which will merge adjacent cells with same content in tableshighlight: Same ashighlight'soptionsparameter, used when highlighting code in markdown.
Return rendered HTML. Won't throw.
Highlight some code with pygments.
code is the code to be highlighted. language is code's language.
cache is same as the parameter in markdown().
options is a object, may contain:
pygments: Overrides default options inPygments.pygmentize(code, options). (See pygments-promise)highlighter: Pass a functionasync function (code, language)to replace the defualt pygments highlighter. If a function is passed, pygments won't be used andpygmentsoption will be ignored.wrapper: An array[before, after]. Highlighted code's HTML will be wrapped bybeforeandafter. Defaults to['<pre><code>', '</code></pre>'].
Return highlighted code in HTML. Won't throw.
- Markdown backend is markdown-it.
- GFM is supported.
- By default,
linkifyandhtmlare enabled,typographerandbreaksare disabled.
- By default, code highlight's backend is pygments, which requires pygments to be installed.
- If no
pygmentizeis available, it'll always return unhighlighted code. pygmentize's default commandline arguments are:pygmentize -l <language> -f html -P nowrap=false -P classprefix=pl-.- A theme CSS is required to display highlighted code properly. See Generating styles section of pygments's document.
- If no
- Math backend is mathjax-node-page.
- Maths are rendered to
<svg>HTML elements,dist/math.cssis required to display properly. - Maths with spaces within dollar sign like
$ a+b $will work. - Complex maths like
$ \sum\limits_{i=0}^na_i $won't be broken by Markdown. - To ensure each document's math rendering state isolated,
\requireis disabled. - Maths that failed to render would result in displaying error message.
- Maths are rendered to