git.iko.soy/typeable/pandoc
on master help sign in
Shared.blocksToInlines: rewrote using builder.
f4b86a1John MacFarlane
src/Text/Pandoc/Shared.hs+27−24
@@ -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,
108 toLower)
108 toLower)
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
718---
718---
719
719
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
733 where
733 where
734− f (ils, blkslst) = ils ++
734+ f (ils, blkslst) = B.fromList ils <> B.str ":" <> B.space <>
735− [Str ":", 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 $
741− where
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
743+
744+blocksToInlinesWithSep :: Inlines -> [Block] -> Inlines
745+blocksToInlinesWithSep sep =
746+ mconcat . intersperse sep . map blockToInlines
745
747
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
748
751
749blocksToInlines :: [Block] -> [Inline]
752blocksToInlines :: [Block] -> [Inline]
750−blocksToInlines = blocksToInlinesWithSep [Space, Str "¶", Space]
753+blocksToInlines = B.toList . blocksToInlines'
751
754
752
755
753--
756--