module Rakka.Wiki.Interpreter
( Interpreter(..)
+ , InterpreterContext(..)
, commandName -- private
, commandType -- private
-
- , pureInlineInterp
)
where
import Rakka.Storage
import Rakka.SystemConfig
import Rakka.Wiki
+import Text.XML.HXT.DOM.TypeDefs
data Interpreter
= InlineCommandInterpreter {
- iciName :: String
- , iciInterpret :: InlineCommand
- -> Maybe Page
- -> Storage
- -> SystemConfig
- -> IO InlineElement
+ iciName :: !String
+ , iciInterpret :: !(InterpreterContext -> InlineCommand -> IO InlineElement)
+ }
+ | BlockCommandInterpreter {
+ bciName :: !String
+ , bciInterpret :: !(InterpreterContext -> BlockCommand -> IO BlockElement)
+ }
+
+
+data InterpreterContext
+ = InterpreterContext {
+ ctxPageName :: !(Maybe PageName)
+ , ctxMainPage :: !(Maybe XmlTree)
+ , ctxMainWiki :: !(Maybe WikiPage)
+ , ctxTargetWiki :: !WikiPage
+ , ctxStorage :: !Storage
+ , ctxSysConf :: !SystemConfig
}
commandName :: Interpreter -> String
commandName (InlineCommandInterpreter name _) = name
+commandName (BlockCommandInterpreter name _) = name
commandType :: Interpreter -> CommandType
commandType (InlineCommandInterpreter _ _) = InlineCommandType
-
-
-pureInlineInterp :: String
- -> (InlineCommand -> Maybe Page -> InlineElement)
- -> Interpreter
-pureInlineInterp name f
- = InlineCommandInterpreter name $ \ cmd page _ _ -> return $ f cmd page
+commandType (BlockCommandInterpreter _ _) = BlockCommandType