Skip to content

Commit 2683b0e

Browse files
committed
(#807) Initial %flip implementation
1 parent ca3611f commit 2683b0e

3 files changed

Lines changed: 77 additions & 0 deletions

File tree

HyperNerd.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ executable HyperNerd
108108
, Bot.Asciify
109109
, Free
110110
, OrgMode
111+
, Bot.Flip
111112

112113
-- LANGUAGE extensions used by modules in this package.
113114
other-extensions: OverloadedStrings

src/Bot/CustomCommand.hs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import Property
3030
import Reaction
3131
import Text.InterpolatedString.QM
3232
import Transport
33+
import Bot.Flip
3334

3435
data CustomCommand = CustomCommand
3536
{ customCommandName :: T.Text
@@ -179,6 +180,8 @@ evalExpr vars (FunCallExpr "or" args) =
179180
fromMaybe "" $ listToMaybe $ dropWhile T.null $ map (evalExpr vars) args
180181
evalExpr vars (FunCallExpr "urlencode" args) =
181182
T.concat $ map (T.pack . URI.encode . T.unpack . evalExpr vars) args
183+
evalExpr vars (FunCallExpr "flip" args) =
184+
T.concat $ map (flipText . evalExpr vars) args
182185
evalExpr vars (FunCallExpr funame _) = fromMaybe "" $ M.lookup funame vars
183186

184187
expandVars :: M.Map T.Text T.Text -> [Expr] -> T.Text

src/Bot/Flip.hs

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
module Bot.Flip where
2+
3+
import qualified Data.Map as M
4+
import qualified Data.Text as T
5+
import Data.Maybe
6+
7+
-- https://github.com/doherty/Text-UpsideDown/blob/master/lib/Text/UpsideDown.pm
8+
-- http://www.fileformat.info/convert/text/upside-down-map.htm
9+
10+
flipText :: T.Text -> T.Text
11+
flipText = T.map (\x -> fromMaybe x $ M.lookup x table) . T.reverse
12+
13+
table :: M.Map Char Char
14+
table =
15+
M.fromList
16+
[ ('\x0021', '\x00A1')
17+
, ('\x0022', '\x201E')
18+
, ('\x0026', '\x214B')
19+
, ('\x0027', '\x002C')
20+
, ('\x0028', '\x0029')
21+
, ('\x002E', '\x02D9')
22+
, ('\x0033', '\x0190')
23+
, ('\x0034', '\x152D')
24+
, ('\x0036', '\x0039')
25+
, ('\x0037', '\x2C62')
26+
, ('\x003B', '\x061B')
27+
, ('\x003C', '\x003E')
28+
, ('\x003F', '\x00BF')
29+
, ('\x0041', '\x2200')
30+
, ('\x0042', '\x10412')
31+
, ('\x0043', '\x2183')
32+
, ('\x0044', '\x25D6')
33+
, ('\x0045', '\x018E')
34+
, ('\x0046', '\x2132')
35+
, ('\x0047', '\x2141')
36+
, ('\x004A', '\x017F')
37+
, ('\x004B', '\x22CA')
38+
, ('\x004C', '\x2142')
39+
, ('\x004D', '\x0057')
40+
, ('\x004E', '\x1D0E')
41+
, ('\x0050', '\x0500')
42+
, ('\x0051', '\x038C')
43+
, ('\x0052', '\x1D1A')
44+
, ('\x0054', '\x22A5')
45+
, ('\x0055', '\x2229')
46+
, ('\x0056', '\x1D27')
47+
, ('\x0059', '\x2144')
48+
, ('\x005B', '\x005D')
49+
, ('\x005F', '\x203E')
50+
, ('\x0061', '\x0250')
51+
, ('\x0062', '\x0071')
52+
, ('\x0063', '\x0254')
53+
, ('\x0064', '\x0070')
54+
, ('\x0065', '\x01DD')
55+
, ('\x0066', '\x025F')
56+
, ('\x0067', '\x0183')
57+
, ('\x0068', '\x0265')
58+
, ('\x0069', '\x0131')
59+
, ('\x006A', '\x027E')
60+
, ('\x006B', '\x029E')
61+
, ('\x006C', '\x0283')
62+
, ('\x006D', '\x026F')
63+
, ('\x006E', '\x0075')
64+
, ('\x0072', '\x0279')
65+
, ('\x0074', '\x0287')
66+
, ('\x0076', '\x028C')
67+
, ('\x0077', '\x028D')
68+
, ('\x0079', '\x028E')
69+
, ('\x007B', '\x007D')
70+
, ('\x203F', '\x2040')
71+
, ('\x2045', '\x2046')
72+
, ('\x2234', '\x2235')
73+
]

0 commit comments

Comments
 (0)