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] 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: