From 5df695c1eaa05539b5ba936d65629dbce23475da Mon Sep 17 00:00:00 2001 From: Bibliobibulus <5019902+bibliobibulus@users.noreply.github.com> Date: Sun, 1 Mar 2020 10:24:44 +0900 Subject: [PATCH] Support MathJaX v3 (#1221) * Support MathJaX v3 * Update configuration of MathJaX * Update config to export HTML * Reset numbering * Add scale option * Fix typo --- src/resources/hoedown.js | 15 +-- src/resources/markdown-it.js | 32 +++--- src/resources/markdown_template.html | 9 +- src/resources/markdown_template.js | 2 +- src/resources/marked.js | 15 +-- src/resources/mathjax_preview.js | 25 ++--- src/resources/mathjax_preview_template.html | 12 ++- src/resources/showdown.js | 15 +-- src/resources/vnote.ini | 2 +- src/utils/vutils.cpp | 108 ++++++++------------ 10 files changed, 116 insertions(+), 119 deletions(-) diff --git a/src/resources/hoedown.js b/src/resources/hoedown.js index 625c25cc..ebf56437 100644 --- a/src/resources/hoedown.js +++ b/src/resources/hoedown.js @@ -100,13 +100,14 @@ var updateHtml = function(html) { // finishLoading logic. // MathJax may be not loaded for now. if (VEnableMathjax && (typeof MathJax != "undefined")) { - try { - MathJax.Hub.Queue(["resetEquationNumbers",MathJax.InputJax.TeX], - ["Typeset", MathJax.Hub, contentDiv, postProcessMathJax]); - } catch (err) { - content.setLog("err: " + err); - finishOneAsyncJob(); - } + MathJax.texReset(); + MathJax + .typesetPromise([contentDiv]) + .then(postProcessMathJax) + .catch(function (err) { + content.setLog("err: " + err); + finishOneAsyncJob(); + }); } else { finishOneAsyncJob(); } diff --git a/src/resources/markdown-it.js b/src/resources/markdown-it.js index 4a31f5dd..b71fa67d 100644 --- a/src/resources/markdown-it.js +++ b/src/resources/markdown-it.js @@ -195,13 +195,14 @@ var updateText = function(text) { eles.push(texToRender[i]); } - try { - MathJax.Hub.Queue(["resetEquationNumbers",MathJax.InputJax.TeX], - ["Typeset", MathJax.Hub, eles, postProcessMathJax]); - } catch (err) { - content.setLog("err: " + err); - finishOneAsyncJob(); - } + MathJax.texReset(); + MathJax + .typesetPromise(eles) + .then(postProcessMathJax) + .catch(function (err) { + content.setLog("err: " + err); + finishOneAsyncJob(); + }); } else { finishOneAsyncJob(); } @@ -244,7 +245,7 @@ var handleMetaData = function() { }; var postProcessMathJaxWhenMathjaxReady = function() { - var all = MathJax.Hub.getAllJax(); + var all = Array.from(MathJax.startup.document.math); for (var i = 0; i < all.length; ++i) { var node = all[i].SourceElement().parentNode; if (VRemoveMathjaxScript) { @@ -281,11 +282,12 @@ var handleMathjaxReady = function() { eles.push(texToRender[i]); } - try { - MathJax.Hub.Queue(["resetEquationNumbers",MathJax.InputJax.TeX], - ["Typeset", MathJax.Hub, eles, postProcessMathJaxWhenMathjaxReady]); - } catch (err) { - content.setLog("err: " + err); - finishOneAsyncJob(); - } + MathJax.texReset(); + MathJax + .typesetPromise(eles) + .then(postProcessMathJaxWhenMathjaxReady) + .catch(function (err) { + content.setLog("err: " + err); + finishOneAsyncJob(); + }); }; diff --git a/src/resources/markdown_template.html b/src/resources/markdown_template.html index 0850bb3d..0ff658cb 100644 --- a/src/resources/markdown_template.html +++ b/src/resources/markdown_template.html @@ -29,7 +29,14 @@ - + + diff --git a/src/resources/markdown_template.js b/src/resources/markdown_template.js index c5658e87..f7b153a0 100644 --- a/src/resources/markdown_template.js +++ b/src/resources/markdown_template.js @@ -1385,7 +1385,7 @@ var getHtmlWithInlineStyles = function(container) { // Will be called after MathJax rendering finished. // Make
math
to

math

var postProcessMathJax = function() { - var all = MathJax.Hub.getAllJax(); + var all = Array.from(MathJax.startup.document.math); for (var i = 0; i < all.length; ++i) { var node = all[i].SourceElement().parentNode; if (VRemoveMathjaxScript) { diff --git a/src/resources/marked.js b/src/resources/marked.js index b9eed7c5..af010708 100644 --- a/src/resources/marked.js +++ b/src/resources/marked.js @@ -79,13 +79,14 @@ var updateText = function(text) { // If you add new logics after handling MathJax, please pay attention to // finishLoading logic. if (VEnableMathjax) { - try { - MathJax.Hub.Queue(["resetEquationNumbers",MathJax.InputJax.TeX], - ["Typeset", MathJax.Hub, contentDiv, postProcessMathJax]); - } catch (err) { - content.setLog("err: " + err); - finishOneAsyncJob(); - } + MathJax.texReset(); + MathJax + .typesetPromise([contentDiv]) + .then(postProcessMathJax) + .catch(function (err) { + content.setLog("err: " + err); + finishOneAsyncJob(); + }); } else { finishOneAsyncJob(); } diff --git a/src/resources/mathjax_preview.js b/src/resources/mathjax_preview.js index b4c4309b..4c247261 100644 --- a/src/resources/mathjax_preview.js +++ b/src/resources/mathjax_preview.js @@ -71,19 +71,16 @@ var previewMathJax = function(identifier, id, timeStamp, text, isHtml) { if (text.indexOf('$$') !== -1) { isBlock = true; } - - try { - MathJax.Hub.Queue(["resetEquationNumbers",MathJax.InputJax.TeX], - ["Typeset", - MathJax.Hub, - p, - [postProcessMathJax, identifier, id, timeStamp, p, isBlock]]); - } catch (err) { - content.setLog("err: " + err); - content.mathjaxResultReady(identifier, id, timeStamp, 'png', ''); - contentDiv.removeChild(p); - delete p; - } + MathJax + .typesetPromise([p]) + .then(function () { + postProcessMathJax(identifier, id, timeStamp, p, isBlock); + }).catch(function (err) { + content.setLog("err: " + err); + content.mathjaxResultReady(identifier, id, timeStamp, 'png', ''); + contentDiv.removeChild(p); + delete p; + }); }; var postProcessMathJax = function(identifier, id, timeStamp, container, isBlock) { @@ -93,7 +90,7 @@ var postProcessMathJax = function(identifier, id, timeStamp, container, isBlock) return; } - var hei = (isBlock ? container.clientHeight * 1.5 : container.clientHeight * 1.6) + 5; + var hei = container.clientHeight * 1.5 + (isBlock ? 20 : 5); domtoimage.toPng(container, { height: hei }).then(function (dataUrl) { var png = dataUrl.substring(dataUrl.indexOf(',') + 1); content.mathjaxResultReady(identifier, id, timeStamp, 'png', png); diff --git a/src/resources/mathjax_preview_template.html b/src/resources/mathjax_preview_template.html index 54024b78..69e37351 100644 --- a/src/resources/mathjax_preview_template.html +++ b/src/resources/mathjax_preview_template.html @@ -10,7 +10,17 @@ - + + diff --git a/src/resources/showdown.js b/src/resources/showdown.js index d2dc7567..1a22e8f7 100644 --- a/src/resources/showdown.js +++ b/src/resources/showdown.js @@ -134,13 +134,14 @@ var updateText = function(text) { // If you add new logics after handling MathJax, please pay attention to // finishLoading logic. if (VEnableMathjax) { - try { - MathJax.Hub.Queue(["resetEquationNumbers",MathJax.InputJax.TeX], - ["Typeset", MathJax.Hub, contentDiv, postProcessMathJax]); - } catch (err) { - content.setLog("err: " + err); - finishOneAsyncJob(); - } + MathJax.texReset(); + MathJax + .typesetPromise([contentDiv]) + .then(postProcessMathJax) + .catch(function (err) { + content.setLog("err: " + err); + finishOneAsyncJob(); + }); } else { finishOneAsyncJob(); } diff --git a/src/resources/vnote.ini b/src/resources/vnote.ini index 56ef82c2..c714fab6 100644 --- a/src/resources/vnote.ini +++ b/src/resources/vnote.ini @@ -388,7 +388,7 @@ custom_export= markdownit_opt=html,break,linkify,metadata ; Location and configuration for Mathjax -mathjax_javascript=https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-MML-AM_HTMLorMML +mathjax_javascript=https://cdnjs.cloudflare.com/ajax/libs/mathjax/3.0.1/es5/tex-mml-chtml.js ; Styles to be removed when copied ; style1,style2,style3 diff --git a/src/utils/vutils.cpp b/src/utils/vutils.cpp index cc69520a..c25789f7 100644 --- a/src/utils/vutils.cpp +++ b/src/utils/vutils.cpp @@ -788,23 +788,24 @@ QString VUtils::generateHtmlTemplate(const QString &p_template, mj.replace(reg, QString("\\1%1").arg("TeX-MML-AM_SVG")); } - extraFile += "\n" "\n" + "\n"; @@ -898,39 +899,22 @@ QString VUtils::generateExportHtmlTemplate(const QString &p_renderBg, QString templ = VNote::generateExportHtmlTemplate(g_config->getRenderBackgroundColor(p_renderBg)); QString extra; if (p_includeMathJax) { - extra += "\n"; - QString mj = g_config->getMathjaxJavascript(); // Chante MathJax to be rendered as SVG. - QRegExp reg("(Mathjax\\.js\\?config=)\\S+", Qt::CaseInsensitive); - mj.replace(reg, QString("\\1%1").arg("TeX-MML-AM_SVG")); + QRegExp reg("tex-mml-chtml\\.js\\S+", Qt::CaseInsensitive); + mj.replace(reg, QString("tex-mml-svg.js")); extra += "\n"; } @@ -996,26 +980,20 @@ QString VUtils::generateMathJaxPreviewTemplate() "\n"; // MathJax. - extraFile += "\n"; + extraFile += "\n" + "\n";