Browse Source

export: fix wkhtmltopdf table-of-contents in Chinese

Le Tan 3 years ago
parent
commit
ff7cf0f24e

+ 2 - 1
src/export/webviewexporter.cpp

@@ -17,6 +17,7 @@
 #include <utils/fileutils.h>
 #include <utils/webutils.h>
 #include <utils/processutils.h>
+#include <utils/htmlutils.h>
 #include <core/file.h>
 
 using namespace vnotex;
@@ -348,7 +349,7 @@ void WebViewExporter::prepareWkhtmltopdfArguments(const ExportPdfOption &p_pdfOp
     if (p_pdfOption.m_addTableOfContents) {
         m_wkhtmltopdfArgs << "toc";
         m_wkhtmltopdfArgs << "--toc-text-size-shrink" << "1.0";
-        m_wkhtmltopdfArgs << "--toc-header-text" << tr("Table of Contents");
+        m_wkhtmltopdfArgs << "--toc-header-text" << HtmlUtils::unicodeEncode(tr("Table of Contents"));
     }
 }
 

+ 14 - 0
src/utils/htmlutils.cpp

@@ -16,3 +16,17 @@ QString HtmlUtils::escapeHtml(QString p_text)
     p_text.replace(">", "&gt;").replace("<", "&lt;").replace("&", "&amp;");
     return p_text;
 }
+
+QString HtmlUtils::unicodeEncode(const QString &p_text)
+{
+    QString encodedStr;
+    for (const auto ch : p_text) {
+        if (ch.unicode() > 255) {
+            encodedStr += QString("&#%1;").arg(static_cast<int>(ch.unicode()));
+        } else {
+            encodedStr += ch;
+        }
+    }
+
+    return encodedStr;
+}

+ 2 - 0
src/utils/htmlutils.h

@@ -13,6 +13,8 @@ namespace vnotex
         static bool hasOnlyImgTag(const QString &p_html);
 
         static QString escapeHtml(QString p_text);
+
+        static QString unicodeEncode(const QString &p_text);
     };
 }
 

+ 66 - 68
src/widgets/toolbarhelper.cpp

@@ -300,51 +300,6 @@ QToolBar *ToolBarHelper::setupSettingsToolBar(MainWindow *p_win, QToolBar *p_too
     return tb;
 }
 
-void ToolBarHelper::setupConfigurationMenu(QMenu *p_menu)
-{
-    auto menu = p_menu->addMenu(MainWindow::tr("Configuration"));
-
-    menu->addAction(MainWindow::tr("Edit User Configuration File"),
-                    menu,
-                    []() {
-                        auto file = ConfigMgr::getInst().getConfigFilePath(ConfigMgr::Source::User);
-                        auto paras = QSharedPointer<FileOpenParameters>::create();
-                        paras->m_sessionEnabled = false;
-                        emit VNoteX::getInst().openFileRequested(file, paras);
-                    });
-
-    menu->addAction(MainWindow::tr("Open User Configuration Folder"),
-                    menu,
-                    []() {
-                        auto folderPath = ConfigMgr::getInst().getUserFolder();
-                        WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(folderPath));
-                    });
-
-    menu->addAction(MainWindow::tr("Open Default Configuration Folder"),
-                    menu,
-                    []() {
-                        auto folderPath = ConfigMgr::getInst().getAppFolder();
-                        WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(folderPath));
-                    });
-
-    menu->addSeparator();
-
-    auto act = menu->addAction(MainWindow::tr("Edit Markdown User Styles"),
-                               menu,
-                               []() {
-                                   const auto file = ConfigMgr::getInst().getUserMarkdownUserStyleFile();
-                                   auto paras = QSharedPointer<FileOpenParameters>::create();
-                                   paras->m_sessionEnabled = false;
-                                   paras->m_hooks[FileOpenParameters::PostSave] = []() {
-                                       qDebug() << "post save";
-                                       const auto &markdownConfig = ConfigMgr::getInst().getEditorConfig().getMarkdownEditorConfig();
-                                       HtmlTemplateHelper::updateMarkdownViewerTemplate(markdownConfig, true);
-                                   };
-                                   emit VNoteX::getInst().openFileRequested(file, paras);
-                               });
-    act->setStatusTip(MainWindow::tr("Edit the user styles of Markdown editor read mode"));
-}
-
 static const QString c_fgPalette = QStringLiteral("widgets#toolbar#icon#fg");
 static const QString c_disabledPalette = QStringLiteral("widgets#toolbar#icon#disabled#fg");
 static const QString c_dangerousPalette = QStringLiteral("widgets#toolbar#icon#danger#fg");
@@ -543,36 +498,61 @@ void ToolBarHelper::setupSettingsButton(MainWindow *p_win, QToolBar *p_toolBar)
 
     menu->addSeparator();
 
-    setupConfigurationMenu(menu);
+    menu->addAction(MainWindow::tr("Edit User Configuration File"),
+                    menu,
+                    []() {
+                        auto file = ConfigMgr::getInst().getConfigFilePath(ConfigMgr::Source::User);
+                        auto paras = QSharedPointer<FileOpenParameters>::create();
+                        paras->m_sessionEnabled = false;
+                        emit VNoteX::getInst().openFileRequested(file, paras);
+                    });
 
