@@ -51,7 +51,7 @@ import Text.Pandoc.Options (ReaderOptions(readerParseRaw, readerTrace)
5151import Text.Pandoc.Parsing hiding ((<|>))
5252import Text.Pandoc.Walk
5353import Data.Maybe ( fromMaybe, isJust)
54−import Data.List ( intercalate, isInfixOf )
54+import Data.List ( intercalate, isInfixOf, isPrefixOf )
5555import Data.Char ( isDigit )
5656import Control.Monad ( liftM, guard, when, mzero, void, unless )
5757import Control.Arrow ((***))
@@ -887,16 +887,18 @@ htmlTag :: Monad m
887887 => (Tag String -> Bool)
888888 -> ParserT [Char] st m (Tag String, String)
889889htmlTag f = try $ do
890− lookAhead $ char '<' >> ((oneOf "/!?" >> nonspaceChar) <|> letter)
891− (next : _) <- getInput >>= return . canonicalizeTags . parseTags
890+ lookAhead (char '<')
891+ inp <- getInput
892+ let (next : _) = canonicalizeTags $ parseTags inp
892893 guard $ f next
893− -- advance the parser
894894 case next of
895− TagComment s -> do
895+ TagComment s
896+ | "<!--" `isPrefixOf` inp -> do
896897 count (length s + 4) anyChar
897898 skipMany (satisfy (/='>'))
898899 char '>'
899900 return (next, "<!--" ++ s ++ "-->")
901+ | otherwise -> fail "bogus comment mode, HTML5 parse error"
900902 _ -> do
901903 rendered <- manyTill anyChar (char '>')
902904 return (next, rendered ++ ">")