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
This commit is contained in:
parent
eb2e560d86
commit
313d2e40b8
1 changed files with 14 additions and 18 deletions
|
@ -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
|
||||
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
|
||||
|
||||
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
|
||||
isPara :: Block -> Bool
|
||||
isPara (Para _) = True
|
||||
isPara _ = False
|
||||
|
||||
-- | Data structure for defining hierarchical Pandoc documents
|
||||
data Element = Blk Block
|
||||
|
|
Loading…
Add table
Reference in a new issue