[initial attempt to add support for XMLMetaData jeremy@n-heptane.com**20080605043739] { hunk ./src/HAppS/Template/HSP/Handle.hs 1 +{-# LANGUAGE FlexibleInstances #-} hunk ./src/HAppS/Template/HSP/Handle.hs 63 -instance ToMessage XML where +instance ToMessage (Maybe XMLMetaData, XML) where + toContentType (Just md,_) = P.pack (contentType md) hunk ./src/HAppS/Template/HSP/Handle.hs 66 - toMessage = L.pack . - ("\n" ++) . - renderAsHTML + toMessage (Just (XMLMetaData (showDt, dt) _ pr), xml) = + L.pack ((if showDt then (dt ++) else id) (pr xml)) + toMessage (Nothing, xml) = + L.pack (renderAsHTML xml) hunk ./src/HAppS/Template/HSP/Handle.hs 115 -execTemplate :: FilePath -> HSPWeb Response -execTemplate tmpl = +execTemplate :: Maybe XMLMetaData -> FilePath -> HSPWeb Response +execTemplate xmd tmpl = hunk ./src/HAppS/Template/HSP/Handle.hs 123 - Right (_,web) -> liftM toResponse $ liftIO $ evalHSP (runWebXML webState web) + Right (_,web) -> liftM toResponse $ liftIO $ evalHSP (runWebXML webState web) xmd hunk ./src/HAppS/Template/HSP.hs 16 +import Control.Monad.State hunk ./src/HAppS/Template/HSP.hs 21 +import qualified Data.ByteString.Char8 as P hunk ./src/HAppS/Template/HSP.hs 59 - (xml,Endo w) <- liftIO $ runReaderT (runWriterT $ runHSPT web env) st + xmd <- lift get + ((xmd', xml),Endo w) <- liftIO $ runReaderT (runWriterT $ runHSPT web env xmd) st + setMetaData xmd' hunk ./src/HAppS/Template/HSP.hs 64 +-- FIXME: this ought to get the current state as well, but runHSPT needs to take it as an argument first hunk ./src/HAppS/Template/HSP.hs 68 - (xml,Endo w) <- liftIO $ runReaderT (runWriterT $ runHSPT web env) st + xmd <- lift get + ((xmd', xml),Endo w) <- liftIO $ runReaderT (runWriterT $ runHSPT web env xmd) st + setMetaData xmd' }