mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-05 13:59: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.
|
||||
// var VMarkdownitOption = { html, breaks, linkify };
|
||||
// var VMarkdownitOption = { html, breaks, linkify, sub, sup };
|
||||
var mdit = window.markdownit({
|
||||
html: VMarkdownitOption.html,
|
||||
breaks: VMarkdownitOption.breaks,
|
||||
@ -74,10 +74,15 @@ mdit = mdit.use(window.markdownitHeadingAnchor, {
|
||||
});
|
||||
|
||||
mdit = mdit.use(window.markdownitTaskLists);
|
||||
/*
|
||||
|
||||
if (VMarkdownitOption.sub) {
|
||||
mdit = mdit.use(window.markdownitSub);
|
||||
}
|
||||
|
||||
if (VMarkdownitOption.sup) {
|
||||
mdit = mdit.use(window.markdownitSup);
|
||||
*/
|
||||
}
|
||||
|
||||
mdit = mdit.use(window.markdownitFootnote);
|
||||
|
||||
var mdHasTocSection = function(markdown) {
|
||||
|
@ -120,14 +120,6 @@ enable_code_block_line_number=false
|
||||
; The icon size of tool bar (in pixels)
|
||||
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
|
||||
recycle_bin_folder=_v_recycle_bin
|
||||
|
||||
@ -224,6 +216,14 @@ wkhtmltopdfArgs=
|
||||
custom_export=
|
||||
|
||||
[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
|
||||
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" +
|
||||
"<script src=\"qrc" + VNote::c_markdownitAnchorExtraFile + "\"></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";
|
||||
|
||||
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 = {"
|
||||
"html: %1, breaks: %2, linkify: %3};"
|
||||
"html: %1,\n"
|
||||
"breaks: %2,\n"
|
||||
"linkify: %3,\n"
|
||||
"sub: %4,\n"
|
||||
"sup: %5 };\n"
|
||||
"</script>\n")
|
||||
.arg(opt.m_html ? "true" : "false")
|
||||
.arg(opt.m_breaks ? "true" : "false")
|
||||
.arg(opt.m_linkify ? "true" : "false");
|
||||
.arg(opt.m_html ? QStringLiteral("true") : QStringLiteral("false"))
|
||||
.arg(opt.m_breaks ? QStringLiteral("true") : QStringLiteral("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;
|
||||
break;
|
||||
}
|
||||
|
@ -217,14 +217,8 @@ void VConfigManager::initialize()
|
||||
m_toolBarIconSize = getConfigFromSettings("global",
|
||||
"tool_bar_icon_size").toInt();
|
||||
|
||||
m_markdownitOptHtml = getConfigFromSettings("global",
|
||||
"markdownit_opt_html").toBool();
|
||||
|
||||
m_markdownitOptBreaks = getConfigFromSettings("global",
|
||||
"markdownit_opt_breaks").toBool();
|
||||
|
||||
m_markdownitOptLinkify = getConfigFromSettings("global",
|
||||
"markdownit_opt_linkify").toBool();
|
||||
m_markdownItOpt = MarkdownitOption::fromConfig(getConfigFromSettings("web",
|
||||
"markdownit_opt").toStringList());
|
||||
|
||||
m_recycleBinFolder = getConfigFromSettings("global",
|
||||
"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.
|
||||
enum class HeadingSequenceType
|
||||
{
|
||||
@ -328,7 +315,7 @@ public:
|
||||
|
||||
int getToolBarIconSize() const;
|
||||
|
||||
MarkdownitOption getMarkdownitOption() const;
|
||||
const MarkdownitOption &getMarkdownitOption() const;
|
||||
void setMarkdownitOption(const MarkdownitOption &p_opt);
|
||||
|
||||
const QString &getRecycleBinFolder() const;
|
||||
@ -774,14 +761,8 @@ private:
|
||||
// Icon size of tool bar in pixels.
|
||||
int m_toolBarIconSize;
|
||||
|
||||
// Eanble HTML tags in source.
|
||||
bool m_markdownitOptHtml;
|
||||
|
||||
// Convert '\n' in paragraphs into <br>.
|
||||
bool m_markdownitOptBreaks;
|
||||
|
||||
// Auto-convert URL-like text to links.
|
||||
bool m_markdownitOptLinkify;
|
||||
// Markdown-it option.
|
||||
MarkdownitOption m_markdownItOpt;
|
||||
|
||||
// Default name of the recycle bin folder of notebook.
|
||||
QString m_recycleBinFolder;
|
||||
@ -1808,35 +1789,19 @@ inline int VConfigManager::getToolBarIconSize() const
|
||||
return m_toolBarIconSize;
|
||||
}
|
||||
|
||||
inline MarkdownitOption VConfigManager::getMarkdownitOption() const
|
||||
inline const MarkdownitOption &VConfigManager::getMarkdownitOption() const
|
||||
{
|
||||
return MarkdownitOption(m_markdownitOptHtml,
|
||||
m_markdownitOptBreaks,
|
||||
m_markdownitOptLinkify);
|
||||
return m_markdownItOpt;
|
||||
}
|
||||
|
||||
inline void VConfigManager::setMarkdownitOption(const MarkdownitOption &p_opt)
|
||||
{
|
||||
if (m_markdownitOptHtml != p_opt.m_html) {
|
||||
m_markdownitOptHtml = p_opt.m_html;
|
||||
setConfigToSettings("global",
|
||||
"markdownit_opt_html",
|
||||
m_markdownitOptHtml);
|
||||
if (m_markdownItOpt == p_opt) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_markdownitOptBreaks != p_opt.m_breaks) {
|
||||
m_markdownitOptBreaks = p_opt.m_breaks;
|
||||
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);
|
||||
}
|
||||
m_markdownItOpt = p_opt;
|
||||
setConfigToSettings("web", "markdownit_opt", m_markdownItOpt.toConfig());
|
||||
}
|
||||
|
||||
inline const QString &VConfigManager::getRecycleBinFolder() const
|
||||
|
@ -2,6 +2,7 @@
|
||||
#define VCONSTANTS_H
|
||||
|
||||
#include <QString>
|
||||
#include <QStringList>
|
||||
|
||||
// Html: rich text file;
|
||||
// Markdown: Markdown text file;
|
||||
@ -151,4 +152,94 @@ enum MarkdownConverterType
|
||||
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
|
||||
|
@ -1523,7 +1523,7 @@ void VMainWindow::initMarkdownitOptionMenu(QMenu *p_menu)
|
||||
QMenu *optMenu = p_menu->addMenu(tr("Markdown-it Options"));
|
||||
optMenu->setToolTipsVisible(true);
|
||||
|
||||
MarkdownitOption opt = g_config->getMarkdownitOption();
|
||||
const MarkdownitOption &opt = g_config->getMarkdownitOption();
|
||||
|
||||
QAction *htmlAct = new QAction(tr("HTML"), this);
|
||||
htmlAct->setToolTip(tr("Enable HTML tags in source"));
|
||||
@ -1558,9 +1558,33 @@ void VMainWindow::initMarkdownitOptionMenu(QMenu *p_menu)
|
||||
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(breaksAct);
|
||||
optMenu->addAction(linkifyAct);
|
||||
optMenu->addAction(supAct);
|
||||
optMenu->addAction(subAct);
|
||||
}
|
||||
|
||||
void VMainWindow::initRenderBackgroundMenu(QMenu *menu)
|
||||
|
Loading…
x
Reference in New Issue
Block a user