approx-rand-test-0.2.1: utils/diagrams/ChartBackend.hs
{-# OPTIONS_GHC -fno-warn-orphans #-}
module ChartBackend (
backendFormats,
writeWithBackend
) where
import Control.Lens.Setter ((.~))
import Control.Monad (void)
import Data.Default
import Data.Default.Class ()
import qualified Graphics.Rendering.Chart as Chart
import qualified Graphics.Rendering.Chart.Backend.Diagrams as DiagramsChart
import qualified System.FilePath.Posix as FP
import System.IO (hPutStrLn, stderr)
type RenderFunction a = Chart.Renderable a -> FilePath -> IO (Chart.PickFn a)
instance Default DiagramsChart.FileOptions where
def = DiagramsChart.FileOptions (800, 600) DiagramsChart.SVG def
renderFunctions :: [(String, RenderFunction a)]
renderFunctions =
[ (".eps", DiagramsChart.renderableToFile $
DiagramsChart.fo_format .~ DiagramsChart.EPS $ def),
(".svg", DiagramsChart.renderableToFile def) ]
backendFormats :: [String]
backendFormats = map fst renderFunctions
writeWithBackend :: Chart.Renderable () -> FP.FilePath -> IO ()
writeWithBackend renderable path =
case lookup (snd $ FP.splitExtension path) renderFunctions of
Just f -> void $ f renderable path
Nothing ->
hPutStrLn stderr "Unknown output format!"