Add field value insertion to all formats

This commit is contained in:
Veronica Berglyd Olsen
2024-10-28 18:17:25 +01:00
parent f92521c93a
commit 42f904f1ea
5 changed files with 58 additions and 19 deletions
+18
View File
@@ -192,6 +192,7 @@ class ToDocX(Tokenizer):
self._files: dict[str, DocXXmlFile] = {}
self._styles: dict[str, DocXParStyle] = {}
self._usedNotes: dict[str, int] = {}
self._usedFields: list[tuple[ET.Element, str]] = []
return
@@ -440,6 +441,8 @@ class ToDocX(Tokenizer):
fLink = ""
elif fFmt == TextFmt.FNOTE:
xNode = self._generateFootnote(fData)
elif fFmt == TextFmt.FIELD:
xNode = self._generateField(fData)
elif fFmt == TextFmt.STRIP:
pass
@@ -510,6 +513,15 @@ class ToDocX(Tokenizer):
return xR
return None
def _generateField(self, key: str) -> ET.Element | None:
"""Generate a data field XML object."""
if key and (field := key.partition(":")[2]):
xR = ET.Element(_wTag("r"))
xT = xmlSubElem(xR, _wTag("t"), "0")
self._usedFields.append((xT, field))
return xR
return None
def _generateStyles(self) -> None:
"""Generate usable styles."""
styles: list[DocXParStyle] = []
@@ -920,6 +932,12 @@ class ToDocX(Tokenizer):
pars.append(par)
# Replace fields if there are stats available
if self._usedFields and self._counts:
for xField, field in self._usedFields:
if (value := self._counts.get(field)) is not None:
xField.text = f"{value:n}"
# Write Paragraphs
for par in pars:
par.toXml(xBody)