( resRender
)
where
-
import Control.Arrow
import Control.Arrow.ArrowIO
import Control.Arrow.ArrowList
import Control.Monad.Trans
-import qualified Codec.Binary.UTF8.String as UTF8
import qualified Data.ByteString.Lazy as Lazy
-import qualified Data.Map as M
import Network.HTTP.Lucu
-import Network.HTTP.Lucu.Utils
import Rakka.Environment
import Rakka.Page
import Rakka.Utils
-import Rakka.Wiki
import Rakka.Wiki.Engine
-import Rakka.Wiki.Parser
-import Rakka.Wiki.Interpreter
-import Text.ParserCombinators.Parsec
+import System.FilePath.Posix
import Text.XML.HXT.Arrow.Namespace
import Text.XML.HXT.Arrow.WriteDocument
import Text.XML.HXT.Arrow.XmlArrow
-import Text.XML.HXT.Arrow.XmlIOStateArrow
import Text.XML.HXT.DOM.TypeDefs
import Text.XML.HXT.DOM.XmlKeywords
}
where
toPageName :: [String] -> PageName
- toPageName = decodePageName . joinWith "/"
+ toPageName = UTF8.decodeString . joinPath
{-
-}
handleRender :: Environment -> PageName -> Resource ()
handleRender env name
- = do bin <- inputLBS defaultLimit
+ = do entity <- inputLBS defaultLimit
cTypeM <- getContentType
- let cType = case cTypeM of
- Just t -> t
- Nothing -> guessMIMEType bin
+ let (bin, cType) = case cTypeM of
+ Just (MIMEType "application" "x-rakka-base64-stream" _)
+ -> let b = decodeBase64LBS entity
+ in
+ (b, guessMIMEType b)
+ Just t
+ -> (entity, t)
+ Nothing
+ -> (entity, guessMIMEType entity)
setContentType $ read "text/xml"
[xmlStr] <- liftIO $ runX ( setErrorMsgHandler False fail
>>>
render env
>>>
- writeDocumentToString [ (a_indent, v_1) ]
+ writeDocumentToString [ (a_indent , v_1)
+ , (a_output_encoding, utf8)
+ , (a_no_xml_pi , v_0) ]
)
output xmlStr