git.iko.soy/typeable/pandoc
on master help sign in
Docx writer: pandoc uses only numIds >= 1000 for lists.

This opens up the possiblity (with further code changes) of preserving some numbering from the reference.docx (e.g. header numbering.) See #1305.

commitec047aaa8c1c1e9d69b0029a2e4512785fbc15a8 authorJohn MacFarlane <fiddlosopher@gmail.com> dateTue 3 Jun 2014, 12:13 (12 years ago) parent2842ad5
1 file changed+8−3
src/Text/Pandoc/Writers/Docx.hs+8−3
src/Text/Pandoc/Writers/Docx.hs+8−3
@@ -388,12 +388,16 @@ styleToOpenXml style = parStyle : map toStyle alltoktypes
388388 $ backgroundColor style )
389389 ]
390390
391+-- this is the lowest number used for a list numId
392+baseListId :: Int
393+baseListId = 1000
394+
391395mkNumbering :: [ListMarker] -> IO Element
392396mkNumbering lists = do
393397 elts <- mapM mkAbstractNum (ordNub lists)
394398 return $ mknode "w:numbering"
395399 [("xmlns:w","http://schemas.openxmlformats.org/wordprocessingml/2006/main")]
396− $ elts ++ zipWith mkNum lists [1..(length lists)]
400+ $ elts ++ zipWith mkNum lists [baseListId..(baseListId + length lists - 1)]
397401
398402mkNum :: ListMarker -> Int -> Element
399403mkNum marker numid =
@@ -461,7 +465,7 @@ mkLvl marker lvl =
461465 patternFor _ s = s ++ "."
462466
463467getNumId :: WS Int
464−getNumId = length `fmap` gets stLists
468+getNumId = ((999 +) . length) `fmap` gets stLists
465469
466470-- | Convert Pandoc document to two lists of
467471-- OpenXML elements (the main document and footnotes).
@@ -615,7 +619,8 @@ listItemToOpenXML :: WriterOptions -> Int -> [Block] -> WS [Element]
615619listItemToOpenXML _ _ [] = return []
616620listItemToOpenXML opts numid (first:rest) = do
617621 first' <- withNumId numid $ blockToOpenXML opts first
618− rest' <- withNumId 1 $ blocksToOpenXML opts rest
622+ -- baseListId is the code for no list marker:
623+ rest' <- withNumId baseListId $ blocksToOpenXML opts rest
619624 return $ first' ++ rest'
620625
621626alignmentToString :: Alignment -> [Char]