From 198ce0cde99731680b62294a7dff1b218b29bd4d Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 22 Jan 2021 20:49:41 -0800 Subject: ImageSize: use viewBox for svg if no length, width. This change allows pandoc to extract size information from more SVGs. Closes #7045. --- src/Text/Pandoc/ImageSize.hs | 8 ++++++-- test/command/svg.md | 30 ++++++++++++++---------------- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/src/Text/Pandoc/ImageSize.hs b/src/Text/Pandoc/ImageSize.hs index 098c16721..e19958f6a 100644 --- a/src/Text/Pandoc/ImageSize.hs +++ b/src/Text/Pandoc/ImageSize.hs @@ -328,12 +328,16 @@ getSize img = svgSize :: WriterOptions -> ByteString -> Maybe ImageSize svgSize opts img = do doc <- Xml.parseXMLDoc $ UTF8.toString img + let viewboxSize = do + vb <- Xml.findAttrBy (== Xml.QName "viewBox" Nothing Nothing) doc + [_,_,w,h] <- mapM safeRead (T.words (T.pack vb)) + return (w,h) let dpi = fromIntegral $ writerDpi opts let dirToInt dir = do dim <- Xml.findAttrBy (== Xml.QName dir Nothing Nothing) doc >>= lengthToDim . T.pack return $ inPixel opts dim - w <- dirToInt "width" - h <- dirToInt "height" + w <- dirToInt "width" <|> (fst <$> viewboxSize) + h <- dirToInt "height" <|> (snd <$> viewboxSize) return ImageSize { pxX = w , pxY = h diff --git a/test/command/svg.md b/test/command/svg.md index 57506570b..4ba836b20 100644 --- a/test/command/svg.md +++ b/test/command/svg.md @@ -36,28 +36,27 @@ % pandoc -f latex -t icml \includegraphics{command/SVG_logo.svg} ^D -[WARNING] Could not determine image size for 'command/SVG_logo.svg': could not determine SVG size - + - - - - + + + + - + $ID/Embedded - + @@ -70,28 +69,27 @@ % pandoc -f latex -t icml \includegraphics{command/SVG_logo-without-xml-declaration.svg} ^D -[WARNING] Could not determine image size for 'command/SVG_logo-without-xml-declaration.svg': could not determine SVG size - + - - - - + + + + - + $ID/Embedded - + -- cgit v1.2.3