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