diff options
author | fiddlosopher <fiddlosopher@788f1e2b-df1e-0410-8736-df70ead52e1b> | 2009-11-01 02:38:18 +0000 |
---|---|---|
committer | fiddlosopher <fiddlosopher@788f1e2b-df1e-0410-8736-df70ead52e1b> | 2009-11-01 02:38:18 +0000 |
commit | 313d2e40b8b6d4457a70dc22e14da1e48e0bd6b1 (patch) | |
tree | 6663f9541a51578897b6a6be04020f09e31adfd7 | |
parent | eb2e560d861387414fe03056189f32e54e83851b (diff) | |
download | pandoc-313d2e40b8b6d4457a70dc22e14da1e48e0bd6b1.tar.gz |
Changed heuristic in compactify.
compactify has to decide whether a Para that ends a list is a Para
intentionally, or just because of the blank lines at the end of
every list. In the latter case the Para is turned to a Plain.
The old heuristic was: change final Para to Plain iff the other
items all end in Plain. This produces bad results when, for example,
an item contains just a Plain and an HTML comment, as it
- a
<!--
- b
-->
-c
The new heuristic: change final Para to Plain iff the other items
don't contain a Para.
git-svn-id: https://pandoc.googlecode.com/svn/trunk@1616 788f1e2b-df1e-0410-8736-df70ead52e1b
-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 |