{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE NoMonomorphismRestriction #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PackageImports #-}
{-# LANGUAGE TypeFamilies #-}
module Reanimate.Diagrams
( renderDiagram
, SvgDiagram
) where
import qualified Data.ByteString.Lazy as BL
import qualified Diagrams.Backend.SVG as D
import qualified Diagrams.Core.Compile as D
import qualified Diagrams.Core.Types as D
import qualified Diagrams.Size as D
import Graphics.SvgTree (Document (..), Tree (..), defaultSvg,
elements, loadSvgFile, parseSvgFile,
xmlOfDocument)
import qualified Graphics.Svg.Core as Svg
import Linear.V2
import Reanimate.Svg (unbox)
import Diagrams.Prelude
import qualified Diagrams.Prelude as D
renderDiagram :: SvgDiagram -> Tree
renderDiagram d =
case parseSvgFile "" (BL.toStrict $ Svg.renderBS (renderDia D.SVG opts d)) of
Nothing -> error "Malformed svg"
Just svg -> unbox svg
where
opts = D.SVGOptions absolute Nothing "" [] False
type SvgDiagram = D.Diagram D.SVG