dzen-dhall-1.0.0: src/DzenDhall/Data.hs
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeFamilies #-}
module DzenDhall.Data where
import Data.IORef
import Data.Text (Text)
import Data.Vector
import Data.Void
import DzenDhall.Config
import GHC.Generics
import Lens.Micro.TH
import qualified Data.HashMap.Strict as H
type Cache = IORef (Maybe Text)
data SourceHandle
= SourceHandle
{ _shOutputRef :: IORef Text
, _shCacheRef :: Cache
, _shEscape :: Bool
}
makeLenses ''SourceHandle
data Bar id
= BarAutomaton Text (StateTransitionTableX id) (AutomataRefX id (Bar id))
| BarPad Int Padding (Bar id)
| BarTrim Int Direction (Bar id)
| BarMarquee Marquee (Bar id)
| BarProp Property (Bar id)
| BarMarkup Text
| BarScope (Bar id)
| BarShape Shape
| BarSlider Slider (Vector (Bar id))
| BarSource (SourceRefX id)
| BarText Text
| BarDefine Variable
| Bars [Bar id]
deriving (Generic)
type family AutomataRefX id :: * -> *
type family StateTransitionTableX id
type family SourceRefX id
newtype Initialized = Initialized Void
newtype Marshalled = Marshalled Void
type instance AutomataRefX Marshalled = H.HashMap Text
type instance StateTransitionTableX Marshalled = StateTransitionTable
type instance SourceRefX Marshalled = Source
type instance AutomataRefX Initialized = IORef
type instance StateTransitionTableX Initialized = ()
type instance SourceRefX Initialized = SourceHandle
deriving instance Show (Bar Marshalled)
deriving instance Eq (Bar Marshalled)
instance Semigroup (Bar id) where
a <> b = Bars [a, b]
instance Monoid (Bar id) where
mempty = Bars []
data Property
= BG Color
| IB
| FG Color
| CA ClickableArea
| P Position
| PA AbsolutePosition
deriving (Eq, Show, Generic)
type Handler = Text
type ImagePath = Text
data Shape
= I ImagePath
| R Int Int
| RO Int Int
| C Int
| CO Int
deriving (Eq, Show, Generic)