1 module Rakka.Wiki.Interpreter.Base
7 import qualified Data.Map as M
9 import Rakka.SystemConfig
11 import Rakka.Wiki.Interpreter
14 interpreters :: [Interpreter]
15 interpreters = [ lineBreakInterp
23 lineBreakInterp :: Interpreter
24 lineBreakInterp = InlineCommandInterpreter {
27 = \ _ (InlineCommand _ attrs _) -> return $ LineBreak attrs
31 spanInterp :: Interpreter
32 spanInterp = InlineCommandInterpreter {
35 = \ _ (InlineCommand _ attrs contents) -> return $ Span attrs contents
39 divInterp :: Interpreter
40 divInterp = BlockCommandInterpreter {
43 = \ _ (BlockCommand _ attrs contents) -> return $ Div attrs contents
47 pageNameInterp :: Interpreter
48 pageNameInterp = InlineCommandInterpreter {
51 = \ ctx _ -> return $ Text (ctxPageName ctx)
55 otherLangsInterp :: Interpreter
57 = BlockCommandInterpreter {
58 bciName = "inOtherLanguages"
61 case fmap pageOtherLang (ctxMainPage ctx) of
66 -> do Languages langTable <- getSysConf (ctxSysConf ctx) (Languages undefined)
67 let merged = mergeTables langTable (M.toList linkTable)
71 mergeTables :: Map LanguageTag LanguageName
72 -> [(LanguageTag, PageName)]
73 -> [(LanguageName, PageName)]
75 mergeTables m (x:xs) = fromMaybe x (M.lookup x m) : mergeTables m xs