module Rakka.Wiki.Interpreter
( Interpreter(..)
+ , InterpreterContext(..)
, commandName -- private
, commandType -- private
-
- , pureInlineInterp
- , pureBlockInterp
)
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 :: BlockCommand
- -> Maybe Page
- -> Storage
- -> SystemConfig
- -> IO BlockElement
+ 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
}
commandType :: Interpreter -> CommandType
commandType (InlineCommandInterpreter _ _) = InlineCommandType
commandType (BlockCommandInterpreter _ _) = BlockCommandType
-
-
-pureInlineInterp :: String
- -> (InlineCommand -> Maybe Page -> InlineElement)
- -> Interpreter
-pureInlineInterp name f
- = InlineCommandInterpreter name $ \ cmd page _ _ -> return $ f cmd page
-
-
-pureBlockInterp :: String
- -> (BlockCommand -> Maybe Page -> BlockElement)
- -> Interpreter
-pureBlockInterp name f
- = BlockCommandInterpreter name $ \ cmd page _ _ -> return $ f cmd page