module Graphics.Gnuplot.Private.FrameOptionSet where
import qualified Graphics.Gnuplot.Private.FrameOption as Option
import qualified Data.Map as Map
import Data.Maybe.HT (toMaybe, )
import Data.Maybe (mapMaybe, )
newtype T graph =
Cons {decons :: Map.Map Option.T [String]}
deflt :: T graph
deflt =
Cons $ Map.fromList $
(Option.key, []) :
(Option.border, []) :
(Option.xLabel, []) :
(Option.yLabel, []) :
(Option.zLabel, []) :
(Option.xRange, ["[*:*]"]) :
(Option.yRange, ["[*:*]"]) :
(Option.zRange, ["[*:*]"]) :
(Option.xTicks, []) :
(Option.yTicks, []) :
(Option.zTicks, []) :
[]
add :: Option.T -> [String] -> T graph -> T graph
add opt args (Cons m) =
Cons (Map.insert opt args m)
remove :: Option.T -> T graph -> T graph
remove opt (Cons m) =
Cons (Map.delete opt m)
diffToString :: T graph -> T graph -> [String]
diffToString (Cons m0) (Cons m1) =
mapMaybe
(\(Option.Cons opt, (old,new)) ->
toMaybe (old/=new) $
maybe
("unset " ++ opt)
(\args -> "set " ++ opt ++ " " ++ unwords args)
new) $
Map.toList $
Map.unionWith
(\(old,_) (_,new) -> (old,new))
(fmap (\x -> (Just x, Nothing)) m0)
(fmap (\x -> (Nothing, Just x)) m1)