showdown-mathjax
Version:
Showdown Extensions for mathjax
1 lines • 3.58 kB
Source Map (JSON)
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";AAMA,OAAO,cAAqC;AAE5C,SAAS,kBAAuC;AAC9C,QAAM,MAA2B;AAAA,IAC/B;AAAA,MACE,MAAM;AAAA,MACN,QAAQ,CAAC,SAAiB;AACxB,eAAO,KAAK,QAAQ,kBAAkB,CAAC,OAAO,OAAO;AACnD,iBACE,iBACA,OAAO,QAAQ,WAAW,EAAE,IAAI,KAAK,IACrC;AAAA,QAEJ,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,QAAQ,CAAC,SAAiB;AACxB,eAAO,KAAK,QAAQ,uBAAuB,CAAC,OAAO,OAAO;AACxD,iBACE,iBACA,OAAO,QAAQ,WAAW,EAAE,IAAI,KAAK,IACrC;AAAA,QAEJ,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,QAAQ,CAAC,SAAiB;AACxB,eAAO,KAAK,QAAQ,oCAAoC,CAAC,OAAO,OAAO;AACrE,iBAAO,OAAO,EAAE;AAAA,QAClB,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,QAAQ,CAAC,SAAiB;AACxB,cAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUlB,eAAO,YAAY;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,WAAW,KAAa;AAC/B,SAAO,IAAI,QAAQ,MAAM,OAAO,EAAE,QAAQ,MAAM,MAAM,EAAE,QAAQ,MAAM,MAAM;AAC9E;AAEA,SAAS,OAAO,MAAc;AAC5B,MAAI,OAAO,WAAW,YAAY;AAChC,WAAO,OAAO,KAAK,IAAI,EAAE,SAAS,QAAQ;AAAA,EAC5C,OAAO;AACL,WAAO,KAAK,IAAI;AAAA,EAClB;AACF;AACA,SAAS,OAAO,MAAc;AAC5B,MAAI,OAAO,WAAW,YAAY;AAChC,WAAO,OAAO,KAAK,MAAM,QAAQ,EAAE,SAAS;AAAA,EAC9C,OAAO;AACL,WAAO,KAAK,IAAI;AAAA,EAClB;AACF;AAEA,SAAS,UAAU,mBAAmB,gBAAgB,CAAC;AAEvD,IAAO,cAAQ","sourcesContent":["/* \nShowdown Extensions for mathjax\n@ 2024 Pho Thin Maung , https://github.com/phothinmg/showdown-mathjax\nThis extension was inspired by https://github.com/easyhappy/math-extension.\n*/\n\nimport Showdown, { ShowdownExtension } from \"showdown\";\n\nfunction showdownMathjax(): ShowdownExtension[] {\n const ext: ShowdownExtension[] = [\n {\n type: \"lang\",\n filter: (text: string) => {\n return text.replace(/\\\\\\((.*?)\\\\\\)/g, (match, p1) => {\n return (\n \"<mathxxxjax>\" +\n encode(\"\\\\(\" + escapehtml(p1) + \"\\\\)\") +\n \"</mathxxxjax>\"\n );\n });\n },\n },\n {\n type: \"lang\",\n filter: (text: string) => {\n return text.replace(/\\\\\\[([\\s\\S]*?)\\\\\\]/g, (match, p1) => {\n return (\n \"<mathxxxjax>\" +\n encode(\"\\\\[\" + escapehtml(p1) + \"\\\\]\") +\n \"</mathxxxjax>\"\n );\n });\n },\n },\n {\n type: \"output\",\n filter: (text: string) => {\n return text.replace(/<mathxxxjax>(.*?)<\\/mathxxxjax>/g, (match, p1) => {\n return decode(p1);\n });\n },\n },\n {\n type: \"output\",\n filter: (text: string) => {\n const scriptTag = `\n <script>\n var script = document.createElement(\"script\");\n script.id = \"MathJax-script\";\n script.async = true;\n script.src =\n \"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\";\n document.head.appendChild(script);\n </script>\n `;\n return scriptTag + text;\n },\n },\n ];\n return ext;\n}\n\nfunction escapehtml(str: string) {\n return str.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\");\n}\n\nfunction encode(text: string) {\n if (typeof Buffer === \"function\") {\n return Buffer.from(text).toString(\"base64\");\n } else {\n return btoa(text);\n }\n}\nfunction decode(text: string) {\n if (typeof Buffer === \"function\") {\n return Buffer.from(text, \"base64\").toString();\n } else {\n return atob(text);\n }\n}\n\nShowdown.extension(\"showdownMathjax\", showdownMathjax());\n\nexport default showdownMathjax;\n\n// module.exports = showdownMathjax;\n"]}