module Graphics.Gnuplot.Private.LineSpecification where
import qualified Graphics.Gnuplot.Private.ColorSpecification as Color
import Data.Maybe (catMaybes, )
import Graphics.Gnuplot.Utility (quote, )
data T =
Cons
{ lineStyle_ :: Maybe Int
, lineType_ :: Maybe Int
, lineWidth_ :: Maybe Double
, lineColor_ :: Maybe Color.T
, pointType_ :: Maybe Int
, pointSize_ :: Maybe Double
, title_ :: Maybe String
}
deflt :: T
deflt =
Cons
{ lineStyle_ = Nothing
, lineType_ = Nothing
, lineWidth_ = Nothing
, lineColor_ = Nothing
, pointType_ = Nothing
, pointSize_ = Nothing
, title_ = Nothing
}
lineStyle :: Int -> T -> T
lineStyle x ls = ls{lineStyle_ = Just x}
lineType :: Int -> T -> T
lineType x ls = ls{lineType_ = Just x}
lineWidth :: Double -> T -> T
lineWidth x ls = ls{lineWidth_ = Just x}
lineColor :: Color.T -> T -> T
lineColor x ls = ls{lineColor_ = Just x}
pointType :: Int -> T -> T
pointType x ls = ls{pointType_ = Just x}
pointSize :: Double -> T -> T
pointSize x ls = ls{pointSize_ = Just x}
title :: String -> T -> T
title x ls = ls{title_ = Just x}
toString :: T -> String
toString linespec =
let showField :: String -> (a -> String) -> (T -> Maybe a) -> Maybe [String]
showField s f access = fmap (\a -> [s, f a]) $ access linespec
in unwords $ concat $ catMaybes $
showField "linestyle" show lineStyle_ :
showField "linetype" show lineType_ :
showField "linewidth" show lineWidth_ :
showField "linecolor" Color.toString lineColor_ :
showField "pointtype" show pointType_ :
showField "pointsize" show pointSize_ :
showField "title" quote title_ :
[]