diff --git a/src/dialog/vexportdialog.cpp b/src/dialog/vexportdialog.cpp index 1f1f7330..6b2d80d6 100644 --- a/src/dialog/vexportdialog.cpp +++ b/src/dialog/vexportdialog.cpp @@ -25,6 +25,8 @@ extern VNote *g_vnote; QString VExportDialog::s_lastOutputFolder; +ExportFormat VExportDialog::s_lastExportFormat = ExportFormat::Markdown; + #define LOGERR(x) do { QString msg = (x); \ VUtils::addErrMsg(p_errMsg, msg); \ appendLogLine(msg); \ @@ -79,6 +81,18 @@ void VExportDialog::setupUI() m_rendererCB->setToolTip(tr("Choose converter to render Markdown")); m_rendererCB->setSizeAdjustPolicy(QComboBox::AdjustToContents); + // Markdown rendering background. + m_renderBgCB = VUtils::getComboBox(); + m_renderBgCB->setToolTip(tr("Choose rendering background color for Markdown")); + + // Markdown rendering style. + m_renderStyleCB = VUtils::getComboBox(); + m_renderStyleCB->setToolTip(tr("Choose rendering style for Markdown")); + + // Markdown rendering code block style. + m_renderCodeBlockStyleCB = VUtils::getComboBox(); + m_renderCodeBlockStyleCB->setToolTip(tr("Choose rendering code block style for Markdown")); + // Output directory. m_outputEdit = new VLineEdit(s_lastOutputFolder); connect(m_outputEdit, &QLineEdit::textChanged, @@ -128,6 +142,9 @@ void VExportDialog::setupUI() basicLayout->addRow(tr("Notes to export:"), m_srcCB); basicLayout->addRow(tr("Target format:"), m_formatCB); basicLayout->addRow(tr("Markdown renderer:"), m_rendererCB); + basicLayout->addRow(tr("Markdown rendering background:"), m_renderBgCB); + basicLayout->addRow(tr("Markdown rendering style:"), m_renderStyleCB); + basicLayout->addRow(tr("Markdown rendering code block style:"), m_renderCodeBlockStyleCB); basicLayout->addRow(tr("Output directory:"), outputLayout); m_basicBox->setLayout(basicLayout); @@ -209,6 +226,7 @@ void VExportDialog::initUIFields(MarkdownConverterType p_renderer) m_formatCB->addItem(tr("Markdown"), (int)ExportFormat::Markdown); m_formatCB->addItem(tr("HTML"), (int)ExportFormat::HTML); m_formatCB->addItem(tr("PDF"), (int)ExportFormat::PDF); + m_formatCB->setCurrentIndex(m_formatCB->findData((int)s_lastExportFormat)); // Markdown renderer. m_rendererCB->addItem(tr("Hoedown"), MarkdownConverterType::Hoedown); @@ -216,6 +234,34 @@ void VExportDialog::initUIFields(MarkdownConverterType p_renderer) m_rendererCB->addItem(tr("Markdown-it"), MarkdownConverterType::MarkdownIt); m_rendererCB->addItem(tr("Showdown"), MarkdownConverterType::Showdown); m_rendererCB->setCurrentIndex(m_rendererCB->findData(p_renderer)); + + // Markdown rendering background. + m_renderBgCB->addItem(tr("System"), "System"); + const QVector &bgColors = g_config->getCustomColors(); + for (int i = 0; i < bgColors.size(); ++i) { + m_renderBgCB->addItem(bgColors[i].m_name, bgColors[i].m_name); + } + + m_renderBgCB->setCurrentIndex( + m_renderBgCB->findData(g_config->getCurRenderBackgroundColor())); + + // Markdown rendering style. + QList styles = g_config->getCssStyles(); + for (auto const &style : styles) { + m_renderStyleCB->addItem(style, style); + } + + m_renderStyleCB->setCurrentIndex( + m_renderStyleCB->findData(g_config->getCssStyle())); + + // Markdown rendering code block style. + QList cbStyles = g_config->getCodeBlockCssStyles(); + for (auto const &style : cbStyles) { + m_renderCodeBlockStyleCB->addItem(style, style); + } + + m_renderCodeBlockStyleCB->setCurrentIndex( + m_renderCodeBlockStyleCB->findData(g_config->getCodeBlockCssStyle())); } void VExportDialog::startExport() @@ -233,8 +279,13 @@ void VExportDialog::startExport() ExportOption opt((ExportSource)m_srcCB->currentData().toInt(), (ExportFormat)m_formatCB->currentData().toInt(), (MarkdownConverterType)m_rendererCB->currentData().toInt(), + m_renderBgCB->currentData().toString(), + m_renderStyleCB->currentData().toString(), + m_renderCodeBlockStyleCB->currentData().toString(), &m_pageLayout); + s_lastExportFormat = opt.m_format; + m_consoleEdit->clear(); appendLogLine(tr("Export to %1.").arg(outputFolder)); diff --git a/src/dialog/vexportdialog.h b/src/dialog/vexportdialog.h index f42fffae..1c648098 100644 --- a/src/dialog/vexportdialog.h +++ b/src/dialog/vexportdialog.h @@ -42,10 +42,16 @@ struct ExportOption ExportOption(ExportSource p_source, ExportFormat p_format, MarkdownConverterType p_renderer, + const QString &p_renderBg, + const QString &p_renderStyle, + const QString &p_renderCodeBlockStyle, QPageLayout *p_layout) : m_source(p_source), m_format(p_format), m_renderer(p_renderer), + m_renderBg(p_renderBg), + m_renderStyle(p_renderStyle), + m_renderCodeBlockStyle(p_renderCodeBlockStyle), m_layout(p_layout) { } @@ -53,6 +59,12 @@ struct ExportOption ExportSource m_source; ExportFormat m_format; MarkdownConverterType m_renderer; + + // Background name. + QString m_renderBg; + + QString m_renderStyle; + QString m_renderCodeBlockStyle; QPageLayout *m_layout; }; @@ -132,6 +144,12 @@ private: QComboBox *m_rendererCB; + QComboBox *m_renderBgCB; + + QComboBox *m_renderStyleCB; + + QComboBox *m_renderCodeBlockStyleCB; + VLineEdit *m_outputEdit; QPushButton *m_browseBtn; @@ -175,6 +193,9 @@ private: // Last output folder path. static QString s_lastOutputFolder; + + // Last export format. + static ExportFormat s_lastExportFormat; }; #endif // VEXPORTDIALOG_H diff --git a/src/resources/docs/shortcuts_en.md b/src/resources/docs/shortcuts_en.md index f6f37a11..9f8cbdd0 100644 --- a/src/resources/docs/shortcuts_en.md +++ b/src/resources/docs/shortcuts_en.md @@ -150,7 +150,7 @@ ToolsDock=T ; Close current note CloseNote=X ; Show shortcuts help document -ShortcutsHelp=? +ShortcutsHelp=Shift+? ; Flush the log file FlushLogFile=";" ; Show opened files list @@ -234,7 +234,9 @@ Move current tab one split window right. Evaluate current cursor word or selected text as magic words. - `S` Apply a snippet in edit mode. -- `?` +- `O` +Export notes. +- `Shift+?` Display shortcuts documentation. ## Navigation Mode diff --git a/src/resources/docs/shortcuts_zh.md b/src/resources/docs/shortcuts_zh.md index 8feaf108..c942fe6b 100644 --- a/src/resources/docs/shortcuts_zh.md +++ b/src/resources/docs/shortcuts_zh.md @@ -151,7 +151,7 @@ ToolsDock=T ; Close current note CloseNote=X ; Show shortcuts help document -ShortcutsHelp=? +ShortcutsHelp=Shift+? ; Flush the log file FlushLogFile=";" ; Show opened files list @@ -235,7 +235,9 @@ RemoveSplit=R 编辑模式中,将当前光标所在词或者所选文本进行幻词解析。 - `S` 在编辑模式中应用片段。 -- `?` +- `O` +导出笔记。 +- `Shift+?` 显示本快捷键说明。 ## 展览模式 diff --git a/src/resources/themes/v_moonlight/v_moonlight.css b/src/resources/themes/v_moonlight/v_moonlight.css index b47a373d..19593110 100644 --- a/src/resources/themes/v_moonlight/v_moonlight.css +++ b/src/resources/themes/v_moonlight/v_moonlight.css @@ -88,6 +88,7 @@ code { font-family: Consolas, Monaco, Monospace, Courier; font-size: 16px; color: #98C379; + word-break: break-all; } pre code { diff --git a/src/resources/themes/v_pure/v_pure.css b/src/resources/themes/v_pure/v_pure.css index e7cb065b..8c5a26a7 100644 --- a/src/resources/themes/v_pure/v_pure.css +++ b/src/resources/themes/v_pure/v_pure.css @@ -88,6 +88,7 @@ code { font-family: Consolas, Monaco, Monospace, Courier; font-size: 16px; color: #8E24AA; + word-break: break-all; } pre code { diff --git a/src/resources/themes/v_white/v_white.css b/src/resources/themes/v_white/v_white.css index 857b3f48..23dc001e 100644 --- a/src/resources/themes/v_white/v_white.css +++ b/src/resources/themes/v_white/v_white.css @@ -87,6 +87,7 @@ code { font-family: Consolas, Monaco, Monospace, Courier; font-size: 16px; color: #8E24AA; + word-break: break-all; } pre code { diff --git a/src/resources/vnote.ini b/src/resources/vnote.ini index 8c483771..b58f9246 100644 --- a/src/resources/vnote.ini +++ b/src/resources/vnote.ini @@ -297,7 +297,7 @@ ToolsDock=T ; Close current note CloseNote=X ; Show shortcuts help document -ShortcutsHelp=? +ShortcutsHelp=Shift+? ; Flush the log file FlushLogFile=";" ; Show opened files list @@ -334,6 +334,8 @@ RemoveSplit=R MagicWord=M ; Prompt for user to apply a snippet ApplySnippet=S +; Open export dialog +Export=O [external_editors] ; Define external editors which could be called to edit notes diff --git a/src/utils/vutils.cpp b/src/utils/vutils.cpp index a52b70ca..94f9bfe5 100644 --- a/src/utils/vutils.cpp +++ b/src/utils/vutils.cpp @@ -572,11 +572,31 @@ DocType VUtils::docTypeFromName(const QString &p_name) QString VUtils::generateSimpleHtmlTemplate(const QString &p_body) { - QString html = VNote::s_simpleHtmlTemplate; + QString html(VNote::s_simpleHtmlTemplate); return html.replace(HtmlHolder::c_bodyHolder, p_body); } -QString VUtils::generateHtmlTemplate(MarkdownConverterType p_conType, bool p_exportPdf) +QString VUtils::generateHtmlTemplate(MarkdownConverterType p_conType) +{ + return generateHtmlTemplate(VNote::s_markdownTemplate, p_conType); +} + +QString VUtils::generateHtmlTemplate(MarkdownConverterType p_conType, + const QString &p_renderBg, + const QString &p_renderStyle, + const QString &p_renderCodeBlockStyle, + bool p_isPDF) +{ + QString templ = VNote::generateHtmlTemplate(g_config->getRenderBackgroundColor(p_renderBg), + g_config->getCssStyleUrl(p_renderStyle), + g_config->getCodeBlockCssStyleUrl(p_renderCodeBlockStyle), + p_isPDF); + + return generateHtmlTemplate(templ, p_conType); +} + +QString VUtils::generateHtmlTemplate(const QString &p_template, + MarkdownConverterType p_conType) { QString jsFile, extraFile; switch (p_conType) { @@ -661,13 +681,7 @@ QString VUtils::generateHtmlTemplate(MarkdownConverterType p_conType, bool p_exp extraFile += "\n"; - QString htmlTemplate; - if (p_exportPdf) { - htmlTemplate = VNote::s_markdownTemplatePDF; - } else { - htmlTemplate = VNote::s_markdownTemplate; - } - + QString htmlTemplate(p_template); htmlTemplate.replace(HtmlHolder::c_JSHolder, jsFile); if (!extraFile.isEmpty()) { htmlTemplate.replace(HtmlHolder::c_extraHolder, extraFile); diff --git a/src/utils/vutils.h b/src/utils/vutils.h index 064fb69c..21e97169 100644 --- a/src/utils/vutils.h +++ b/src/utils/vutils.h @@ -165,7 +165,14 @@ public: static DocType docTypeFromName(const QString &p_name); // Generate HTML template. - static QString generateHtmlTemplate(MarkdownConverterType p_conType, bool p_exportPdf); + static QString generateHtmlTemplate(MarkdownConverterType p_conType); + + // @p_renderBg is the background name. + static QString generateHtmlTemplate(MarkdownConverterType p_conType, + const QString &p_renderBg, + const QString &p_renderStyle, + const QString &p_renderCodeBlockStyle, + bool p_isPDF); static QString generateSimpleHtmlTemplate(const QString &p_body); @@ -338,6 +345,9 @@ private: static bool deleteFile(const QString &p_recycleBinFolderPath, const QString &p_path); + static QString generateHtmlTemplate(const QString &p_template, + MarkdownConverterType p_conType); + // static QVector> s_availableLanguages; }; diff --git a/src/vconfigmanager.cpp b/src/vconfigmanager.cpp index eaf51ed8..1914c494 100644 --- a/src/vconfigmanager.cpp +++ b/src/vconfigmanager.cpp @@ -859,8 +859,22 @@ QString VConfigManager::getCssStyleUrl() const const_cast(this)->m_cssStyle = VPalette::themeCssStyle(getThemeFile()); } + QString cssPath = getCssStyleUrl(m_cssStyle); + qDebug() << "use css style file" << cssPath; + return cssPath; +} + +QString VConfigManager::getCssStyleUrl(const QString &p_style) const +{ + Q_ASSERT(!m_themes.isEmpty()); + Q_ASSERT(!m_cssStyles.isEmpty()); + + if (p_style.isEmpty()) { + return QString(); + } + QString cssPath; - auto it = m_cssStyles.find(m_cssStyle); + auto it = m_cssStyles.find(p_style); if (it != m_cssStyles.end()) { cssPath = it.value(); } @@ -872,7 +886,6 @@ QString VConfigManager::getCssStyleUrl() const cssPath = cssUrl.toString(); } - qDebug() << "use css style file" << cssPath; return cssPath; } @@ -887,8 +900,22 @@ QString VConfigManager::getCodeBlockCssStyleUrl() const VPalette::themeCodeBlockCssStyle(getThemeFile()); } + QString cssPath = getCodeBlockCssStyleUrl(m_codeBlockCssStyle); + qDebug() << "use code block css style file" << cssPath; + return cssPath; +} + +QString VConfigManager::getCodeBlockCssStyleUrl(const QString &p_style) const +{ + Q_ASSERT(!m_themes.isEmpty()); + Q_ASSERT(!m_codeBlockCssStyles.isEmpty()); + + if (p_style.isEmpty()) { + return QString(); + } + QString cssPath; - auto it = m_codeBlockCssStyles.find(m_codeBlockCssStyle); + auto it = m_codeBlockCssStyles.find(p_style); if (it != m_codeBlockCssStyles.end()) { cssPath = it.value(); } @@ -900,7 +927,6 @@ QString VConfigManager::getCodeBlockCssStyleUrl() const cssPath = cssUrl.toString(); } - qDebug() << "use code block css style file" << cssPath; return cssPath; } @@ -1435,3 +1461,17 @@ void VConfigManager::clearGroupOfSettings(QSettings *p_settings, const QString & p_settings->remove(""); p_settings->endGroup(); } + +QString VConfigManager::getRenderBackgroundColor(const QString &p_bgName) const +{ + if (p_bgName != "System") { + for (int i = 0; i < m_customColors.size(); ++i) { + if (m_customColors[i].m_name == p_bgName) { + return m_customColors[i].m_color; + } + } + } + + return QString(); +} + diff --git a/src/vconfigmanager.h b/src/vconfigmanager.h index ee72e3d6..7632a74f 100644 --- a/src/vconfigmanager.h +++ b/src/vconfigmanager.h @@ -117,8 +117,12 @@ public: // Get the css style URL for web view. QString getCssStyleUrl() const; + QString getCssStyleUrl(const QString &p_style) const; + QString getCodeBlockCssStyleUrl() const; + QString getCodeBlockCssStyleUrl(const QString &p_style) const; + const QString &getEditorStyle() const; void setEditorStyle(const QString &p_style); @@ -172,6 +176,9 @@ public: const QString &getCurRenderBackgroundColor() const; void setCurRenderBackgroundColor(const QString &colorName); + // Return the color string of background @p_bgName. + QString getRenderBackgroundColor(const QString &p_bgName) const; + bool getToolsDockChecked() const; void setToolsDockChecked(bool p_checked); diff --git a/src/vexporter.cpp b/src/vexporter.cpp index 9a747dbf..0095483d 100644 --- a/src/vexporter.cpp +++ b/src/vexporter.cpp @@ -24,7 +24,11 @@ VExporter::VExporter(QWidget *p_parent) void VExporter::prepareExport(const ExportOption &p_opt) { - m_htmlTemplate = VUtils::generateHtmlTemplate(p_opt.m_renderer, true); + m_htmlTemplate = VUtils::generateHtmlTemplate(p_opt.m_renderer, + p_opt.m_renderBg, + p_opt.m_renderStyle, + p_opt.m_renderCodeBlockStyle, + p_opt.m_format == ExportFormat::PDF); m_pageLayout = *(p_opt.m_layout); } diff --git a/src/vmainwindow.cpp b/src/vmainwindow.cpp index c52948d6..7b5dc9f3 100644 --- a/src/vmainwindow.cpp +++ b/src/vmainwindow.cpp @@ -186,6 +186,10 @@ void VMainWindow::registerCaptainAndNavigationTargets() g_config->getCaptainShortcutKeySequence("FlushLogFile"), this, flushLogFileByCaptain); + m_captain->registerCaptainTarget(tr("Export"), + g_config->getCaptainShortcutKeySequence("Export"), + this, + exportByCaptain); } void VMainWindow::setupUI() @@ -774,6 +778,11 @@ void VMainWindow::initHelpMenu() QAction *shortcutAct = new QAction(tr("&Shortcuts Help"), this); shortcutAct->setToolTip(tr("View information about shortcut keys")); + QString keyText = VUtils::getCaptainShortcutSequenceText("ShortcutsHelp"); + if (!keyText.isEmpty()) { + shortcutAct->setText(tr("&Shortcuts Help\t%1").arg(keyText)); + } + connect(shortcutAct, &QAction::triggered, this, &VMainWindow::shortcutsHelp); @@ -1002,6 +1011,10 @@ void VMainWindow::initFileMenu() // Export as PDF. m_exportAct = new QAction(tr("E&xport"), this); m_exportAct->setToolTip(tr("Export notes")); + QString keyText = VUtils::getCaptainShortcutSequenceText("Export"); + if (!keyText.isEmpty()) { + m_exportAct->setText(tr("E&xport\t%1").arg(keyText)); + } connect(m_exportAct, &QAction::triggered, this, &VMainWindow::handleExportAct); @@ -1313,6 +1326,11 @@ void VMainWindow::initDockWindows() QAction *toggleAct = toolDock->toggleViewAction(); toggleAct->setToolTip(tr("Toggle the tools dock widget")); + QString keyText = VUtils::getCaptainShortcutSequenceText("ToolsDock"); + if (!keyText.isEmpty()) { + toggleAct->setText(tr("%1\t%2").arg(toggleAct->text()).arg(keyText)); + } + m_viewMenu->addAction(toggleAct); } @@ -2695,6 +2713,16 @@ bool VMainWindow::flushLogFileByCaptain(void *p_target, void *p_data) return true; } +bool VMainWindow::exportByCaptain(void *p_target, void *p_data) +{ + Q_UNUSED(p_data); + + VMainWindow *obj = static_cast(p_target); + QTimer::singleShot(50, obj, SLOT(handleExportAct())); + + return true; +} + void VMainWindow::promptNewNotebookIfEmpty() { if (vnote->getNotebooks().isEmpty()) { diff --git a/src/vmainwindow.h b/src/vmainwindow.h index 7fc05c80..e41d7de3 100644 --- a/src/vmainwindow.h +++ b/src/vmainwindow.h @@ -286,6 +286,8 @@ private: static bool flushLogFileByCaptain(void *p_target, void *p_data); + static bool exportByCaptain(void *p_target, void *p_data); + // End Captain mode functions. VNote *vnote; diff --git a/src/vmdtab.cpp b/src/vmdtab.cpp index 9a1ddd0f..1bb48387 100644 --- a/src/vmdtab.cpp +++ b/src/vmdtab.cpp @@ -421,7 +421,7 @@ void VMdTab::setupMarkdownViewer() page->setWebChannel(channel); - m_webViewer->setHtml(VUtils::generateHtmlTemplate(m_mdConType, false), + m_webViewer->setHtml(VUtils::generateHtmlTemplate(m_mdConType), m_file->getBaseUrl()); m_stacks->addWidget(m_webViewer); @@ -1053,7 +1053,7 @@ void VMdTab::handleFileOrDirectoryChange(bool p_isFile, UpdateAction p_act) { // Reload the web view with new base URL. m_headerFromEditMode = m_currentHeader; - m_webViewer->setHtml(VUtils::generateHtmlTemplate(m_mdConType, false), + m_webViewer->setHtml(VUtils::generateHtmlTemplate(m_mdConType), m_file->getBaseUrl()); if (m_editor) { diff --git a/src/vnote.cpp b/src/vnote.cpp index 8b74dcd6..270313fc 100644 --- a/src/vnote.cpp +++ b/src/vnote.cpp @@ -25,8 +25,6 @@ QString VNote::s_simpleHtmlTemplate; QString VNote::s_markdownTemplate; -QString VNote::s_markdownTemplatePDF; - QString VNote::s_sloganTemplate = "

