quizdown-extended
Version:
Markdown for generating interactive quiz apps in the browser. (With more functions)
48 lines (43 loc) • 1.21 kB
text/typescript
import marked from 'marked';
import { parse as parseYaml } from 'yaml';
// customize tokenizer to include yaml like header blocks
const tokenizer: marked.TokenizerObject = {
// type definition does no allow custom token type
// @ts-ignore
hr(src) {
//adapted from https://github.com/markedjs/marked/blob/master/src/rules.js
const regex = RegExp(
/^ {0,3}(-{3,}(?=[^-\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~-]* *(?:\n+|$)|$)/
);
const cap = regex.exec(src);
if (cap) {
return {
type: 'options',
raw: cap[0],
data: parseYaml(cap[3], {}),
};
}
},
};
// customize renderer
const renderer: marked.RendererObject = {
// disable paragraph
paragraph(text) {
return text;
},
//disable blockquote, we use this for hints
blockquote(text) {
return text;
},
//disable heading, we only use h3 headings
heading(text) {
return text;
},
};
marked.use({
renderer: renderer,
// type definition does not allow custom token type
// @ts-ignore
tokenizer: tokenizer,
});
export default marked;