diff --git a/src/Text/Pandoc/Readers/HTML.hs b/src/Text/Pandoc/Readers/HTML.hs index 82ea560a8..2fd6d88bf 100644 --- a/src/Text/Pandoc/Readers/HTML.hs +++ b/src/Text/Pandoc/Readers/HTML.hs @@ -75,7 +75,7 @@ parseHeader tags = (Meta{docTitle = tit'', docAuthors = [], docDate = []}, rest) t ~== TagOpen "body" []) tags parseBody :: TagParser [Block] -parseBody = liftM concat $ manyTill block eof +parseBody = liftM (fixPlains False . concat) $ manyTill block eof block :: TagParser [Block] block = choice @@ -107,7 +107,7 @@ pBulletList = try $ do -- treat it as a list item, though it's not valid xhtml... skipMany nonItem items <- manyTill (pInTags "li" block >>~ skipMany nonItem) (pCloses "ul") - return [BulletList $ map fixPlains items] + return [BulletList $ map (fixPlains True) items] pOrderedList :: TagParser [Block] pOrderedList = try $ do @@ -138,7 +138,7 @@ pOrderedList = try $ do -- treat it as a list item, though it's not valid xhtml... skipMany nonItem items <- manyTill (pInTags "li" block >>~ skipMany nonItem) (pCloses "ol") - return [OrderedList (start, style, DefaultDelim) $ map fixPlains items] + return [OrderedList (start, style, DefaultDelim) $ map (fixPlains True) items] pDefinitionList :: TagParser [Block] pDefinitionList = try $ do @@ -154,16 +154,19 @@ pDefListItem = try $ do defs <- many1 (try $ skipMany nonItem >> pInTags "dd" block) skipMany nonItem let term = intercalate [LineBreak] terms - return (term, map fixPlains defs) + return (term, map (fixPlains True) defs) -fixPlains :: [Block] -> [Block] -fixPlains bs = if any isParaish bs - then map plainToPara bs - else bs +fixPlains :: Bool -> [Block] -> [Block] +fixPlains inList bs = if any isParaish bs + then map plainToPara bs + else bs where isParaish (Para _) = True isParaish (CodeBlock _ _) = True isParaish (Header _ _) = True isParaish (BlockQuote _) = True + isParaish (BulletList _) = not inList + isParaish (OrderedList _ _) = not inList + isParaish (DefinitionList _) = not inList isParaish _ = False plainToPara (Plain xs) = Para xs plainToPara x = x @@ -231,7 +234,7 @@ pCell celltype = try $ do pBlockQuote :: TagParser [Block] pBlockQuote = do contents <- pInTags "blockquote" block - return [BlockQuote contents] + return [BlockQuote $ fixPlains False contents] pPlain :: TagParser [Block] pPlain = do diff --git a/tests/html-reader.html b/tests/html-reader.html index a51ee3307..ea10a306c 100644 --- a/tests/html-reader.html +++ b/tests/html-reader.html @@ -298,40 +298,6 @@ These should not be escaped: \$ \\ \> \[ \{
Simple block on one line:
-fooAnd nested without indentation:
-foobarInterpreted markdown in a table:
-This is emphasized. And this is strongHere's a simple block:
-fooThis should be a code block, though:
-<div>
- foo
-</div>
-
-As should this:
-<div>foo</div>
-
-Now, nested:
-fooThis should just be an HTML comment:
-Multiline:
-Code block:
-<!-- Comment -->
-
-Just plain comment, with trailing spaces on the line:
-Code:
-<hr />
-
-Hr's:
-This is emphasized, and so is this.
This is strong, and so is this.
diff --git a/tests/html-reader.native b/tests/html-reader.native index c7ba26568..a9070adc6 100644 --- a/tests/html-reader.native +++ b/tests/html-reader.native @@ -183,39 +183,6 @@ Pandoc (Meta {docTitle = [Str "Pandoc",Space,Str "Test",Space,Str "Suite"], docA ,([Str "Cello",LineBreak,Str "Violoncello"], [[Plain [Str "Low",Str "-",Str "voiced",Space,Str "stringed",Space,Str "instrument",Str "."]]])] ,HorizontalRule -,Header 1 [Str "HTML",Space,Str "Blocks"] -,Para [Str "Simple",Space,Str "block",Space,Str "on",Space,Str "one",Space,Str "line:"] -,Plain [Str "foo"] -,Para [Str "And",Space,Str "nested",Space,Str "without",Space,Str "indentation:"] -,Plain [Str "foobar"] -,Para [Str "Interpreted",Space,Str "markdown",Space,Str "in",Space,Str "a",Space,Str "table:"] -,Plain [Str "This",Space,Str "is",Space,Emph [Str "emphasized"],Str ".",Space,Str "And",Space,Str "this",Space,Str "is",Space,Strong [Str "strong"]] -,Para [Str "Here",Str "'",Str "s",Space,Str "a",Space,Str "simple",Space,Str "block:"] -,Plain [Str "foo"] -,Para [Str "This",Space,Str "should",Space,Str "be",Space,Str "a",Space,Str "code",Space,Str "block,",Space,Str "though:"] -,CodeBlock ("",[],[]) "