# HG changeset patch # User HackBot # Date 1357822733 0 # Node ID b6a87dde66ff3e52d44e29048922a66e1fba0cba # Parent 3faad865a8339ef5f441ae4e32c823a5939cc3d1 fetch http://sprunge.us/hiJM diff -r 3faad865a833 -r b6a87dde66ff hiJM --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hiJM Thu Jan 10 12:58:53 2013 +0000 @@ -0,0 +1,42 @@ +import Data.List +import Data.Char + +standardURL = "http://esolangs.org/wiki/Main_Page" +standardMessage = "Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: @. (For the other kind of esoterica, try #esoteric on irc.dal.net.)" + +replace :: (Eq a) => [a] -> [a] -> [a] -> [a] +replace _ _ [] = [] +replace old new (y:ys) = + case stripPrefix old (y:ys) of + Nothing -> y : replace old new ys + Just ys' -> new ++ replace old new ys' + +applyGenTemplate :: String -> String -> String -> String -- nick url template -> result +applyGenTemplate nick url template = nick ++ ": " ++ replace "^" nick (replace "@" url template) + +applyTemplate :: String -> String -> String -- nick template -> result +applyTemplate nick template = applyGenTemplate nick standardURL template + + + +reversibles = "<([{}])>" + +-- there is probably a better way to do this with guards or somesuch +reverseChar :: Char -> Maybe Int -> Char +reverseChar c Nothing = c +reverseChar c (Just a) = reversibles !! (length reversibles - 1 - a) + +tidyReverse :: String -> String +tidyReverse [] = [] +tidyReverse (c:cs) = (tidyReverse cs) ++ [reverseChar c (elemIndex c reversibles)] + + +makeWelcome :: (String -> String) -> String -> String -- filter nick -> result +makeWelcome f nick = applyTemplate nick (f standardMessage) + + +welcome = makeWelcome id +emoclew = makeWelcome tidyReverse +wELCOME = makeWelcome (map toUpper) +eMOCLEW = makeWelcome ((map toUpper) . tidyReverse) +