1.2.1 • Published 4 years ago
@4qwerty7/syzoj-renderer v1.2.1
syzoj-renderer
SYZOJ's renderer for markdown, math and highlight.
Example
let { markdown, highlight } = require('syzoj-renderer');
console.log(await markdown(text));
console.log(await highlight(code, language));API
async markdown(text, [cache, filterFunction, options])
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.
async highlight(code, language[, cache, options])
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.
Notes
- 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
License
AGPL-3.0. Contact me if you really want this to be MIT license.