1 module Rakka.Wiki.Engine
7 import Control.Arrow.ArrowTree
9 import Data.Encoding.UTF8
10 import Network.HTTP.Lucu
12 import Rakka.Wiki.Parser
13 import Rakka.Wiki.Formatter
14 import Text.ParserCombinators.Parsec
15 import Text.XML.HXT.Arrow.XmlArrow
16 import Text.XML.HXT.DOM.TypeDefs
19 formatPage :: (ArrowXml a, ArrowChoice a) =>
23 -> do tree <- case pageType page of
24 MIMEType "text" "x-rakka" _
25 -> formatWikiPage -< page
29 formatWikiPage :: (ArrowXml a, ArrowChoice a) =>
33 -> do let source = decodeLazy UTF8 (pageContent page)
34 case parse wikiPage "" source of
35 Left err -> formatParseError -< err
36 Right elems -> formatWikiElements -< elems
39 formatParseError :: ArrowXml a => a ParseError XmlTree
41 = proc err -> (eelem "pre" += txt (show err)) -<< ()
44 attachXHtmlNs :: ArrowXml a => a XmlTree XmlTree
45 attachXHtmlNs = processBottomUp (changeQName attach')
47 attach' :: QName -> QName
50 , namespaceUri = "http://www.w3.org/1999/xhtml"