~alcinnz/rhapsode

ref: 943ea735e8cc446f1ec30f515d8d3e0465a47b69 rhapsode/src/Types.hs -rw-r--r-- 1.1 KiB
943ea735 — Adrian Cochrane Upload Types modules, & useragent stylesheet with audio cues. 4 years ago
                                                                                
943ea735 Adrian Cochrane
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
{-# LANGUAGE OverloadedStrings #-}
module Types(CArray, Page(..)) where

import System.Directory (getCurrentDirectory) -- default referer URI
import StyleTree (StyleTree)
import Data.CSS.Preprocessor.Conditions (ConditionalStyles, conditionalStyles)
import Text.XML
import qualified Data.Map.Strict as M
import Network.URI

import Foreign.Ptr
import Foreign.StablePtr

type CArray a = Ptr a

data Page = Page {url :: URI, css :: ConditionalStyles StyleTree, html :: Document}

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 = []
        }
    }

foreign export ccall c_freePage :: StablePtr Page -> IO ()

c_freePage = freeStablePtr