From bdff3b4ee23e4cfd884b0534d0621d158fb726d6 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Mon, 11 Mar 2024 23:25:28 +0100 Subject: [PATCH 1/8] Add support for triple hash alt header format --- novelwriter/core/index.py | 2 ++ novelwriter/gui/doceditor.py | 3 +++ novelwriter/gui/dochighlight.py | 6 +++++- novelwriter/text/counting.py | 3 +++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/novelwriter/core/index.py b/novelwriter/core/index.py index 4fd59a19..9b5f25db 100644 --- a/novelwriter/core/index.py +++ b/novelwriter/core/index.py @@ -396,6 +396,8 @@ class NWIndex: return "H1", line[3:].strip() elif line.startswith("##! "): return "H2", line[4:].strip() + elif line.startswith("###! "): + return "H3", line[5:].strip() return "H0", "" def _indexWordCounts(self, tHandle: str, text: str, sTitle: str) -> None: diff --git a/novelwriter/gui/doceditor.py b/novelwriter/gui/doceditor.py index ed0ba5fe..f041141b 100644 --- a/novelwriter/gui/doceditor.py +++ b/novelwriter/gui/doceditor.py @@ -1651,6 +1651,9 @@ class GuiDocEditor(QPlainTextEdit): elif text.startswith("##! "): temp = text[4:] offset = 4 + elif text.startswith("###! "): + temp = text[5:] + offset = 5 elif text.startswith(">> "): temp = text[3:] offset = 3 diff --git a/novelwriter/gui/dochighlight.py b/novelwriter/gui/dochighlight.py index 5ead13a1..6dd2322a 100644 --- a/novelwriter/gui/dochighlight.py +++ b/novelwriter/gui/dochighlight.py @@ -300,7 +300,7 @@ class GuiDocHighlighter(QSyntaxHighlighter): # so we force a return here return - elif text.startswith(("# ", "#! ", "## ", "##! ", "### ", "#### ")): + elif text.startswith(("# ", "#! ", "## ", "##! ", "### ", "###! ", "#### ")): self.setCurrentBlockState(self.BLOCK_TITLE) if text.startswith("# "): # Heading 1 @@ -327,6 +327,10 @@ class GuiDocHighlighter(QSyntaxHighlighter): self.setFormat(0, 3, self._hStyles["head2h"]) self.setFormat(3, len(text), self._hStyles["header2"]) + elif text.startswith("###! "): # Hard Scene + self.setFormat(0, 4, self._hStyles["head3h"]) + self.setFormat(4, len(text), self._hStyles["header3"]) + elif text.startswith("%"): # Comments self.setCurrentBlockState(self.BLOCK_TEXT) cStyle, _, cPos = processComment(text) diff --git a/novelwriter/text/counting.py b/novelwriter/text/counting.py index c91838b3..697cf5e8 100644 --- a/novelwriter/text/counting.py +++ b/novelwriter/text/counting.py @@ -106,6 +106,9 @@ def standardCounter(text: str) -> tuple[int, int, int]: elif line[:4] == "##! ": line = line[4:] countPara = False + elif line[:5] == "###! ": + line = line[5:] + countPara = False wCount += len(line.split()) cCount += len(line) From 78958ed5cfcfc1951699f4ed22ae7ed4d43399b9 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Mon, 11 Mar 2024 23:26:16 +0100 Subject: [PATCH 2/8] Add hard scene break formatting --- novelwriter/core/buildsettings.py | 4 +++ novelwriter/core/docbuild.py | 4 +++ novelwriter/core/tokenizer.py | 17 +++++++++-- novelwriter/tools/manussettings.py | 45 +++++++++++++++++++++++++++--- sample/content/bc0cbd2a407f3.nwd | 6 ++-- 5 files changed, 66 insertions(+), 10 deletions(-) diff --git a/novelwriter/core/buildsettings.py b/novelwriter/core/buildsettings.py index 8557a523..d033c83f 100644 --- a/novelwriter/core/buildsettings.py +++ b/novelwriter/core/buildsettings.py @@ -56,8 +56,10 @@ SETTINGS_TEMPLATE = { "headings.fmtChapter": (str, nwHeadFmt.TITLE), "headings.fmtUnnumbered": (str, nwHeadFmt.TITLE), "headings.fmtScene": (str, "* * *"), + "headings.fmtHardScene": (str, ""), "headings.fmtSection": (str, ""), "headings.hideScene": (bool, False), + "headings.hideHardScene": (bool, False), "headings.hideSection": (bool, True), "headings.centerTitle": (bool, True), "headings.centerChapter": (bool, False), @@ -104,8 +106,10 @@ SETTINGS_LABELS = { "headings.fmtChapter": QT_TRANSLATE_NOOP("Builds", "Chapter Headings"), "headings.fmtUnnumbered": QT_TRANSLATE_NOOP("Builds", "Unnumbered Headings"), "headings.fmtScene": QT_TRANSLATE_NOOP("Builds", "Scene Headings"), + "headings.fmtHardScene": QT_TRANSLATE_NOOP("Builds", "Hard Scene Headings"), "headings.fmtSection": QT_TRANSLATE_NOOP("Builds", "Section Headings"), "headings.hideScene": QT_TRANSLATE_NOOP("Builds", "Hide Scene Headings"), + "headings.hideHardScene": QT_TRANSLATE_NOOP("Builds", "Hide Hard Scene Headings"), "headings.hideSection": QT_TRANSLATE_NOOP("Builds", "Hide Section Headings"), "text.grpContent": QT_TRANSLATE_NOOP("Builds", "Text Content"), diff --git a/novelwriter/core/docbuild.py b/novelwriter/core/docbuild.py index f36d7345..23b10791 100644 --- a/novelwriter/core/docbuild.py +++ b/novelwriter/core/docbuild.py @@ -282,6 +282,10 @@ class NWBuildDocument: self._build.getStr("headings.fmtScene"), self._build.getBool("headings.hideScene") ) + bldObj.setHardSceneFormat( + self._build.getStr("headings.fmtHardScene"), + self._build.getBool("headings.hideHardScene") + ) bldObj.setSectionFormat( self._build.getStr("headings.fmtSection"), self._build.getBool("headings.hideSection") diff --git a/novelwriter/core/tokenizer.py b/novelwriter/core/tokenizer.py index 55d89637..e1ee5550 100644 --- a/novelwriter/core/tokenizer.py +++ b/novelwriter/core/tokenizer.py @@ -156,9 +156,11 @@ class Tokenizer(ABC): self._fmtChapter = nwHeadFmt.TITLE # Formatting for numbered chapters self._fmtUnNum = nwHeadFmt.TITLE # Formatting for unnumbered chapters self._fmtScene = nwHeadFmt.TITLE # Formatting for scenes + self._fmtHScene = nwHeadFmt.TITLE # Formatting for hard scenes self._fmtSection = nwHeadFmt.TITLE # Formatting for sections self._hideScene = False # Do not include scene headings + self._hideHScene = False # Do not include hard scene headings self._hideSection = False # Do not include section headings self._linkHeaders = False # Add an anchor before headings @@ -254,6 +256,12 @@ class Tokenizer(ABC): self._hideScene = hide return + def setHardSceneFormat(self, hFormat: str, hide: bool) -> None: + """Set the hard scene format pattern and hidden status.""" + self._fmtHScene = hFormat.strip() + self._hideHScene = hide + return + def setSectionFormat(self, hFormat: str, hide: bool) -> None: """Set the section format pattern and hidden status.""" self._fmtSection = hFormat.strip() @@ -603,7 +611,7 @@ class Tokenizer(ABC): if self._keepMarkdown: tmpMarkdown.append(f"{aLine}\n") - elif aLine[:4] == "### ": + elif aLine[:4] == "### " or aLine[:5] == "###! ": # Scene Headings # ============== # Scene headings in novel documents are treated as centred @@ -619,12 +627,15 @@ class Tokenizer(ABC): tText = aLine[4:].strip() tType = self.T_HEAD3 tStyle = self.A_NONE + isHard = aLine[:5] == "###! " + sHide = self._hideHScene if isHard else self._hideScene + fScene = self._fmtHScene if isHard else self._fmtScene if self._isNovel: self._hFormatter.incScene() - tText = self._hFormatter.apply(self._fmtScene, tText, nHead) + tText = self._hFormatter.apply(fScene, tText, nHead) tStyle = self._sceneStyle if tText == "": - tType = self.T_EMPTY if self._noSep or self._hideScene else self.T_SKIP + tType = self.T_EMPTY if self._noSep or sHide else self.T_SKIP tStyle = self.A_NONE elif tText == self._fmtScene: tText = "" if self._noSep else tText diff --git a/novelwriter/tools/manussettings.py b/novelwriter/tools/manussettings.py index 14a3d529..a0f9c75d 100644 --- a/novelwriter/tools/manussettings.py +++ b/novelwriter/tools/manussettings.py @@ -584,7 +584,8 @@ class _HeadingsTab(NScrollablePage): EDIT_CHAPTER = 2 EDIT_UNNUM = 3 EDIT_SCENE = 4 - EDIT_SECTION = 5 + EDIT_HSCENE = 5 + EDIT_SECTION = 6 def __init__(self, buildMain: GuiBuildSettings, build: BuildSettings) -> None: super().__init__(parent=buildMain) @@ -677,6 +678,33 @@ class _HeadingsTab(NScrollablePage): self.formatBox.addLayout(wrapScene, 3, 1) self.formatBox.addLayout(wrapSceneHide, 3, 2) + # Alt Scene Heading + hardSceneHideTip = self._build.getLabel("headings.hideHardScene") + self.lblHScene = QLabel(self._build.getLabel("headings.fmtHardScene")) + self.fmtHScene = QLineEdit("", self) + self.fmtHScene.setReadOnly(True) + self.btnHScene = QToolButton(self) + self.btnHScene.setIcon(SHARED.theme.getIcon("edit")) + self.btnHScene.clicked.connect(lambda: self._editHeading(self.EDIT_HSCENE)) + self.hdeHScene = QLabel(self.tr("Hide")) + self.hdeHScene.setToolTip(hardSceneHideTip) + self.swtHScene = NSwitch(self, height=iPx) + self.swtHScene.setToolTip(hardSceneHideTip) + + wrapHScene = QHBoxLayout() + wrapHScene.addWidget(self.fmtHScene) + wrapHScene.addWidget(self.btnHScene) + wrapHScene.setSpacing(bSp) + + wrapHSceneHide = QHBoxLayout() + wrapHSceneHide.addWidget(self.hdeHScene) + wrapHSceneHide.addWidget(self.swtHScene) + wrapHSceneHide.setSpacing(bSp) + + self.formatBox.addWidget(self.lblHScene, 4, 0) + self.formatBox.addLayout(wrapHScene, 4, 1) + self.formatBox.addLayout(wrapHSceneHide, 4, 2) + # Section Heading sectionHideTip = self._build.getLabel("headings.hideSection") self.lblSection = QLabel(self._build.getLabel("headings.fmtSection")) @@ -700,9 +728,9 @@ class _HeadingsTab(NScrollablePage): wrapSectionHide.addWidget(self.swtSection) wrapSectionHide.setSpacing(bSp) - self.formatBox.addWidget(self.lblSection, 4, 0) - self.formatBox.addLayout(wrapSection, 4, 1) - self.formatBox.addLayout(wrapSectionHide, 4, 2) + self.formatBox.addWidget(self.lblSection, 5, 0) + self.formatBox.addLayout(wrapSection, 5, 1) + self.formatBox.addLayout(wrapSectionHide, 5, 2) # Edit Form # ========= @@ -830,8 +858,10 @@ class _HeadingsTab(NScrollablePage): self.fmtChapter.setText(self._build.getStr("headings.fmtChapter")) self.fmtUnnumbered.setText(self._build.getStr("headings.fmtUnnumbered")) self.fmtScene.setText(self._build.getStr("headings.fmtScene")) + self.fmtHScene.setText(self._build.getStr("headings.fmtHardScene")) self.fmtSection.setText(self._build.getStr("headings.fmtSection")) self.swtScene.setChecked(self._build.getBool("headings.hideScene")) + self.swtHScene.setChecked(self._build.getBool("headings.hideHardScene")) self.swtSection.setChecked(self._build.getBool("headings.hideSection")) self.centerTitle.setChecked(self._build.getBool("headings.centerTitle")) self.centerChapter.setChecked(self._build.getBool("headings.centerChapter")) @@ -844,6 +874,7 @@ class _HeadingsTab(NScrollablePage): def saveContent(self) -> None: """Save choices back into build object.""" self._build.setValue("headings.hideScene", self.swtScene.isChecked()) + self._build.setValue("headings.hideHardScene", self.swtHScene.isChecked()) self._build.setValue("headings.hideSection", self.swtSection.isChecked()) self._build.setValue("headings.centerTitle", self.centerTitle.isChecked()) self._build.setValue("headings.centerChapter", self.centerChapter.isChecked()) @@ -881,6 +912,9 @@ class _HeadingsTab(NScrollablePage): elif heading == self.EDIT_SCENE: text = self.fmtScene.text() label = self._build.getLabel("headings.fmtScene") + elif heading == self.EDIT_HSCENE: + text = self.fmtHScene.text() + label = self._build.getLabel("headings.fmtHardScene") elif heading == self.EDIT_SECTION: text = self.fmtSection.text() label = self._build.getLabel("headings.fmtSection") @@ -916,6 +950,9 @@ class _HeadingsTab(NScrollablePage): elif heading == self.EDIT_SCENE: self.fmtScene.setText(text) self._build.setValue("headings.fmtScene", text) + elif heading == self.EDIT_HSCENE: + self.fmtHScene.setText(text) + self._build.setValue("headings.fmtHardScene", text) elif heading == self.EDIT_SECTION: self.fmtSection.setText(text) self._build.setValue("headings.fmtSection", text) diff --git a/sample/content/bc0cbd2a407f3.nwd b/sample/content/bc0cbd2a407f3.nwd index 00642bba..2b51fe91 100644 --- a/sample/content/bc0cbd2a407f3.nwd +++ b/sample/content/bc0cbd2a407f3.nwd @@ -1,8 +1,8 @@ %%~name: Another Scene %%~path: 6a2d6d5f4f401/bc0cbd2a407f3 %%~kind: NOVEL/DOCUMENT -%%~hash: b3f9e4b097f7041c77489876577014c435a8be0c -%%~date: Unknown/2023-08-25 16:51:57 +%%~hash: d35e2629876e627b1a2418affa40d477022984f8 +%%~date: Unknown/2024-03-11 22:56:28 ### Another Scene @pov: John @@ -13,7 +13,7 @@ Adding more scenes to a chapter is as easy as adding more scene files with a lev In fact, if you wish, you can add all the scenes in the chapter file too. All novelWriter cares about is the level of the headings and the order in which they appear. -### More Scenes +###! More Scenes @pov: Jane @focus: John From 8f25be8cb2f3b679c86272b9e7b0011ad7f84886 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Tue, 12 Mar 2024 17:27:38 +0100 Subject: [PATCH 3/8] Update headings settings in manuscript build tool --- novelwriter/core/buildsettings.py | 18 +++++++++--------- novelwriter/tools/manuscript.py | 14 ++++++-------- novelwriter/tools/manussettings.py | 12 ++++++------ tests/test_core/test_core_buildsettings.py | 4 ++-- 4 files changed, 23 insertions(+), 25 deletions(-) diff --git a/novelwriter/core/buildsettings.py b/novelwriter/core/buildsettings.py index d033c83f..d38f3347 100644 --- a/novelwriter/core/buildsettings.py +++ b/novelwriter/core/buildsettings.py @@ -102,15 +102,15 @@ SETTINGS_LABELS = { "filter.includeInactive": QT_TRANSLATE_NOOP("Builds", "Inactive Documents"), "headings": QT_TRANSLATE_NOOP("Builds", "Headings"), - "headings.fmtTitle": QT_TRANSLATE_NOOP("Builds", "Title Headings"), - "headings.fmtChapter": QT_TRANSLATE_NOOP("Builds", "Chapter Headings"), - "headings.fmtUnnumbered": QT_TRANSLATE_NOOP("Builds", "Unnumbered Headings"), - "headings.fmtScene": QT_TRANSLATE_NOOP("Builds", "Scene Headings"), - "headings.fmtHardScene": QT_TRANSLATE_NOOP("Builds", "Hard Scene Headings"), - "headings.fmtSection": QT_TRANSLATE_NOOP("Builds", "Section Headings"), - "headings.hideScene": QT_TRANSLATE_NOOP("Builds", "Hide Scene Headings"), - "headings.hideHardScene": QT_TRANSLATE_NOOP("Builds", "Hide Hard Scene Headings"), - "headings.hideSection": QT_TRANSLATE_NOOP("Builds", "Hide Section Headings"), + "headings.fmtTitle": QT_TRANSLATE_NOOP("Builds", "Partition Format"), + "headings.fmtChapter": QT_TRANSLATE_NOOP("Builds", "Chapter Format"), + "headings.fmtUnnumbered": QT_TRANSLATE_NOOP("Builds", "Unnumbered Format"), + "headings.fmtScene": QT_TRANSLATE_NOOP("Builds", "Scene Format"), + "headings.fmtHardScene": QT_TRANSLATE_NOOP("Builds", "Hard Scene Format"), + "headings.fmtSection": QT_TRANSLATE_NOOP("Builds", "Section Format"), + "headings.hideScene": QT_TRANSLATE_NOOP("Builds", "Hide Scene Breaks"), + "headings.hideHardScene": QT_TRANSLATE_NOOP("Builds", "Hide Hard Scene Breaks"), + "headings.hideSection": QT_TRANSLATE_NOOP("Builds", "Hide Section Breaks"), "text.grpContent": QT_TRANSLATE_NOOP("Builds", "Text Content"), "text.includeSynopsis": QT_TRANSLATE_NOOP("Builds", "Include Synopsis"), diff --git a/novelwriter/tools/manuscript.py b/novelwriter/tools/manuscript.py index 7ef2bfa0..aa686d74 100644 --- a/novelwriter/tools/manuscript.py +++ b/novelwriter/tools/manuscript.py @@ -610,16 +610,15 @@ class _DetailsWidget(QWidget): item.setText(0, build.getLabel("headings")) item.setText(1, "") self.listView.addTopLevelItem(item) - entries = [ + for key in [ "headings.fmtTitle", "headings.fmtChapter", "headings.fmtUnnumbered", - "headings.fmtScene", "headings.fmtSection" - ] - for key in entries: + "headings.fmtScene", "headings.fmtHardScene", "headings.fmtSection" + ]: sub = QTreeWidgetItem() sub.setText(0, build.getLabel(key)) sub.setText(1, hFmt.apply(build.getStr(key), title, 0)) item.addChild(sub) - for key in ["headings.hideScene", "headings.hideSection"]: + for key in ["headings.hideScene", "headings.hideHardScene", "headings.hideSection"]: sub = QTreeWidgetItem() sub.setText(0, build.getLabel(key)) sub.setIcon(1, on if build.getBool(key) else off) @@ -630,11 +629,10 @@ class _DetailsWidget(QWidget): item.setText(0, build.getLabel("text.grpContent")) item.setText(1, "") self.listView.addTopLevelItem(item) - entries = [ + for key in [ "text.includeSynopsis", "text.includeComments", "text.includeKeywords", "text.includeBodyText", - ] - for key in entries: + ]: sub = QTreeWidgetItem() sub.setText(0, build.getLabel(key)) sub.setIcon(1, on if build.getBool(key) else off) diff --git a/novelwriter/tools/manussettings.py b/novelwriter/tools/manussettings.py index a0f9c75d..b298adbd 100644 --- a/novelwriter/tools/manussettings.py +++ b/novelwriter/tools/manussettings.py @@ -604,7 +604,7 @@ class _HeadingsTab(NScrollablePage): self.formatBox.setHorizontalSpacing(vSp) # Title Heading - self.lblTitle = QLabel(self._build.getLabel("headings.fmtTitle")) + self.lblTitle = QLabel(self._build.getLabel("headings.fmtTitle"), self) self.fmtTitle = QLineEdit("", self) self.fmtTitle.setReadOnly(True) self.btnTitle = QToolButton(self) @@ -620,7 +620,7 @@ class _HeadingsTab(NScrollablePage): self.formatBox.addLayout(wrapTitle, 0, 1) # Chapter Heading - self.lblChapter = QLabel(self._build.getLabel("headings.fmtChapter")) + self.lblChapter = QLabel(self._build.getLabel("headings.fmtChapter"), self) self.fmtChapter = QLineEdit("", self) self.fmtChapter.setReadOnly(True) self.btnChapter = QToolButton(self) @@ -636,7 +636,7 @@ class _HeadingsTab(NScrollablePage): self.formatBox.addLayout(wrapChapter, 1, 1) # Unnumbered Chapter Heading - self.lblUnnumbered = QLabel(self._build.getLabel("headings.fmtUnnumbered")) + self.lblUnnumbered = QLabel(self._build.getLabel("headings.fmtUnnumbered"), self) self.fmtUnnumbered = QLineEdit("", self) self.fmtUnnumbered.setReadOnly(True) self.btnUnnumbered = QToolButton(self) @@ -653,7 +653,7 @@ class _HeadingsTab(NScrollablePage): # Scene Heading sceneHideTip = self._build.getLabel("headings.hideScene") - self.lblScene = QLabel(self._build.getLabel("headings.fmtScene")) + self.lblScene = QLabel(self._build.getLabel("headings.fmtScene"), self) self.fmtScene = QLineEdit("", self) self.fmtScene.setReadOnly(True) self.btnScene = QToolButton(self) @@ -680,7 +680,7 @@ class _HeadingsTab(NScrollablePage): # Alt Scene Heading hardSceneHideTip = self._build.getLabel("headings.hideHardScene") - self.lblHScene = QLabel(self._build.getLabel("headings.fmtHardScene")) + self.lblHScene = QLabel(self._build.getLabel("headings.fmtHardScene"), self) self.fmtHScene = QLineEdit("", self) self.fmtHScene.setReadOnly(True) self.btnHScene = QToolButton(self) @@ -707,7 +707,7 @@ class _HeadingsTab(NScrollablePage): # Section Heading sectionHideTip = self._build.getLabel("headings.hideSection") - self.lblSection = QLabel(self._build.getLabel("headings.fmtSection")) + self.lblSection = QLabel(self._build.getLabel("headings.fmtSection"), self) self.fmtSection = QLineEdit("", self) self.fmtSection.setReadOnly(True) self.btnSection = QToolButton(self) diff --git a/tests/test_core/test_core_buildsettings.py b/tests/test_core/test_core_buildsettings.py index 78f09600..bccccae1 100644 --- a/tests/test_core/test_core_buildsettings.py +++ b/tests/test_core/test_core_buildsettings.py @@ -196,8 +196,8 @@ def testCoreBuildSettings_BuildValues(): assert build.getFloat(floatSetting) == 2.5 # Check labels - assert build.getLabel(strSetting) == "Title Headings" - assert BuildSettings.getLabel(strSetting) == "Title Headings" + assert build.getLabel(strSetting) == "Partition Format" + assert BuildSettings.getLabel(strSetting) == "Partition Format" # Pack the values data = build.pack() From c5c9726794f94500ecb5abf650e36ee039fc3112 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Tue, 12 Mar 2024 17:28:02 +0100 Subject: [PATCH 4/8] Clean up heading processing in tokenizer --- novelwriter/core/tokenizer.py | 112 +++++++++++++--------------------- 1 file changed, 44 insertions(+), 68 deletions(-) diff --git a/novelwriter/core/tokenizer.py b/novelwriter/core/tokenizer.py index e1ee5550..39565383 100644 --- a/novelwriter/core/tokenizer.py +++ b/novelwriter/core/tokenizer.py @@ -492,7 +492,7 @@ class Tokenizer(ABC): # Check Line Format # ================= - if aLine[0] == "[": + if aLine.startswith("["): # Special Formats # =============== # Parse special formatting line. This must be a separate if @@ -521,13 +521,13 @@ class Tokenizer(ABC): ] continue - if aLine[0] == "%": + if aLine.startswith("%"): # Comments # ======== # All style comments are processed and the exact type exact # style extracted. Ignored comments on the '%~' format are # skipped completely. - if aLine[1] == "~": + if aLine.startswith("%~"): continue cStyle, cText, _ = processComment(aLine) @@ -550,7 +550,7 @@ class Tokenizer(ABC): if self._doComments and self._keepMarkdown: tmpMarkdown.append(f"{aLine}\n") - elif aLine[0] == "@": + elif aLine.startswith("@"): # Keywords # ======== # Only valid keyword lines are parsed, and any ignored keywords @@ -564,56 +564,71 @@ class Tokenizer(ABC): if self._doKeywords and self._keepMarkdown: tmpMarkdown.append(f"{aLine}\n") - elif aLine[:2] == "# ": - # Partition Headings - # ================== + elif aLine.startswith(("# ", "#! ")): + # Title or Partition Headings + # =========================== + # Main titles are allowed in any document, and they are always + # centred and start on a new page. For novel documents, we also + # reset all counters when such a title is encountered. # Partition headings are only formatted in novel documents, and # otherwise unchanged. Scene separators are disabled # immediately after partitions, and scene numbers are reset. + isPart = aLine.startswith("# ") nHead += 1 - tText = aLine[2:].strip() - tStyle = self.A_NONE - if self._isNovel: + nSkip = 2 if isPart else 3 + tText = aLine[nSkip:].strip() + tType = self.T_HEAD1 if isPart else self.T_TITLE + tStyle = self.A_NONE if isPart else (self.A_PBB | self.A_CENTRE) + if self._isNovel and isPart: tText = self._hFormatter.apply(self._fmtTitle, tText, nHead) tStyle = self._titleStyle - self._noSep = True self._hFormatter.resetScene() + self._noSep = True + elif self._isNovel and not isPart: + self._hFormatter.resetAll() + self._noSep = True self._tokens.append(( - self.T_HEAD1, nHead, tText, [], tStyle + tType, nHead, tText, [], tStyle )) if self._keepMarkdown: tmpMarkdown.append(f"{aLine}\n") - elif aLine[:3] == "## ": - # Chapter Headings - # ================ + elif aLine.startswith(("## ", "##! ")): + # (Unnumbered) Chapter Headings + # ============================= # Chapter headings are only formatted in novel documents, and # otherwise unchanged. Chapter numbers are bumped before the # heading is formatted. Scene separators are disabled # immediately after chapter headings, and scene numbers are - # reset. + # reset. Unnumbered chapters are only meaningful in Novel docs, + # so if we're in a note, we keep them as level 2 headings. + isUnNum = aLine.startswith("##! ") nHead += 1 - tText = aLine[3:].strip() + nSkip = 4 if isUnNum else 3 + tText = aLine[nSkip:].strip() + tType = self.T_HEAD2 tStyle = self.A_NONE + tFormat = self._fmtUnNum if isUnNum else self._fmtChapter if self._isNovel: self._hFormatter.incChapter() - tText = self._hFormatter.apply(self._fmtChapter, tText, nHead) + tText = self._hFormatter.apply(tFormat, tText, nHead) + tType = self.T_UNNUM if isUnNum else tType tStyle = self._chapterStyle self._noSep = True self._hFormatter.resetScene() self._tokens.append(( - self.T_HEAD2, nHead, tText, [], tStyle + tType, nHead, tText, [], tStyle )) if self._keepMarkdown: tmpMarkdown.append(f"{aLine}\n") - elif aLine[:4] == "### " or aLine[:5] == "###! ": - # Scene Headings - # ============== + elif aLine.startswith(("### ", "###! ")): + # (Hard) Scene Headings + # ===================== # Scene headings in novel documents are treated as centred # separators if the formatting does not change the text. If the # format is empty, the scene can be hidden or a blank paragraph @@ -622,22 +637,23 @@ class Tokenizer(ABC): # separators immediately after other titles. Scene numbers are # always incremented before formatting. For notes, the heading # is unchanged. + isHard = aLine.startswith("###! ") nHead += 1 - tText = aLine[4:].strip() + nSkip = 5 if isHard else 4 + tText = aLine[nSkip:].strip() tType = self.T_HEAD3 tStyle = self.A_NONE - isHard = aLine[:5] == "###! " sHide = self._hideHScene if isHard else self._hideScene - fScene = self._fmtHScene if isHard else self._fmtScene + tFormat = self._fmtHScene if isHard else self._fmtScene if self._isNovel: self._hFormatter.incScene() - tText = self._hFormatter.apply(fScene, tText, nHead) + tText = self._hFormatter.apply(tFormat, tText, nHead) tStyle = self._sceneStyle if tText == "": tType = self.T_EMPTY if self._noSep or sHide else self.T_SKIP tStyle = self.A_NONE - elif tText == self._fmtScene: + elif tText == tFormat: tText = "" if self._noSep else tText tType = self.T_EMPTY if self._noSep else self.T_SEP tStyle = self.A_NONE if self._noSep else self.A_CENTRE @@ -649,7 +665,7 @@ class Tokenizer(ABC): if self._keepMarkdown: tmpMarkdown.append(f"{aLine}\n") - elif aLine[:5] == "#### ": + elif aLine.startswith("#### "): # Section Headings # ================= # Section headings in novel docs are treated as centred @@ -675,46 +691,6 @@ class Tokenizer(ABC): if self._keepMarkdown: tmpMarkdown.append(f"{aLine}\n") - elif aLine[:3] == "#! ": - # Main Title - # ========== - # Main titles are allowed in any document, and they are always - # centred and start on a new page. For novel documents, we also - # reset all counters when such a title is encountered. - - nHead += 1 - self._tokens.append(( - self.T_TITLE, nHead, aLine[3:].strip(), [], self.A_PBB | self.A_CENTRE - )) - if self._isNovel: - self._noSep = True - self._hFormatter.resetAll() - if self._keepMarkdown: - tmpMarkdown.append(f"{aLine}\n") - - elif aLine[:4] == "##! ": - # Unnumbered Chapter Headings - # =========================== - # Unnumbered chapters are only meaningful in Novel docs, so if - # we're in a note, we convert them to a plain level 2 heading. - - nHead += 1 - tText = aLine[4:].strip() - tType = self.T_HEAD2 - tStyle = self.A_NONE - if self._isNovel: - tText = self._hFormatter.apply(self._fmtUnNum, tText, nHead) - tType = self.T_UNNUM - tStyle = self._chapterStyle - self._noSep = True - self._hFormatter.resetScene() - - self._tokens.append(( - tType, nHead, tText, [], tStyle - )) - if self._keepMarkdown: - tmpMarkdown.append(f"{aLine}\n") - else: # Text Lines # ========== From 66cf7cce78033e13282c1b8bede876de440379aa Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Tue, 12 Mar 2024 17:40:11 +0100 Subject: [PATCH 5/8] Improve test coverage --- tests/test_core/test_core_tokenizer.py | 35 +++++++++++++++++--------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/tests/test_core/test_core_tokenizer.py b/tests/test_core/test_core_tokenizer.py index d2e05708..0d722500 100644 --- a/tests/test_core/test_core_tokenizer.py +++ b/tests/test_core/test_core_tokenizer.py @@ -47,6 +47,7 @@ def testCoreToken_Setters(mockGUI): assert tokens._fmtChapter == nwHeadFmt.TITLE assert tokens._fmtUnNum == nwHeadFmt.TITLE assert tokens._fmtScene == nwHeadFmt.TITLE + assert tokens._fmtHScene == nwHeadFmt.TITLE assert tokens._fmtSection == nwHeadFmt.TITLE assert tokens._textFont == "Serif" assert tokens._textSize == 11 @@ -74,6 +75,7 @@ def testCoreToken_Setters(mockGUI): tokens.setChapterFormat(f"C: {nwHeadFmt.TITLE}") tokens.setUnNumberedFormat(f"U: {nwHeadFmt.TITLE}") tokens.setSceneFormat(f"S: {nwHeadFmt.TITLE}", True) + tokens.setHardSceneFormat(f"H: {nwHeadFmt.TITLE}", True) tokens.setSectionFormat(f"X: {nwHeadFmt.TITLE}", True) tokens.setFont("Monospace", 10, True) tokens.setLineHeight(2.0) @@ -97,6 +99,7 @@ def testCoreToken_Setters(mockGUI): assert tokens._fmtChapter == f"C: {nwHeadFmt.TITLE}" assert tokens._fmtUnNum == f"U: {nwHeadFmt.TITLE}" assert tokens._fmtScene == f"S: {nwHeadFmt.TITLE}" + assert tokens._fmtHScene == f"H: {nwHeadFmt.TITLE}" assert tokens._fmtSection == f"X: {nwHeadFmt.TITLE}" assert tokens._textFont == "Monospace" assert tokens._textSize == 10 @@ -1741,7 +1744,7 @@ def testCoreToken_HeaderCounterAndVisibility(mockGUI): "# Title Two\n\n" "### Scene Three\n\n" "Text\n\n" - "### Scene Four\n\n" + "###! Scene Four\n\n" "Text\n\n" ) md.setTitleFormat(f"T: {nwHeadFmt.TITLE}") @@ -1749,13 +1752,14 @@ def testCoreToken_HeaderCounterAndVisibility(mockGUI): md.setSectionFormat("", True) # Static Separator - md.setSceneFormat("* * *", False) + md.setSceneFormat("~", False) + md.setHardSceneFormat("* * *", False) md.tokenizeText() md.doConvert() assert md.result == ( "# T: Title One\n\n" "Text\n\n" - "* * *\n\n" + "~\n\n" "Text\n\n" "# T: Title Two\n\n" "Text\n\n" @@ -1765,6 +1769,7 @@ def testCoreToken_HeaderCounterAndVisibility(mockGUI): # Scene Title Formatted md.setSceneFormat(f"S: {nwHeadFmt.TITLE}", False) + md.setHardSceneFormat(f"H: {nwHeadFmt.TITLE}", False) md.tokenizeText() md.doConvert() assert md.result == ( @@ -1776,7 +1781,7 @@ def testCoreToken_HeaderCounterAndVisibility(mockGUI): "# T: Title Two\n\n" "### S: Scene Three\n\n" "Text\n\n" - "### S: Scene Four\n\n" + "### H: Scene Four\n\n" "Text\n\n" ) @@ -1793,7 +1798,7 @@ def testCoreToken_HeaderCounterAndVisibility(mockGUI): "## Chapter Two\n\n" "### Scene Three\n\n" "Text\n\n" - "### Scene Four\n\n" + "###! Scene Four\n\n" "Text\n\n" ) md.setTitleFormat(f"T: {nwHeadFmt.TITLE}") @@ -1802,6 +1807,7 @@ def testCoreToken_HeaderCounterAndVisibility(mockGUI): # Static Separator md.setSceneFormat("* * *", False) + md.setHardSceneFormat("* * *", False) md.tokenizeText() md.doConvert() assert md.result == ( @@ -1818,6 +1824,7 @@ def testCoreToken_HeaderCounterAndVisibility(mockGUI): # Scene Title Formatted md.setSceneFormat(f"S: {nwHeadFmt.TITLE}", False) + md.setHardSceneFormat(f"H: {nwHeadFmt.TITLE}", False) md.tokenizeText() md.doConvert() assert md.result == ( @@ -1830,7 +1837,7 @@ def testCoreToken_HeaderCounterAndVisibility(mockGUI): "## C: Chapter Two\n\n" "### S: Scene Three\n\n" "Text\n\n" - "### S: Scene Four\n\n" + "### H: Scene Four\n\n" "Text\n\n" ) @@ -1847,7 +1854,7 @@ def testCoreToken_HeaderCounterAndVisibility(mockGUI): "## Chapter Two\n\n" "### Scene Three\n\n" "Text\n\n" - "### Scene Four\n\n" + "###! Scene Four\n\n" "Text\n\n" "#! Novel Two\n\n" "## Chapter One\n\n" @@ -1858,13 +1865,17 @@ def testCoreToken_HeaderCounterAndVisibility(mockGUI): "## Chapter Two\n\n" "### Scene Three\n\n" "Text\n\n" - "### Scene Four\n\n" + "###! Scene Four\n\n" "Text\n\n" ) md.setTitleFormat(f"T: {nwHeadFmt.TITLE}") md.setChapterFormat(f"C {nwHeadFmt.CH_NUM}: {nwHeadFmt.TITLE}") - md.setSceneFormat(f"S {nwHeadFmt.CH_NUM}.{nwHeadFmt.SC_NUM} ({nwHeadFmt.SC_ABS}): " - f"{nwHeadFmt.TITLE}", False) + md.setSceneFormat( + f"S {nwHeadFmt.CH_NUM}.{nwHeadFmt.SC_NUM} ({nwHeadFmt.SC_ABS}): {nwHeadFmt.TITLE}", False + ) + md.setHardSceneFormat( + f"H {nwHeadFmt.CH_NUM}.{nwHeadFmt.SC_NUM} ({nwHeadFmt.SC_ABS}): {nwHeadFmt.TITLE}", False + ) md.setSectionFormat("", True) # Two Novel Format @@ -1880,7 +1891,7 @@ def testCoreToken_HeaderCounterAndVisibility(mockGUI): "## C 2: Chapter Two\n\n" "### S 2.1 (3): Scene Three\n\n" "Text\n\n" - "### S 2.2 (4): Scene Four\n\n" + "### H 2.2 (4): Scene Four\n\n" "Text\n\n" "# Novel Two\n\n" "## C 1: Chapter One\n\n" @@ -1891,7 +1902,7 @@ def testCoreToken_HeaderCounterAndVisibility(mockGUI): "## C 2: Chapter Two\n\n" "### S 2.1 (3): Scene Three\n\n" "Text\n\n" - "### S 2.2 (4): Scene Four\n\n" + "### H 2.2 (4): Scene Four\n\n" "Text\n\n" ) From 44721fc79700e8ce33acddaeb581cecb9e7eee24 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Tue, 12 Mar 2024 17:55:13 +0100 Subject: [PATCH 6/8] Update documentation --- .../images/fig_build_settings_headings.png | Bin 54891 -> 71641 bytes docs/source/int_howto.rst | 4 ++++ docs/source/project_manuscript.rst | 16 ++++++++++++++++ docs/source/usage_format.rst | 7 ++++++- 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/docs/source/images/fig_build_settings_headings.png b/docs/source/images/fig_build_settings_headings.png index d52193610f054c96414cfdfdf66867f1777716a8..a726272502852ba331d25e8397ee7736e782c401 100644 GIT binary patch literal 71641 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 S^aiL%qjFMRF;l_h#(w~^hzHF8 diff --git a/docs/source/int_howto.rst b/docs/source/int_howto.rst index 43f28601..fe5b22fa 100644 --- a/docs/source/int_howto.rst +++ b/docs/source/int_howto.rst @@ -75,6 +75,10 @@ Organising Your Text Keep in mind that this is not what the section heading is intended for, so the app will not understand the section heading as a scene, but it will be formatted correctly in the manuscript. + .. versionadded:: 2.4 + You can now distinguish between soft and hard scene breaks with a modified scene header. See + :ref:`a_manuscript_settings_head_hard` for more details. + Other Tools =========== diff --git a/docs/source/project_manuscript.rst b/docs/source/project_manuscript.rst index 91af6245..9383079d 100644 --- a/docs/source/project_manuscript.rst +++ b/docs/source/project_manuscript.rst @@ -63,6 +63,8 @@ In the figure, the green arrow icon and the blue pin icon indicates which docume and the red forbidden icon indicates that a document is explicitly excluded. +.. _a_manuscript_settings_head: + Formatting Headings ------------------- @@ -86,6 +88,7 @@ Any text you add that isn't highlighted in colours will remain in your formatted You can preview the result of these format strings by clicking :guilabel:`Apply`, and then clicking :guilabel:`Preview` in the :guilabel:`Manuscript Build` tool main window. + Scene Separators ^^^^^^^^^^^^^^^^ @@ -99,6 +102,19 @@ the desired separator text as the format. If the format is any piece of static t be treated as a separator. +.. _a_manuscript_settings_head_hard: + +Hard and Soft Scenes +^^^^^^^^^^^^^^^^^^^^ + +If you wish to distinguish between so-called soft and hard scene breaks, where a hard scene break +is understood as a scene break that changes point-of-view character, you can use the modified scene +heading format in your text. You can then give these headings a different formatting in the +:guilabel:`Headings` settings. + +See :ref:`a_fmt_head` for more info on how to format headings in your text. + + Output Settings --------------- diff --git a/docs/source/usage_format.rst b/docs/source/usage_format.rst index 9c4bf73f..f452c5fd 100644 --- a/docs/source/usage_format.rst +++ b/docs/source/usage_format.rst @@ -68,7 +68,7 @@ correctly to produce the intended result. See :ref:`a_struct_heads` for more det Heading level four. For novel documents, the level indicates the start of a new section. Section titles can be replaced by separators or ignored completely when building the manuscript. -For headings level one and two, adding a ``!`` modifies its meaning: +For headings level one through three, adding a ``!`` modifies its meaning: ``#! Title Text`` This tells the build tool that the level one heading is intended to be used for the novel's or @@ -81,6 +81,11 @@ For headings level one and two, adding a ``!`` modifies its meaning: chapter numbers are being used. Such titles are useful for a prologue for instance. See :ref:`a_struct_heads_unnum` for more details. +``###! Title Text`` + This is an alternative scene heading that can be formatted differently in the + :guilabel:`Manuscript Build` tool. It is intended for separating "soft" and "hard" scene breaks. + Otherwise, it behaves identically to a regular scene heading. + .. note:: The space after the ``#`` or ``!`` character is mandatory. The syntax highlighter will change colour and font size when the heading is correctly formatted. From 1bd82954c2de62fcd7f534098a49f0dfea0ec065 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Tue, 12 Mar 2024 18:12:47 +0100 Subject: [PATCH 7/8] Add menu entry and update tests --- novelwriter/enum.py | 31 ++++++++++---------- novelwriter/gui/doceditor.py | 5 ++++ novelwriter/gui/mainmenu.py | 6 ++++ tests/test_core/test_core_index.py | 13 ++++++++ tests/test_gui/test_gui_doceditor.py | 16 +++++++++- tests/test_gui/test_gui_mainmenu.py | 5 ++++ tests/test_tools/test_tools_manussettings.py | 16 ++++++++++ 7 files changed, 76 insertions(+), 16 deletions(-) diff --git a/novelwriter/enum.py b/novelwriter/enum.py index 85724c95..b7e38e40 100644 --- a/novelwriter/enum.py +++ b/novelwriter/enum.py @@ -112,21 +112,22 @@ class nwDocAction(Enum): BLOCK_TXT = 19 BLOCK_TTL = 20 BLOCK_UNN = 21 - REPL_SNG = 22 - REPL_DBL = 23 - RM_BREAKS = 24 - ALIGN_L = 25 - ALIGN_C = 26 - ALIGN_R = 27 - INDENT_L = 28 - INDENT_R = 29 - SC_ITALIC = 30 - SC_BOLD = 31 - SC_STRIKE = 32 - SC_ULINE = 33 - SC_MARK = 34 - SC_SUP = 35 - SC_SUB = 36 + BLOCK_HSC = 22 + REPL_SNG = 23 + REPL_DBL = 24 + RM_BREAKS = 25 + ALIGN_L = 26 + ALIGN_C = 27 + ALIGN_R = 28 + INDENT_L = 29 + INDENT_R = 30 + SC_ITALIC = 31 + SC_BOLD = 32 + SC_STRIKE = 33 + SC_ULINE = 34 + SC_MARK = 35 + SC_SUP = 36 + SC_SUB = 37 # END Enum nwDocAction diff --git a/novelwriter/gui/doceditor.py b/novelwriter/gui/doceditor.py index f041141b..0d3bf0cc 100644 --- a/novelwriter/gui/doceditor.py +++ b/novelwriter/gui/doceditor.py @@ -744,6 +744,8 @@ class GuiDocEditor(QPlainTextEdit): self._formatBlock(nwDocAction.BLOCK_TTL) elif action == nwDocAction.BLOCK_UNN: self._formatBlock(nwDocAction.BLOCK_UNN) + elif action == nwDocAction.BLOCK_HSC: + self._formatBlock(nwDocAction.BLOCK_HSC) elif action == nwDocAction.REPL_SNG: self._replaceQuotes("'", self._typSQuoteO, self._typSQuoteC) elif action == nwDocAction.REPL_DBL: @@ -1705,6 +1707,9 @@ class GuiDocEditor(QPlainTextEdit): elif action == nwDocAction.BLOCK_UNN: text = f"##! {temp}" offset -= 4 + elif action == nwDocAction.BLOCK_HSC: + text = f"###! {temp}" + offset -= 5 elif action == nwDocAction.ALIGN_L: text = f"{temp} <<" elif action == nwDocAction.ALIGN_C: diff --git a/novelwriter/gui/mainmenu.py b/novelwriter/gui/mainmenu.py index 3e4c3850..86cbd3d8 100644 --- a/novelwriter/gui/mainmenu.py +++ b/novelwriter/gui/mainmenu.py @@ -735,6 +735,12 @@ class GuiMainMenu(QMenuBar): lambda: self.requestDocAction.emit(nwDocAction.BLOCK_UNN) ) + # Format > Hard Scene + self.aFmtHardSc = self.fmtMenu.addAction(self.tr("Hard Scene")) + self.aFmtHardSc.triggered.connect( + lambda: self.requestDocAction.emit(nwDocAction.BLOCK_HSC) + ) + # Format > Separator self.fmtMenu.addSeparator() diff --git a/tests/test_core/test_core_index.py b/tests/test_core/test_core_index.py index 2555b411..3ae976d4 100644 --- a/tests/test_core/test_core_index.py +++ b/tests/test_core/test_core_index.py @@ -502,6 +502,19 @@ def testCoreIndex_ScanText(mockGUI, fncPath, mockRnd): assert index._itemIndex[tHandle]["T0001"].paraCount == 1 # type: ignore assert index._itemIndex[tHandle]["T0001"].synopsis == "" # type: ignore + assert index.scanText(tHandle, ( + "###! Hard Scene\n\n" + "We're no longer following Jane, but John!\n\n" + )) + assert index._itemIndex[cHandle]["T0001"].references == {} # type: ignore + assert index._itemIndex[tHandle]["T0001"].level == "H3" # type: ignore + assert index._itemIndex[tHandle]["T0001"].line == 1 # type: ignore + assert index._itemIndex[tHandle]["T0001"].title == "Hard Scene" # type: ignore + assert index._itemIndex[tHandle]["T0001"].charCount == 51 # type: ignore + assert index._itemIndex[tHandle]["T0001"].wordCount == 9 # type: ignore + assert index._itemIndex[tHandle]["T0001"].paraCount == 1 # type: ignore + assert index._itemIndex[tHandle]["T0001"].synopsis == "" # type: ignore + # Page wo/Title # ============= diff --git a/tests/test_gui/test_gui_doceditor.py b/tests/test_gui/test_gui_doceditor.py index c8b1d581..d7475952 100644 --- a/tests/test_gui/test_gui_doceditor.py +++ b/tests/test_gui/test_gui_doceditor.py @@ -1134,13 +1134,20 @@ def testGuiEditor_BlockFormatting(qtbot, monkeypatch, nwGUI, projPath, ipsumText assert nwGUI.docEditor.getText() == "Title\n\n" assert nwGUI.docEditor.getCursorPosition() == 2 - # Strip Unnumbered CHapter + # Strip Unnumbered Chapter nwGUI.docEditor.replaceText("##! Title\n\n") nwGUI.docEditor.setCursorPosition(5) assert nwGUI.docEditor._formatBlock(nwDocAction.BLOCK_TXT) is True assert nwGUI.docEditor.getText() == "Title\n\n" assert nwGUI.docEditor.getCursorPosition() == 1 + # Strip Hard Scene + nwGUI.docEditor.replaceText("###! Title\n\n") + nwGUI.docEditor.setCursorPosition(6) + assert nwGUI.docEditor._formatBlock(nwDocAction.BLOCK_TXT) is True + assert nwGUI.docEditor.getText() == "Title\n\n" + assert nwGUI.docEditor.getCursorPosition() == 1 + # Strip Text nwGUI.docEditor.replaceText("Generic text\n\n") nwGUI.docEditor.setCursorPosition(5) @@ -1302,6 +1309,13 @@ def testGuiEditor_BlockFormatting(qtbot, monkeypatch, nwGUI, projPath, ipsumText assert nwGUI.docEditor.getText() == "##! Some text\n\n" assert nwGUI.docEditor.getCursorPosition() == 9 + # Hard Scene + nwGUI.docEditor.replaceText("Some text\n\n") + nwGUI.docEditor.setCursorPosition(5) + assert nwGUI.docEditor._formatBlock(nwDocAction.BLOCK_HSC) is True + assert nwGUI.docEditor.getText() == "###! Some text\n\n" + assert nwGUI.docEditor.getCursorPosition() == 10 + # Left Indent nwGUI.docEditor.replaceText("Some text\n\n") nwGUI.docEditor.setCursorPosition(5) diff --git a/tests/test_gui/test_gui_mainmenu.py b/tests/test_gui/test_gui_mainmenu.py index 5d11b0d2..b0a0351f 100644 --- a/tests/test_gui/test_gui_mainmenu.py +++ b/tests/test_gui/test_gui_mainmenu.py @@ -126,6 +126,11 @@ def testGuiMenu_EditFormat(qtbot, monkeypatch, nwGUI, prjLipsum): fmtStr = "##! Pellentesque nec erat ut nulla posuere commodo." assert nwGUI.docEditor.getText()[54:105] == fmtStr + # Hard Scene + nwGUI.mainMenu.aFmtHardSc.activate(QAction.Trigger) + fmtStr = "###! Pellentesque nec erat ut nulla posuere commodo." + assert nwGUI.docEditor.getText()[54:106] == fmtStr + # Clear Format nwGUI.mainMenu.aFmtNoFormat.activate(QAction.Trigger) assert nwGUI.docEditor.getText()[54:101] == cleanText diff --git a/tests/test_tools/test_tools_manussettings.py b/tests/test_tools/test_tools_manussettings.py index 45f97358..75d7d83f 100644 --- a/tests/test_tools/test_tools_manussettings.py +++ b/tests/test_tools/test_tools_manussettings.py @@ -327,12 +327,14 @@ def testBuildSettings_Headings(qtbot: QtBot, nwGUI: GuiMain): chTitle = f"Chapter: {nwHeadFmt.TITLE}" unTitle = f"Interlude: {nwHeadFmt.TITLE}" scTitle = f"Scene: {nwHeadFmt.TITLE}" + shTitle = f"Hard Scene: {nwHeadFmt.TITLE}" sxTitle = f"Section: {nwHeadFmt.TITLE}" build.setValue("headings.fmtTitle", ttTitle) build.setValue("headings.fmtChapter", chTitle) build.setValue("headings.fmtUnnumbered", unTitle) build.setValue("headings.fmtScene", scTitle) + build.setValue("headings.fmtHardScene", shTitle) build.setValue("headings.fmtSection", sxTitle) build.setValue("headings.hideScene", False) build.setValue("headings.hideSection", False) @@ -351,6 +353,7 @@ def testBuildSettings_Headings(qtbot: QtBot, nwGUI: GuiMain): assert headTab.fmtChapter.text() == chTitle assert headTab.fmtUnnumbered.text() == unTitle assert headTab.fmtScene.text() == scTitle + assert headTab.fmtHScene.text() == shTitle assert headTab.fmtSection.text() == sxTitle assert headTab.swtScene.isChecked() is False assert headTab.swtSection.isChecked() is False @@ -396,6 +399,14 @@ def testBuildSettings_Headings(qtbot: QtBot, nwGUI: GuiMain): headTab.btnApply.click() assert headTab.editTextBox.isEnabled() is False + # Hard Scene + headTab.btnHScene.click() + assert headTab._editing == headTab.EDIT_HSCENE + assert headTab.editTextBox.isEnabled() is True + assert headTab.editTextBox.toPlainText() == shTitle + headTab.btnApply.click() + assert headTab.editTextBox.isEnabled() is False + # Section headTab.btnSection.click() assert headTab._editing == headTab.EDIT_SECTION @@ -455,6 +466,11 @@ def testBuildSettings_Headings(qtbot: QtBot, nwGUI: GuiMain): headTab.btnApply.click() assert build.getStr("headings.fmtScene") == nwHeadFmt.TITLE + headTab.btnHScene.click() + headTab.editTextBox.setPlainText(nwHeadFmt.TITLE) + headTab.btnApply.click() + assert build.getStr("headings.fmtHardScene") == nwHeadFmt.TITLE + headTab.btnSection.click() headTab.editTextBox.setPlainText(nwHeadFmt.TITLE) headTab.btnApply.click() From c7e953fc249486844a35e9f8214c357d3c3b1cfc Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Wed, 13 Mar 2024 11:08:49 +0100 Subject: [PATCH 8/8] Fix chapter numbering in refactored tokenizer and add test coverage --- novelwriter/core/tokenizer.py | 44 ++++++++++++-------------- tests/test_core/test_core_tokenizer.py | 9 ++++++ 2 files changed, 30 insertions(+), 23 deletions(-) diff --git a/novelwriter/core/tokenizer.py b/novelwriter/core/tokenizer.py index 39565383..3d52e19a 100644 --- a/novelwriter/core/tokenizer.py +++ b/novelwriter/core/tokenizer.py @@ -573,20 +573,19 @@ class Tokenizer(ABC): # Partition headings are only formatted in novel documents, and # otherwise unchanged. Scene separators are disabled # immediately after partitions, and scene numbers are reset. - isPart = aLine.startswith("# ") + isPlain = aLine.startswith("# ") nHead += 1 - nSkip = 2 if isPart else 3 - tText = aLine[nSkip:].strip() - tType = self.T_HEAD1 if isPart else self.T_TITLE - tStyle = self.A_NONE if isPart else (self.A_PBB | self.A_CENTRE) - if self._isNovel and isPart: - tText = self._hFormatter.apply(self._fmtTitle, tText, nHead) - tStyle = self._titleStyle - self._hFormatter.resetScene() - self._noSep = True - elif self._isNovel and not isPart: - self._hFormatter.resetAll() + tText = aLine[2:].strip() + tType = self.T_HEAD1 if isPlain else self.T_TITLE + tStyle = self.A_NONE if isPlain else (self.A_PBB | self.A_CENTRE) + if self._isNovel: + if isPlain: + tText = self._hFormatter.apply(self._fmtTitle, tText, nHead) + tStyle = self._titleStyle + self._hFormatter.resetScene() + else: + self._hFormatter.resetAll() self._noSep = True self._tokens.append(( @@ -604,18 +603,18 @@ class Tokenizer(ABC): # immediately after chapter headings, and scene numbers are # reset. Unnumbered chapters are only meaningful in Novel docs, # so if we're in a note, we keep them as level 2 headings. - isUnNum = aLine.startswith("##! ") + isPlain = aLine.startswith("## ") nHead += 1 - nSkip = 4 if isUnNum else 3 - tText = aLine[nSkip:].strip() + tText = aLine[3:].strip() tType = self.T_HEAD2 tStyle = self.A_NONE - tFormat = self._fmtUnNum if isUnNum else self._fmtChapter + tFormat = self._fmtChapter if isPlain else self._fmtUnNum if self._isNovel: - self._hFormatter.incChapter() + if isPlain: + self._hFormatter.incChapter() tText = self._hFormatter.apply(tFormat, tText, nHead) - tType = self.T_UNNUM if isUnNum else tType + tType = self.T_HEAD2 if isPlain else self.T_UNNUM tStyle = self._chapterStyle self._noSep = True self._hFormatter.resetScene() @@ -637,15 +636,14 @@ class Tokenizer(ABC): # separators immediately after other titles. Scene numbers are # always incremented before formatting. For notes, the heading # is unchanged. - isHard = aLine.startswith("###! ") + isPlain = aLine.startswith("### ") nHead += 1 - nSkip = 5 if isHard else 4 - tText = aLine[nSkip:].strip() + tText = aLine[4:].strip() tType = self.T_HEAD3 tStyle = self.A_NONE - sHide = self._hideHScene if isHard else self._hideScene - tFormat = self._fmtHScene if isHard else self._fmtScene + sHide = self._hideScene if isPlain else self._hideHScene + tFormat = self._fmtScene if isPlain else self._fmtHScene if self._isNovel: self._hFormatter.incScene() tText = self._hFormatter.apply(tFormat, tText, nHead) diff --git a/tests/test_core/test_core_tokenizer.py b/tests/test_core/test_core_tokenizer.py index 0d722500..03343d0c 100644 --- a/tests/test_core/test_core_tokenizer.py +++ b/tests/test_core/test_core_tokenizer.py @@ -1843,9 +1843,12 @@ def testCoreToken_HeaderCounterAndVisibility(mockGUI): # Counter Handling, Novel Titles # ============================== + # This also checks that only numbered chapters bump the counter md._text = ( "#! Novel One\n\n" + "##! Prologue\n\n" + "Text\n\n" "## Chapter One\n\n" "### Scene One\n\n" "Text\n\n" @@ -1857,6 +1860,8 @@ def testCoreToken_HeaderCounterAndVisibility(mockGUI): "###! Scene Four\n\n" "Text\n\n" "#! Novel Two\n\n" + "##! Prologue\n\n" + "Text\n\n" "## Chapter One\n\n" "### Scene One\n\n" "Text\n\n" @@ -1883,6 +1888,8 @@ def testCoreToken_HeaderCounterAndVisibility(mockGUI): md.doConvert() assert md.result == ( "# Novel One\n\n" + "## Prologue\n\n" + "Text\n\n" "## C 1: Chapter One\n\n" "### S 1.1 (1): Scene One\n\n" "Text\n\n" @@ -1894,6 +1901,8 @@ def testCoreToken_HeaderCounterAndVisibility(mockGUI): "### H 2.2 (4): Scene Four\n\n" "Text\n\n" "# Novel Two\n\n" + "## Prologue\n\n" + "Text\n\n" "## C 1: Chapter One\n\n" "### S 1.1 (1): Scene One\n\n" "Text\n\n"