module MathiasSM.Context.Language (languageContext) where
import Hakyll (Context, Item (itemIdentifier), field, noResult)
import MathiasSM.Content (languageCode, requireLanguage)
languageContext :: Context a
languageContext :: forall a. Context a
languageContext =
[Context a] -> Context a
forall a. Monoid a => [a] -> a
mconcat ([Context a] -> Context a) -> [Context a] -> Context a
forall a b. (a -> b) -> a -> b
$
[Char] -> (Item a -> Compiler [Char]) -> Context a
forall a. [Char] -> (Item a -> Compiler [Char]) -> Context a
field [Char]
"language" ((Language -> [Char]) -> Compiler Language -> Compiler [Char]
forall a b. (a -> b) -> Compiler a -> Compiler b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Language -> [Char]
languageCode (Compiler Language -> Compiler [Char])
-> (Item a -> Compiler Language) -> Item a -> Compiler [Char]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Item a -> Compiler Language
forall {a}. Item a -> Compiler Language
itemLanguage)
Context a -> [Context a] -> [Context a]
forall a. a -> [a] -> [a]
: [[Char] -> (Item a -> Compiler [Char]) -> Context a
forall a. [Char] -> (Item a -> Compiler [Char]) -> Context a
field ([Char]
"lang-" [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ Language -> [Char]
languageCode Language
lang) (Language -> Item a -> Compiler [Char]
forall {a}. Language -> Item a -> Compiler [Char]
isLanguage Language
lang) | Language
lang <- [Language
forall a. Bounded a => a
minBound .. Language
forall a. Bounded a => a
maxBound]]
where
itemLanguage :: Item a -> Compiler Language
itemLanguage = Identifier -> Compiler Language
requireLanguage (Identifier -> Compiler Language)
-> (Item a -> Identifier) -> Item a -> Compiler Language
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Item a -> Identifier
forall a. Item a -> Identifier
itemIdentifier
isLanguage :: Language -> Item a -> Compiler [Char]
isLanguage Language
lang Item a
item = do
itemLang <- Item a -> Compiler Language
forall {a}. Item a -> Compiler Language
itemLanguage Item a
item
if itemLang == lang
then return $ languageCode lang
else noResult "No lang"