{-# LANGUAGE OverloadedStrings #-}
module Types(CArray, Page(..), Application(..)) 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(..))
import Foreign.Ptr
import Foreign.StablePtr
type CArray a = Ptr a
data Page = Page {
url :: URI,
css :: ConditionalStyles (TextStyle SpeechStyle),
html :: Document,
pageTitle :: String,
pageMIME :: String,
apps :: [Application],
backStack :: [(String, URI)],
forwardStack :: [(String, URI)]
}
foreign export ccall c_initialReferer :: IO (StablePtr Page)
c_initialReferer = do
cwd <- getCurrentDirectory
newStablePtr $ Page {
-- Default to URIs being relative to CWD.
url = URI {uriScheme = "file:", uriPath = cwd,
uriAuthority = Nothing, uriQuery = "", uriFragment = ""},
-- Blank values:
css = conditionalStyles nullURI "temp",
html = Document {
documentPrologue = Prologue [] Nothing [],
documentRoot = Element "temp" M.empty [],
documentEpilogue = []
},
pageTitle = "", pageMIME = "", apps = [],
backStack = [], forwardStack = []
}
foreign export ccall c_freePage :: StablePtr Page -> IO ()
c_freePage = freeStablePtr