Docx writer: better handle list items whose contents are lists (#6522)
If the first element of a bulleted or ordered list is another list, then that first item will disappear if the target format is docx. This changes the docx writer so that it prepends an empty string for those cases. With this, no items will disappear. Closes #5948.
This commit is contained in:
parent
27b4c21f72
commit
74bd5a4f47
4 changed files with 26 additions and 3 deletions
|
@ -3,6 +3,7 @@
|
|||
{-# LANGUAGE ScopedTypeVariables #-}
|
||||
{-# LANGUAGE ViewPatterns #-}
|
||||
{-# LANGUAGE FlexibleContexts #-}
|
||||
{-# LANGUAGE LambdaCase #-}
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
{- |
|
||||
Module : Text.Pandoc.Writers.Docx
|
||||
|
@ -1087,11 +1088,20 @@ listItemToOpenXML _ _ [] = return []
|
|||
listItemToOpenXML opts numid (first:rest) = do
|
||||
oldInList <- gets stInList
|
||||
modify $ \st -> st{ stInList = True }
|
||||
first' <- withNumId numid $ blockToOpenXML opts first
|
||||
let isListBlock = \case
|
||||
BulletList{} -> True
|
||||
OrderedList{} -> True
|
||||
_ -> False
|
||||
-- Prepend an empty string if the first entry is another
|
||||
-- list. Otherwise the outer bullet will disappear.
|
||||
let (first', rest') = if isListBlock first
|
||||
then (Plain [Str ""] , first:rest)
|
||||
else (first, rest)
|
||||
first'' <- withNumId numid $ blockToOpenXML opts first'
|
||||
-- baseListId is the code for no list marker:
|
||||
rest' <- withNumId baseListId $ blocksToOpenXML opts rest
|
||||
rest'' <- withNumId baseListId $ blocksToOpenXML opts rest'
|
||||
modify $ \st -> st{ stInList = oldInList }
|
||||
return $ first' ++ rest'
|
||||
return $ first'' ++ rest''
|
||||
|
||||
alignmentToString :: Alignment -> [Char]
|
||||
alignmentToString alignment = case alignment of
|
||||
|
|
|
@ -83,6 +83,11 @@ tests = [ testGroup "inlines"
|
|||
def
|
||||
"docx/lists_restarting.native"
|
||||
"docx/golden/lists_restarting.docx"
|
||||
, docxTest
|
||||
"lists with multiple initial list levels"
|
||||
def
|
||||
"docx/lists_multiple_initial.native"
|
||||
"docx/golden/lists_multiple_initial.docx"
|
||||
, docxTest
|
||||
"definition lists"
|
||||
def
|
||||
|
|
BIN
test/docx/golden/lists_multiple_initial.docx
Normal file
BIN
test/docx/golden/lists_multiple_initial.docx
Normal file
Binary file not shown.
8
test/docx/lists_multiple_initial.native
Normal file
8
test/docx/lists_multiple_initial.native
Normal file
|
@ -0,0 +1,8 @@
|
|||
[OrderedList (1,Decimal,Period)
|
||||
[[OrderedList (1,LowerAlpha,TwoParens)
|
||||
[[Para [Str "foo"]]
|
||||
,[Para [Str "bar"]]]]]
|
||||
,BulletList
|
||||
[[BulletList
|
||||
[[Para [Str "foo"]]
|
||||
,[Para [Str "bar"]]]]]]
|
Loading…
Reference in a new issue