module Manatee.Extension.Editor.SourceBuffer where
import Control.Applicative
import Control.Concurrent.STM
import DBus.Client hiding (Signal)
import Data.List
import Data.Maybe
import Data.Typeable
import Graphics.UI.Gtk.Multiline.TextBuffer
import Manatee.Core.PageMode
import Manatee.Core.Types
import Manatee.Extension.Editor.PageMode
import Text.Regex.TDFA
import qualified Data.ByteString as BS
import qualified Graphics.UI.Gtk.SourceView.SourceBuffer as SB
data SourceBuffer =
SourceBuffer {sourceBufferFilePath :: TVar String
,sourceBufferClient :: Client
,sourceBufferPageId :: PageId
,sourceBufferMode :: PageMode
,sourceBufferBuffer :: SB.SourceBuffer
}
deriving Typeable
sourceBufferNew :: String -> Client -> PageId -> IO SourceBuffer
sourceBufferNew path client pageId = do
buffer <- SB.sourceBufferNew Nothing
SB.sourceBufferSetHighlightMatchingBrackets buffer True
SB.sourceBufferSetMaxUndoLevels buffer (1)
textBufferSetByteString buffer =<< BS.readFile path
SourceBuffer <$> newTVarIO path
<*> pure client
<*> pure pageId
<*> pure (fromMaybe defaultMode $ find (\x -> path =~ pageModeRegexp x) sourceModeList)
<*> pure buffer