diff --git a/src/resources/hoedown.js b/src/resources/hoedown.js
index 1dfa86b7..f9995efa 100644
--- a/src/resources/hoedown.js
+++ b/src/resources/hoedown.js
@@ -23,5 +23,9 @@ var updateHtml = function(html) {
}
}
}
+
+ if (VEnableMathjax && (typeof MathJax != 'undefined')) {
+ MathJax.Hub.Queue(["Typeset", MathJax.Hub, placeholder]);
+ }
}
diff --git a/src/resources/markdown-it.js b/src/resources/markdown-it.js
index 21620581..bfd7fc30 100644
--- a/src/resources/markdown-it.js
+++ b/src/resources/markdown-it.js
@@ -169,5 +169,8 @@ var updateText = function(text) {
placeholder.innerHTML = html;
handleToc(needToc);
renderMermaid('lang-mermaid');
+ if (VEnableMathjax) {
+ MathJax.Hub.Queue(["Typeset", MathJax.Hub, placeholder]);
+ }
}
diff --git a/src/resources/markdown_template.js b/src/resources/markdown_template.js
index 3b2972c0..bc7ef3c6 100644
--- a/src/resources/markdown_template.js
+++ b/src/resources/markdown_template.js
@@ -24,6 +24,10 @@ if (typeof VEnableMermaid == 'undefined') {
});
}
+if (typeof VEnableMathjax == 'undefined') {
+ VEnableMathjax = false;
+}
+
var scrollToAnchor = function(anchor) {
var anc = document.getElementById(anchor);
if (anc != null) {
diff --git a/src/resources/marked.js b/src/resources/marked.js
index bcb7d4d0..42450c7b 100644
--- a/src/resources/marked.js
+++ b/src/resources/marked.js
@@ -122,5 +122,8 @@ var updateText = function(text) {
placeholder.innerHTML = html;
handleToc(needToc);
renderMermaid('lang-mermaid');
+ if (VEnableMathjax) {
+ MathJax.Hub.Queue(["Typeset", MathJax.Hub, placeholder]);
+ }
};
diff --git a/src/resources/vnote.ini b/src/resources/vnote.ini
index 2f5f5134..3f0bede5 100644
--- a/src/resources/vnote.ini
+++ b/src/resources/vnote.ini
@@ -14,6 +14,7 @@ editor_font_size=12
; 0 - Hoedown, 1 - Marked, 2 - Markdown-it
markdown_converter=2
enable_mermaid=true
+enable_mathjax=true
[session]
tools_dock_checked=true
diff --git a/src/vconfigmanager.cpp b/src/vconfigmanager.cpp
index 32960fe6..13eaf33e 100644
--- a/src/vconfigmanager.cpp
+++ b/src/vconfigmanager.cpp
@@ -49,7 +49,7 @@ void VConfigManager::initialize()
markdownExtensions = hoedown_extensions(HOEDOWN_EXT_TABLES | HOEDOWN_EXT_FENCED_CODE |
HOEDOWN_EXT_HIGHLIGHT | HOEDOWN_EXT_AUTOLINK |
- HOEDOWN_EXT_QUOTE | HOEDOWN_EXT_MATH);
+ HOEDOWN_EXT_QUOTE | HOEDOWN_EXT_MATH | HOEDOWN_EXT_MATH_EXPLICIT);
mdConverterType = (MarkdownConverterType)getConfigFromSettings("global", "markdown_converter").toInt();
tabStopWidth = getConfigFromSettings("global", "tab_stop_width").toInt();
@@ -85,6 +85,8 @@ void VConfigManager::initialize()
m_language = getConfigFromSettings("global", "language").toString();
m_enableMermaid = getConfigFromSettings("global", "enable_mermaid").toBool();
+
+ m_enableMathjax = getConfigFromSettings("global", "enable_mathjax").toBool();
}
void VConfigManager::readPredefinedColorsFromSettings()
diff --git a/src/vconfigmanager.h b/src/vconfigmanager.h
index 71ad23c6..60e5ec2d 100644
--- a/src/vconfigmanager.h
+++ b/src/vconfigmanager.h
@@ -120,6 +120,9 @@ public:
inline bool getEnableMermaid() const;
inline void setEnableMermaid(bool p_enabled);
+ inline bool getEnableMathjax() const;
+ inline void setEnableMathjax(bool p_enabled);
+
private:
void updateMarkdownEditStyle();
QVariant getConfigFromSettings(const QString §ion, const QString &key);
@@ -181,6 +184,9 @@ private:
// Enable Mermaid.
bool m_enableMermaid;
+ // Enable Mathjax.
+ bool m_enableMathjax;
+
// The name of the config file in each directory
static const QString dirConfigFileName;
// The name of the default configuration file
@@ -512,4 +518,18 @@ inline void VConfigManager::setEnableMermaid(bool p_enabled)
setConfigToSettings("global", "enable_mermaid", m_enableMermaid);
}
+inline bool VConfigManager::getEnableMathjax() const
+{
+ return m_enableMathjax;
+}
+
+inline void VConfigManager::setEnableMathjax(bool p_enabled)
+{
+ if (m_enableMathjax == p_enabled) {
+ return;
+ }
+ m_enableMathjax = p_enabled;
+ setConfigToSettings("global", "enable_mathjax", m_enableMathjax);
+}
+
#endif // VCONFIGMANAGER_H
diff --git a/src/vedittab.cpp b/src/vedittab.cpp
index 9700ccbb..ce091358 100644
--- a/src/vedittab.cpp
+++ b/src/vedittab.cpp
@@ -304,6 +304,17 @@ void VEditTab::setupMarkdownPreview()
"\n";
}
+ if (vconfig.getEnableMathjax()) {
+ extraFile += "\n"
+ "\n" +
+ "\n";
+ }
+
QString htmlTemplate = VNote::s_markdownTemplate;
htmlTemplate.replace(jsHolder, jsFile);
if (!extraFile.isEmpty()) {
diff --git a/src/vmainwindow.cpp b/src/vmainwindow.cpp
index 59cb7c47..0b59b05f 100644
--- a/src/vmainwindow.cpp
+++ b/src/vmainwindow.cpp
@@ -330,6 +330,15 @@ void VMainWindow::initMarkdownMenu()
markdownMenu->addAction(mermaidAct);
mermaidAct->setChecked(vconfig.getEnableMermaid());
+
+ QAction *mathjaxAct = new QAction(tr("Math&jax"), this);
+ mathjaxAct->setStatusTip(tr("Enable Mathjax for math support in Markdown"));
+ mathjaxAct->setCheckable(true);
+ connect(mathjaxAct, &QAction::triggered,
+ this, &VMainWindow::enableMathjax);
+ markdownMenu->addAction(mathjaxAct);
+
+ mathjaxAct->setChecked(vconfig.getEnableMathjax());
}
void VMainWindow::initViewMenu()
@@ -607,6 +616,11 @@ void VMainWindow::enableMermaid(bool p_checked)
vconfig.setEnableMermaid(p_checked);
}
+void VMainWindow::enableMathjax(bool p_checked)
+{
+ vconfig.setEnableMathjax(p_checked);
+}
+
void VMainWindow::changeHighlightCursorLine(bool p_checked)
{
vconfig.setHighlightCursorLine(p_checked);
diff --git a/src/vmainwindow.h b/src/vmainwindow.h
index 60a194ae..8a12f013 100644
--- a/src/vmainwindow.h
+++ b/src/vmainwindow.h
@@ -62,6 +62,7 @@ private slots:
void handleFindDialogTextChanged(const QString &p_text, uint p_options);
void openFindDialog();
void enableMermaid(bool p_checked);
+ void enableMathjax(bool p_checked);
protected:
void closeEvent(QCloseEvent *event) Q_DECL_OVERRIDE;
diff --git a/src/vnote.cpp b/src/vnote.cpp
index de9b2010..e56a5652 100644
--- a/src/vnote.cpp
+++ b/src/vnote.cpp
@@ -22,6 +22,7 @@ const QString VNote::c_mermaidApiJsFile = ":/utils/mermaid/mermaidAPI.min.js";
const QString VNote::c_mermaidCssFile = ":/utils/mermaid/mermaid.css";
const QString VNote::c_mermaidDarkCssFile = ":/utils/mermaid/mermaid.dark.css";
const QString VNote::c_mermaidForestCssFile = ":/utils/mermaid/mermaid.forest.css";
+const QString VNote::c_mathjaxJsFile = "https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-MML-AM_CHTML";
VNote::VNote(QObject *parent)
: QObject(parent), m_mainWindow(dynamic_cast(parent))
diff --git a/src/vnote.h b/src/vnote.h
index 7c0ddb4d..de488596 100644
--- a/src/vnote.h
+++ b/src/vnote.h
@@ -46,6 +46,9 @@ public:
static const QString c_mermaidDarkCssFile;
static const QString c_mermaidForestCssFile;
+ // Mathjax
+ static const QString c_mathjaxJsFile;
+
inline const QVector > &getPalette() const;
void initPalette(QPalette palette);
QString getColorFromPalette(const QString &p_name) const;