{-| Copyright : (c) Nathan Bloomfield, 2017 License : GPL-3 Maintainer : nbloomf@gmail.com Stability : experimental This module provides a filter for Hakyll which expands WordPress-style shortcodes. To use it, include the line @>>= applyShortcodes allServices@ in your compiler. -} module Hakyll.Shortcode ( ShortcodeService(..), expandShortcodes, applyShortcodes, allServices ) where import Hakyll.Shortcode.Service.GeoGebra import Hakyll.Shortcode.Service.Gravatar import Hakyll.Shortcode.Service.YouTube import Hakyll.Shortcode.Service.Example -- | A simple sum type representing the available shortcodes. data ShortcodeService = GeoGebra | Gravatar | YouTube | Example deriving Eq -- Expand shortcodes of the provided type. expandShortcodesFor :: ShortcodeService -> String -> String expandShortcodesFor x = case x of GeoGebra -> expandGeoGebraShortcodes Gravatar -> expandGravatarShortcodes YouTube -> expandYouTubeShortcodes Example -> expandExampleShortcodes -- | Expand shortcodes of each of the provided types. expandShortcodes :: [ShortcodeService] -> String -> String expandShortcodes = foldr1 (.) . map expandShortcodesFor -- | Monadic version of 'expandShortcodes', for use with Hakyll. applyShortcodes :: (Monad m, Functor f) => [ShortcodeService] -> f String -> m (f String) applyShortcodes svc text = return $ (fmap $ expandShortcodes svc) text -- | A list of all the available shortcodes (for convenience). allServices :: [ShortcodeService] allServices = [ GeoGebra , Gravatar , YouTube ]