Browse Source

markdown-it: support \begin...\end for MathJax

Le Tan 7 years ago
parent
commit
bdf4e10c6e
2 changed files with 28 additions and 11 deletions
  1. 1 1
      src/resources/markdown-it.js
  2. 27 10
      src/utils/markdown-it/markdown-it-texmath.js

+ 1 - 1
src/resources/markdown-it.js

@@ -109,7 +109,7 @@ mdit = mdit.use(window.markdownitFootnote);
 mdit = mdit.use(window["markdown-it-imsize.js"]);
 
 if (typeof texmath != 'undefined') {
-    mdit = mdit.use(texmath, { delimiters: 'dollars' });
+    mdit = mdit.use(texmath, { delimiters: ['dollars', 'raw'] });
 }
 
 var mdHasTocSection = function(markdown) {

+ 27 - 10
src/utils/markdown-it/markdown-it-texmath.js

@@ -8,18 +8,24 @@
 'use strict';
 
 function texmath(md, options) {
-    let delimiters = options && options.delimiters || 'dollars';
+    let delimiters = ['dollars'];
+    if (options && options.delimiters) {
+        delimiters = options.delimiters;
+    }
 
-    if (delimiters in texmath.rules) {
-        for (let rule of texmath.rules[delimiters].inline) {
-            md.inline.ruler.before('escape', rule.name, texmath.inline(rule));  // ! important
-            md.renderer.rules[rule.name] = (tokens, idx) => rule.tmpl.replace(/\$1/,texmath.render(tokens[idx].content,false));
-        }
+    for (let i = 0; i < delimiters.length; ++i) {
+        let deli = delimiters[i];
+        if (deli in texmath.rules) {
+            for (let rule of texmath.rules[deli].inline) {
+                md.inline.ruler.before('escape', rule.name, texmath.inline(rule));  // ! important
+                md.renderer.rules[rule.name] = (tokens, idx) => rule.tmpl.replace(/\$1/,texmath.render(tokens[idx].content,false));
+            }
 
-        for (let rule of texmath.rules[delimiters].block) {
-            md.block.ruler.before('fence', rule.name, texmath.block(rule));
-            md.renderer.rules[rule.name] = (tokens, idx) => rule.tmpl.replace(/\$2/,tokens[idx].info)  // equation number
-                                                                     .replace(/\$1/,texmath.render(tokens[idx].content,true));
+            for (let rule of texmath.rules[deli].block) {
+                md.block.ruler.before('fence', rule.name, texmath.block(rule));
+                md.renderer.rules[rule.name] = (tokens, idx) => rule.tmpl.replace(/\$2/,tokens[idx].info)  // equation number
+                                                                         .replace(/\$1/,texmath.render(tokens[idx].content,true));
+            }
         }
     }
 }
@@ -166,6 +172,17 @@ texmath.rules = {
             }
         ]
     },
+    raw: {
+        inline: [],
+        block: [
+            {
+                name: 'math_block',
+                rex: /(\\begin\s*\{([^{}\s\r\n]+)\}(?:[^\\]|\\(?!end\s*\{\2\}))*\\end\s*\{\2\})\s*$/gmy,
+                tmpl: '<x-eqn class="tex-to-render">$1</x-eqn>',
+                tag: '\\begin'
+            }
+        ]
+    }
 };
 
 if (typeof module === "object" && module.exports)