summaryrefslogtreecommitdiff
path: root/src/Text
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2012-09-27 17:22:17 -0700
committerJohn MacFarlane <jgm@berkeley.edu>2012-09-27 17:52:38 -0700
commit5c06322ab2cc6707ec1e00f9b6c17283cd0fb347 (patch)
tree3bdf57e2008cf92a0bb16798a27a6c1149e888c2 /src/Text
parent7633d519718240e67ae9c7b872be3e09fd55077b (diff)
Shared: Export compactify', formerly in Markdown reader.
Diffstat (limited to 'src/Text')
-rw-r--r--src/Text/Pandoc/Readers/Markdown.hs28
-rw-r--r--src/Text/Pandoc/Shared.hs18
2 files changed, 25 insertions, 21 deletions
diff --git a/src/Text/Pandoc/Readers/Markdown.hs b/src/Text/Pandoc/Readers/Markdown.hs
index 9512328ea..a1f069059 100644
--- a/src/Text/Pandoc/Readers/Markdown.hs
+++ b/src/Text/Pandoc/Readers/Markdown.hs
@@ -39,7 +39,7 @@ import Text.Pandoc.Definition
import qualified Text.Pandoc.Builder as B
import Text.Pandoc.Builder (Inlines, Blocks, trimInlines, (<>))
import Text.Pandoc.Options
-import Text.Pandoc.Shared hiding (compactify)
+import Text.Pandoc.Shared
import Text.Pandoc.Parsing hiding (tableWith)
import Text.Pandoc.Readers.LaTeX ( rawLaTeXInline, rawLaTeXBlock )
import Text.Pandoc.Readers.HTML ( htmlTag, htmlInBalanced, isInlineTag, isBlockTag,
@@ -635,26 +635,12 @@ orderedList = try $ do
skipNonindentSpaces
orderedListMarker style delim )
start' <- option 1 $ guardEnabled Ext_startnum >> return start
- return $ B.orderedListWith (start', style, delim) <$> fmap compactify items
-
--- | Change final list item from @Para@ to @Plain@ if the list contains
--- no other @Para@ blocks. (From Shared, modified for Blocks rather than [Block].)
-compactify :: [Blocks] -- ^ List of list items (each a list of blocks)
- -> [Blocks]
-compactify [] = []
-compactify items =
- let (others, final) = (init items, last items)
- in case reverse (B.toList final) of
- (Para a:xs) -> case [Para x | Para x <- concatMap B.toList items] of
- -- if this is only Para, change to Plain
- [_] -> others ++ [B.fromList (reverse $ Plain a : xs)]
- _ -> items
- _ -> items
+ return $ B.orderedListWith (start', style, delim) <$> fmap compactify' items
bulletList :: Parser [Char] ParserState (F Blocks)
bulletList = do
items <- fmap sequence $ many1 $ listItem bulletListStart
- return $ B.bulletList <$> fmap compactify items
+ return $ B.bulletList <$> fmap compactify' items
-- definition lists
@@ -699,10 +685,10 @@ defRawBlock = try $ do
definitionList :: Parser [Char] ParserState (F Blocks)
definitionList = do
items <- fmap sequence $ many1 definitionListItem
- return $ B.definitionList <$> fmap compactifyDL items
+ return $ B.definitionList <$> fmap compactify'DL items
-compactifyDL :: [(Inlines, [Blocks])] -> [(Inlines, [Blocks])]
-compactifyDL items =
+compactify'DL :: [(Inlines, [Blocks])] -> [(Inlines, [Blocks])]
+compactify'DL items =
let defs = concatMap snd items
defBlocks = reverse $ concatMap B.toList defs
isPara (Para _) = True
@@ -1041,7 +1027,7 @@ gridTableRow indices = do
colLines <- many1 (gridTableRawLine indices)
let cols = map ((++ "\n") . unlines . removeOneLeadingSpace) $
transpose colLines
- fmap compactify <$> fmap sequence (mapM (parseFromString block) cols)
+ fmap compactify' <$> fmap sequence (mapM (parseFromString block) cols)
removeOneLeadingSpace :: [String] -> [String]
removeOneLeadingSpace xs =
diff --git a/src/Text/Pandoc/Shared.hs b/src/Text/Pandoc/Shared.hs
index 577f5dad0..cb74e7841 100644
--- a/src/Text/Pandoc/Shared.hs
+++ b/src/Text/Pandoc/Shared.hs
@@ -54,6 +54,7 @@ module Text.Pandoc.Shared (
normalize,
stringify,
compactify,
+ compactify',
Element (..),
hierarchicalize,
uniqueIdent,
@@ -74,6 +75,8 @@ module Text.Pandoc.Shared (
import Text.Pandoc.Definition
import Text.Pandoc.Generic
+import Text.Pandoc.Builder (Blocks)
+import qualified Text.Pandoc.Builder as B
import qualified Text.Pandoc.UTF8 as UTF8
import System.Environment (getProgName)
import System.Exit (exitWith, ExitCode(..))
@@ -378,6 +381,21 @@ compactify items =
_ -> items
_ -> items
+-- | Change final list item from @Para@ to @Plain@ if the list contains
+-- no other @Para@ blocks. Like compactify, but operates on @Blocks@ rather
+-- than @[Block]@.
+compactify' :: [Blocks] -- ^ List of list items (each a list of blocks)
+ -> [Blocks]
+compactify' [] = []
+compactify' items =
+ let (others, final) = (init items, last items)
+ in case reverse (B.toList final) of
+ (Para a:xs) -> case [Para x | Para x <- concatMap B.toList items] of
+ -- if this is only Para, change to Plain
+ [_] -> others ++ [B.fromList (reverse $ Plain a : xs)]
+ _ -> items
+ _ -> items
+
isPara :: Block -> Bool
isPara (Para _) = True
isPara _ = False