module Rasa.Internal.Editor
(
Editor
, HasEditor(..)
, buffers
, exiting
, nextBufId
, BufRef(..)
) where
import Rasa.Internal.Buffer
import Rasa.Internal.Extensions
import Data.Default
import Data.IntMap
import Control.Lens
newtype BufRef =
BufRef Int
deriving (Show, Eq, Ord)
data Editor = Editor
{ _buffers' :: IntMap Buffer
, _exiting' :: Bool
, _extState' :: ExtMap
, _nextBufId' :: Int
}
makeLenses ''Editor
instance Show Editor where
show ed =
"Buffers==============\n" ++ show (ed^.buffers) ++ "\n\n"
++ "Editor Extensions==============\n" ++ show (ed^.exts) ++ "\n\n"
++ "---\n\n"
class HasEditor a where
editor :: Lens' a Editor
buffers :: HasEditor e => Lens' e (IntMap Buffer)
buffers = editor.buffers'
exiting :: HasEditor e => Lens' e Bool
exiting = editor.exiting'
nextBufId :: HasEditor e => Lens' e Int
nextBufId = editor.nextBufId'
instance HasEditor Editor where
editor = lens id (flip const)
instance HasExts Editor where
exts = extState'
instance Default Editor where
def =
Editor
{ _extState'=def
, _buffers'=empty
, _exiting'=False
, _nextBufId'=0
}