Fix footnote formatting for ODT and update document builder tests

This commit is contained in:
Veronica Berglyd Olsen
2024-04-27 19:05:13 +02:00
parent db9305c230
commit e9596e1bbc
6 changed files with 278 additions and 75 deletions
+20 -13
View File
@@ -646,8 +646,14 @@ class ToOdt(Tokenizer):
xFmt = 0x00
tFrag = ""
fLast = 0
xNode = None
for fPos, fFmt, fData in tFmt:
# Add any extra nodes
if xNode:
parProc.appendNode(xNode)
xNode = None
# Add the text up to the current fragment
if tFrag := tText[fLast:fPos]:
if xFmt == 0x00:
@@ -685,7 +691,7 @@ class ToOdt(Tokenizer):
elif fFmt == self.FMT_SUB_E:
xFmt &= M_SUB
elif fFmt == self.FMT_FNOTE:
parProc.appendNode(self._generateFootnote(fData))
xNode = self._generateFootnote(fData)
elif fFmt == self.FMT_STRIP:
pass
else:
@@ -693,6 +699,9 @@ class ToOdt(Tokenizer):
fLast = fPos
if xNode:
parProc.appendNode(xNode)
if tFrag := tText[fLast:]:
if xFmt == 0x00:
parProc.appendText(tFrag)
@@ -1575,18 +1584,16 @@ class XMLParagraph:
return
def appendNode(self, xNode: ET.Element | None) -> None:
"""Append an XML node to the paragraph."""
if xNode:
if self._nState in (X_ROOT_TEXT, X_ROOT_TAIL):
self._xRoot.append(xNode)
self._xTail = xNode
self._xTail.tail = ""
self._nState = X_ROOT_TAIL
elif self._nState in (X_SPAN_TEXT, X_SPAN_SING):
self._xTail.append(xNode)
self._xSing = xNode
self._xSing.tail = ""
self._nState = X_SPAN_SING
"""Append an XML node to the paragraph. We only check for the
X_ROOT_TEXT and X_ROOT_TAIL states. X_SPAN_TEXT is not possible
at all, and X_SPAN_SING only happens internally in an appendSpan
call, returning us to an X_ROOT_TAIL state.
"""
if xNode and self._nState in (X_ROOT_TEXT, X_ROOT_TAIL):
self._xRoot.append(xNode)
self._xTail = xNode
self._xTail.tail = ""
self._nState = X_ROOT_TAIL
return
def checkError(self) -> tuple[int, str]: