aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2019-11-03 12:54:42 -0800
committerJohn MacFarlane <jgm@berkeley.edu>2019-11-03 12:54:42 -0800
commit530bfe5f5afb1098ef8cec46ffe00ff8a6f00a43 (patch)
treeb8da97f72734897f1e52f4d4ffbe8a998147806d /src
parente906e5ac23177c4377591c73c8e796e764096a32 (diff)
downloadpandoc-530bfe5f5afb1098ef8cec46ffe00ff8a6f00a43.tar.gz
Docx reader: fix list number resumption for sublists. Closes #4324.
The first list item of a sublist should not resume numbering from the number of the last sublist item of the same level, if that sublist was a sublist of a different list item. That is, we should not get: ``` 1. one 1. sub one 2. sub two 2. two 3. sub one ```
Diffstat (limited to 'src')
-rw-r--r--src/Text/Pandoc/Readers/Docx.hs9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/Text/Pandoc/Readers/Docx.hs b/src/Text/Pandoc/Readers/Docx.hs
index 9d17ab118..8b0b295ab 100644
--- a/src/Text/Pandoc/Readers/Docx.hs
+++ b/src/Text/Pandoc/Readers/Docx.hs
@@ -640,7 +640,14 @@ bodyPartToBlocks (ListItem pPr numId lvl (Just levelInfo) parparts) = do
, ("text", txt)
, ("start", show start)
]
- modify $ \st -> st{ docxListState = M.insert (numId, lvl) start listState}
+ modify $ \st -> st{ docxListState =
+ -- expire all the continuation data for lists of level > this one:
+ -- a new level 1 list item resets continuation for level 2+
+ let expireKeys = [ (numid', lvl')
+ | (numid', lvl') <- M.keys listState
+ , lvl' > lvl
+ ]
+ in foldr M.delete (M.insert (numId, lvl) start listState) expireKeys }
blks <- bodyPartToBlocks (Paragraph pPr parparts)
return $ divWith ("", ["list-item"], kvs) blks
bodyPartToBlocks (ListItem pPr _ _ _ parparts) =