From c9eab0b01ef5f30c315aa8630690f9dd60e41ddc Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Mon, 30 Sep 2024 22:52:28 +0200 Subject: [PATCH 1/2] Add word counts to the ODT file as user fields (#2033) --- novelwriter/core/docbuild.py | 11 +++++------ novelwriter/core/toodt.py | 11 ++++++++++- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/novelwriter/core/docbuild.py b/novelwriter/core/docbuild.py index fa078cbb..30189bdd 100644 --- a/novelwriter/core/docbuild.py +++ b/novelwriter/core/docbuild.py @@ -89,11 +89,6 @@ class NWBuildDocument: # Setters ## - def setCountEnabled(self, state: bool) -> None: - """Turn on/off stats for builds.""" - self._count = state - return - def setBuildOutline(self, state: bool) -> None: """Turn on/off outline for builds.""" self._outline = state @@ -130,8 +125,8 @@ class NWBuildDocument: makeObj = ToQTextDocument(self._project) filtered = self._setupBuild(makeObj) - self._outline = True self._count = True + self._outline = True font = QFont() font.fromString(self._build.getStr("format.textFont")) @@ -169,6 +164,7 @@ class NWBuildDocument: filtered = self._setupBuild(makeObj) makeObj.initDocument() + self._count = True for i, tHandle in enumerate(self._queue): self._error = None if filtered.get(tHandle, (False, 0))[0]: @@ -199,6 +195,7 @@ class NWBuildDocument: makeObj = ToHtml(self._project) filtered = self._setupBuild(makeObj) + self._count = False for i, tHandle in enumerate(self._queue): self._error = None if filtered.get(tHandle, (False, 0))[0]: @@ -235,6 +232,7 @@ class NWBuildDocument: if self._build.getBool("format.replaceTabs"): makeObj.replaceTabs(nSpaces=4, spaceChar=" ") + self._count = False for i, tHandle in enumerate(self._queue): self._error = None if filtered.get(tHandle, (False, 0))[0]: @@ -262,6 +260,7 @@ class NWBuildDocument: makeObj.setKeepMarkdown(True) + self._count = False for i, tHandle in enumerate(self._queue): self._error = None if filtered.get(tHandle, (False, 0))[0]: diff --git a/novelwriter/core/toodt.py b/novelwriter/core/toodt.py index efb4f8d1..dbf75be3 100644 --- a/novelwriter/core/toodt.py +++ b/novelwriter/core/toodt.py @@ -532,11 +532,20 @@ class ToOdt(Tokenizer): return def closeDocument(self) -> None: - """Pack the automatic styles of the XML document.""" + """Add additional collected information to the XML.""" for style in self._autoPara.values(): style.packXML(self._xAuto) for style in self._autoText.values(): style.packXML(self._xAuto) + if self._counts: + xFields = ET.Element(_mkTag("text", "user-field-decls")) + for key, value in self._counts.items(): + ET.SubElement(xFields, _mkTag("text", "user-field-decl"), attrib={ + _mkTag("office", "value-type"): "float", + _mkTag("office", "value"): str(value), + _mkTag("text", "name"): f"Manuscript{key[:1].upper()}{key[1:]}", + }) + self._xText.insert(0, xFields) return def saveFlatXML(self, path: str | Path) -> None: From 1b457585d9fea319dbb1feeaf35efe7bec6ae6a4 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Mon, 30 Sep 2024 22:52:39 +0200 Subject: [PATCH 2/2] Update tests --- ...uildDocBuild_OpenDocument_Lorem_Ipsum.fodt | 19 ++++++++++++++++--- tests/test_core/test_core_docbuild.py | 2 -- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/tests/reference/mBuildDocBuild_OpenDocument_Lorem_Ipsum.fodt b/tests/reference/mBuildDocBuild_OpenDocument_Lorem_Ipsum.fodt index 92fac311..b6870a6c 100644 --- a/tests/reference/mBuildDocBuild_OpenDocument_Lorem_Ipsum.fodt +++ b/tests/reference/mBuildDocBuild_OpenDocument_Lorem_Ipsum.fodt @@ -1,13 +1,13 @@ - 2024-05-24T21:31:12 - novelWriter/2.5a4 + 2024-09-30T14:08:16 + novelWriter/2.6a0 lipsum.com 45 P0DT0H36M8S Lorem Ipsum - 2024-05-24T21:31:12 + 2024-09-30T14:08:16 lipsum.com @@ -116,6 +116,19 @@ + + + + + + + + + + + + + Lorem Ipsum By lipsum.com “Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit…” diff --git a/tests/test_core/test_core_docbuild.py b/tests/test_core/test_core_docbuild.py index 0ac4d00d..62461dd3 100644 --- a/tests/test_core/test_core_docbuild.py +++ b/tests/test_core/test_core_docbuild.py @@ -85,11 +85,9 @@ def testCoreDocBuild_OpenDocument(monkeypatch, mockGUI, prjLipsum, fncPath, tstP build.unpack(BUILD_CONF) docBuild = NWBuildDocument(project, build) - docBuild.setCountEnabled(True) docBuild.setBuildOutline(True) docBuild.queueAll() - assert docBuild._count is True assert docBuild._outline is True assert len(docBuild) == 21