Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
33 lines (26 sloc) 0.999 kb
module PigLatin (plugin) where
-- This plugin converts a page to pig latin if the 'language' metadata
-- field is set to 'pig latin'. This demonstrates how to get access to
-- metadata in a plugin.
import Network.Gitit.Interface
import Data.Char (toLower, toUpper, isLower, isUpper, isLetter)
plugin :: Plugin
plugin = PageTransform $ \doc -> do
meta <- askMeta
case lookup "language" meta of
Just s | map toLower s == "pig latin" ->
return $ processWith pigLatinStr doc
_ -> return doc
pigLatinStr :: Inline -> Inline
pigLatinStr (Str "") = Str ""
pigLatinStr (Str (c:cs)) | isLower c && isConsonant c =
Str (cs ++ (c : "ay"))
pigLatinStr (Str (c:cs)) | isUpper c && isConsonant c =
Str (capitalize cs ++ (toLower c : "ay"))
pigLatinStr (Str x@(c:_)) | isLetter c = Str (x ++ "yay")
pigLatinStr x = x
isConsonant :: Char -> Bool
isConsonant c = c `notElem` "aeiouAEIOU"
capitalize :: String -> String
capitalize "" = ""
capitalize (c:cs) = toUpper c : cs
Jump to Line
Something went wrong with that request. Please try again.