The parse
functionparse
函数
parse
functionimport { marked } from 'marked';
marked.parse(markdownString [,options] [,callback])
markdownString | string |
|
options | object |
marked.setOptions .marked.setOptions 。 |
callback | function |
markdownString has been parsed. markdownString 时调用。options present.options ,则可以用作第二个参数。 |
Alternative using reference替代使用参考
// Create reference instance
import { marked } from 'marked';
// Set options
// `highlight` example uses https://highlightjs.org
marked.setOptions({
renderer: new marked.Renderer(),
highlight: function(code, lang) {
const hljs = require('highlight.js');
const language = hljs.getLanguage(lang) ? lang : 'plaintext';
return hljs.highlight(code, { language }).value;
},
langPrefix: 'hljs language-', // highlight.js css expects a top-level 'hljs' class.
pedantic: false,
gfm: true,
breaks: false,
sanitize: false,
smartLists: true,
smartypants: false,
xhtml: false
});
// Compile
console.log(marked.parse(markdownString));
Options
baseUrl | string |
null |
0.3.9 | |
breaks | boolean |
false |
v0.2.7 | <br> on a single line break (copies GitHub behavior on comments, but not on rendered markdown files). Requires gfm be true .true ,则在单行换行符上添加<br> (复制注释上的GitHub行为,但不复制渲染的标记文件)。要求gfm 为true 。 |
gfm | boolean |
true |
v0.2.1 | |
headerIds | boolean |
true |
v0.4.0 | id attribute when emitting headings (h1, h2, h3, etc).true ,则在发出标题(h1、h2、h3等)时包含id 属性。 |
headerPrefix | string |
'' |
v0.3.0 | id attribute when emitting headings (h1, h2, h3, etc).id 属性前缀的字符串。 |
highlight | function |
null |
v0.3.0 | |
langPrefix | string |
'language-' |
v0.3.0 | <code> block. Useful for syntax highlighting.<code> 块中作为类名前缀的字符串。用于语法突出显示。 |
mangle | boolean |
true |
v0.3.4 | true ,自动链接的电子邮件地址将使用HTML字符引用转义。 |
pedantic | boolean |
false |
v0.2.1 | markdown.pl as much as possible. true ,则尽可能多地符合markdown.pl 。gfm .gfm 。 |
renderer | object |
new Renderer() |
v0.3.0 | |
sanitize | boolean |
false |
v0.2.1 | markdownString with the sanitizer function.true ,则使用sanitizer 函数清理传递到markdownString 中的HTML。Warning |
sanitizer | function |
null |
v0.3.4 | markdownString .markdownStrin g的HTML的函数。 |
silent | boolean |
false |
v0.2.7 | true ,则解析器不会引发任何异常。 |
smartLists | boolean |
false |
v0.2.8 | markdown.pl .true ,则使用比markdown.pl 中更智能的列表行为。 |
smartypants | boolean |
false |
v0.2.9 | |
tokenizer | object |
new Tokenizer() |
v1.0.0 | |
walkTokens | function |
null |
v1.1.0 | |
xhtml | boolean |
false |
v0.3.2 | true ,则按照XHTML的要求为空元素(<br/> 、<img/> ,等等)发出带“/”的自动关闭HTML标记。 |
Inline 内联Markdown
You can parse inline markdown by running markdown through 您可以通过运行markdown到marked.parseInline
.marked.parseInline
来解析内联markdown。
const blockHtml = marked.parse('**strong** _em_');
console.log(blockHtml); // '<p><strong>strong</strong> <em>em</em></p>'
const inlineHtml = marked.parseInline('**strong** _em_');
console.log(inlineHtml); // '<strong>strong</strong> <em>em</em>'
Asynchronous highlighting异步突出显示
Unlike 不同于highlight.js
the pygmentize.js
library uses asynchronous highlighting. highlight.js
,pygmentize.js
库使用异步高亮显示。This example demonstrates that marked is agnostic when it comes to the highlighter you use.这个例子表明,当你使用highlighter时,marked是不可知的。
marked.setOptions({
highlight: function(code, lang, callback) {
require('pygmentize-bundled') ({ lang: lang, format: 'html' }, code, function (err, result) {
callback(err, result.toString());
});
}
});
marked.parse(markdownString, (err, html) => {
console.log(html);
});
In both examples, 在这两个示例中,code
is a string
representing the section of code to pass to the highlighter. code
都是一个字符串,表示要传递给highlighter的代码部分。In this example, 在本例中,lang
is a string
informing the highlighter what programming language to use for the code
and callback
is the function
the asynchronous highlighter will call once complete.lang
是一个字符串,通知highlighter代码使用什么编程语言,callback
是异步highlighter完成后将调用的函数。
Workers
To prevent ReDoS attacks you can run marked on a worker and terminate it when parsing takes longer than usual.为了防止重做攻击,您可以在辅助进程上运行marked,并在解析时间比平时更长时终止它。
Marked can be run in a worker thread on a node server, or a web worker in a browser.标记可以在节点服务器上的工作线程中运行,也可以在浏览器中的web工作线程中运行。
Node Worker Thread工作线程
// markedWorker.js
import { marked } from 'marked';
import { parentPort } from 'worker_threads';
parentPort.on('message', (markdownString) => {
parentPort.postMessage(marked.parse(markdownString));
});
// index.js
import { Worker } from 'worker_threads';
const markedWorker = new Worker('./markedWorker.js');
const markedTimeout = setTimeout(() => {
markedWorker.terminate();
throw new Error('Marked took too long!');
}, timeoutLimit);
markedWorker.on('message', (html) => {
clearTimeout(markedTimeout);
console.log(html);
markedWorker.terminate();
});
markedWorker.postMessage(markdownString);
Web Worker
NOTE
: Web Workers send the payload from:Web工作线程从对象中的postMessage
in an object with the payload in a.data
propertypostMessage
发送有效负载,有效负载位于.data
属性中。
// markedWorker.js
importScripts('path/to/marked.min.js');
onmessage = (e) => {
const markdownString = e.data
postMessage(marked.parse(markdownString));
};
// script.js
const markedWorker = new Worker('./markedWorker.js');
const markedTimeout = setTimeout(() => {
markedWorker.terminate();
throw new Error('Marked took too long!');
}, timeoutLimit);
markedWorker.onmessage = (e) => {
clearTimeout(markedTimeout);
const html = e.data;
console.log(html);
markedWorker.terminate();
};
markedWorker.postMessage(markdownString);