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)
45 -> return $ Div attrs (map Block contents)
49 pageNameInterp :: Interpreter
50 pageNameInterp = InlineCommandInterpreter {
53 = \ ctx _ -> return $ Text (ctxPageName ctx)
57 otherLangsInterp :: Interpreter
59 = BlockCommandInterpreter {
60 bciName = "inOtherLanguages"
63 case fmap pageOtherLang (ctxMainPage ctx) of
68 -> do Languages langTable <- getSysConf (ctxSysConf ctx)
69 let merged = mergeTables langTable (M.toList linkTable)
70 return $ mkLangList merged
73 mergeTables :: Map LanguageTag LanguageName
74 -> [(LanguageTag, PageName)]
75 -> [(LanguageName, PageName)]
77 mergeTables m (x:xs) = let (langTag, pageName) = x
78 langName = fromMaybe langTag (M.lookup langTag m)
80 (langName, pageName) : mergeTables m xs
82 mkLangList :: [(LanguageName, PageName)] -> BlockElement
83 mkLangList xs = List Bullet (map mkLangLink xs)
85 mkLangLink :: (LanguageName, PageName) -> ListItem
86 mkLangLink (langName, pageName)
87 = [Inline (PageLink (Just pageName) Nothing (Just langName))]