module Diagrams.Backend.SVG
( SVG(..)
, Options(..)
) where
import Data.Typeable
import Diagrams.Prelude
import Diagrams.TwoD.Adjust (adjustDia2D)
import Diagrams.TwoD.Text
import qualified Text.Blaze.Svg11 as S
import qualified Graphics.Rendering.SVG as R
data SVG = SVG
deriving (Show, Typeable)
instance Monoid (Render SVG R2) where
mempty = R $ mempty
(R r1) `mappend` (R r2_) = R (r1 `mappend` r2_)
instance Backend SVG R2 where
data Render SVG R2 = R S.Svg
type Result SVG R2 = S.Svg
data Options SVG R2 = SVGOptions
{ fileName :: String
, size :: SizeSpec2D
}
withStyle _ _ _ d = d
doRender _ (SVGOptions _ sz) (R r) =
let (w,h) = case sz of
Width w' -> (w',w')
Height h' -> (h',h')
Dims w' h' -> (w',h')
Absolute -> (100,100)
in R.svgHeader w h $ r
adjustDia c opts d = adjustDia2D size setSvgSize c opts d
where setSvgSize sz o = o { size = sz }
instance Renderable (Segment R2) SVG where
render c = render c . flip Trail False . (:[])
instance Renderable (Trail R2) SVG where
render c t = render c $ Path [(p2 (0,0), t)]
instance Renderable (Path R2) SVG where
render _ = R . R.renderPath
instance Renderable Text SVG where
render _ = R . R.renderText