From effe7abdec937d709021da1c6f468fea7242036e Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Sun, 6 Aug 2023 21:49:55 +0200 Subject: [PATCH] Fix formatting of line breaks in headers --- novelwriter/constants.py | 1 + novelwriter/core/tohtml.py | 14 +++++++------- novelwriter/core/tomd.py | 14 +++++++------- novelwriter/core/toodt.py | 14 +++++++------- novelwriter/tools/manussettings.py | 4 ++-- tests/test_tools/test_tools_manussettings.py | 4 +++- 6 files changed, 27 insertions(+), 24 deletions(-) diff --git a/novelwriter/constants.py b/novelwriter/constants.py index 05242c36..5a306a73 100644 --- a/novelwriter/constants.py +++ b/novelwriter/constants.py @@ -257,6 +257,7 @@ class nwLabels: class nwHeadFmt: + BR = "{BR}" TITLE = "{Title}" CH_NUM = "{Chapter}" CH_WORD = "{Chapter:Word}" diff --git a/novelwriter/core/tohtml.py b/novelwriter/core/tohtml.py index 6c0fa4aa..20c01701 100644 --- a/novelwriter/core/tohtml.py +++ b/novelwriter/core/tohtml.py @@ -31,7 +31,7 @@ from pathlib import Path from novelwriter import CONFIG from novelwriter.common import formatTimeStamp -from novelwriter.constants import nwKeyWords, nwLabels, nwHtmlUnicode +from novelwriter.constants import nwHeadFmt, nwKeyWords, nwLabels, nwHtmlUnicode from novelwriter.core.project import NWProject from novelwriter.core.tokenizer import Tokenizer, stripEscape @@ -244,27 +244,27 @@ class ToHtml(Tokenizer): parStyle = None elif tType == self.T_TITLE: - tHead = tText.replace(r"\\", "
") + tHead = tText.replace(nwHeadFmt.BR, "
") tmpResult.append(f"

{aNm}{tHead}

\n") elif tType == self.T_UNNUM: - tHead = tText.replace(r"\\", "
") + tHead = tText.replace(nwHeadFmt.BR, "
") tmpResult.append(f"<{h2}{hStyle}>{aNm}{tHead}\n") elif tType == self.T_HEAD1: - tHead = tText.replace(r"\\", "
") + tHead = tText.replace(nwHeadFmt.BR, "
") tmpResult.append(f"<{h1}{h1Cl}{hStyle}>{aNm}{tHead}\n") elif tType == self.T_HEAD2: - tHead = tText.replace(r"\\", "
") + tHead = tText.replace(nwHeadFmt.BR, "
") tmpResult.append(f"<{h2}{hStyle}>{aNm}{tHead}\n") elif tType == self.T_HEAD3: - tHead = tText.replace(r"\\", "
") + tHead = tText.replace(nwHeadFmt.BR, "
") tmpResult.append(f"<{h3}{hStyle}>{aNm}{tHead}\n") elif tType == self.T_HEAD4: - tHead = tText.replace(r"\\", "
") + tHead = tText.replace(nwHeadFmt.BR, "
") tmpResult.append(f"<{h4}{hStyle}>{aNm}{tHead}\n") elif tType == self.T_SEP: diff --git a/novelwriter/core/tomd.py b/novelwriter/core/tomd.py index 1702bc6d..e634de74 100644 --- a/novelwriter/core/tomd.py +++ b/novelwriter/core/tomd.py @@ -27,7 +27,7 @@ import logging from pathlib import Path -from novelwriter.constants import nwLabels +from novelwriter.constants import nwHeadFmt, nwLabels from novelwriter.core.project import NWProject from novelwriter.core.tokenizer import Tokenizer @@ -122,27 +122,27 @@ class ToMarkdown(Tokenizer): thisPar = [] elif tType == self.T_TITLE: - tHead = tText.replace(r"\\", "\n") + tHead = tText.replace(nwHeadFmt.BR, "\n") tmpResult.append(f"# {tHead}\n\n") elif tType == self.T_UNNUM: - tHead = tText.replace(r"\\", "\n") + tHead = tText.replace(nwHeadFmt.BR, "\n") tmpResult.append(f"## {tHead}\n\n") elif tType == self.T_HEAD1: - tHead = tText.replace(r"\\", "\n") + tHead = tText.replace(nwHeadFmt.BR, "\n") tmpResult.append(f"# {tHead}\n\n") elif tType == self.T_HEAD2: - tHead = tText.replace(r"\\", "\n") + tHead = tText.replace(nwHeadFmt.BR, "\n") tmpResult.append(f"## {tHead}\n\n") elif tType == self.T_HEAD3: - tHead = tText.replace(r"\\", "\n") + tHead = tText.replace(nwHeadFmt.BR, "\n") tmpResult.append(f"### {tHead}\n\n") elif tType == self.T_HEAD4: - tHead = tText.replace(r"\\", "\n") + tHead = tText.replace(nwHeadFmt.BR, "\n") tmpResult.append(f"#### {tHead}\n\n") elif tType == self.T_SEP: diff --git a/novelwriter/core/toodt.py b/novelwriter/core/toodt.py index 87392e52..93b8afac 100644 --- a/novelwriter/core/toodt.py +++ b/novelwriter/core/toodt.py @@ -36,7 +36,7 @@ from datetime import datetime from novelwriter import __version__ from novelwriter.common import xmlIndent -from novelwriter.constants import nwKeyWords, nwLabels +from novelwriter.constants import nwHeadFmt, nwKeyWords, nwLabels from novelwriter.core.project import NWProject from novelwriter.core.tokenizer import Tokenizer, stripEscape @@ -445,27 +445,27 @@ class ToOdt(Tokenizer): parStyle = None elif tType == self.T_TITLE: - tHead = tText.replace(r"\\", "\n") + tHead = tText.replace(nwHeadFmt.BR, "\n") self._addTextPar("Title", oStyle, tHead, isHead=False) # Title must be text:p elif tType == self.T_UNNUM: - tHead = tText.replace(r"\\", "\n") + tHead = tText.replace(nwHeadFmt.BR, "\n") self._addTextPar("Heading_20_2", oStyle, tHead, isHead=True, oLevel="2") elif tType == self.T_HEAD1: - tHead = tText.replace(r"\\", "\n") + tHead = tText.replace(nwHeadFmt.BR, "\n") self._addTextPar("Heading_20_1", oStyle, tHead, isHead=True, oLevel="1") elif tType == self.T_HEAD2: - tHead = tText.replace(r"\\", "\n") + tHead = tText.replace(nwHeadFmt.BR, "\n") self._addTextPar("Heading_20_2", oStyle, tHead, isHead=True, oLevel="2") elif tType == self.T_HEAD3: - tHead = tText.replace(r"\\", "\n") + tHead = tText.replace(nwHeadFmt.BR, "\n") self._addTextPar("Heading_20_3", oStyle, tHead, isHead=True, oLevel="3") elif tType == self.T_HEAD4: - tHead = tText.replace(r"\\", "\n") + tHead = tText.replace(nwHeadFmt.BR, "\n") self._addTextPar("Heading_20_4", oStyle, tHead, isHead=True, oLevel="4") elif tType == self.T_SEP: diff --git a/novelwriter/tools/manussettings.py b/novelwriter/tools/manussettings.py index 43107ff8..fe65f923 100644 --- a/novelwriter/tools/manussettings.py +++ b/novelwriter/tools/manussettings.py @@ -822,7 +822,7 @@ class _HeadingsTab(QWidget): text = "" label = self.tr("None") - self.editTextBox.setPlainText(text.replace("//", "\n")) + self.editTextBox.setPlainText(text.replace(nwHeadFmt.BR, "\n")) self.lblEditForm.setText(self.tr("Editing: {0}").format(label)) return @@ -834,7 +834,7 @@ class _HeadingsTab(QWidget): def _saveFormat(self) -> None: """Save the format from the edit text box.""" heading = self._editing - text = self.editTextBox.toPlainText().strip().replace("\n", "//") + text = self.editTextBox.toPlainText().strip().replace("\n", nwHeadFmt.BR) if heading == self.EDIT_TITLE: self.fmtTitle.setText(text) self._build.setValue("headings.fmtTitle", text) diff --git a/tests/test_tools/test_tools_manussettings.py b/tests/test_tools/test_tools_manussettings.py index 1286dfd1..36cf6d79 100644 --- a/tests/test_tools/test_tools_manussettings.py +++ b/tests/test_tools/test_tools_manussettings.py @@ -429,7 +429,9 @@ def testBuildSettings_Headings(qtbot: QtBot, nwGUI: GuiMain): headTab.btnChapter.click() headTab.editTextBox.setPlainText(f"Chapter {nwHeadFmt.CH_NUM}\n{nwHeadFmt.TITLE}\n") headTab.btnApply.click() - assert build.getStr("headings.fmtChapter") == f"Chapter {nwHeadFmt.CH_NUM}//{nwHeadFmt.TITLE}" + assert build.getStr("headings.fmtChapter") == ( + f"Chapter {nwHeadFmt.CH_NUM}{nwHeadFmt.BR}{nwHeadFmt.TITLE}" + ) # Set all to plain title headTab.btnTitle.click()