From 727ba7300eef6fcfb11d89aa6e03322c8109e1ce Mon Sep 17 00:00:00 2001 From: Laurent Cozic Date: Tue, 6 Feb 2018 17:58:54 +0000 Subject: [PATCH] All: Also support $ as delimiter for Katex expressoins --- ElectronClient/app/package-lock.json | 18 ++++++++++ ElectronClient/app/package.json | 1 + README.md | 10 +++--- ReactNativeClient/lib/MdToHtml.js | 51 +++++++++++++++++---------- ReactNativeClient/package-lock.json | 18 ++++++++++ ReactNativeClient/package.json | 1 + docs/images/Katex.png | Bin 20310 -> 20668 bytes docs/index.html | 18 +++++----- 8 files changed, 85 insertions(+), 32 deletions(-) diff --git a/ElectronClient/app/package-lock.json b/ElectronClient/app/package-lock.json index 0f93fee35c..5e2a11fa24 100644 --- a/ElectronClient/app/package-lock.json +++ b/ElectronClient/app/package-lock.json @@ -2852,6 +2852,24 @@ "uc.micro": "1.0.3" } }, + "markdown-it-katex": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/markdown-it-katex/-/markdown-it-katex-2.0.3.tgz", + "integrity": "sha1-17hqGuoLnWSW+rTnkZoY/e9YnDk=", + "requires": { + "katex": "0.6.0" + }, + "dependencies": { + "katex": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.6.0.tgz", + "integrity": "sha1-EkGOCRIcBckgQbazuftrqyE8tvM=", + "requires": { + "match-at": "0.1.1" + } + } + } + }, "match-at": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/match-at/-/match-at-0.1.1.tgz", diff --git a/ElectronClient/app/package.json b/ElectronClient/app/package.json index 72d41515a9..1ea37e4b24 100644 --- a/ElectronClient/app/package.json +++ b/ElectronClient/app/package.json @@ -70,6 +70,7 @@ "levenshtein": "^1.0.5", "lodash": "^4.17.4", "markdown-it": "^8.4.0", + "markdown-it-katex": "^2.0.3", "md5": "^2.2.1", "mime": "^2.0.3", "moment": "^2.19.1", diff --git a/README.md b/README.md index 48e2d88638..6350a5b57d 100644 --- a/README.md +++ b/README.md @@ -150,19 +150,19 @@ Joplin uses and renders [Github-flavoured Markdown](https://github.com/adam-p/ma ## Math notation -Math expressions can be added using the [Katex notation](https://khan.github.io/KaTeX/). To add an inline equation, wrap the expression in `` `{.katex}EXPRESSION` ``, eg. `` `{.katex}\sqrt{3x-1}+(1+x)^2` ``. To create an expression block, wrap it as follow: +Math expressions can be added using the [Katex notation](https://khan.github.io/KaTeX/). To add an inline equation, wrap the expression in `$EXPRESSION$`, eg. `$\sqrt{3x-1}+(1+x)^2$`. To create an expression block, wrap it as follow: - ```katex + $$ EXPRESSION - ``` + $$ For example: - ```katex + $$ f(x) = \int_{-\infty}^\infty \hat f(\xi)\,e^{2 \pi i \xi x} \,d\xi - ``` + $$ Here is an example with the Markdown and rendered result side by side: diff --git a/ReactNativeClient/lib/MdToHtml.js b/ReactNativeClient/lib/MdToHtml.js index dc21551fb6..9c4f11bf0f 100644 --- a/ReactNativeClient/lib/MdToHtml.js +++ b/ReactNativeClient/lib/MdToHtml.js @@ -157,7 +157,7 @@ class MdToHtml { } } - customCodeHandler_(language) { + rendererPlugin_(language) { if (!language) return null; const handlers = {}; @@ -196,9 +196,10 @@ class MdToHtml { const isCodeBlock = tag === 'code' && t.block; const isInlineCode = t.type === 'code_inline'; const codeBlockLanguage = t && t.info ? t.info : null; - let codeBlockHandler = null; + let rendererPlugin = null; + let rendererPluginOptions = { tagType: 'inline' }; - if (isCodeBlock) codeBlockHandler = this.customCodeHandler_(codeBlockLanguage); + if (isCodeBlock) rendererPlugin = this.rendererPlugin_(codeBlockLanguage); if (previousToken && previousToken.tag === 'li' && tag === 'p') { // Markdown-it render list items as
  • Text

  • which makes it @@ -216,7 +217,7 @@ class MdToHtml { } else if (t.type === 'link_open') { openTag = 'a'; } else if (isCodeBlock) { - if (codeBlockHandler) { + if (rendererPlugin) { openTag = null; } else { openTag = 'pre'; @@ -235,25 +236,30 @@ class MdToHtml { if (isCodeBlock) { const codeAttrs = ['code']; - if (!codeBlockHandler) { + if (!rendererPlugin) { if (codeBlockLanguage) codeAttrs.push(t.info); // t.info contains the language when the token is a codeblock output.push(''); } } else if (isInlineCode) { const result = this.parseInlineCodeLanguage_(tokenContent); if (result) { - codeBlockHandler = this.customCodeHandler_(result.language); + rendererPlugin = this.rendererPlugin_(result.language); tokenContent = result.newContent; } - if (!codeBlockHandler) { + if (!rendererPlugin) { output.push(''); } } - if (codeBlockHandler) { - codeBlockHandler.loadAssets().catch((error) => { - console.warn('MdToHtml: Error loading assets for ' + codeBlockHandler.name() + ': ', error.message); + if (t.type === 'math_inline' || t.type === 'math_block') { + rendererPlugin = this.rendererPlugin_('katex'); + rendererPluginOptions = { tagType: t.type === 'math_block' ? 'block' : 'inline' }; + } + + if (rendererPlugin) { + rendererPlugin.loadAssets().catch((error) => { + console.warn('MdToHtml: Error loading assets for ' + rendererPlugin.name() + ': ', error.message); }); } @@ -270,8 +276,10 @@ class MdToHtml { output = output.concat(parsedChildren); } else { if (tokenContent) { - if ((isCodeBlock || isInlineCode) && codeBlockHandler) { - output = codeBlockHandler.processContent(output, tokenContent, isCodeBlock ? 'block' : 'inline'); + if ((isCodeBlock || isInlineCode) && rendererPlugin) { + output = rendererPlugin.processContent(output, tokenContent, isCodeBlock ? 'block' : 'inline'); + } else if (rendererPlugin) { + output = rendererPlugin.processContent(output, tokenContent, rendererPluginOptions.tagType); } else { output.push(htmlentities(tokenContent)); } @@ -286,15 +294,15 @@ class MdToHtml { } else if (tag && t.type.indexOf('inline') >= 0) { closeTag = openTag; } else if (isCodeBlock) { - if (!codeBlockHandler) closeTag = openTag; + if (!rendererPlugin) closeTag = openTag; } if (isCodeBlock) { - if (!codeBlockHandler) { + if (!rendererPlugin) { output.push(''); } } else if (isInlineCode) { - if (!codeBlockHandler) { + if (!rendererPlugin) { output.push(''); } } @@ -307,9 +315,9 @@ class MdToHtml { } } - if (codeBlockHandler) { - const extraCss = codeBlockHandler.extraCss(); - const name = codeBlockHandler.name(); + if (rendererPlugin) { + const extraCss = rendererPlugin.extraCss(); + const name = rendererPlugin.name(); if (extraCss && !(name in extraCssBlocks)) { extraCssBlocks[name] = extraCss; } @@ -345,6 +353,13 @@ class MdToHtml { linkify: true, }); + // This is currently used only so that the $expression$ and $$\nexpression\n$$ blocks are translated + // to math_inline and math_block blocks. These blocks are then processed directly with the Katex + // library. It is better this way as then it is possible to conditionally load the CSS required by + // Katex and use an up-to-date version of Katex (as of 2018, the plugin is still using 0.6, which is + // buggy instead of 0.9). + md.use(require('markdown-it-katex')); + // Hack to make checkboxes clickable. Ideally, checkboxes should be parsed properly in // renderTokens_(), but for now this hack works. Marking it with HORRIBLE_HACK so // that it can be removed and replaced later on. diff --git a/ReactNativeClient/package-lock.json b/ReactNativeClient/package-lock.json index 97605d2af4..14dac9fe1e 100644 --- a/ReactNativeClient/package-lock.json +++ b/ReactNativeClient/package-lock.json @@ -3666,6 +3666,24 @@ "uc.micro": "1.0.3" } }, + "markdown-it-katex": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/markdown-it-katex/-/markdown-it-katex-2.0.3.tgz", + "integrity": "sha1-17hqGuoLnWSW+rTnkZoY/e9YnDk=", + "requires": { + "katex": "0.6.0" + }, + "dependencies": { + "katex": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.6.0.tgz", + "integrity": "sha1-EkGOCRIcBckgQbazuftrqyE8tvM=", + "requires": { + "match-at": "0.1.1" + } + } + } + }, "match-at": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/match-at/-/match-at-0.1.1.tgz", diff --git a/ReactNativeClient/package.json b/ReactNativeClient/package.json index f73d96f931..690fd9bbbb 100644 --- a/ReactNativeClient/package.json +++ b/ReactNativeClient/package.json @@ -17,6 +17,7 @@ "html-entities": "^1.2.1", "katex": "^0.9.0-beta1", "markdown-it": "^8.4.0", + "markdown-it-katex": "^2.0.3", "md5": "^2.2.1", "moment": "^2.18.1", "prop-types": "^15.6.0", diff --git a/docs/images/Katex.png b/docs/images/Katex.png index bc761595d0cf41755ce39b6d5abd8d647f3f682b..95b029e8a4dd781facf64ebfd08440cf607827d7 100644 GIT binary patch literal 20668 zcmce;c|4T=+cvIbDP$yDG`1p3mI!H(y@g~a*|YD7h8ZMdC;8aPsK~zWX%J)3D3dMw zGA7x^GWNaa8a|)z{e7N4e)s*m@8|XW(W|=5T<`08FXwrj$8nq@A3fA$ICtqB1qB7e zy}N396cndn6cndSX{muLQ}y$*z+b1l^)yu|O1rt{f&ZLwP}Wwaps0wWJFun#{(si< zuBkT##d$ROZN{HGKYk96;;DH}j7mNMs8xYYeSc4>axM|EbHN2buKcVgFGT|>N~ zMfAL?SNlRcL>128Wi4T~obeKU+M>0lmY3^Pa-Y>}E3fNxi!&zY#eYk?)_-G=*$yz+ zaQeNwM0n<-^8!c8D45*lud&ZvEGknyp*Y4Qp(DHI!fT={>0K->XJf|ZC!_en%i=qyNV~&7#eb3{@S-RDM8oTVS9Ym(R@~G7^gdX;L&BQ+R;Ux9hZ>x6)<}qxR z^mSv;9*~Yc%_8Z-xdV6Z?0?KUo=R04owlh)j_Qv2xS#{udVCmX>%u@0T4vOh`Ml!J zRO{&G!8$J7sV_IQsI;Mw*}MMH@;l7L;r1lASmQ?TS@B_sP+I{ zv(+-Tysp>F*bUmU2ehXkZpa<5B?py~J_+=5IH**=j~ue)>Szw#%7pFU!_hGuQh(Vd zPGT#|FKQFwPWvnp37elYe}%h61-YcY9(5^e6d)S0WWm?&$t~n(M?nuuvu0mXp1)?n z1kr(z)S&oKwkTYj!j{R9RR}}W;MaGtLoi^?Tn1BIg2RcxGR?o;6>-A`P6g9Mx%_0T zXI=mOoo;)~TZhEa5=Q}_&3w@suL-{O1Ge?U^sw5i1OujFvub%og;|`&L<=@a)3J$h zb*3m++g6s*5MGIk+6rubI=7&GsPFhTQu#-FRfpWK@Zq?5<#Qo#*`F%KZyTApvG@Xe zZo07r)&>Sk2Psl*eh6$Mu&bGWGQPffyTgEQJM?nEMo(x8V|g7k@u3_Z;rUIn<6>V_ zgzgcP=k1<0XN$Vh`?CwHzY=u9Y~vJaQ=48p>H9V>o&J#2^jlG3D*chT+9VIY?rARu ziN_$ryEPcr8D)=V)dYu?ChM8tzfqx5&_(IzAU~sz>()ON_g*T0Wu%*pz~M)682(rt z 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 I&MBb@0L72gn*aa+ literal 20310 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

    Joplin uses and renders Github-flavoured Markdown with a few variations and additions. In particular:

    Math notation

    -

    Math expressions can be added using the Katex notation. To add an inline equation, wrap the expression in `{.katex}EXPRESSION` , eg. `{.katex}\sqrt{3x-1}+(1+x)^2` . To create an expression block, wrap it as follow:

    -
    ```katex
    +

    Math expressions can be added using the Katex notation. To add an inline equation, wrap the expression in $EXPRESSION$, eg. $\sqrt{3x-1}+(1+x)^2$. To create an expression block, wrap it as follow:

    +
    $$
     EXPRESSION
    -```
    +$$
     

    For example:

    -
    ```katex
    +
    $$
     f(x) = \int_{-\infty}^\infty
         \hat f(\xi)\,e^{2 \pi i \xi x}
         \,d\xi
    -```
    +$$
     

    Here is an example with the Markdown and rendered result side by side:

    Checkboxes

    @@ -378,14 +378,14 @@ f(x) = \int_{-\infty}^\infty Croatian hr_HR -Hrvoje Mandić trbuhom@net.hr +Hrvoje Mandić trbuhom@net.hr 72% Deutsch de_DE -Tobias Strobel git@strobeltobias.de +Tobias Strobel git@strobeltobias.de 92% @@ -441,14 +441,14 @@ f(x) = \int_{-\infty}^\infty Русский ru_RU -Artyom Karlov artyom.karlov@gmail.com +Artyom Karlov artyom.karlov@gmail.com 96% 中文 (简体) zh_CN -RCJacH RCJacH@outlook.com +RCJacH RCJacH@outlook.com 76%