From 530bfe5f5afb1098ef8cec46ffe00ff8a6f00a43 Mon Sep 17 00:00:00 2001
From: John MacFarlane <jgm@berkeley.edu>
Date: Sun, 3 Nov 2019 12:54:42 -0800
Subject: 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
```
---
 src/Text/Pandoc/Readers/Docx.hs | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

(limited to 'src')

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) =
-- 
cgit v1.2.3