module Rakka.Wiki.Interpreter
( Interpreter(..)
+ , InterpreterContext(..)
, commandName -- private
, commandType -- private
-
- , pureInlineInterp
- , pureBlockInterp
)
where
data Interpreter
= InlineCommandInterpreter {
iciName :: String
- , iciInterpret :: InlineCommand
- -> Maybe Page
- -> Storage
- -> SystemConfig
- -> IO InlineElement
+ , iciInterpret :: InterpreterContext -> InlineCommand -> IO InlineElement
}
| BlockCommandInterpreter {
bciName :: String
- , bciInterpret :: BlockCommand
- -> Maybe Page
- -> Storage
- -> SystemConfig
- -> IO BlockElement
+ , bciInterpret :: InterpreterContext -> BlockCommand -> IO BlockElement
+ }
+
+
+data InterpreterContext
+ = InterpreterContext {
+ ctxPage :: Maybe Page
+ , ctxTree :: 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