{-# LANGUAGE OverloadedStrings #-}
module Types(CArray, Page(..), Application(..), RhapsodeCSS, buildDirFile, readStrict) where
import System.Directory (getCurrentDirectory) -- default referer URI
import SpeechStyle (SpeechStyle)
import Data.CSS.Preprocessor.Conditions (ConditionalStyles, conditionalStyles)
import Data.CSS.Preprocessor.Text (TextStyle)
import Text.XML
import qualified Data.Map.Strict as M
import Network.URI
import Network.URI.Fetch (Application(..), url)
import Network.URI.Fetch.XML (Page(..), loadVisited, readStrict)
-- For the in-memory history log
import qualified Data.Set as Set
import Data.Set (Set)
import Data.Text (Text(..))
import qualified Data.Text as Txt
import System.Directory
import System.FilePath ((</>))
import Control.Parallel (par)
import Foreign.Ptr
import Foreign.StablePtr
buildDir = "."
buildDirFile = (buildDir </>)
type CArray a = Ptr a
type RhapsodeCSS = ConditionalStyles (TextStyle SpeechStyle)
foreign export ccall c_initialReferer :: IO (StablePtr (Page RhapsodeCSS))
c_initialReferer = do
cwd <- getCurrentDirectory
hist <- loadVisited "rhapsode"
newStablePtr $ Page {
-- Default to URIs being relative to CWD.
pageURL = URI {uriScheme = "file:", uriPath = cwd,
uriAuthority = Nothing, uriQuery = "", uriFragment = ""},
-- Blank values:
css = conditionalStyles nullURI "temp",
domain = "temp",
html = Document {
documentPrologue = Prologue [] Nothing [],
documentRoot = Element "temp" M.empty [],
documentEpilogue = []
},
pageTitle = "", pageMIME = "", apps = [],
backStack = [], forwardStack = [], visitedURLs = hist,
initCSS = conditionalStyles,
appName = "rhapsode"
}
foreign export ccall c_freePage :: StablePtr (Page RhapsodeCSS) -> IO ()
c_freePage = freeStablePtr