Shared.blocksToInlines: rewrote using builder.
This gives us automatic normalization, so we don't get for example two consecutive Spaces.
This commit is contained in:
parent
7b8c2b6691
commit
f4b86a1bc2
1 changed files with 27 additions and 24 deletions
|
@ -107,7 +107,7 @@ import qualified Data.ByteString.Lazy as BL
|
||||||
import Data.Char (isAlpha, isDigit, isLetter, isLower, isSpace, isUpper,
|
import Data.Char (isAlpha, isDigit, isLetter, isLower, isSpace, isUpper,
|
||||||
toLower)
|
toLower)
|
||||||
import Data.Data (Data, Typeable)
|
import Data.Data (Data, Typeable)
|
||||||
import Data.List (find, intercalate, stripPrefix)
|
import Data.List (find, intercalate, intersperse, stripPrefix)
|
||||||
import qualified Data.Map as M
|
import qualified Data.Map as M
|
||||||
import Data.Maybe (mapMaybe)
|
import Data.Maybe (mapMaybe)
|
||||||
import Data.Monoid ((<>))
|
import Data.Monoid ((<>))
|
||||||
|
@ -717,37 +717,40 @@ isURI = maybe False hasKnownScheme . parseURI
|
||||||
--- Squash blocks into inlines
|
--- Squash blocks into inlines
|
||||||
---
|
---
|
||||||
|
|
||||||
blockToInlines :: Block -> [Inline]
|
blockToInlines :: Block -> Inlines
|
||||||
blockToInlines (Plain ils) = ils
|
blockToInlines (Plain ils) = B.fromList ils
|
||||||
blockToInlines (Para ils) = ils
|
blockToInlines (Para ils) = B.fromList ils
|
||||||
blockToInlines (LineBlock lns) = combineLines lns
|
blockToInlines (LineBlock lns) = B.fromList $ combineLines lns
|
||||||
blockToInlines (CodeBlock attr str) = [Code attr str]
|
blockToInlines (CodeBlock attr str) = B.codeWith attr str
|
||||||
blockToInlines (RawBlock fmt str) = [RawInline fmt str]
|
blockToInlines (RawBlock (Format fmt) str) = B.rawInline fmt str
|
||||||
blockToInlines (BlockQuote blks) = blocksToInlines blks
|
blockToInlines (BlockQuote blks) = blocksToInlines' blks
|
||||||
blockToInlines (OrderedList _ blkslst) =
|
blockToInlines (OrderedList _ blkslst) =
|
||||||
concatMap blocksToInlines blkslst
|
mconcat $ map blocksToInlines' blkslst
|
||||||
blockToInlines (BulletList blkslst) =
|
blockToInlines (BulletList blkslst) =
|
||||||
concatMap blocksToInlines blkslst
|
mconcat $ map blocksToInlines' blkslst
|
||||||
blockToInlines (DefinitionList pairslst) =
|
blockToInlines (DefinitionList pairslst) =
|
||||||
concatMap f pairslst
|
mconcat $ map f pairslst
|
||||||
where
|
where
|
||||||
f (ils, blkslst) = ils ++
|
f (ils, blkslst) = B.fromList ils <> B.str ":" <> B.space <>
|
||||||
[Str ":", Space] ++
|
mconcat (map blocksToInlines' blkslst)
|
||||||
concatMap blocksToInlines blkslst
|
blockToInlines (Header _ _ ils) = B.fromList ils
|
||||||
blockToInlines (Header _ _ ils) = ils
|
blockToInlines HorizontalRule = mempty
|
||||||
blockToInlines HorizontalRule = []
|
|
||||||
blockToInlines (Table _ _ _ headers rows) =
|
blockToInlines (Table _ _ _ headers rows) =
|
||||||
intercalate [LineBreak] $ map (concatMap blocksToInlines) tbl
|
mconcat $ intersperse B.linebreak $
|
||||||
where
|
map (mconcat . map blocksToInlines') (headers:rows)
|
||||||
tbl = headers : rows
|
blockToInlines (Div _ blks) = blocksToInlines' blks
|
||||||
blockToInlines (Div _ blks) = blocksToInlines blks
|
blockToInlines Null = mempty
|
||||||
blockToInlines Null = []
|
|
||||||
|
|
||||||
blocksToInlinesWithSep :: [Inline] -> [Block] -> [Inline]
|
blocksToInlinesWithSep :: Inlines -> [Block] -> Inlines
|
||||||
blocksToInlinesWithSep sep blks = intercalate sep $ map blockToInlines blks
|
blocksToInlinesWithSep sep =
|
||||||
|
mconcat . intersperse sep . map blockToInlines
|
||||||
|
|
||||||
|
blocksToInlines' :: [Block] -> Inlines
|
||||||
|
blocksToInlines' = blocksToInlinesWithSep parSep
|
||||||
|
where parSep = B.space <> B.str "¶" <> B.space
|
||||||
|
|
||||||
blocksToInlines :: [Block] -> [Inline]
|
blocksToInlines :: [Block] -> [Inline]
|
||||||
blocksToInlines = blocksToInlinesWithSep [Space, Str "¶", Space]
|
blocksToInlines = B.toList . blocksToInlines'
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
|
|
Loading…
Add table
Reference in a new issue