mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-05 13:59:52 +08:00
support Markdown-it option configs
This commit is contained in:
parent
6addbbfedb
commit
5c038e1f76
@ -35,9 +35,12 @@ var getHeadingLevel = function(h) {
|
||||
return level;
|
||||
}
|
||||
|
||||
// There is a VMarkdownitOption struct passed in.
|
||||
// var VMarkdownitOption = { html, breaks, linkify };
|
||||
var mdit = window.markdownit({
|
||||
html: true,
|
||||
linkify: true,
|
||||
html: VMarkdownitOption.html,
|
||||
breaks: VMarkdownitOption.breaks,
|
||||
linkify: VMarkdownitOption.linkify,
|
||||
typographer: true,
|
||||
langPrefix: 'lang-',
|
||||
highlight: function(str, lang) {
|
||||
|
@ -99,6 +99,14 @@ 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
|
||||
|
||||
[session]
|
||||
tools_dock_checked=true
|
||||
|
||||
|
@ -504,6 +504,7 @@ QString VUtils::generateHtmlTemplate(MarkdownConverterType p_conType, bool p_exp
|
||||
break;
|
||||
|
||||
case MarkdownConverterType::MarkdownIt:
|
||||
{
|
||||
jsFile = "qrc" + VNote::c_markdownitJsFile;
|
||||
extraFile = "<script src=\"qrc" + VNote::c_markdownitExtraFile + "\"></script>\n" +
|
||||
"<script src=\"qrc" + VNote::c_markdownitAnchorExtraFile + "\"></script>\n" +
|
||||
@ -511,7 +512,17 @@ QString VUtils::generateHtmlTemplate(MarkdownConverterType p_conType, bool p_exp
|
||||
"<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();
|
||||
QString optJs = QString("<script>var VMarkdownitOption = {"
|
||||
"html: %1, breaks: %2, linkify: %3};"
|
||||
"</script>\n")
|
||||
.arg(opt.m_html ? "true" : "false")
|
||||
.arg(opt.m_breaks ? "true" : "false")
|
||||
.arg(opt.m_linkify ? "true" : "false");
|
||||
extraFile += optJs;
|
||||
break;
|
||||
}
|
||||
|
||||
case MarkdownConverterType::Showdown:
|
||||
jsFile = "qrc" + VNote::c_showdownJsFile;
|
||||
|
@ -188,6 +188,15 @@ 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();
|
||||
}
|
||||
|
||||
void VConfigManager::readPredefinedColorsFromSettings()
|
||||
|
@ -29,6 +29,18 @@ struct VColor
|
||||
QString rgb; // 'FFFFFF', without '#'
|
||||
};
|
||||
|
||||
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;
|
||||
};
|
||||
|
||||
class VConfigManager : public QObject
|
||||
{
|
||||
public:
|
||||
@ -249,6 +261,9 @@ public:
|
||||
|
||||
int getToolBarIconSize() const;
|
||||
|
||||
MarkdownitOption getMarkdownitOption() const;
|
||||
void setMarkdownitOption(const MarkdownitOption &p_opt);
|
||||
|
||||
// Return the configured key sequence of @p_operation.
|
||||
// Return empty if there is no corresponding config.
|
||||
QString getShortcutKeySequence(const QString &p_operation) const;
|
||||
@ -507,6 +522,15 @@ 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;
|
||||
|
||||
// The name of the config file in each directory, obsolete.
|
||||
// Use c_dirConfigFile instead.
|
||||
static const QString c_obsoleteDirConfigFile;
|
||||
@ -1322,4 +1346,35 @@ inline int VConfigManager::getToolBarIconSize() const
|
||||
return m_toolBarIconSize;
|
||||
}
|
||||
|
||||
inline MarkdownitOption VConfigManager::getMarkdownitOption() const
|
||||
{
|
||||
return MarkdownitOption(m_markdownitOptHtml,
|
||||
m_markdownitOptBreaks,
|
||||
m_markdownitOptLinkify);
|
||||
}
|
||||
|
||||
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_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);
|
||||
}
|
||||
}
|
||||
|
||||
#endif // VCONFIGMANAGER_H
|
||||
|
@ -522,58 +522,12 @@ void VMainWindow::initMarkdownMenu()
|
||||
{
|
||||
QMenu *markdownMenu = menuBar()->addMenu(tr("&Markdown"));
|
||||
markdownMenu->setToolTipsVisible(true);
|
||||
QMenu *converterMenu = markdownMenu->addMenu(tr("&Converter"));
|
||||
converterMenu->setToolTipsVisible(true);
|
||||
|
||||
QActionGroup *converterAct = new QActionGroup(this);
|
||||
QAction *markedAct = new QAction(tr("Marked"), converterAct);
|
||||
markedAct->setToolTip(tr("Use Marked to convert Markdown to HTML (re-open current tabs to make it work)"));
|
||||
markedAct->setCheckable(true);
|
||||
markedAct->setData(int(MarkdownConverterType::Marked));
|
||||
initConverterMenu(markdownMenu);
|
||||
|
||||
QAction *hoedownAct = new QAction(tr("Hoedown"), converterAct);
|
||||
hoedownAct->setToolTip(tr("Use Hoedown to convert Markdown to HTML (re-open current tabs to make it work)"));
|
||||
hoedownAct->setCheckable(true);
|
||||
hoedownAct->setData(int(MarkdownConverterType::Hoedown));
|
||||
initMarkdownitOptionMenu(markdownMenu);
|
||||
|
||||
QAction *markdownitAct = new QAction(tr("Markdown-it"), converterAct);
|
||||
markdownitAct->setToolTip(tr("Use Markdown-it to convert Markdown to HTML (re-open current tabs to make it work)"));
|
||||
markdownitAct->setCheckable(true);
|
||||
markdownitAct->setData(int(MarkdownConverterType::MarkdownIt));
|
||||
|
||||
QAction *showdownAct = new QAction(tr("Showdown"), converterAct);
|
||||
showdownAct->setToolTip(tr("Use Showdown to convert Markdown to HTML (re-open current tabs to make it work)"));
|
||||
showdownAct->setCheckable(true);
|
||||
showdownAct->setData(int(MarkdownConverterType::Showdown));
|
||||
|
||||
connect(converterAct, &QActionGroup::triggered,
|
||||
this, &VMainWindow::changeMarkdownConverter);
|
||||
converterMenu->addAction(hoedownAct);
|
||||
converterMenu->addAction(markedAct);
|
||||
converterMenu->addAction(markdownitAct);
|
||||
converterMenu->addAction(showdownAct);
|
||||
|
||||
MarkdownConverterType converterType = g_config->getMdConverterType();
|
||||
switch (converterType) {
|
||||
case MarkdownConverterType::Marked:
|
||||
markedAct->setChecked(true);
|
||||
break;
|
||||
|
||||
case MarkdownConverterType::Hoedown:
|
||||
hoedownAct->setChecked(true);
|
||||
break;
|
||||
|
||||
case MarkdownConverterType::MarkdownIt:
|
||||
markdownitAct->setChecked(true);
|
||||
break;
|
||||
|
||||
case MarkdownConverterType::Showdown:
|
||||
showdownAct->setChecked(true);
|
||||
break;
|
||||
|
||||
default:
|
||||
Q_ASSERT(false);
|
||||
}
|
||||
markdownMenu->addSeparator();
|
||||
|
||||
initRenderStyleMenu(markdownMenu);
|
||||
|
||||
@ -1169,6 +1123,107 @@ void VMainWindow::initPredefinedColorPixmaps()
|
||||
}
|
||||
}
|
||||
|
||||
void VMainWindow::initConverterMenu(QMenu *p_menu)
|
||||
{
|
||||
QMenu *converterMenu = p_menu->addMenu(tr("&Converter"));
|
||||
converterMenu->setToolTipsVisible(true);
|
||||
|
||||
QActionGroup *converterAct = new QActionGroup(this);
|
||||
QAction *markedAct = new QAction(tr("Marked"), converterAct);
|
||||
markedAct->setToolTip(tr("Use Marked to convert Markdown to HTML (re-open current tabs to make it work)"));
|
||||
markedAct->setCheckable(true);
|
||||
markedAct->setData(int(MarkdownConverterType::Marked));
|
||||
|
||||
QAction *hoedownAct = new QAction(tr("Hoedown"), converterAct);
|
||||
hoedownAct->setToolTip(tr("Use Hoedown to convert Markdown to HTML (re-open current tabs to make it work)"));
|
||||
hoedownAct->setCheckable(true);
|
||||
hoedownAct->setData(int(MarkdownConverterType::Hoedown));
|
||||
|
||||
QAction *markdownitAct = new QAction(tr("Markdown-it"), converterAct);
|
||||
markdownitAct->setToolTip(tr("Use Markdown-it to convert Markdown to HTML (re-open current tabs to make it work)"));
|
||||
markdownitAct->setCheckable(true);
|
||||
markdownitAct->setData(int(MarkdownConverterType::MarkdownIt));
|
||||
|
||||
QAction *showdownAct = new QAction(tr("Showdown"), converterAct);
|
||||
showdownAct->setToolTip(tr("Use Showdown to convert Markdown to HTML (re-open current tabs to make it work)"));
|
||||
showdownAct->setCheckable(true);
|
||||
showdownAct->setData(int(MarkdownConverterType::Showdown));
|
||||
|
||||
connect(converterAct, &QActionGroup::triggered,
|
||||
this, &VMainWindow::changeMarkdownConverter);
|
||||
converterMenu->addAction(hoedownAct);
|
||||
converterMenu->addAction(markedAct);
|
||||
converterMenu->addAction(markdownitAct);
|
||||
converterMenu->addAction(showdownAct);
|
||||
|
||||
MarkdownConverterType converterType = g_config->getMdConverterType();
|
||||
switch (converterType) {
|
||||
case MarkdownConverterType::Marked:
|
||||
markedAct->setChecked(true);
|
||||
break;
|
||||
|
||||
case MarkdownConverterType::Hoedown:
|
||||
hoedownAct->setChecked(true);
|
||||
break;
|
||||
|
||||
case MarkdownConverterType::MarkdownIt:
|
||||
markdownitAct->setChecked(true);
|
||||
break;
|
||||
|
||||
case MarkdownConverterType::Showdown:
|
||||
showdownAct->setChecked(true);
|
||||
break;
|
||||
|
||||
default:
|
||||
Q_ASSERT(false);
|
||||
}
|
||||
}
|
||||
|
||||
void VMainWindow::initMarkdownitOptionMenu(QMenu *p_menu)
|
||||
{
|
||||
QMenu *optMenu = p_menu->addMenu(tr("Markdown-it Options"));
|
||||
optMenu->setToolTipsVisible(true);
|
||||
|
||||
MarkdownitOption opt = g_config->getMarkdownitOption();
|
||||
|
||||
QAction *htmlAct = new QAction(tr("HTML"), this);
|
||||
htmlAct->setToolTip(tr("Enable HTML tags in source"));
|
||||
htmlAct->setCheckable(true);
|
||||
htmlAct->setChecked(opt.m_html);
|
||||
connect(htmlAct, &QAction::triggered,
|
||||
this, [this](bool p_checked) {
|
||||
MarkdownitOption opt = g_config->getMarkdownitOption();
|
||||
opt.m_html = p_checked;
|
||||
g_config->setMarkdownitOption(opt);
|
||||
});
|
||||
|
||||
QAction *breaksAct = new QAction(tr("Line Break"), this);
|
||||
breaksAct->setToolTip(tr("Convert '\\n' in paragraphs into line break"));
|
||||
breaksAct->setCheckable(true);
|
||||
breaksAct->setChecked(opt.m_breaks);
|
||||
connect(breaksAct, &QAction::triggered,
|
||||
this, [this](bool p_checked) {
|
||||
MarkdownitOption opt = g_config->getMarkdownitOption();
|
||||
opt.m_breaks = p_checked;
|
||||
g_config->setMarkdownitOption(opt);
|
||||
});
|
||||
|
||||
QAction *linkifyAct = new QAction(tr("Linkify"), this);
|
||||
linkifyAct->setToolTip(tr("Convert URL-like text into links"));
|
||||
linkifyAct->setCheckable(true);
|
||||
linkifyAct->setChecked(opt.m_linkify);
|
||||
connect(linkifyAct, &QAction::triggered,
|
||||
this, [this](bool p_checked) {
|
||||
MarkdownitOption opt = g_config->getMarkdownitOption();
|
||||
opt.m_linkify = p_checked;
|
||||
g_config->setMarkdownitOption(opt);
|
||||
});
|
||||
|
||||
optMenu->addAction(htmlAct);
|
||||
optMenu->addAction(breaksAct);
|
||||
optMenu->addAction(linkifyAct);
|
||||
}
|
||||
|
||||
void VMainWindow::initRenderBackgroundMenu(QMenu *menu)
|
||||
{
|
||||
QActionGroup *renderBackgroundAct = new QActionGroup(this);
|
||||
|
@ -154,6 +154,8 @@ private:
|
||||
void initPredefinedColorPixmaps();
|
||||
void initRenderBackgroundMenu(QMenu *menu);
|
||||
void initRenderStyleMenu(QMenu *p_menu);
|
||||
void initConverterMenu(QMenu *p_menu);
|
||||
void initMarkdownitOptionMenu(QMenu *p_menu);
|
||||
void initEditorBackgroundMenu(QMenu *menu);
|
||||
|
||||
// Init the Line Number submenu in Edit menu.
|
||||
|
Loading…
x
Reference in New Issue
Block a user