where
import Control.Arrow
+import Control.Arrow.ArrowIO
import Control.Arrow.ArrowTree
import Data.Encoding
import Data.Encoding.UTF8
import Network.HTTP.Lucu
+import Rakka.Environment
import Rakka.Page
+import Rakka.SystemConfig
import Rakka.Wiki.Parser
import Rakka.Wiki.Formatter
import Text.ParserCombinators.Parsec
import Text.XML.HXT.DOM.TypeDefs
-formatPage :: (ArrowXml a, ArrowChoice a) =>
- a Page XmlTree
-formatPage
+formatPage :: (ArrowXml a, ArrowChoice a, ArrowIO a) =>
+ Environment
+ -> a Page XmlTree
+formatPage env
= proc page
-> do tree <- case pageType page of
MIMEType "text" "x-rakka" _
- -> formatWikiPage -< page
+ -> formatWikiPage env -< page
attachXHtmlNs -< tree
-formatWikiPage :: (ArrowXml a, ArrowChoice a) =>
- a Page XmlTree
-formatWikiPage
+formatWikiPage :: (ArrowXml a, ArrowChoice a, ArrowIO a) =>
+ Environment
+ -> a Page XmlTree
+formatWikiPage env
= proc page
-> do let source = decodeLazy UTF8 (pageContent page)
case parse wikiPage "" source of
- Left err -> formatParseError -< err
- Right elems -> formatWikiElements -< elems
+ Left err
+ -> formatParseError -< err
+
+ Right elems
+ -> do BaseURI baseURI <- getSysConfA (envSysConf env) (BaseURI undefined) -< ()
+ formatWikiElements -< (baseURI, elems)
formatParseError :: ArrowXml a => a ParseError XmlTree