1 module Rakka.Wiki.Interpreter.Base
7 import qualified Data.Map as M
10 import Rakka.SystemConfig
12 import Rakka.Wiki.Interpreter
15 interpreters :: [Interpreter]
16 interpreters = [ lineBreakInterp
24 lineBreakInterp :: Interpreter
25 lineBreakInterp = InlineCommandInterpreter {
28 = \ _ (InlineCommand _ attrs _) -> return $ LineBreak attrs
32 spanInterp :: Interpreter
33 spanInterp = InlineCommandInterpreter {
36 = \ _ (InlineCommand _ attrs contents) -> return $ Span attrs contents
40 divInterp :: Interpreter
41 divInterp = BlockCommandInterpreter {
44 = \ _ (BlockCommand _ attrs contents) -> return $ Div attrs contents
48 pageNameInterp :: Interpreter
49 pageNameInterp = InlineCommandInterpreter {
52 = \ ctx _ -> return $ Text (ctxPageName ctx)
56 otherLangsInterp :: Interpreter
58 = BlockCommandInterpreter {
59 bciName = "inOtherLanguages"
62 case fmap pageOtherLang (ctxMainPage ctx) of
67 -> do Languages langTable <- getSysConf (ctxSysConf ctx)
68 let merged = mergeTables langTable (M.toList linkTable)
69 return $ List $ mkLangList merged
72 mergeTables :: Map LanguageTag LanguageName
73 -> [(LanguageTag, PageName)]
74 -> [(LanguageName, PageName)]
76 mergeTables m (x:xs) = let (langTag, pageName) = x
77 langName = fromMaybe langTag (M.lookup langTag m)
79 (langName, pageName) : mergeTables m xs
81 mkLangList :: [(LanguageName, PageName)] -> ListElement
82 mkLangList xs = ListElement Bullet (map mkLangLink xs)
84 mkLangLink :: (LanguageName, PageName) -> ListItem
85 mkLangLink (langName, pageName)
86 = [Right (PageLink (Just pageName) Nothing (Just langName))]