chat-renderer
v1.0.0
Published
Chat renderer for markdown, emoji and highlight
Downloads
2
Readme
Chat-renderer
My chat-renderer for markdown, emoji and highlight.
Example
let { markdown, highlight } = require('chat-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
'soptions
parameter, used when highlighting code in markdown.
Return rendered HTML. Won't throw.
async highlight(code, language[, cache, options])
Highlight some code with syntect.
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:
highlighter
: Pass a functionasync function (code, language)
to replace the defualt highlighter.wrapper
: An array[before, after]
. Highlighted code's HTML will be wrapped bybefore
andafter
. 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,
linkify
andhtml
are enabled,typographer
andbreaks
are disabled.
- By default, code highlight's backend is syntect.
- A theme CSS is required to display highlighted code properly. See syntect-js's Usage. The default prefix is
hl-
.
- A theme CSS is required to display highlighted code properly. See syntect-js's Usage. The default prefix is
- Math backend is MathJax 3.
- 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,
\require
is disabled. - Maths that failed to render would result in displaying error message.
- Maths with spaces within dollar sign like