X-Git-Url: https://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Rakka%2FResource%2FRender.hs;h=8202cf626e050d0ada2f8352dbbaa61042dc89fa;hb=88747f2463963ff2895a597b3054b12b2288530e;hp=670edd88273aef65dade948c1a6627a5d04fa73d;hpb=d86c5b3ded23eaa215d1903495579c19c7daf5bb;p=Rakka.git diff --git a/Rakka/Resource/Render.hs b/Rakka/Resource/Render.hs index 670edd8..8202cf6 100644 --- a/Rakka/Resource/Render.hs +++ b/Rakka/Resource/Render.hs @@ -2,28 +2,21 @@ module Rakka.Resource.Render ( 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 OpenSSL.EVP.Base64 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 @@ -41,7 +34,7 @@ resRender env } where toPageName :: [String] -> PageName - toPageName = decodePageName . joinWith "/" + toPageName = UTF8.decodeString . joinPath {- @@ -66,12 +59,18 @@ resRender env -} 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 @@ -80,7 +79,9 @@ handleRender env name >>> render env >>> - writeDocumentToString [ (a_indent, v_1) ] + writeDocumentToString [ (a_indent , v_1) + , (a_output_encoding, utf8) + , (a_no_xml_pi , v_0) ] ) output xmlStr