Change to always use project language for generating documents
This commit is contained in:
@@ -248,13 +248,9 @@ class NWBuildDocument:
|
|||||||
def _setupBuild(self, bldObj: Tokenizer) -> dict:
|
def _setupBuild(self, bldObj: Tokenizer) -> dict:
|
||||||
"""Configure the build object."""
|
"""Configure the build object."""
|
||||||
# Get Settings
|
# Get Settings
|
||||||
buildLang = self._build.getStr("format.buildLang")
|
|
||||||
textFont = self._build.getStr("format.textFont")
|
textFont = self._build.getStr("format.textFont")
|
||||||
textSize = self._build.getInt("format.textSize")
|
textSize = self._build.getInt("format.textSize")
|
||||||
|
|
||||||
# The language lookup dict is reloaded if needed
|
|
||||||
self._project.setProjectLang(buildLang)
|
|
||||||
|
|
||||||
fontFamily = textFont or CONFIG.textFont
|
fontFamily = textFont or CONFIG.textFont
|
||||||
bldFont = QFont(fontFamily, textSize)
|
bldFont = QFont(fontFamily, textSize)
|
||||||
fontInfo = QFontInfo(bldFont)
|
fontInfo = QFontInfo(bldFont)
|
||||||
@@ -287,7 +283,7 @@ class NWBuildDocument:
|
|||||||
|
|
||||||
if isinstance(bldObj, ToOdt):
|
if isinstance(bldObj, ToOdt):
|
||||||
bldObj.setColourHeaders(self._build.getBool("odt.addColours"))
|
bldObj.setColourHeaders(self._build.getBool("odt.addColours"))
|
||||||
bldObj.setLanguage(buildLang)
|
bldObj.setLanguage(self._project.data.language)
|
||||||
|
|
||||||
scale = nwLabels.UNIT_SCALE.get(self._build.getStr("format.pageUnit"), 1.0)
|
scale = nwLabels.UNIT_SCALE.get(self._build.getStr("format.pageUnit"), 1.0)
|
||||||
pW, pH = nwLabels.PAPER_SIZE.get(self._build.getStr("format.pageSize"), (-1.0, -1.0))
|
pW, pH = nwLabels.PAPER_SIZE.get(self._build.getStr("format.pageSize"), (-1.0, -1.0))
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ from pathlib import Path
|
|||||||
|
|
||||||
from novelwriter import CONFIG
|
from novelwriter import CONFIG
|
||||||
from novelwriter.common import formatTimeStamp
|
from novelwriter.common import formatTimeStamp
|
||||||
from novelwriter.constants import nwHeadFmt, nwKeyWords, nwLabels, nwHtmlUnicode, trConst
|
from novelwriter.constants import nwHeadFmt, nwKeyWords, nwLabels, nwHtmlUnicode
|
||||||
from novelwriter.core.project import NWProject
|
from novelwriter.core.project import NWProject
|
||||||
from novelwriter.core.tokenizer import Tokenizer, stripEscape
|
from novelwriter.core.tokenizer import Tokenizer, stripEscape
|
||||||
|
|
||||||
@@ -456,12 +456,8 @@ class ToHtml(Tokenizer):
|
|||||||
|
|
||||||
def _formatSynopsis(self, text: str) -> str:
|
def _formatSynopsis(self, text: str) -> str:
|
||||||
"""Apply HTML formatting to synopsis."""
|
"""Apply HTML formatting to synopsis."""
|
||||||
if self._genMode == self.M_PREVIEW:
|
sSynop = self._localLookup("Synopsis")
|
||||||
sSynop = self._trSynopsis
|
return f"<p class='comment'><span class='synopsis'>{sSynop}:</span> {text}</p>\n"
|
||||||
return f"<p class='comment'><span class='synopsis'>{sSynop}:</span> {text}</p>\n"
|
|
||||||
else:
|
|
||||||
sSynop = self._localLookup("Synopsis")
|
|
||||||
return f"<p class='synopsis'><strong>{sSynop}:</strong> {text}</p>\n"
|
|
||||||
|
|
||||||
def _formatComments(self, text: str) -> str:
|
def _formatComments(self, text: str) -> str:
|
||||||
"""Apply HTML formatting to comments."""
|
"""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:
|
if not valid or not bits or bits[0] not in nwLabels.KEY_NAME:
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
if self._genMode == self.M_PREVIEW:
|
result = f"<span class='tags'>{self._localLookup(nwLabels.KEY_NAME[bits[0]])}:</span> "
|
||||||
result = f"<span class='tags'>{trConst(nwLabels.KEY_NAME[bits[0]])}:</span> "
|
|
||||||
else:
|
|
||||||
result = f"<span class='tags'>{self._localLookup(nwLabels.KEY_NAME[bits[0]])}:</span> "
|
|
||||||
|
|
||||||
if len(bits) > 1:
|
if len(bits) > 1:
|
||||||
if bits[0] == nwKeyWords.TAG_KEY:
|
if bits[0] == nwKeyWords.TAG_KEY:
|
||||||
result += f"<a name='tag_{bits[1]}'>{bits[1]}</a>"
|
result += f"<a name='tag_{bits[1]}'>{bits[1]}</a>"
|
||||||
|
|||||||
@@ -167,9 +167,6 @@ class Tokenizer(ABC):
|
|||||||
self._localLookup = self._project.localLookup
|
self._localLookup = self._project.localLookup
|
||||||
self.tr = partial(QCoreApplication.translate, "Tokenizer")
|
self.tr = partial(QCoreApplication.translate, "Tokenizer")
|
||||||
|
|
||||||
# Cached Translations
|
|
||||||
self._trSynopsis = self.tr("Synopsis")
|
|
||||||
|
|
||||||
# Format RegEx
|
# Format RegEx
|
||||||
self._rxMarkdown = [
|
self._rxMarkdown = [
|
||||||
(QRegularExpression(nwRegEx.FMT_EI), [0, self.FMT_I_B, 0, self.FMT_I_E]),
|
(QRegularExpression(nwRegEx.FMT_EI), [0, self.FMT_I_B, 0, self.FMT_I_E]),
|
||||||
|
|||||||
@@ -107,10 +107,11 @@ class GuiProjectSettings(NPagedDialog):
|
|||||||
@pyqtSlot()
|
@pyqtSlot()
|
||||||
def _doSave(self) -> None:
|
def _doSave(self) -> None:
|
||||||
"""Save settings and close dialog."""
|
"""Save settings and close dialog."""
|
||||||
project = SHARED.project
|
project = SHARED.project
|
||||||
projName = self.tabMain.editName.text()
|
projName = self.tabMain.editName.text()
|
||||||
bookTitle = self.tabMain.editTitle.text()
|
bookTitle = self.tabMain.editTitle.text()
|
||||||
bookAuthor = self.tabMain.editAuthor.text()
|
bookAuthor = self.tabMain.editAuthor.text()
|
||||||
|
projLang = self.tabMain.projLang.currentData()
|
||||||
spellLang = self.tabMain.spellLang.currentData()
|
spellLang = self.tabMain.spellLang.currentData()
|
||||||
doBackup = not self.tabMain.doBackup.isChecked()
|
doBackup = not self.tabMain.doBackup.isChecked()
|
||||||
|
|
||||||
@@ -119,6 +120,7 @@ class GuiProjectSettings(NPagedDialog):
|
|||||||
project.data.setAuthor(bookAuthor)
|
project.data.setAuthor(bookAuthor)
|
||||||
project.data.setDoBackup(doBackup)
|
project.data.setDoBackup(doBackup)
|
||||||
project.data.setSpellLang(spellLang)
|
project.data.setSpellLang(spellLang)
|
||||||
|
project.setProjectLang(projLang)
|
||||||
|
|
||||||
if self.tabStatus.colChanged:
|
if self.tabStatus.colChanged:
|
||||||
newList, delList = self.tabStatus.getNewList()
|
newList, delList = self.tabStatus.getNewList()
|
||||||
@@ -228,24 +230,42 @@ class GuiProjectEditMain(QWidget):
|
|||||||
self.tr("Change whenever you want!")
|
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 = QComboBox(self)
|
||||||
self.spellLang.setMaximumWidth(xW)
|
self.spellLang.setMaximumWidth(xW)
|
||||||
self.spellLang.addItem(self.tr("Default"), "None")
|
self.spellLang.addItem(self.tr("Default"), "None")
|
||||||
if CONFIG.hasEnchant:
|
if CONFIG.hasEnchant:
|
||||||
for tag, language in SHARED.spelling.listDictionaries():
|
for tag, language in SHARED.spelling.listDictionaries():
|
||||||
self.spellLang.addItem(language, tag)
|
self.spellLang.addItem(language, tag)
|
||||||
|
|
||||||
self.mainForm.addRow(
|
self.mainForm.addRow(
|
||||||
self.tr("Spell check language"),
|
self.tr("Spell check language"),
|
||||||
self.spellLang,
|
self.spellLang,
|
||||||
self.tr("Overrides main preferences.")
|
self.tr("Overrides main preferences.")
|
||||||
)
|
)
|
||||||
|
|
||||||
spellIdx = 0
|
langIdx = 0
|
||||||
if pData.spellLang is not None:
|
if pData.spellLang is not None:
|
||||||
spellIdx = self.spellLang.findData(pData.spellLang)
|
langIdx = self.spellLang.findData(pData.spellLang)
|
||||||
if spellIdx != -1:
|
if langIdx != -1:
|
||||||
self.spellLang.setCurrentIndex(spellIdx)
|
self.spellLang.setCurrentIndex(langIdx)
|
||||||
|
|
||||||
self.doBackup = NSwitch(self)
|
self.doBackup = NSwitch(self)
|
||||||
self.doBackup.setChecked(not pData.doBackup)
|
self.doBackup.setChecked(not pData.doBackup)
|
||||||
|
|||||||
@@ -974,15 +974,6 @@ class _FormatTab(QWidget):
|
|||||||
self.formFormat = NConfigLayout()
|
self.formFormat = NConfigLayout()
|
||||||
self.formFormat.addGroupLabel(self._build.getLabel("format.grpFormat"))
|
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
|
# Font Family
|
||||||
self.textFont = QLineEdit()
|
self.textFont = QLineEdit()
|
||||||
self.textFont.setReadOnly(True)
|
self.textFont.setReadOnly(True)
|
||||||
@@ -1103,10 +1094,6 @@ class _FormatTab(QWidget):
|
|||||||
|
|
||||||
def loadContent(self) -> None:
|
def loadContent(self) -> None:
|
||||||
"""Populate the widgets."""
|
"""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")
|
textFont = self._build.getStr("format.textFont")
|
||||||
if not textFont:
|
if not textFont:
|
||||||
textFont = str(CONFIG.textFont)
|
textFont = str(CONFIG.textFont)
|
||||||
@@ -1146,7 +1133,6 @@ class _FormatTab(QWidget):
|
|||||||
|
|
||||||
def saveContent(self) -> None:
|
def saveContent(self) -> None:
|
||||||
"""Save choices back into build object."""
|
"""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.textFont", self.textFont.text())
|
||||||
self._build.setValue("format.textSize", self.textSize.value())
|
self._build.setValue("format.textSize", self.textSize.value())
|
||||||
self._build.setValue("format.lineHeight", self.lineHeight.value())
|
self._build.setValue("format.lineHeight", self.lineHeight.value())
|
||||||
|
|||||||
Reference in New Issue
Block a user