@@ -58,7 +58,7 @@ import Data.Maybe ( fromMaybe, isJust, isNothing )
58import Data.List.Split ( wordsBy )
58import Data.List.Split ( wordsBy )
59import Data.List ( intercalate, isPrefixOf )
59import Data.List ( intercalate, isPrefixOf )
60import Data.Char ( isDigit, isLetter, isAlphaNum )
60import Data.Char ( isDigit, isLetter, isAlphaNum )
61−import Control.Monad ( guard, mzero, void, unless, mplus )
61+import Control.Monad ( guard, mzero, void, unless, mplus, msum )
62import Control.Arrow ((***))
62import Control.Arrow ((***))
63import Control.Applicative ( (<|>) )
63import Control.Applicative ( (<|>) )
64import Data.Monoid (First (..))
64import Data.Monoid (First (..))
@@ -576,23 +576,23 @@ pPara = do
576 return $ B.para contents
576 return $ B.para contents
578pFigure :: PandocMonad m => TagParser m Blocks
578pFigure :: PandocMonad m => TagParser m Blocks
579−pFigure = do
579+pFigure = try $ do
580 TagOpen _ _ <- pSatisfy (matchTagOpen "figure" [])
580 TagOpen _ _ <- pSatisfy (matchTagOpen "figure" [])
581 skipMany pBlank
581 skipMany pBlank
582+ let pImg = (\x -> (Just x, Nothing)) <$>
582− let pImg = pOptInTag "p" pImage <* skipMany pBlank
583+ (pOptInTag "p" pImage <* skipMany pBlank)
584+ pCapt = (\x -> (Nothing, Just x)) <$>
583− pCapt = option mempty $ pInTags "figcaption" inline <* skipMany pBlank
585+ (pInTags "figcaption" inline <* skipMany pBlank)
584− pImgCapt = do
586+ pSkip = (Nothing, Nothing) <$ pSatisfy (not . matchTagClose "figure")
585− img <- pImg
587+ res <- many (pImg <|> pCapt <|> pSkip)
586− cap <- pCapt
588+ let mbimg = msum $ map fst res
587− return (img, cap)
589+ let mbcap = msum $ map snd res
592− (imgMany, caption) <- pImgCapt <|> pCaptImg
593 TagClose _ <- pSatisfy (matchTagClose "figure")
590 TagClose _ <- pSatisfy (matchTagClose "figure")
594− let (Image attr _ (url, tit)):_ = B.toList imgMany
591+ let caption = fromMaybe mempty mbcap
592+ case B.toList <$> mbimg of
593+ Just [Image attr _ (url, tit)] ->
595− return $ B.para $ B.imageWith attr url ("fig:" ++ tit) caption
594+ return $ B.para $ B.imageWith attr url ("fig:" ++ tit) caption
597pCodeBlock :: PandocMonad m => TagParser m Blocks
597pCodeBlock :: PandocMonad m => TagParser m Blocks
598pCodeBlock = try $ do
598pCodeBlock = try $ do
@@ -961,7 +961,7 @@ blockHtmlTags = Set.fromList
961 "dir", "div", "dl", "dt", "fieldset", "figcaption", "figure",
961 "dir", "div", "dl", "dt", "fieldset", "figcaption", "figure",
962 "footer", "form", "h1", "h2", "h3", "h4",
962 "footer", "form", "h1", "h2", "h3", "h4",
963 "h5", "h6", "head", "header", "hgroup", "hr", "html",
963 "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",
965 "section", "table", "tbody", "textarea",
965 "section", "table", "tbody", "textarea",
966 "thead", "tfoot", "ul", "dd",
966 "thead", "tfoot", "ul", "dd",
967 "dt", "frameset", "li", "tbody", "td", "tfoot",
967 "dt", "frameset", "li", "tbody", "td", "tfoot",
@@ -1048,7 +1048,7 @@ x `closes` "p" | x `elem` ["address", "article", "aside", "blockquote",
1048 "dir", "div", "dl", "fieldset", "footer", "form", "h1", "h2", "h3", "h4",
1048 "dir", "div", "dl", "fieldset", "footer", "form", "h1", "h2", "h3", "h4",
1049 "h5", "h6", "header", "hr", "main", "menu", "nav", "ol", "p", "pre", "section",
1049 "h5", "h6", "header", "hr", "main", "menu", "nav", "ol", "p", "pre", "section",
1050 "table", "ul"] = True
1050 "table", "ul"] = True
1051−"meta" `closes` "meta" = True
1051+_ `closes` "meta" = True
1052"form" `closes` "form" = True
1052"form" `closes` "form" = True
1053"label" `closes` "label" = True
1053"label" `closes` "label" = True
1054"map" `closes` "map" = True
1054"map" `closes` "map" = True