]> gitweb @ CieloNegro.org - Rakka.git/blobdiff - Rakka/Wiki/Interpreter.hs
fix design problem
[Rakka.git] / Rakka / Wiki / Interpreter.hs
index 2abfc45e2947bad4f44627401d288bdc5c1df884..32e1a3aa0e1760516d67e533b2fdb59a1942df43 100644 (file)
@@ -1,10 +1,9 @@
 module Rakka.Wiki.Interpreter
     ( Interpreter(..)
+    , InterpreterContext(..)
 
     , commandName -- private
     , commandType -- private
-
-    , pureInlineInterp
     )
     where
 
@@ -12,29 +11,36 @@ import           Rakka.Page
 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