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 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/Text/Pandoc') 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 -- cgit v1.2.3