diff options
| -rw-r--r-- | src/Text/Pandoc/Readers/HTML.hs | 13 | ||||
| -rw-r--r-- | test/Tests/Readers/HTML.hs | 11 | 
2 files changed, 23 insertions, 1 deletions
| diff --git a/src/Text/Pandoc/Readers/HTML.hs b/src/Text/Pandoc/Readers/HTML.hs index 0a9e4addf..fc4575f2d 100644 --- a/src/Text/Pandoc/Readers/HTML.hs +++ b/src/Text/Pandoc/Readers/HTML.hs @@ -557,7 +557,18 @@ pFigure = try $ do  pCodeBlock :: PandocMonad m => TagParser m Blocks  pCodeBlock = try $ do    TagOpen _ attr' <- pSatisfy (matchTagOpen "pre" []) -  let attr = toAttr attr' +  -- if the `pre` has no attributes, try if it is followed by a `code` +  -- element and use those attributes if possible. +  attr <- case attr' of +    _:_ -> pure (toAttr attr') +    []  -> option nullAttr $ do +      TagOpen _ codeAttr <- pSatisfy (matchTagOpen "code" []) +      pure $ toAttr +        [ (k, v') | (k, v) <- codeAttr +                    -- strip language from class +                  , let v' = if k == "class" +                             then fromMaybe v (T.stripPrefix "language-" v) +                             else v ]    contents <- manyTill pAny (pCloses "pre" <|> eof)    let rawText = T.concat $ map tagToText contents    -- drop leading newline if any diff --git a/test/Tests/Readers/HTML.hs b/test/Tests/Readers/HTML.hs index 7f5849991..9bf567194 100644 --- a/test/Tests/Readers/HTML.hs +++ b/test/Tests/Readers/HTML.hs @@ -108,6 +108,17 @@ tests = [ testGroup "base tag"              "<header id=\"title\">Title</header>" =?>              divWith ("title", mempty, mempty) (plain "Title")            ] +        , testGroup "code block" +          [ test html "attributes in pre > code element" $ +            "<pre><code id=\"a\" class=\"python\">\nprint('hi')\n</code></pre>" +            =?> +            codeBlockWith ("a", ["python"], []) "print('hi')" + +          , test html "attributes in pre take precendence" $ +            "<pre id=\"c\"><code id=\"d\">\nprint('hi mom!')\n</code></pre>" +            =?> +            codeBlockWith ("c", [], []) "print('hi mom!')" +          ]          , askOption $ \(QuickCheckTests numtests) ->              testProperty "Round trip" $                withMaxSuccess (if QuickCheckTests numtests == defaultValue | 
