{-# 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