mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-05 22:09:52 +08:00
markdown-it: add options for subscript and superscript
This commit is contained in:
parent
b3f874577c
commit
ff4a2d0b91
@ -36,7 +36,7 @@ var getHeadingLevel = function(h) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// There is a VMarkdownitOption struct passed in.
|
// There is a VMarkdownitOption struct passed in.
|
||||||
// var VMarkdownitOption = { html, breaks, linkify };
|
// var VMarkdownitOption = { html, breaks, linkify, sub, sup };
|
||||||
var mdit = window.markdownit({
|
var mdit = window.markdownit({
|
||||||
html: VMarkdownitOption.html,
|
html: VMarkdownitOption.html,
|
||||||
breaks: VMarkdownitOption.breaks,
|
breaks: VMarkdownitOption.breaks,
|
||||||
@ -74,10 +74,15 @@ mdit = mdit.use(window.markdownitHeadingAnchor, {
|
|||||||
});
|
});
|
||||||
|
|
||||||
mdit = mdit.use(window.markdownitTaskLists);
|
mdit = mdit.use(window.markdownitTaskLists);
|
||||||
/*
|
|
||||||
mdit = mdit.use(window.markdownitSub);
|
if (VMarkdownitOption.sub) {
|
||||||
mdit = mdit.use(window.markdownitSup);
|
mdit = mdit.use(window.markdownitSub);
|
||||||
*/
|
}
|
||||||
|
|
||||||
|
if (VMarkdownitOption.sup) {
|
||||||
|
mdit = mdit.use(window.markdownitSup);
|
||||||
|
}
|
||||||
|
|
||||||
mdit = mdit.use(window.markdownitFootnote);
|
mdit = mdit.use(window.markdownitFootnote);
|
||||||
|
|
||||||
var mdHasTocSection = function(markdown) {
|
var mdHasTocSection = function(markdown) {
|
||||||
|
@ -120,14 +120,6 @@ enable_code_block_line_number=false
|
|||||||
; The icon size of tool bar (in pixels)
|
; The icon size of tool bar (in pixels)
|
||||||
tool_bar_icon_size=18
|
tool_bar_icon_size=18
|
||||||
|
|
||||||
; Markdown-it options
|
|
||||||
; Enable HTML tags in source
|
|
||||||
markdownit_opt_html=true
|
|
||||||
; Convert '\n' in paragraphs into <br/>
|
|
||||||
markdownit_opt_breaks=false
|
|
||||||
; Auto-convert URL-like text to links
|
|
||||||
markdownit_opt_linkify=true
|
|
||||||
|
|
||||||
; Default name of the recycle bin of notebook
|
; Default name of the recycle bin of notebook
|
||||||
recycle_bin_folder=_v_recycle_bin
|
recycle_bin_folder=_v_recycle_bin
|
||||||
|
|
||||||
@ -224,6 +216,14 @@ wkhtmltopdfArgs=
|
|||||||
custom_export=
|
custom_export=
|
||||||
|
|
||||||
[web]
|
[web]
|
||||||
|
; String list containing options for Markdown-it
|
||||||
|
; html: enable HTML tags in source
|
||||||
|
; break: convert '\n' in paragraphs into <br/>
|
||||||
|
; linkify: auto-convert URL-like text to links
|
||||||
|
; sub: subscript;
|
||||||
|
; sup: superscript;
|
||||||
|
markdownit_opt=html,linkify
|
||||||
|
|
||||||
; Location and configuration for Mathjax
|
; Location and configuration for Mathjax
|
||||||
mathjax_javascript=https://cdn.bootcss.com/mathjax/2.7.2/MathJax.js?config=TeX-MML-AM_HTMLorMML
|
mathjax_javascript=https://cdn.bootcss.com/mathjax/2.7.2/MathJax.js?config=TeX-MML-AM_HTMLorMML
|
||||||
|
|
||||||
|
@ -644,19 +644,30 @@ QString VUtils::generateHtmlTemplate(const QString &p_template,
|
|||||||
extraFile = "<script src=\"qrc" + VNote::c_markdownitExtraFile + "\"></script>\n" +
|
extraFile = "<script src=\"qrc" + VNote::c_markdownitExtraFile + "\"></script>\n" +
|
||||||
"<script src=\"qrc" + VNote::c_markdownitAnchorExtraFile + "\"></script>\n" +
|
"<script src=\"qrc" + VNote::c_markdownitAnchorExtraFile + "\"></script>\n" +
|
||||||
"<script src=\"qrc" + VNote::c_markdownitTaskListExtraFile + "\"></script>\n" +
|
"<script src=\"qrc" + VNote::c_markdownitTaskListExtraFile + "\"></script>\n" +
|
||||||
/*
|
|
||||||
"<script src=\"qrc" + VNote::c_markdownitSubExtraFile + "\"></script>\n" +
|
|
||||||
"<script src=\"qrc" + VNote::c_markdownitSupExtraFile + "\"></script>\n" +
|
|
||||||
*/
|
|
||||||
"<script src=\"qrc" + VNote::c_markdownitFootnoteExtraFile + "\"></script>\n";
|
"<script src=\"qrc" + VNote::c_markdownitFootnoteExtraFile + "\"></script>\n";
|
||||||
|
|
||||||
MarkdownitOption opt = g_config->getMarkdownitOption();
|
const MarkdownitOption &opt = g_config->getMarkdownitOption();
|
||||||
|
|
||||||
|
if (opt.m_sup) {
|
||||||
|
extraFile += "<script src=\"qrc" + VNote::c_markdownitSupExtraFile + "\"></script>\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (opt.m_sub) {
|
||||||
|
extraFile += "<script src=\"qrc" + VNote::c_markdownitSubExtraFile + "\"></script>\n";
|
||||||
|
}
|
||||||
|
|
||||||
QString optJs = QString("<script>var VMarkdownitOption = {"
|
QString optJs = QString("<script>var VMarkdownitOption = {"
|
||||||
"html: %1, breaks: %2, linkify: %3};"
|
"html: %1,\n"
|
||||||
|
"breaks: %2,\n"
|
||||||
|
"linkify: %3,\n"
|
||||||
|
"sub: %4,\n"
|
||||||
|
"sup: %5 };\n"
|
||||||
"</script>\n")
|
"</script>\n")
|
||||||
.arg(opt.m_html ? "true" : "false")
|
.arg(opt.m_html ? QStringLiteral("true") : QStringLiteral("false"))
|
||||||
.arg(opt.m_breaks ? "true" : "false")
|
.arg(opt.m_breaks ? QStringLiteral("true") : QStringLiteral("false"))
|
||||||
.arg(opt.m_linkify ? "true" : "false");
|
.arg(opt.m_linkify ? QStringLiteral("true") : QStringLiteral("false"))
|
||||||
|
.arg(opt.m_sub ? QStringLiteral("true") : QStringLiteral("false"))
|
||||||
|
.arg(opt.m_sup ? QStringLiteral("true") : QStringLiteral("false"));
|
||||||
extraFile += optJs;
|
extraFile += optJs;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -217,14 +217,8 @@ void VConfigManager::initialize()
|
|||||||
m_toolBarIconSize = getConfigFromSettings("global",
|
m_toolBarIconSize = getConfigFromSettings("global",
|
||||||
"tool_bar_icon_size").toInt();
|
"tool_bar_icon_size").toInt();
|
||||||
|
|
||||||
m_markdownitOptHtml = getConfigFromSettings("global",
|
m_markdownItOpt = MarkdownitOption::fromConfig(getConfigFromSettings("web",
|
||||||
"markdownit_opt_html").toBool();
|
"markdownit_opt").toStringList());
|
||||||
|
|
||||||
m_markdownitOptBreaks = getConfigFromSettings("global",
|
|
||||||
"markdownit_opt_breaks").toBool();
|
|
||||||
|
|
||||||
m_markdownitOptLinkify = getConfigFromSettings("global",
|
|
||||||
"markdownit_opt_linkify").toBool();
|
|
||||||
|
|
||||||
m_recycleBinFolder = getConfigFromSettings("global",
|
m_recycleBinFolder = getConfigFromSettings("global",
|
||||||
"recycle_bin_folder").toString();
|
"recycle_bin_folder").toString();
|
||||||
|
@ -34,19 +34,6 @@ struct VExternalEditor
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
struct MarkdownitOption
|
|
||||||
{
|
|
||||||
MarkdownitOption(bool p_html, bool p_breaks, bool p_linkify)
|
|
||||||
: m_html(p_html), m_breaks(p_breaks), m_linkify(p_linkify)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
bool m_html;
|
|
||||||
bool m_breaks;
|
|
||||||
bool m_linkify;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// Type of heading sequence.
|
// Type of heading sequence.
|
||||||
enum class HeadingSequenceType
|
enum class HeadingSequenceType
|
||||||
{
|
{
|
||||||
@ -328,7 +315,7 @@ public:
|
|||||||
|
|
||||||
int getToolBarIconSize() const;
|
int getToolBarIconSize() const;
|
||||||
|
|
||||||
MarkdownitOption getMarkdownitOption() const;
|
const MarkdownitOption &getMarkdownitOption() const;
|
||||||
void setMarkdownitOption(const MarkdownitOption &p_opt);
|
void setMarkdownitOption(const MarkdownitOption &p_opt);
|
||||||
|
|
||||||
const QString &getRecycleBinFolder() const;
|
const QString &getRecycleBinFolder() const;
|
||||||
@ -774,14 +761,8 @@ private:
|
|||||||
// Icon size of tool bar in pixels.
|
// Icon size of tool bar in pixels.
|
||||||
int m_toolBarIconSize;
|
int m_toolBarIconSize;
|
||||||
|
|
||||||
// Eanble HTML tags in source.
|
// Markdown-it option.
|
||||||
bool m_markdownitOptHtml;
|
MarkdownitOption m_markdownItOpt;
|
||||||
|
|
||||||
// Convert '\n' in paragraphs into <br>.
|
|
||||||
bool m_markdownitOptBreaks;
|
|
||||||
|
|
||||||
// Auto-convert URL-like text to links.
|
|
||||||
bool m_markdownitOptLinkify;
|
|
||||||
|
|
||||||
// Default name of the recycle bin folder of notebook.
|
// Default name of the recycle bin folder of notebook.
|
||||||
QString m_recycleBinFolder;
|
QString m_recycleBinFolder;
|
||||||
@ -1808,35 +1789,19 @@ inline int VConfigManager::getToolBarIconSize() const
|
|||||||
return m_toolBarIconSize;
|
return m_toolBarIconSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline MarkdownitOption VConfigManager::getMarkdownitOption() const
|
inline const MarkdownitOption &VConfigManager::getMarkdownitOption() const
|
||||||
{
|
{
|
||||||
return MarkdownitOption(m_markdownitOptHtml,
|
return m_markdownItOpt;
|
||||||
m_markdownitOptBreaks,
|
|
||||||
m_markdownitOptLinkify);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void VConfigManager::setMarkdownitOption(const MarkdownitOption &p_opt)
|
inline void VConfigManager::setMarkdownitOption(const MarkdownitOption &p_opt)
|
||||||
{
|
{
|
||||||
if (m_markdownitOptHtml != p_opt.m_html) {
|
if (m_markdownItOpt == p_opt) {
|
||||||
m_markdownitOptHtml = p_opt.m_html;
|
return;
|
||||||
setConfigToSettings("global",
|
|
||||||
"markdownit_opt_html",
|
|
||||||
m_markdownitOptHtml);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_markdownitOptBreaks != p_opt.m_breaks) {
|
m_markdownItOpt = p_opt;
|
||||||
m_markdownitOptBreaks = p_opt.m_breaks;
|
setConfigToSettings("web", "markdownit_opt", m_markdownItOpt.toConfig());
|
||||||
setConfigToSettings("global",
|
|
||||||
"markdownit_opt_breaks",
|
|
||||||
m_markdownitOptBreaks);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_markdownitOptLinkify != p_opt.m_linkify) {
|
|
||||||
m_markdownitOptLinkify = p_opt.m_linkify;
|
|
||||||
setConfigToSettings("global",
|
|
||||||
"markdownit_opt_linkify",
|
|
||||||
m_markdownitOptLinkify);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const QString &VConfigManager::getRecycleBinFolder() const
|
inline const QString &VConfigManager::getRecycleBinFolder() const
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
#define VCONSTANTS_H
|
#define VCONSTANTS_H
|
||||||
|
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
#include <QStringList>
|
||||||
|
|
||||||
// Html: rich text file;
|
// Html: rich text file;
|
||||||
// Markdown: Markdown text file;
|
// Markdown: Markdown text file;
|
||||||
@ -151,4 +152,94 @@ enum MarkdownConverterType
|
|||||||
Showdown
|
Showdown
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct MarkdownitOption
|
||||||
|
{
|
||||||
|
MarkdownitOption()
|
||||||
|
: MarkdownitOption(true,
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
false)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
MarkdownitOption(bool p_html,
|
||||||
|
bool p_breaks,
|
||||||
|
bool p_linkify,
|
||||||
|
bool p_sub,
|
||||||
|
bool p_sup)
|
||||||
|
: m_html(p_html),
|
||||||
|
m_breaks(p_breaks),
|
||||||
|
m_linkify(p_linkify),
|
||||||
|
m_sub(p_sub),
|
||||||
|
m_sup(p_sup)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
QStringList toConfig() const
|
||||||
|
{
|
||||||
|
QStringList conf;
|
||||||
|
if (m_html) {
|
||||||
|
conf << "html";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_breaks) {
|
||||||
|
conf << "break";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_linkify) {
|
||||||
|
conf << "linkify";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_sub) {
|
||||||
|
conf << "sub";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_sup) {
|
||||||
|
conf << "sup";
|
||||||
|
}
|
||||||
|
|
||||||
|
return conf;
|
||||||
|
}
|
||||||
|
|
||||||
|
static MarkdownitOption fromConfig(const QStringList &p_conf)
|
||||||
|
{
|
||||||
|
return MarkdownitOption(testOption(p_conf, "html"),
|
||||||
|
testOption(p_conf, "break"),
|
||||||
|
testOption(p_conf, "linkify"),
|
||||||
|
testOption(p_conf, "sub"),
|
||||||
|
testOption(p_conf, "sup"));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool operator==(const MarkdownitOption &p_opt) const
|
||||||
|
{
|
||||||
|
return m_html == p_opt.m_html
|
||||||
|
&& m_breaks == p_opt.m_breaks
|
||||||
|
&& m_linkify == p_opt.m_linkify
|
||||||
|
&& m_sub == p_opt.m_sub
|
||||||
|
&& m_sup == p_opt.m_sup;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Eanble HTML tags in source.
|
||||||
|
bool m_html;
|
||||||
|
|
||||||
|
// Convert '\n' in paragraphs into <br>.
|
||||||
|
bool m_breaks;
|
||||||
|
|
||||||
|
// Auto-convert URL-like text to links.
|
||||||
|
bool m_linkify;
|
||||||
|
|
||||||
|
// Enable subscript.
|
||||||
|
bool m_sub;
|
||||||
|
|
||||||
|
// Enable superscript.
|
||||||
|
bool m_sup;
|
||||||
|
|
||||||
|
private:
|
||||||
|
static bool testOption(const QStringList &p_conf, const QString &p_opt)
|
||||||
|
{
|
||||||
|
return p_conf.contains(p_opt);
|
||||||
|
}
|
||||||
|
};
|
||||||
#endif
|
#endif
|
||||||
|
@ -1523,7 +1523,7 @@ void VMainWindow::initMarkdownitOptionMenu(QMenu *p_menu)
|
|||||||
QMenu *optMenu = p_menu->addMenu(tr("Markdown-it Options"));
|
QMenu *optMenu = p_menu->addMenu(tr("Markdown-it Options"));
|
||||||
optMenu->setToolTipsVisible(true);
|
optMenu->setToolTipsVisible(true);
|
||||||
|
|
||||||
MarkdownitOption opt = g_config->getMarkdownitOption();
|
const MarkdownitOption &opt = g_config->getMarkdownitOption();
|
||||||
|
|
||||||
QAction *htmlAct = new QAction(tr("HTML"), this);
|
QAction *htmlAct = new QAction(tr("HTML"), this);
|
||||||
htmlAct->setToolTip(tr("Enable HTML tags in source"));
|
htmlAct->setToolTip(tr("Enable HTML tags in source"));
|
||||||
@ -1558,9 +1558,33 @@ void VMainWindow::initMarkdownitOptionMenu(QMenu *p_menu)
|
|||||||
g_config->setMarkdownitOption(opt);
|
g_config->setMarkdownitOption(opt);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
QAction *supAct = new QAction(tr("Superscript"), this);
|
||||||
|
supAct->setToolTip(tr("Enable superscript via ^^"));
|
||||||
|
supAct->setCheckable(true);
|
||||||
|
supAct->setChecked(opt.m_sup);
|
||||||
|
connect(supAct, &QAction::triggered,
|
||||||
|
this, [this](bool p_checked) {
|
||||||
|
MarkdownitOption opt = g_config->getMarkdownitOption();
|
||||||
|
opt.m_sup = p_checked;
|
||||||
|
g_config->setMarkdownitOption(opt);
|
||||||
|
});
|
||||||
|
|
||||||
|
QAction *subAct = new QAction(tr("Subscript"), this);
|
||||||
|
subAct->setToolTip(tr("Enable subscript via ~~"));
|
||||||
|
subAct->setCheckable(true);
|
||||||
|
subAct->setChecked(opt.m_sub);
|
||||||
|
connect(subAct, &QAction::triggered,
|
||||||
|
this, [this](bool p_checked) {
|
||||||
|
MarkdownitOption opt = g_config->getMarkdownitOption();
|
||||||
|
opt.m_sub = p_checked;
|
||||||
|
g_config->setMarkdownitOption(opt);
|
||||||
|
});
|
||||||
|
|
||||||
optMenu->addAction(htmlAct);
|
optMenu->addAction(htmlAct);
|
||||||
optMenu->addAction(breaksAct);
|
optMenu->addAction(breaksAct);
|
||||||
optMenu->addAction(linkifyAct);
|
optMenu->addAction(linkifyAct);
|
||||||
|
optMenu->addAction(supAct);
|
||||||
|
optMenu->addAction(subAct);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VMainWindow::initRenderBackgroundMenu(QMenu *menu)
|
void VMainWindow::initRenderBackgroundMenu(QMenu *menu)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user