@@ -52,6 +52,7 @@ import Control.Applicative ((<$>), (<*), (*>), (<$))
5252import Control.Monad
5353import Text.HTML.TagSoup
5454import Text.HTML.TagSoup.Match (tagOpen)
55+import qualified Data.Set as Set
5556
5657-- | Read markdown from an input string and return a Pandoc document.
5758readMarkdown :: ReaderOptions -- ^ Reader options
@@ -720,13 +721,13 @@ htmlBlock' = try $ do
720721strictHtmlBlock :: Parser [Char] ParserState String
721722strictHtmlBlock = htmlInBalanced (not . isInlineTag)
722723
723−rawVerbatimBlock :: Parser [Char] ParserState String
724+rawVerbatimBlock :: Parser [Char] ParserState (Tag String, String)
724725rawVerbatimBlock = try $ do
725− (TagOpen tag _, open) <- htmlTag (tagOpen (\t ->
726+ (TagOpen tag as, open) <- htmlTag (tagOpen (\t ->
726727 t == "pre" || t == "style" || t == "script")
727728 (const True))
728729 contents <- manyTill anyChar (htmlTag (~== TagClose tag))
729− return $ open ++ contents ++ renderTags [TagClose tag]
730+ return (TagOpen tag as, open ++ contents ++ renderTags [TagClose tag])
730731
731732rawTeXBlock :: Parser [Char] ParserState (F Blocks)
732733rawTeXBlock = do
@@ -738,17 +739,25 @@ rawTeXBlock = do
738739
739740rawHtmlBlocks :: Parser [Char] ParserState String
740741rawHtmlBlocks = do
741− htmlBlocks <- many1 $ do blk <- rawVerbatimBlock <|>
742− liftM snd (htmlTag isBlockTag)
743− sps <- do sp1 <- many spaceChar
744− sp2 <- option "" (blankline >> return "\n")
745− sp3 <- many spaceChar
746− sp4 <- option "" blanklines
747− return $ sp1 ++ sp2 ++ sp3 ++ sp4
748− -- note: we want raw html to be able to
749− -- precede a code block, when separated
750− -- by a blank line
751− return $ blk ++ sps
742+ htmlBlocks <- many1 $ try $ do
743+ (t,s) <- rawVerbatimBlock <|> htmlTag isBlockTag
744+ exts <- getOption readerExtensions
745+ -- if open tag, need markdown=1 if
746+ -- markdown_attributes extension is set
747+ when (Ext_markdown_attribute `Set.member` exts
748+ && isTagOpen t) $ guard
749+ $ case t of
750+ TagOpen _ as -> "markdown" `elem` map fst as
751+ _ -> False
752+ sps <- do sp1 <- many spaceChar
753+ sp2 <- option "" (blankline >> return "\n")
754+ sp3 <- many spaceChar
755+ sp4 <- option "" blanklines
756+ return $ sp1 ++ sp2 ++ sp3 ++ sp4
757+ -- note: we want raw html to be able to
758+ -- precede a code block, when separated
759+ -- by a blank line
760+ return $ s ++ sps
752761 let combined = concat htmlBlocks
753762 return $ if last combined == '\n' then init combined else combined
754763