@@ -107,7 +107,7 @@ import qualified Data.ByteString.Lazy as BL
107107import Data.Char (isAlpha, isDigit, isLetter, isLower, isSpace, isUpper,
108108 toLower)
109109import Data.Data (Data, Typeable)
110−import Data.List (find, intercalate, stripPrefix)
110+import Data.List (find, intercalate, intersperse, stripPrefix)
111111import qualified Data.Map as M
112112import Data.Maybe (mapMaybe)
113113import Data.Monoid ((<>))
@@ -717,37 +717,40 @@ isURI = maybe False hasKnownScheme . parseURI
717717--- Squash blocks into inlines
718718---
719719
720−blockToInlines :: Block -> [Inline]
721−blockToInlines (Plain ils) = ils
722−blockToInlines (Para ils) = ils
723−blockToInlines (LineBlock lns) = combineLines lns
724−blockToInlines (CodeBlock attr str) = [Code attr str]
725−blockToInlines (RawBlock fmt str) = [RawInline fmt str]
726−blockToInlines (BlockQuote blks) = blocksToInlines blks
720+blockToInlines :: Block -> Inlines
721+blockToInlines (Plain ils) = B.fromList ils
722+blockToInlines (Para ils) = B.fromList ils
723+blockToInlines (LineBlock lns) = B.fromList $ combineLines lns
724+blockToInlines (CodeBlock attr str) = B.codeWith attr str
725+blockToInlines (RawBlock (Format fmt) str) = B.rawInline fmt str
726+blockToInlines (BlockQuote blks) = blocksToInlines' blks
727727blockToInlines (OrderedList _ blkslst) =
728− concatMap blocksToInlines blkslst
728+ mconcat $ map blocksToInlines' blkslst
729729blockToInlines (BulletList blkslst) =
730− concatMap blocksToInlines blkslst
730+ mconcat $ map blocksToInlines' blkslst
731731blockToInlines (DefinitionList pairslst) =
732− concatMap f pairslst
732+ mconcat $ map f pairslst
733733 where
734− f (ils, blkslst) = ils ++
735− [Str ":", Space] ++
736− concatMap blocksToInlines blkslst
737−blockToInlines (Header _ _ ils) = ils
738−blockToInlines HorizontalRule = []
734+ f (ils, blkslst) = B.fromList ils <> B.str ":" <> B.space <>
735+ mconcat (map blocksToInlines' blkslst)
736+blockToInlines (Header _ _ ils) = B.fromList ils
737+blockToInlines HorizontalRule = mempty
739738blockToInlines (Table _ _ _ headers rows) =
740− intercalate [LineBreak] $ map (concatMap blocksToInlines) tbl
741− where
742− tbl = headers : rows
743−blockToInlines (Div _ blks) = blocksToInlines blks
744−blockToInlines Null = []
739+ mconcat $ intersperse B.linebreak $
740+ map (mconcat . map blocksToInlines') (headers:rows)
741+blockToInlines (Div _ blks) = blocksToInlines' blks
742+blockToInlines Null = mempty
743+
744+blocksToInlinesWithSep :: Inlines -> [Block] -> Inlines
745+blocksToInlinesWithSep sep =
746+ mconcat . intersperse sep . map blockToInlines
745747
746−blocksToInlinesWithSep :: [Inline] -> [Block] -> [Inline]
747−blocksToInlinesWithSep sep blks = intercalate sep $ map blockToInlines blks
748+blocksToInlines' :: [Block] -> Inlines
749+blocksToInlines' = blocksToInlinesWithSep parSep
750+ where parSep = B.space <> B.str "¶" <> B.space
748751
749752blocksToInlines :: [Block] -> [Inline]
750−blocksToInlines = blocksToInlinesWithSep [Space, Str "¶", Space]
753+blocksToInlines = B.toList . blocksToInlines'
751754
752755
753756--