From d4d258e170d6ae01850c54fd4bb1d94ea09b3614 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Sun, 9 Feb 2025 15:11:07 +0100 Subject: [PATCH 1/2] Fix document splitter not recognising alt scene format (#2233) --- .gitignore | 3 ++- novelwriter/dialogs/docsplit.py | 4 ++++ tests/test_dialogs/test_dlg_docsplit.py | 4 ++-- tests/test_gui/test_gui_projtree.py | 4 ++-- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index a69e4f00..6986d20d 100644 --- a/.gitignore +++ b/.gitignore @@ -20,8 +20,9 @@ i18n/*.qph # Documentation /docs/build/ +/docs/source/locales/**/*.mo /novelwriter/assets/help/ -/novelwriter/assets/manual.pdf +/novelwriter/assets/manual*.pdf *.qch *.qhc .~lock.* diff --git a/novelwriter/dialogs/docsplit.py b/novelwriter/dialogs/docsplit.py index 80fd6418..71b1725c 100644 --- a/novelwriter/dialogs/docsplit.py +++ b/novelwriter/dialogs/docsplit.py @@ -247,6 +247,10 @@ class GuiDocSplit(NDialog): onLine = lineNo hLevel = 2 hLabel = aLine[4:].strip() + elif aLine.startswith("###! ") and spLevel >= 3: + onLine = lineNo + hLevel = 3 + hLabel = aLine[5:].strip() if onLine >= 0 and hLevel > 0: newItem = QListWidgetItem() diff --git a/tests/test_dialogs/test_dlg_docsplit.py b/tests/test_dialogs/test_dlg_docsplit.py index e1bcba8f..bd75ca01 100644 --- a/tests/test_dialogs/test_dlg_docsplit.py +++ b/tests/test_dialogs/test_dlg_docsplit.py @@ -43,10 +43,10 @@ def testDlgSplit_Main(qtbot, monkeypatch, nwGUI, projPath, mockRnd): "##! Prologue\n\nText\n\n" "## Chapter One\n\nText\n\n" "### Scene One\n\nText\n\n" - "### Scene Two\n\nText\n\n" + "###! Scene Two\n\nText\n\n" "## Chapter Two\n\nText\n\n" "### Scene Three\n\nText\n\n" - "### Scene Four\n\nText\n\n" + "###! Scene Four\n\nText\n\n" "#! New Title\n\nText\n\n" "## New Chapter\n\nText\n\n" "### New Scene\n\nText\n\n" diff --git a/tests/test_gui/test_gui_projtree.py b/tests/test_gui/test_gui_projtree.py index 3642ef4b..84a7ea9a 100644 --- a/tests/test_gui/test_gui_projtree.py +++ b/tests/test_gui/test_gui_projtree.py @@ -858,10 +858,10 @@ def testGuiProjTree_SplitDocument(qtbot, monkeypatch, nwGUI, projPath, mockRnd, "##! Prologue\n\nText\n\n" "## Chapter One\n\nText\n\n" "### Scene One\n\nText\n\n" - "### Scene Two\n\nText\n\n" + "###! Scene Two\n\nText\n\n" "## Chapter Two\n\nText\n\n" "### Scene Three\n\nText\n\n" - "### Scene Four\n\nText\n\n" + "###! Scene Four\n\nText\n\n" "#! New Title\n\nText\n\n" "## New Chapter\n\nText\n\n" "### New Scene\n\nText\n\n" From ec8a6b99259d5ce85a24ade360bd6dbafae1409f Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Sun, 9 Feb 2025 15:14:28 +0100 Subject: [PATCH 2/2] Clean up variables --- novelwriter/dialogs/docsplit.py | 94 ++++++++++++++++----------------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/novelwriter/dialogs/docsplit.py b/novelwriter/dialogs/docsplit.py index 71b1725c..767cbe86 100644 --- a/novelwriter/dialogs/docsplit.py +++ b/novelwriter/dialogs/docsplit.py @@ -71,10 +71,10 @@ class GuiDocSplit(NDialog): vSp = CONFIG.pxInt(8) bSp = CONFIG.pxInt(12) - pOptions = SHARED.project.options - spLevel = pOptions.getInt("GuiDocSplit", "spLevel", 3) - intoFolder = pOptions.getBool("GuiDocSplit", "intoFolder", True) - docHierarchy = pOptions.getBool("GuiDocSplit", "docHierarchy", True) + options = SHARED.project.options + spLevel = options.getInt("GuiDocSplit", "spLevel", 3) + intoFolder = options.getBool("GuiDocSplit", "intoFolder", True) + docHierarchy = options.getBool("GuiDocSplit", "docHierarchy", True) # Heading Selection self.listBox = QListWidget(self) @@ -171,10 +171,10 @@ class GuiDocSplit(NDialog): self._data["moveToTrash"] = moveToTrash logger.debug("Saving State: GuiDocSplit") - pOptions = SHARED.project.options - pOptions.setValue("GuiDocSplit", "spLevel", spLevel) - pOptions.setValue("GuiDocSplit", "intoFolder", intoFolder) - pOptions.setValue("GuiDocSplit", "docHierarchy", docHierarchy) + options = SHARED.project.options + options.setValue("GuiDocSplit", "spLevel", spLevel) + options.setValue("GuiDocSplit", "intoFolder", intoFolder) + options.setValue("GuiDocSplit", "docHierarchy", docHierarchy) return self._data, self._text @@ -218,46 +218,46 @@ class GuiDocSplit(NDialog): if not self._text: self._text = SHARED.project.storage.getDocumentText(sHandle).splitlines() - for lineNo, aLine in enumerate(self._text): + for i, line in enumerate(self._text): - onLine = -1 - hLevel = 0 - hLabel = aLine.strip() - if aLine.startswith("# ") and spLevel >= 1: - onLine = lineNo - hLevel = 1 - hLabel = aLine[2:].strip() - elif aLine.startswith("## ") and spLevel >= 2: - onLine = lineNo - hLevel = 2 - hLabel = aLine[3:].strip() - elif aLine.startswith("### ") and spLevel >= 3: - onLine = lineNo - hLevel = 3 - hLabel = aLine[4:].strip() - elif aLine.startswith("#### ") and spLevel >= 4: - onLine = lineNo - hLevel = 4 - hLabel = aLine[5:].strip() - elif aLine.startswith("#! ") and spLevel >= 1: - onLine = lineNo - hLevel = 1 - hLabel = aLine[3:].strip() - elif aLine.startswith("##! ") and spLevel >= 2: - onLine = lineNo - hLevel = 2 - hLabel = aLine[4:].strip() - elif aLine.startswith("###! ") and spLevel >= 3: - onLine = lineNo - hLevel = 3 - hLabel = aLine[5:].strip() + pos = -1 + level = 0 + label = line.strip() + if line.startswith("# ") and spLevel >= 1: + pos = i + level = 1 + label = line[2:].strip() + elif line.startswith("## ") and spLevel >= 2: + pos = i + level = 2 + label = line[3:].strip() + elif line.startswith("### ") and spLevel >= 3: + pos = i + level = 3 + label = line[4:].strip() + elif line.startswith("#### ") and spLevel >= 4: + pos = i + level = 4 + label = line[5:].strip() + elif line.startswith("#! ") and spLevel >= 1: + pos = i + level = 1 + label = line[3:].strip() + elif line.startswith("##! ") and spLevel >= 2: + pos = i + level = 2 + label = line[4:].strip() + elif line.startswith("###! ") and spLevel >= 3: + pos = i + level = 3 + label = line[5:].strip() - if onLine >= 0 and hLevel > 0: - newItem = QListWidgetItem() - newItem.setText(aLine.strip()) - newItem.setData(self.LINE_ROLE, onLine) - newItem.setData(self.LEVEL_ROLE, hLevel) - newItem.setData(self.LABEL_ROLE, hLabel) - self.listBox.addItem(newItem) + if pos >= 0 and level > 0: + trItem = QListWidgetItem() + trItem.setText(line.strip()) + trItem.setData(self.LINE_ROLE, pos) + trItem.setData(self.LEVEL_ROLE, level) + trItem.setData(self.LABEL_ROLE, label) + self.listBox.addItem(trItem) return