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