@@ -42,6 +42,7 @@ import Text.Pandoc.Pretty
4242import Control.Monad.State
4343import qualified Data.Set as Set
4444import Text.Pandoc.Writers.HTML (writeHtmlString)
45+import Text.HTML.TagSoup (renderTags, parseTags, isTagText, Tag(..))
4546
4647type Notes = [[Block]]
4748type Refs = [([Inline], Target)]
@@ -230,8 +231,15 @@ blockToMarkdown opts (Para inlines) = do
230231 then text "\x200B" -- zero-width space, a hack
231232 else empty
232233 return $ esc <> contents <> blankline
233−blockToMarkdown _ (RawBlock f str)
234− | f == "html" || f == "latex" || f == "tex" || f == "markdown" = do
234+blockToMarkdown opts (RawBlock f str)
235+ | f == "html" = do
236+ st <- get
237+ if stPlain st
238+ then return empty
239+ else return $ if isEnabled Ext_markdown_attribute opts
240+ then text (addMarkdownAttribute str) <> text "\n"
241+ else text str <> text "\n"
242+ | f == "latex" || f == "tex" || f == "markdown" = do
235243 st <- get
236244 if stPlain st
237245 then return empty
@@ -321,6 +329,15 @@ blockToMarkdown opts (DefinitionList items) = do
321329 contents <- mapM (definitionListItemToMarkdown opts) items
322330 return $ cat contents <> blankline
323331
332+addMarkdownAttribute :: String -> String
333+addMarkdownAttribute s =
334+ case span isTagText $ reverse $ parseTags s of
335+ (xs,(TagOpen t attrs:rest)) ->
336+ renderTags $ reverse rest ++ (TagOpen t attrs' : reverse xs)
337+ where attrs' = ("markdown","1"):[(x,y) | (x,y) <- attrs,
338+ x /= "markdown"]
339+ _ -> s
340+
324341pipeTable :: Bool -> [Alignment] -> [Doc] -> [[Doc]] -> State WriterState Doc
325342pipeTable headless aligns rawHeaders rawRows = do
326343 let torow cs = nowrap $ text "|" <>