{-# LANGUAGE UnicodeSyntax #-} module Rakka.Wiki.Interpreter ( Interpreter(..) , InterpreterContext(..) , commandName -- private , commandType -- private ) where import Data.Text (Text) import Rakka.Page import Rakka.Storage import Rakka.SystemConfig import Rakka.Wiki import Text.XML.HXT.DOM.TypeDefs data Interpreter = InlineCommandInterpreter { iciName ∷ !Text , iciInterpret ∷ !(InterpreterContext → InlineCommand → IO InlineElement) } | BlockCommandInterpreter { bciName ∷ !Text , 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 → Text commandName (InlineCommandInterpreter name _) = name commandName (BlockCommandInterpreter name _) = name commandType ∷ Interpreter → CommandType commandType (InlineCommandInterpreter _ _) = InlineCommandType commandType (BlockCommandInterpreter _ _) = BlockCommandType