Add field value insertion to all formats
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user