@@ -58,7 +58,7 @@ import Data.Maybe ( fromMaybe, isJust, isNothing )
5858import Data.List.Split ( wordsBy )
5959import Data.List ( intercalate, isPrefixOf )
6060import Data.Char ( isDigit, isLetter, isAlphaNum )
61−import Control.Monad ( guard, mzero, void, unless, mplus )
61+import Control.Monad ( guard, mzero, void, unless, mplus, msum )
6262import Control.Arrow ((***))
6363import Control.Applicative ( (<|>) )
6464import Data.Monoid (First (..))
@@ -576,23 +576,23 @@ pPara = do
576576 return $ B.para contents
577577
578578pFigure :: PandocMonad m => TagParser m Blocks
579−pFigure = do
579+pFigure = try $ do
580580 TagOpen _ _ <- pSatisfy (matchTagOpen "figure" [])
581581 skipMany pBlank
582− let pImg = pOptInTag "p" pImage <* skipMany pBlank
583− pCapt = option mempty $ pInTags "figcaption" inline <* skipMany pBlank
584− pImgCapt = do
585− img <- pImg
586− cap <- pCapt
587− return (img, cap)
588− pCaptImg = do
589− cap <- pCapt
590− img <- pImg
591− return (img, cap)
592− (imgMany, caption) <- pImgCapt <|> pCaptImg
582+ let pImg = (\x -> (Just x, Nothing)) <$>
583+ (pOptInTag "p" pImage <* skipMany pBlank)
584+ pCapt = (\x -> (Nothing, Just x)) <$>
585+ (pInTags "figcaption" inline <* skipMany pBlank)
586+ pSkip = (Nothing, Nothing) <$ pSatisfy (not . matchTagClose "figure")
587+ res <- many (pImg <|> pCapt <|> pSkip)
588+ let mbimg = msum $ map fst res
589+ let mbcap = msum $ map snd res
593590 TagClose _ <- pSatisfy (matchTagClose "figure")
594− let (Image attr _ (url, tit)):_ = B.toList imgMany
595− return $ B.para $ B.imageWith attr url ("fig:" ++ tit) caption
591+ let caption = fromMaybe mempty mbcap
592+ case B.toList <$> mbimg of
593+ Just [Image attr _ (url, tit)] ->
594+ return $ B.para $ B.imageWith attr url ("fig:" ++ tit) caption
595+ Nothing -> mzero
596596
597597pCodeBlock :: PandocMonad m => TagParser m Blocks
598598pCodeBlock = try $ do
@@ -961,7 +961,7 @@ blockHtmlTags = Set.fromList
961961 "dir", "div", "dl", "dt", "fieldset", "figcaption", "figure",
962962 "footer", "form", "h1", "h2", "h3", "h4",
963963 "h5", "h6", "head", "header", "hgroup", "hr", "html",
964− "isindex", "main", "menu", "noframes", "ol", "output", "p", "pre",
964+ "isindex", "main", "menu", "meta", "noframes", "ol", "output", "p", "pre",
965965 "section", "table", "tbody", "textarea",
966966 "thead", "tfoot", "ul", "dd",
967967 "dt", "frameset", "li", "tbody", "td", "tfoot",
@@ -1048,7 +1048,7 @@ x `closes` "p" | x `elem` ["address", "article", "aside", "blockquote",
10481048 "dir", "div", "dl", "fieldset", "footer", "form", "h1", "h2", "h3", "h4",
10491049 "h5", "h6", "header", "hr", "main", "menu", "nav", "ol", "p", "pre", "section",
10501050 "table", "ul"] = True
1051−"meta" `closes` "meta" = True
1051+_ `closes` "meta" = True
10521052"form" `closes` "form" = True
10531053"label" `closes` "label" = True
10541054"map" `closes` "map" = True