UNPKG

quizdown-extended

Version:

A fork from [bonartm/quizdown-js](https://github.com/bonartm/quizdown-js) with more features. > The Katex-extension is currently not supported

47 lines (41 loc) 1.22 kB
import katex from 'katex'; import type { IQuizdownExtension } from '../quizdown.js'; interface KatexToken { type: 'katex'; raw: string; formula: string; displayMode: boolean; } const rule = RegExp(/^(\$+)([^\$]|[^\$][\s\S]*?[^\$])\1(?!\$)/); let markedExtension = { name: 'katex', level: 'inline', start(src: any): number { let idx: number = src.match(/(\$){1,2}/)?.index; return idx; }, tokenizer(src: string): KatexToken | undefined { const match: RegExpExecArray | null = rule.exec(src); if (match) { return { type: 'katex', raw: match[0], formula: match[2].trim(), displayMode: match[1] === '$$', }; } }, renderer(token: KatexToken) { return katex.renderToString(token.formula, { displayMode: token.displayMode, }); }, }; let quizdownKatex: IQuizdownExtension = { setup: function (quizdown) { // type definition seems outdated, because this is the correct usage // @ts-ignore quizdown.getMarkedParser().use({ extensions: [markedExtension] }); }, }; export default quizdownKatex;