@@ -60,7 +60,7 @@ data WriterState = WriterState{
60 , stExternalLinks :: M.Map String String
60 , stExternalLinks :: M.Map String String
61 , stImages :: M.Map FilePath (String, B.ByteString)
61 , stImages :: M.Map FilePath (String, B.ByteString)
62 , stListLevel :: Int
62 , stListLevel :: Int
63− , stListMarker :: ListMarker
63+ , stListNumId :: Int
64 , stNumStyles :: M.Map ListMarker Int
64 , stNumStyles :: M.Map ListMarker Int
65 , stLists :: [ListMarker]
65 , stLists :: [ListMarker]
@@ -79,7 +79,7 @@ defaultWriterState = WriterState{
79 , stExternalLinks = M.empty
79 , stExternalLinks = M.empty
80 , stImages = M.empty
80 , stImages = M.empty
81 , stListLevel = -1
81 , stListLevel = -1
82− , stListMarker = NoMarker
82+ , stListNumId = 1
83 , stNumStyles = M.fromList [(NoMarker, 0)]
83 , stNumStyles = M.fromList [(NoMarker, 0)]
84 , stLists = [NoMarker]
84 , stLists = [NoMarker]
@@ -285,6 +285,9 @@ mkLvl marker lvl =
285 patternFor TwoParens s = "(" ++ s ++ ")"
285 patternFor TwoParens s = "(" ++ s ++ ")"
286 patternFor _ s = s ++ "."
286 patternFor _ s = s ++ "."
289+getNumId = length `fmap` gets stLists
288-- | Convert Pandoc document to string in OpenXML format.
291-- | Convert Pandoc document to string in OpenXML format.
289writeOpenXML :: WriterOptions -> Pandoc -> WS Element
292writeOpenXML :: WriterOptions -> Pandoc -> WS Element
290writeOpenXML opts (Pandoc (Meta tit auths dat) blocks) = do
293writeOpenXML opts (Pandoc (Meta tit auths dat) blocks) = do
@@ -402,11 +405,13 @@ blockToOpenXML opts (Table caption aligns widths headers rows) = do
402blockToOpenXML opts (BulletList lst) = do
405blockToOpenXML opts (BulletList lst) = do
403 let marker = BulletMarker
406 let marker = BulletMarker
404 addList marker
407 addList marker
405− asList $ concat `fmap` mapM (listItemToOpenXML opts marker) lst
409+ asList $ concat `fmap` mapM (listItemToOpenXML opts numid) lst
406blockToOpenXML opts (OrderedList (start, numstyle, numdelim) lst) = do
410blockToOpenXML opts (OrderedList (start, numstyle, numdelim) lst) = do
407 let marker = NumberMarker numstyle numdelim start
411 let marker = NumberMarker numstyle numdelim start
408 addList marker
412 addList marker
409− asList $ concat `fmap` mapM (listItemToOpenXML opts marker) lst
414+ asList $ concat `fmap` mapM (listItemToOpenXML opts numid) lst
410blockToOpenXML opts (DefinitionList items) =
415blockToOpenXML opts (DefinitionList items) =
411 concat `fmap` mapM (definitionListItemToOpenXML opts) items
416 concat `fmap` mapM (definitionListItemToOpenXML opts) items
@@ -418,9 +423,6 @@ definitionListItemToOpenXML opts (term,defs) = do
418 $ concat `fmap` mapM (blocksToOpenXML opts) defs
423 $ concat `fmap` mapM (blocksToOpenXML opts) defs
419 return $ term' ++ defs'
424 return $ term' ++ defs'
422−getNumId = length `fmap` gets stLists
424addList :: ListMarker -> WS ()
426addList :: ListMarker -> WS ()
425addList marker = do
427addList marker = do
426 lists <- gets stLists
428 lists <- gets stLists
@@ -431,11 +433,11 @@ addList marker = do
431 Nothing -> modify $ \st ->
433 Nothing -> modify $ \st ->
432 st{ stNumStyles = M.insert marker (M.size numStyles + 1) numStyles }
434 st{ stNumStyles = M.insert marker (M.size numStyles + 1) numStyles }
434−listItemToOpenXML :: WriterOptions -> ListMarker -> [Block] -> WS [Element]
436+listItemToOpenXML :: WriterOptions -> Int -> [Block] -> WS [Element]
435listItemToOpenXML _ _ [] = return []
437listItemToOpenXML _ _ [] = return []
436−listItemToOpenXML opts marker (first:rest) = do
438+listItemToOpenXML opts numid (first:rest) = do
437− first' <- withMarker marker $ blockToOpenXML opts first
439+ first' <- withNumId numid $ blockToOpenXML opts first
438− rest' <- withMarker NoMarker $ blocksToOpenXML opts rest
440+ rest' <- withNumId 1 $ blocksToOpenXML opts rest
439 return $ first' ++ rest'
441 return $ first' ++ rest'
441alignmentToString :: Alignment -> [Char]
443alignmentToString :: Alignment -> [Char]
@@ -449,12 +451,12 @@ alignmentToString alignment = case alignment of
449inlinesToOpenXML :: WriterOptions -> [Inline] -> WS [Element]
451inlinesToOpenXML :: WriterOptions -> [Inline] -> WS [Element]
450inlinesToOpenXML opts lst = concat `fmap` mapM (inlineToOpenXML opts) lst
452inlinesToOpenXML opts lst = concat `fmap` mapM (inlineToOpenXML opts) lst
452−withMarker :: ListMarker -> WS a -> WS a
454+withNumId :: Int -> WS a -> WS a
453−withMarker m p = do
455+withNumId numid p = do
454− origMarker <- gets stListMarker
456+ origNumId <- gets stListNumId
455− modify $ \st -> st{ stListMarker = m }
457+ modify $ \st -> st{ stListNumId = numid }
456 result <- p
458 result <- p
457− modify $ \st -> st{ stListMarker = origMarker }
459+ modify $ \st -> st{ stListNumId = origNumId }
458 return result
460 return result
460asList :: WS a -> WS a
462asList :: WS a -> WS a
@@ -489,10 +491,7 @@ getParaProps :: WS [Element]
489getParaProps = do
491getParaProps = do
490 props <- gets stParaProperties
492 props <- gets stParaProperties
491 listLevel <- gets stListLevel
493 listLevel <- gets stListLevel
492− listMarker <- gets stListMarker
494+ numid <- gets stListNumId
493− numid <- case listMarker of
494− NoMarker -> return 1
496 let listPr = if listLevel >= 0
495 let listPr = if listLevel >= 0
497 then [ mknode "w:numPr" []
496 then [ mknode "w:numPr" []
498 [ mknode "w:numId" [("w:val",show numid)] ()
497 [ mknode "w:numId" [("w:val",show numid)] ()