{sSynop}: {text}
\n" - else: - sSynop = self._localLookup("Synopsis") - return f"{sSynop}: {text}
\n" + sSynop = self._localLookup("Synopsis") + return f"{sSynop}: {text}
\n" def _formatComments(self, text: str) -> str: """Apply HTML formatting to comments.""" @@ -477,11 +473,7 @@ class ToHtml(Tokenizer): if not valid or not bits or bits[0] not in nwLabels.KEY_NAME: return "" - if self._genMode == self.M_PREVIEW: - result = f" " - else: - result = f" " - + result = f" " if len(bits) > 1: if bits[0] == nwKeyWords.TAG_KEY: result += f"{bits[1]}" diff --git a/novelwriter/core/tokenizer.py b/novelwriter/core/tokenizer.py index 63518ca7..4f4a8378 100644 --- a/novelwriter/core/tokenizer.py +++ b/novelwriter/core/tokenizer.py @@ -167,9 +167,6 @@ class Tokenizer(ABC): self._localLookup = self._project.localLookup self.tr = partial(QCoreApplication.translate, "Tokenizer") - # Cached Translations - self._trSynopsis = self.tr("Synopsis") - # Format RegEx self._rxMarkdown = [ (QRegularExpression(nwRegEx.FMT_EI), [0, self.FMT_I_B, 0, self.FMT_I_E]), diff --git a/novelwriter/dialogs/projsettings.py b/novelwriter/dialogs/projsettings.py index 337c823a..4accfed0 100644 --- a/novelwriter/dialogs/projsettings.py +++ b/novelwriter/dialogs/projsettings.py @@ -107,10 +107,11 @@ class GuiProjectSettings(NPagedDialog): @pyqtSlot() def _doSave(self) -> None: """Save settings and close dialog.""" - project = SHARED.project + project = SHARED.project projName = self.tabMain.editName.text() bookTitle = self.tabMain.editTitle.text() bookAuthor = self.tabMain.editAuthor.text() + projLang = self.tabMain.projLang.currentData() spellLang = self.tabMain.spellLang.currentData() doBackup = not self.tabMain.doBackup.isChecked() @@ -119,6 +120,7 @@ class GuiProjectSettings(NPagedDialog): project.data.setAuthor(bookAuthor) project.data.setDoBackup(doBackup) project.data.setSpellLang(spellLang) + project.setProjectLang(projLang) if self.tabStatus.colChanged: newList, delList = self.tabStatus.getNewList() @@ -228,24 +230,42 @@ class GuiProjectEditMain(QWidget): self.tr("Change whenever you want!") ) + self.projLang = QComboBox(self) + self.projLang.setMaximumWidth(xW) + if CONFIG.hasEnchant: + for tag, language in CONFIG.listLanguages(CONFIG.LANG_PROJ): + self.projLang.addItem(language, tag) + self.mainForm.addRow( + self.tr("Project language"), + self.projLang, + self.tr("Used when building the manuscript.") + ) + + langIdx = 0 + if pData.language is not None: + langIdx = self.projLang.findData(pData.language) + if langIdx == -1: + langIdx = self.projLang.findData("en_GB") + if langIdx != -1: + self.projLang.setCurrentIndex(langIdx) + self.spellLang = QComboBox(self) self.spellLang.setMaximumWidth(xW) self.spellLang.addItem(self.tr("Default"), "None") if CONFIG.hasEnchant: for tag, language in SHARED.spelling.listDictionaries(): self.spellLang.addItem(language, tag) - self.mainForm.addRow( self.tr("Spell check language"), self.spellLang, self.tr("Overrides main preferences.") ) - spellIdx = 0 + langIdx = 0 if pData.spellLang is not None: - spellIdx = self.spellLang.findData(pData.spellLang) - if spellIdx != -1: - self.spellLang.setCurrentIndex(spellIdx) + langIdx = self.spellLang.findData(pData.spellLang) + if langIdx != -1: + self.spellLang.setCurrentIndex(langIdx) self.doBackup = NSwitch(self) self.doBackup.setChecked(not pData.doBackup) diff --git a/novelwriter/tools/manussettings.py b/novelwriter/tools/manussettings.py index cfa1b038..95235424 100644 --- a/novelwriter/tools/manussettings.py +++ b/novelwriter/tools/manussettings.py @@ -974,15 +974,6 @@ class _FormatTab(QWidget): self.formFormat = NConfigLayout() self.formFormat.addGroupLabel(self._build.getLabel("format.grpFormat")) - # Build Language - self.buildLang = QComboBox() - langauges = CONFIG.listLanguages(CONFIG.LANG_PROJ) - self.buildLang.addItem("[%s]" % self.tr("Not Set"), "None") - for langID, langName in langauges: - self.buildLang.addItem(langName, langID) - - self.formFormat.addRow(self._build.getLabel("format.buildLang"), self.buildLang) - # Font Family self.textFont = QLineEdit() self.textFont.setReadOnly(True) @@ -1103,10 +1094,6 @@ class _FormatTab(QWidget): def loadContent(self) -> None: """Populate the widgets.""" - langIdx = self.buildLang.findData(self._build.getStr("format.buildLang")) - if langIdx != -1: - self.buildLang.setCurrentIndex(langIdx) - textFont = self._build.getStr("format.textFont") if not textFont: textFont = str(CONFIG.textFont) @@ -1146,7 +1133,6 @@ class _FormatTab(QWidget): def saveContent(self) -> None: """Save choices back into build object.""" - self._build.setValue("format.buildLang", str(self.buildLang.currentData())) self._build.setValue("format.textFont", self.textFont.text()) self._build.setValue("format.textSize", self.textSize.value()) self._build.setValue("format.lineHeight", self.lineHeight.value()) From e3997b53aa6687d809557202e9b8a6b3576b33e5 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Thu, 9 Nov 2023 18:55:02 +0100 Subject: [PATCH 05/36] Add language setting to wizard --- novelwriter/core/coretools.py | 2 ++ novelwriter/dialogs/projsettings.py | 5 ++--- novelwriter/guimain.py | 6 ++++++ novelwriter/tools/projwizard.py | 18 ++++++++++++++++-- 4 files changed, 26 insertions(+), 5 deletions(-) diff --git a/novelwriter/core/coretools.py b/novelwriter/core/coretools.py index 017ea082..81803576 100644 --- a/novelwriter/core/coretools.py +++ b/novelwriter/core/coretools.py @@ -353,11 +353,13 @@ class ProjectBuilder: projName = data.get("projName", lblNewProject) projTitle = data.get("projTitle", lblNewProject) projAuthor = data.get("projAuthor", "") + projLang = data.get("projLang", "en_GB") project.data.setUuid(None) project.data.setName(projName) project.data.setTitle(projTitle) project.data.setAuthor(projAuthor) + project.data.setLanguage(projLang) project.setDefaultStatusImport() project.session.startSession() diff --git a/novelwriter/dialogs/projsettings.py b/novelwriter/dialogs/projsettings.py index 4accfed0..20b11c53 100644 --- a/novelwriter/dialogs/projsettings.py +++ b/novelwriter/dialogs/projsettings.py @@ -232,9 +232,8 @@ class GuiProjectEditMain(QWidget): self.projLang = QComboBox(self) self.projLang.setMaximumWidth(xW) - if CONFIG.hasEnchant: - for tag, language in CONFIG.listLanguages(CONFIG.LANG_PROJ): - self.projLang.addItem(language, tag) + for tag, language in CONFIG.listLanguages(CONFIG.LANG_PROJ): + self.projLang.addItem(language, tag) self.mainForm.addRow( self.tr("Project language"), self.projLang, diff --git a/novelwriter/guimain.py b/novelwriter/guimain.py index 41301476..519a40cf 100644 --- a/novelwriter/guimain.py +++ b/novelwriter/guimain.py @@ -1482,6 +1482,12 @@ class GuiMain(QMainWindow): projData["numChapters"] = newProj.field("numChapters") projData["numScenes"] = newProj.field("numScenes") + try: + langIdx = newProj.field("projLang") + projData["projLang"] = CONFIG.listLanguages(CONFIG.LANG_PROJ)[langIdx][0] + except Exception: + projData["projLang"] = "en_GB" + return projData def _getTagSource(self, tag: str) -> tuple[str | None, str | None]: diff --git a/novelwriter/tools/projwizard.py b/novelwriter/tools/projwizard.py index ef715847..b47da1cf 100644 --- a/novelwriter/tools/projwizard.py +++ b/novelwriter/tools/projwizard.py @@ -28,8 +28,9 @@ import logging from PyQt5.QtCore import Qt from PyQt5.QtWidgets import ( - QFileDialog, QFormLayout, QGridLayout, QHBoxLayout, QLabel, QLineEdit, - QPushButton, QRadioButton, QSpinBox, QVBoxLayout, QWizard, QWizardPage + QComboBox, QFileDialog, QFormLayout, QGridLayout, QHBoxLayout, QLabel, + QLineEdit, QPushButton, QRadioButton, QSpinBox, QVBoxLayout, QWizard, + QWizardPage ) from novelwriter import CONFIG, SHARED @@ -127,15 +128,28 @@ class ProjWizardIntroPage(QWizardPage): self.projAuthor.setFixedWidth(xW) self.projAuthor.setPlaceholderText(self.tr("Optional")) + self.projLang = QComboBox(self) + self.projLang.setMaximumWidth(xW) + for tag, language in CONFIG.listLanguages(CONFIG.LANG_PROJ): + self.projLang.addItem(language, tag) + + langIdx = self.projLang.findData(CONFIG.guiLocale) + if langIdx == -1: + langIdx = self.projLang.findData("en_GB") + if langIdx != -1: + self.projLang.setCurrentIndex(langIdx) + self.mainForm = QFormLayout() self.mainForm.addRow(self.tr("Project Name"), self.projName) self.mainForm.addRow(self.tr("Novel Title"), self.projTitle) self.mainForm.addRow(self.tr("Author(s)"), self.projAuthor) + self.mainForm.addRow(self.tr("Language"), self.projLang) self.mainForm.setVerticalSpacing(fS) self.registerField("projName*", self.projName) self.registerField("projTitle", self.projTitle) self.registerField("projAuthor", self.projAuthor) + self.registerField("projLang", self.projLang) # Assemble self.outerBox = QVBoxLayout() From 76d67dd0aaaf46f2339038fd3ba836b07db7767d Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Thu, 9 Nov 2023 19:04:36 +0100 Subject: [PATCH 06/36] Clean up build settings and update tests --- novelwriter/core/buildsettings.py | 2 -- novelwriter/core/tohtml.py | 5 ++++- tests/reference/coreTools_NewMinimal_nwProject.nwx | 2 +- tests/test_core/test_core_coretools.py | 2 ++ tests/test_tools/test_tools_manussettings.py | 3 --- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/novelwriter/core/buildsettings.py b/novelwriter/core/buildsettings.py index 931525ea..0698c2e0 100644 --- a/novelwriter/core/buildsettings.py +++ b/novelwriter/core/buildsettings.py @@ -64,7 +64,6 @@ SETTINGS_TEMPLATE = { "text.includeKeywords": (bool, False), "text.includeBodyText": (bool, True), "text.addNoteHeadings": (bool, True), - "format.buildLang": (str, "en_GB"), "format.textFont": (str, CONFIG.textFont), "format.textSize": (int, 12), "format.lineHeight": (float, 1.15, 0.75, 3.0), @@ -107,7 +106,6 @@ SETTINGS_LABELS = { "text.addNoteHeadings": QT_TRANSLATE_NOOP("Builds", "Add Titles for Notes"), "format.grpFormat": QT_TRANSLATE_NOOP("Builds", "Text Format"), - "format.buildLang": QT_TRANSLATE_NOOP("Builds", "Language"), "format.textFont": QT_TRANSLATE_NOOP("Builds", "Font Family"), "format.textSize": QT_TRANSLATE_NOOP("Builds", "Font Size"), "format.lineHeight": QT_TRANSLATE_NOOP("Builds", "Line Height"), diff --git a/novelwriter/core/tohtml.py b/novelwriter/core/tohtml.py index ac73418d..7443ed34 100644 --- a/novelwriter/core/tohtml.py +++ b/novelwriter/core/tohtml.py @@ -457,7 +457,10 @@ class ToHtml(Tokenizer): def _formatSynopsis(self, text: str) -> str: """Apply HTML formatting to synopsis.""" sSynop = self._localLookup("Synopsis") - return f"{sSynop}: {text}
\n" + if self._genMode == self.M_PREVIEW: + return f"{sSynop}: {text}
\n" + else: + return f"{sSynop}: {text}
\n" def _formatComments(self, text: str) -> str: """Apply HTML formatting to comments.""" diff --git a/tests/reference/coreTools_NewMinimal_nwProject.nwx b/tests/reference/coreTools_NewMinimal_nwProject.nwx index 23a377f5..a38b56b0 100644 --- a/tests/reference/coreTools_NewMinimal_nwProject.nwx +++ b/tests/reference/coreTools_NewMinimal_nwProject.nwx @@ -7,7 +7,7 @@