annotate gktemp/welcome.hs @ 1340:8a5ecf7cfab6

<GreyKnight> echo "#!/bin/sh" > gktemp/cwelcome
author HackBot
date Thu, 10 Jan 2013 13:18:41 +0000
parents e1d6b455ff43
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1339
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
1 import Data.List
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
2 import Data.Char
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
3
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
4 standardURL = "http://esolangs.org/wiki/Main_Page"
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
5 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.)"
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
6
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
7 replace :: (Eq a) => [a] -> [a] -> [a] -> [a]
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
8 replace _ _ [] = []
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
9 replace old new (y:ys) =
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
10 case stripPrefix old (y:ys) of
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
11 Nothing -> y : replace old new ys
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
12 Just ys' -> new ++ replace old new ys'
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
13
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
14 applyGenTemplate :: String -> String -> String -> String -- nick url template -> result
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
15 applyGenTemplate nick url template = nick ++ ": " ++ replace "^" nick (replace "@" url template)
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
16
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
17 applyTemplate :: String -> String -> String -- nick template -> result
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
18 applyTemplate nick template = applyGenTemplate nick standardURL template
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
19
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
20
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
21
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
22 reversibles = "<([{}])>"
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
23
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
24 -- there is probably a better way to do this with guards or somesuch
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
25 reverseChar :: Char -> Maybe Int -> Char
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
26 reverseChar c Nothing = c
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
27 reverseChar c (Just a) = reversibles !! (length reversibles - 1 - a)
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
28
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
29 tidyReverse :: String -> String
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
30 tidyReverse [] = []
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
31 tidyReverse (c:cs) = (tidyReverse cs) ++ [reverseChar c (elemIndex c reversibles)]
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
32
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
33
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
34 makeWelcome :: (String -> String) -> String -> String -- filter nick -> result
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
35 makeWelcome f nick = applyTemplate nick (f standardMessage)
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
36
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
37
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
38 welcome = makeWelcome id
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
39 emoclew = makeWelcome tidyReverse
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
40 wELCOME = makeWelcome (map toUpper)
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
41 eMOCLEW = makeWelcome ((map toUpper) . tidyReverse)
e1d6b455ff43 <GreyKnight> mv hiJM gktemp/welcome.hs
HackBot
parents:
diff changeset
42