ImageSize: use viewBox for svg if no length, width.

This change allows pandoc to extract size information
from more SVGs.  Closes #7045.
This commit is contained in:
John MacFarlane 2021-01-22 20:49:41 -08:00
parent f5e3c1dad6
commit 198ce0cde9
2 changed files with 20 additions and 18 deletions

View file

@ -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

View file

@ -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
<ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Paragraph">
<CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
<Rectangle Self="uec" StrokeWeight="0" ItemTransform="1 0 0 1 150 -100">
<Rectangle Self="uec" StrokeWeight="0" ItemTransform="1 0 0 1 37.5 -37.5">
<Properties>
<PathGeometry>
<GeometryPathType PathOpen="false">
<PathPointArray>
<PathPointType Anchor="-150 -100" LeftDirection="-150 -100" RightDirection="-150 -100" />
<PathPointType Anchor="-150 100" LeftDirection="-150 100" RightDirection="-150 100" />
<PathPointType Anchor="150 100" LeftDirection="150 100" RightDirection="150 100" />
<PathPointType Anchor="150 -100" LeftDirection="150 -100" RightDirection="150 -100" />
<PathPointType Anchor="-37.5 -37.5" LeftDirection="-37.5 -37.5" RightDirection="-37.5 -37.5" />
<PathPointType Anchor="-37.5 37.5" LeftDirection="-37.5 37.5" RightDirection="-37.5 37.5" />
<PathPointType Anchor="37.5 37.5" LeftDirection="37.5 37.5" RightDirection="37.5 37.5" />
<PathPointType Anchor="37.5 -37.5" LeftDirection="37.5 -37.5" RightDirection="37.5 -37.5" />
</PathPointArray>
</GeometryPathType>
</PathGeometry>
</Properties>
<Image Self="ue6" ItemTransform="1 0 0 1 -150 -100">
<Image Self="ue6" ItemTransform="1 0 0 1 -37.5 -37.5">
<Properties>
<Profile type="string">
$ID/Embedded
</Profile>
<GraphicBounds Left="0" Top="0" Right="300" Bottom="200" />
<GraphicBounds Left="0" Top="0" Right="75" Bottom="75" />
</Properties>
<Link Self="ueb" LinkResourceURI="file:command/SVG_logo.svg" />
</Image>
@ -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
<ParagraphStyleRange AppliedParagraphStyle="ParagraphStyle/Paragraph">
<CharacterStyleRange AppliedCharacterStyle="$ID/NormalCharacterStyle">
<Rectangle Self="uec" StrokeWeight="0" ItemTransform="1 0 0 1 150 -100">
<Rectangle Self="uec" StrokeWeight="0" ItemTransform="1 0 0 1 37.5 -37.5">
<Properties>
<PathGeometry>
<GeometryPathType PathOpen="false">
<PathPointArray>
<PathPointType Anchor="-150 -100" LeftDirection="-150 -100" RightDirection="-150 -100" />
<PathPointType Anchor="-150 100" LeftDirection="-150 100" RightDirection="-150 100" />
<PathPointType Anchor="150 100" LeftDirection="150 100" RightDirection="150 100" />
<PathPointType Anchor="150 -100" LeftDirection="150 -100" RightDirection="150 -100" />
<PathPointType Anchor="-37.5 -37.5" LeftDirection="-37.5 -37.5" RightDirection="-37.5 -37.5" />
<PathPointType Anchor="-37.5 37.5" LeftDirection="-37.5 37.5" RightDirection="-37.5 37.5" />
<PathPointType Anchor="37.5 37.5" LeftDirection="37.5 37.5" RightDirection="37.5 37.5" />
<PathPointType Anchor="37.5 -37.5" LeftDirection="37.5 -37.5" RightDirection="37.5 -37.5" />
</PathPointArray>
</GeometryPathType>
</PathGeometry>
</Properties>
<Image Self="ue6" ItemTransform="1 0 0 1 -150 -100">
<Image Self="ue6" ItemTransform="1 0 0 1 -37.5 -37.5">
<Properties>
<Profile type="string">
$ID/Embedded
</Profile>
<GraphicBounds Left="0" Top="0" Right="300" Bottom="200" />
<GraphicBounds Left="0" Top="0" Right="75" Bottom="75" />
</Properties>
<Link Self="ueb" LinkResourceURI="file:command/SVG_logo-without-xml-declaration.svg" />
</Image>