diff options
-rw-r--r-- | src/Text/Pandoc/Shared.hs | 34 |
1 files changed, 15 insertions, 19 deletions
diff --git a/src/Text/Pandoc/Shared.hs b/src/Text/Pandoc/Shared.hs index b67e169c8..f920c79aa 100644 --- a/src/Text/Pandoc/Shared.hs +++ b/src/Text/Pandoc/Shared.hs @@ -856,29 +856,25 @@ normalizeSpaces list = else lst in removeLeading $ removeTrailing $ removeDoubles list --- | Change final list item from @Para@ to @Plain@ if the list should --- be compact. +-- | Change final list item from @Para@ to @Plain@ if the list contains +-- no other @Para@ blocks. compactify :: [[Block]] -- ^ List of list items (each a list of blocks) -> [[Block]] compactify [] = [] compactify items = - let final = last items - others = init items - in case last final of - Para a -> if all endsWithPlain others && not (null final) - then others ++ [init final ++ [Plain a]] - else items - _ -> items - -endsWithPlain :: [Block] -> Bool -endsWithPlain [] = False -endsWithPlain blocks = - case last blocks of - Plain _ -> True - (BulletList (x:xs)) -> endsWithPlain $ last (x:xs) - (OrderedList _ (x:xs)) -> endsWithPlain $ last (x:xs) - (DefinitionList (x:xs)) -> endsWithPlain $ last $ map snd (x:xs) - _ -> False + case (init items, last items) of + (_,[]) -> items + (others, final) -> + case last final of + Para a -> case (filter isPara $ concat items) of + -- if this is only Para, change to Plain + [_] -> others ++ [init final ++ [Plain a]] + _ -> items + _ -> items + +isPara :: Block -> Bool +isPara (Para _) = True +isPara _ = False -- | Data structure for defining hierarchical Pandoc documents data Element = Blk Block |