Hi Markdown, I'm VNote

"; const QString VNote::c_hoedownJsFile = ":/resources/hoedown.js"; @@ -95,26 +93,16 @@ void VNote::updateSimpletHtmlTemplate() s_simpleHtmlTemplate.replace(cssHolder, g_config->getCssStyleUrl()); } -void VNote::updateTemplate() +QString VNote::generateHtmlTemplate(const QString &p_renderBg, + const QString &p_renderStyleUrl, + const QString &p_codeBlockStyleUrl, + bool p_isPDF) { const QString c_markdownTemplatePath(":/resources/markdown_template.html"); - // Get background color - QString color; - const QString &curRenderBg = g_config->getCurRenderBackgroundColor(); - const QVector &customColors = g_config->getCustomColors(); - if (curRenderBg != "System") { - for (int i = 0; i < customColors.size(); ++i) { - if (customColors[i].m_name == curRenderBg) { - color = customColors[i].m_color; - break; - } - } - } - QString cssStyle; - if (!color.isEmpty()) { - cssStyle += "body { background-color: " + color + " !important; }\n"; + if (!p_renderBg.isEmpty()) { + cssStyle += "body { background-color: " + p_renderBg + " !important; }\n"; } if (g_config->getEnableImageConstraint()) { @@ -126,29 +114,42 @@ void VNote::updateTemplate() const QString cssHolder("CSS_PLACE_HOLDER"); const QString codeBlockCssHolder("HIGHLIGHTJS_CSS_PLACE_HOLDER"); - s_markdownTemplate = VUtils::readFileFromDisk(c_markdownTemplatePath); - g_palette->fillStyle(s_markdownTemplate); + QString templ = VUtils::readFileFromDisk(c_markdownTemplatePath); + g_palette->fillStyle(templ); // Must replace the code block holder first. - s_markdownTemplate.replace(codeBlockCssHolder, g_config->getCodeBlockCssStyleUrl()); - s_markdownTemplate.replace(cssHolder, g_config->getCssStyleUrl()); + templ.replace(codeBlockCssHolder, p_codeBlockStyleUrl); + templ.replace(cssHolder, p_renderStyleUrl); - s_markdownTemplatePDF = s_markdownTemplate; + if (p_isPDF) { + // Shoudl not display scrollbar in PDF. + cssStyle += "pre { white-space: pre-wrap !important; " + "word-break: break-all !important; }\n" + "pre code { white-space: pre-wrap !important; " + "word-break: break-all !important; }\n" + "code { word-break: break-all !important; }\n"; + if (!g_config->getEnableImageConstraint()) { + // Constain the image width by force in PDF, otherwise, the PDF will + // be cut off. + cssStyle += "img { max-width: 100% !important; height: auto !important; }\n"; + } + } if (!cssStyle.isEmpty()) { - s_markdownTemplate.replace(styleHolder, cssStyle); + templ.replace(styleHolder, cssStyle); } - // Shoudl not display scrollbar in PDF. - cssStyle += "pre { white-space: pre-wrap !important; " - "word-break: break-all !important; }\n"; - if (!g_config->getEnableImageConstraint()) { - // Constain the image width by force in PDF, otherwise, the PDF will - // be cut off. - cssStyle += "img { max-width: 100% !important; height: auto !important; }\n"; - } + return templ; +} - s_markdownTemplatePDF.replace(styleHolder, cssStyle); +void VNote::updateTemplate() +{ + QString renderBg = g_config->getRenderBackgroundColor(g_config->getCurRenderBackgroundColor()); + + s_markdownTemplate = generateHtmlTemplate(renderBg, + g_config->getCssStyleUrl(), + g_config->getCodeBlockCssStyleUrl(), + false); } const QVector &VNote::getNotebooks() const diff --git a/src/vnote.h b/src/vnote.h index 6c15194c..7a10dbce 100644 --- a/src/vnote.h +++ b/src/vnote.h @@ -35,8 +35,6 @@ public: static QString s_markdownTemplate; - static QString s_markdownTemplatePDF; - // Hoedown static const QString c_hoedownJsFile; @@ -101,6 +99,12 @@ public: void freeOrphanFiles(); + // @p_renderBg: background color, empty to not specify given color. + static QString generateHtmlTemplate(const QString &p_renderBg, + const QString &p_renderStyleUrl, + const QString &p_codeBlockStyleUrl, + bool p_isPDF); + public slots: void updateTemplate();