content: module SVGExt ( documentSize
                ) where
  
  import qualified Graphics.Svg as SVG
  
  -- it is a replacement of SVG.documentSize as that returns (Int,Int) causing a serious
  -- precision loss in the final gcode
  documentSize :: Int -> SVG.Document -> (Double, Double)
  documentSize _ SVG.Document { SVG._viewBox = Just (x1, y1, x2, y2)
                              , SVG._width = Just (SVG.Percent pw)
                              , SVG._height = Just (SVG.Percent ph)
                              } =
      (dx * pw, dy * ph)
        where
          dx = abs $ x2 - x1
          dy = abs $ y2 - y1
  
  documentSize _ SVG.Document { SVG._width = Just (SVG.Num w)
                              , SVG._height = Just (SVG.Num h) } = (w, h)
  
  documentSize dpi doc@SVG.Document { SVG._width = Just w
                                    , SVG._height = Just h } =
      documentSize dpi $ doc
          { SVG._width = Just $ SVG.toUserUnit dpi w
          , SVG._height = Just $ SVG.toUserUnit dpi h }
  
  documentSize _ SVG.Document { SVG._viewBox = Just (x1, y1, x2, y2) } =
      (abs $ x2 - x1, abs $ y2 - y1)
  
  documentSize _ _ = (1, 1)
  