module Lambdabot.Plugin.Novelty.Elite (elitePlugin) where
import Lambdabot.Plugin
import Lambdabot.Util
import Control.Arrow
import Control.Monad
import Data.Char
import Data.Maybe
import Text.Regex.TDFA
elitePlugin :: Module ()
elitePlugin :: Module ()
elitePlugin = forall st. Module st
newModule
{ moduleCmds :: ModuleT () LB [Command (ModuleT () LB)]
moduleCmds = forall (m :: * -> *) a. Monad m => a -> m a
return
[ (String -> Command Identity
command String
"elite")
{ aliases :: [String]
aliases = [String
"leet", String
"l33t", String
"1337"]
, help :: Cmd (ModuleT () LB) ()
help = forall (m :: * -> *). Monad m => String -> Cmd m ()
say String
"elite <phrase>. Translate English to elitespeak"
, process :: String -> Cmd (ModuleT () LB) ()
process = \String
args -> case String -> [String]
words String
args of
[] -> forall (m :: * -> *). Monad m => String -> Cmd m ()
say String
"Say again?"
[String]
wds -> do let instr :: String
instr = forall a b. (a -> b) -> [a] -> [b]
map Char -> Char
toLower ([String] -> String
unwords [String]
wds)
forall (m :: * -> *). Monad m => String -> Cmd m ()
say forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< forall (m :: * -> *) a. MonadIO m => IO a -> m a
io (String -> IO String
translateLine String
instr)
}
]
}
translateLine :: String -> IO String
translateLine :: String -> IO String
translateLine = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (forall a. (a -> Bool) -> [a] -> [a]
dropWhile Char -> Bool
isSpace) forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> IO String
translate forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char
' 'forall a. a -> [a] -> [a]
:)
translate :: String -> IO String
translate :: String -> IO String
translate [] = forall (m :: * -> *) a. Monad m => a -> m a
return []
translate String
str = do
let alts :: [(String, String)]
alts = [ (String -> String
subst String
match',String
rest)
| (Regex
re, String -> String
subst) <- [(Regex, String -> String)]
ruleList
, MatchResult String
mr <- forall a. Maybe a -> [a]
maybeToList (forall regex source target (m :: * -> *).
(RegexContext regex source target, MonadFail m) =>
regex -> source -> m target
matchM Regex
re String
str)
, forall (t :: * -> *) a. Foldable t => t a -> Bool
null (forall a. MatchResult a -> a
mrBefore MatchResult String
mr)
, let match' :: String
match' = forall a. MatchResult a -> a
mrMatch MatchResult String
mr
rest :: String
rest = forall a. MatchResult a -> a
mrAfter MatchResult String
mr
]
(String
subst,String
rest) <- forall (m :: * -> *) a. MonadIO m => [a] -> m a
random [(String, String)]
alts
forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM (String
subst forall a. [a] -> [a] -> [a]
++) (String -> IO String
translate String
rest)
ruleList :: [(Regex, String -> String)]
ruleList :: [(Regex, String -> String)]
ruleList = forall a b. (a -> b) -> [a] -> [b]
map (forall (a :: * -> * -> *) b c d.
Arrow a =>
a b c -> a (b, d) (c, d)
first forall regex compOpt execOpt source.
RegexMaker regex compOpt execOpt source =>
source -> regex
makeRegex)
[ (String
".", forall a. a -> a
id )
, (String
".", forall a b. (a -> b) -> [a] -> [b]
map Char -> Char
toUpper )
, (String
"a", forall a b. a -> b -> a
const String
"4" )
, (String
"b", forall a b. a -> b -> a
const String
"8" )
, (String
" be ", forall a b. a -> b -> a
const String
" b " )
, (String
"c", forall a b. a -> b -> a
const String
"(" )
, (String
"ck", forall a b. a -> b -> a
const String
"xx" )
, (String
"cks ", forall a b. a -> b -> a
const String
"x " )
, (String
"cks ", forall a b. a -> b -> a
const String
"x0rs " )
, (String
"cks ", forall a b. a -> b -> a
const String
"x0rz " )
, (String
" cool ",forall a b. a -> b -> a
const String
" kewl ")
, (String
"e", forall a b. a -> b -> a
const String
"3" )
, (String
"elite", forall a b. a -> b -> a
const String
"1337" )
, (String
"elite", forall a b. a -> b -> a
const String
"leet" )
, (String
"f", forall a b. a -> b -> a
const String
"ph" )
, (String
" for ", forall a b. a -> b -> a
const String
" 4 " )
, (String
"g", forall a b. a -> b -> a
const String
"9" )
, (String
"h", forall a b. a -> b -> a
const String
"|-|" )
, (String
"k", forall a b. a -> b -> a
const String
"x" )
, (String
"l", forall a b. a -> b -> a
const String
"|" )
, (String
"l", forall a b. a -> b -> a
const String
"1" )
, (String
"m", forall a b. a -> b -> a
const String
"/\\/\\")
, (String
"o", forall a b. a -> b -> a
const String
"0" )
, (String
"ph", forall a b. a -> b -> a
const String
"f" )
, (String
"s", forall a b. a -> b -> a
const String
"z" )
, (String
"s", forall a b. a -> b -> a
const String
"$" )
, (String
"s", forall a b. a -> b -> a
const String
"5" )
, (String
"s ", forall a b. a -> b -> a
const String
"z0rz " )
, (String
"t", forall a b. a -> b -> a
const String
"7" )
, (String
"t", forall a b. a -> b -> a
const String
"+" )
, (String
" the ", forall a b. a -> b -> a
const String
" teh " )
, (String
" to ", forall a b. a -> b -> a
const String
" 2 " )
, (String
" to ", forall a b. a -> b -> a
const String
" too " )
, (String
" to ", forall a b. a -> b -> a
const String
" tu " )
, (String
" too ", forall a b. a -> b -> a
const String
" to " )
, (String
"v", forall a b. a -> b -> a
const String
"\\/" )
, (String
"w", forall a b. a -> b -> a
const String
"\\/\\/")
, (String
" you ", forall a b. a -> b -> a
const String
" u " )
, (String
" you ", forall a b. a -> b -> a
const String
" yu " )
, (String
" you ", forall a b. a -> b -> a
const String
" joo " )
, (String
"z", forall a b. a -> b -> a
const String
"s" )
]