Docx writer: fix FirstParagraph style lost after heading with footnote.

When a heading contained a footnote, processing the footnote's block
content would consume the stFirstPara flag, causing the following
paragraph to incorrectly receive BodyText style instead of
FirstParagraph. Fix by saving and restoring stFirstPara around
footnote block processing.

Closes #11573.

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
John MacFarlane
2026-04-09 21:13:28 +00:00
co-authored by Claude
parent 748babc80f
commit 381b82e4a3
2 changed files with 23 additions and 0 deletions
+2
View File
@@ -907,6 +907,7 @@ inlineToOpenXML' opts (Code attrs str) = do
inlineToOpenXML' opts (Note bs) = do
notes <- gets stFootnotes
notenum <- getUniqueId
oldFirstPara <- gets stFirstPara
footnoteStyle <- rStyleM "Footnote Reference"
let notemarker = mknode "w:r" []
[ mknode "w:rPr" [] footnoteStyle
@@ -922,6 +923,7 @@ inlineToOpenXML' opts (Note bs) = do
, envInNote = True })
(withParaPropM (pStyleM "Footnote Text") $
blocksToOpenXML opts $ insertNoteRef bs)
modify $ \s -> s{ stFirstPara = oldFirstPara }
let newnote = mknode "w:footnote" [("w:id", notenum)] contents
modify $ \s -> s{ stFootnotes = newnote : notes }
return [ Elem $ mknode "w:r" []
+21
View File
@@ -353,4 +353,25 @@ tests = [ testGroup "inlines"
assertBool "Language from metadata did not override reference docx (expected fr-FR)"
(any ("fr-FR" `isInfixOf`) (getLangLines stylesXml))
]
, testGroup "paragraph styles"
[ testCase "FirstParagraph after heading with footnote (#11573)" $ do
let opts = def
bs <- runIOorExplode $ do
setVerbosity ERROR
let doc = Pandoc mempty
[ Header 3 ("heading-with-note", [], [])
[Note [Para [Str "note"]], Str "Heading"]
, Para [Str "Para", Space, Str "after."]
]
writeDocx opts doc
let archive = toArchive bs
entry <- case findEntryByPath "word/document.xml" archive of
Nothing -> assertFailure "Missing word/document.xml in output docx"
Just e -> return e
let docXml = show (fromEntry entry)
assertBool
("Expected FirstParagraph style after heading with footnote, got: "
++ docXml)
("FirstParagraph" `isInfixOf` docXml)
]
]