-    menu->addSeparator();
+    menu->addAction(MainWindow::tr("Open User Configuration Folder"),
+                    menu,
+                    []() {
+                        auto folderPath = ConfigMgr::getInst().getUserFolder();
+                        WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(folderPath));
+                    });
 
-    menu->addAction(MainWindow::tr("Reset Main Window Layout"),
+    menu->addAction(MainWindow::tr("Open Default Configuration Folder"),
                     menu,
-                    [p_win]() {
-                        p_win->resetStateAndGeometry();
+                    []() {
+                        auto folderPath = ConfigMgr::getInst().getAppFolder();
+                        WidgetUtils::openUrlByDesktop(QUrl::fromLocalFile(folderPath));
                     });
 
     menu->addSeparator();
 
-    menu->addAction(MainWindow::tr("Restart"),
+    {
+        auto act = menu->addAction(MainWindow::tr("Edit Markdown User Styles"),
+                                   menu,
+                                   []() {
+                                       const auto file = ConfigMgr::getInst().getUserMarkdownUserStyleFile();
+                                       auto paras = QSharedPointer<FileOpenParameters>::create();
+                                       paras->m_sessionEnabled = false;
+                                       paras->m_hooks[FileOpenParameters::PostSave] = []() {
+                                           qDebug() << "post save";
+                                           const auto &markdownConfig = ConfigMgr::getInst().getEditorConfig().getMarkdownEditorConfig();
+                                           HtmlTemplateHelper::updateMarkdownViewerTemplate(markdownConfig, true);
+                                       };
+                                       emit VNoteX::getInst().openFileRequested(file, paras);
+                                   });
+        act->setStatusTip(MainWindow::tr("Edit the user styles of Markdown editor read mode"));
+    }
+
+    menu->addSeparator();
+
+    menu->addAction(MainWindow::tr("Reset Main Window Layout"),
                     menu,
                     [p_win]() {
-                        p_win->restart();
+                        p_win->resetStateAndGeometry();
                     });
-
-    auto quitAct = menu->addAction(MainWindow::tr("Quit"),
-                                   menu,
-                                   [p_win]() {
-                                       p_win->quitApp();
-                                   });
-    quitAct->setMenuRole(QAction::QuitRole);
-    WidgetUtils::addActionShortcut(quitAct,
-                                   coreConfig.getShortcut(CoreConfig::Shortcut::Quit));
 }
 
 void ToolBarHelper::setupMenuButton(MainWindow *p_win, QToolBar *p_toolBar)
 {
+    const auto &coreConfig = ConfigMgr::getInst().getCoreConfig();
+
     auto act = p_toolBar->addAction(generateIcon("menu.svg"), MainWindow::tr("Menu"));
     auto btn = dynamic_cast<QToolButton *>(p_toolBar->widgetForAction(act));
     Q_ASSERT(btn);
@@ -637,13 +617,6 @@ void ToolBarHelper::setupMenuButton(MainWindow *p_win, QToolBar *p_toolBar)
 
         helpMenu->addSeparator();
 
-        helpMenu->addAction(MainWindow::tr("Check for Updates"),
-                            helpMenu,
-                            [p_win]() {
-                                Updater updater(p_win);
-                                updater.exec();
-                            });
-
         helpMenu->addAction(MainWindow::tr("Contributors"),
                             helpMenu,
                             []() {
@@ -664,4 +637,29 @@ void ToolBarHelper::setupMenuButton(MainWindow *p_win, QToolBar *p_toolBar)
         MainWindow::connect(aboutQtAct, &QAction::triggered,
                             qApp, &QApplication::aboutQt);
     }
+
+    menu->addSeparator();
+
+    menu->addAction(MainWindow::tr("Check for Updates"),
+                    menu,
+                    [p_win]() {
+                        Updater updater(p_win);
+                        updater.exec();
+                    });
+
+
+    menu->addAction(MainWindow::tr("Restart"),
+                    menu,
+                    [p_win]() {
+                        p_win->restart();
+                    });
+
+    auto quitAct = menu->addAction(MainWindow::tr("Quit"),
+                                   menu,
+                                   [p_win]() {
+                                       p_win->quitApp();
+                                   });
+    quitAct->setMenuRole(QAction::QuitRole);
+    WidgetUtils::addActionShortcut(quitAct,
+                                   coreConfig.getShortcut(CoreConfig::Shortcut::Quit));
 }

+ 0 - 2
src/widgets/toolbarhelper.h

@@ -37,8 +37,6 @@ namespace vnotex
 
         static void updateQuickAccessMenu(QMenu *p_menu);
 
-        static void setupConfigurationMenu(QMenu *p_menu);
-
         static void setupExpandButton(MainWindow *p_win, QToolBar *p_toolBar);
 
         static void setupSettingsButton(MainWindow *p_win, QToolBar *p_toolBar);