git.iko.soy/typeable/pandoc
on master help sign in
HTML reader: parse div with class `line-block` as LineBlock.

See #4162.

commita888083ee1b381e8f8abab58d7af83d88c5343d0 authorJohn MacFarlane <jgm@berkeley.edu> dateWed 27 Dec 2017, 12:26 (9 years ago) parentcc9e3a9
3 files changed+24−1
src/Text/Pandoc/Extensions.hs+1 src/Text/Pandoc/Readers/HTML.hs+13−1 test/command/4162.md+10
src/Text/Pandoc/Extensions.hs+1
@@ -321,6 +321,7 @@ getDefaultExtensions "org" = extensionsFromList
321321getDefaultExtensions "html" = extensionsFromList
322322 [Ext_auto_identifiers,
323323 Ext_native_divs,
324+ Ext_line_blocks,
324325 Ext_native_spans]
325326getDefaultExtensions "html4" = getDefaultExtensions "html"
326327getDefaultExtensions "html5" = getDefaultExtensions "html"
src/Text/Pandoc/Readers/HTML.hs+13−1
@@ -51,7 +51,7 @@ import Data.Char (isAlphaNum, isDigit, isLetter)
5151import Data.Default (Default (..), def)
5252import Data.Foldable (for_)
5353import Data.List (intercalate, isPrefixOf)
54−import Data.List.Split (wordsBy)
54+import Data.List.Split (wordsBy, splitWhen)
5555import qualified Data.Map as M
5656import Data.Maybe (fromMaybe, isJust, isNothing)
5757import Data.Monoid (First (..), (<>))
@@ -66,6 +66,7 @@ import qualified Text.Pandoc.Builder as B
6666import Text.Pandoc.Class (PandocMonad (..))
6767import Text.Pandoc.CSS (foldOrElse, pickStyleAttrProps)
6868import Text.Pandoc.Definition
69+import Text.Pandoc.Extensions (Extension(..))
6970import Text.Pandoc.Error
7071import Text.Pandoc.Logging
7172import Text.Pandoc.Options (
@@ -191,6 +192,7 @@ block = do
191192 , pHtml
192193 , pHead
193194 , pBody
195+ , pLineBlock
194196 , pDiv
195197 , pPlain
196198 , pFigure
@@ -377,6 +379,16 @@ pRawTag = do
377379 then return mempty
378380 else return $ renderTags' [tag]
379381
382+pLineBlock :: PandocMonad m => TagParser m Blocks
383+pLineBlock = try $ do
384+ guardEnabled Ext_line_blocks
385+ _ <- pSatisfy $ tagOpen (=="div") (== [("class","line-block")])
386+ ils <- trimInlines . mconcat <$> manyTill inline (pSatisfy (tagClose (=="div")))
387+ let lns = map B.fromList $
388+ splitWhen (== LineBreak) $ filter (/= SoftBreak) $
389+ B.toList ils
390+ return $ B.lineBlock lns
391+
380392pDiv :: PandocMonad m => TagParser m Blocks
381393pDiv = try $ do
382394 guardEnabled Ext_native_divs
test/command/4162.mdnew file+10
@@ -0,0 +1,10 @@
1+```
2+% pandoc -f html -t native
3+<div class="line-block">hi<br /><br>
4+ there</div>
5+^D
6+[LineBlock
7+ [[Str "hi"]
8+ ,[]
9+ ,[Str "\160there"]]]
10+```