@@ -121,6 +121,9 @@ data DState = DState { docxAnchorMap :: M.Map String String
121 , docxMediaBag :: MediaBag
121 , docxMediaBag :: MediaBag
122 , docxDropCap :: Inlines
122 , docxDropCap :: Inlines
123 , docxWarnings :: [String]
123 , docxWarnings :: [String]
124+ -- keep track of (numId, lvl) values for
126+ , docxListState :: M.Map (String, String) Integer
126instance Default DState where
129instance Default DState where
@@ -128,6 +131,7 @@ instance Default DState where
128 , docxMediaBag = mempty
131 , docxMediaBag = mempty
129 , docxDropCap = mempty
132 , docxDropCap = mempty
130 , docxWarnings = []
133 , docxWarnings = []
134+ , docxListState = M.empty
133data DEnv = DEnv { docxOptions :: ReaderOptions
137data DEnv = DEnv { docxOptions :: ReaderOptions
@@ -539,22 +543,25 @@ bodyPartToBlocks (Paragraph pPr parparts)
539 then return mempty
543 then return mempty
540 else return $ parStyleToTransform pPr $ para ils'
544 else return $ parStyleToTransform pPr $ para ils'
541bodyPartToBlocks (ListItem pPr numId lvl (Just levelInfo) parparts) = do
545bodyPartToBlocks (ListItem pPr numId lvl (Just levelInfo) parparts) = do
542− let
546+ -- We check whether this current numId has previously been used,
543− kvs = case levelInfo of
547+ -- since Docx expects us to pick up where we left off.
548+ listState <- gets docxListState
549+ let startFromState = M.lookup (numId, lvl) listState
550+ (_, fmt,txt, startFromLevelInfo) = levelInfo
551+ start = case startFromState of
553+ Nothing -> case startFromLevelInfo of
544− (_, fmt, txt, Just start) -> [ ("level", lvl)
556+ kvs = [ ("level", lvl)
545− , ("num-id", numId)
557+ , ("num-id", numId)
546− , ("format", fmt)
558+ , ("format", fmt)
547− , ("text", txt)
559+ , ("text", txt)
548− , ("start", show start)
560+ , ("start", show start)
550−
562+ modify $ \st -> st{ docxListState = M.insert (numId, lvl) start listState}
551− (_, fmt, txt, Nothing) -> [ ("level", lvl)
556 blks <- bodyPartToBlocks (Paragraph pPr parparts)
563 blks <- bodyPartToBlocks (Paragraph pPr parparts)
557− return $ divWith ("", ["list-item"], kvs) blks
564+ return $ divWith ("", ["list-item"], kvs) blks
558bodyPartToBlocks (ListItem pPr _ _ _ parparts) =
565bodyPartToBlocks (ListItem pPr _ _ _ parparts) =
559 let pPr' = pPr {pStyle = "ListParagraph": pStyle pPr}
566 let pPr' = pPr {pStyle = "ListParagraph": pStyle pPr}