From 2683b0e5b2f2f6ff64e92419e69f6886fb5b06ac Mon Sep 17 00:00:00 2001 From: rexim Date: Fri, 22 Nov 2019 02:14:48 +0700 Subject: [PATCH 1/2] (#807) Initial %flip implementation --- HyperNerd.cabal | 1 + src/Bot/CustomCommand.hs | 3 ++ src/Bot/Flip.hs | 73 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 77 insertions(+) create mode 100644 src/Bot/Flip.hs diff --git a/HyperNerd.cabal b/HyperNerd.cabal index 989ef13..8b11ba1 100644 --- a/HyperNerd.cabal +++ b/HyperNerd.cabal @@ -108,6 +108,7 @@ executable HyperNerd , Bot.Asciify , Free , OrgMode + , Bot.Flip -- LANGUAGE extensions used by modules in this package. other-extensions: OverloadedStrings diff --git a/src/Bot/CustomCommand.hs b/src/Bot/CustomCommand.hs index 4adb912..2cdce92 100644 --- a/src/Bot/CustomCommand.hs +++ b/src/Bot/CustomCommand.hs @@ -30,6 +30,7 @@ import Property import Reaction import Text.InterpolatedString.QM import Transport +import Bot.Flip data CustomCommand = CustomCommand { customCommandName :: T.Text @@ -179,6 +180,8 @@ evalExpr vars (FunCallExpr "or" args) = fromMaybe "" $ listToMaybe $ dropWhile T.null $ map (evalExpr vars) args evalExpr vars (FunCallExpr "urlencode" args) = T.concat $ map (T.pack . URI.encode . T.unpack . evalExpr vars) args +evalExpr vars (FunCallExpr "flip" args) = + T.concat $ map (flipText . evalExpr vars) args evalExpr vars (FunCallExpr funame _) = fromMaybe "" $ M.lookup funame vars expandVars :: M.Map T.Text T.Text -> [Expr] -> T.Text diff --git a/src/Bot/Flip.hs b/src/Bot/Flip.hs new file mode 100644 index 0000000..5c90d82 --- /dev/null +++ b/src/Bot/Flip.hs @@ -0,0 +1,73 @@ +module Bot.Flip where + +import qualified Data.Map as M +import qualified Data.Text as T +import Data.Maybe + +-- https://github.com/doherty/Text-UpsideDown/blob/master/lib/Text/UpsideDown.pm +-- http://www.fileformat.info/convert/text/upside-down-map.htm + +flipText :: T.Text -> T.Text +flipText = T.map (\x -> fromMaybe x $ M.lookup x table) . T.reverse + +table :: M.Map Char Char +table = + M.fromList + [ ('\x0021', '\x00A1') + , ('\x0022', '\x201E') + , ('\x0026', '\x214B') + , ('\x0027', '\x002C') + , ('\x0028', '\x0029') + , ('\x002E', '\x02D9') + , ('\x0033', '\x0190') + , ('\x0034', '\x152D') + , ('\x0036', '\x0039') + , ('\x0037', '\x2C62') + , ('\x003B', '\x061B') + , ('\x003C', '\x003E') + , ('\x003F', '\x00BF') + , ('\x0041', '\x2200') + , ('\x0042', '\x10412') + , ('\x0043', '\x2183') + , ('\x0044', '\x25D6') + , ('\x0045', '\x018E') + , ('\x0046', '\x2132') + , ('\x0047', '\x2141') + , ('\x004A', '\x017F') + , ('\x004B', '\x22CA') + , ('\x004C', '\x2142') + , ('\x004D', '\x0057') + , ('\x004E', '\x1D0E') + , ('\x0050', '\x0500') + , ('\x0051', '\x038C') + , ('\x0052', '\x1D1A') + , ('\x0054', '\x22A5') + , ('\x0055', '\x2229') + , ('\x0056', '\x1D27') + , ('\x0059', '\x2144') + , ('\x005B', '\x005D') + , ('\x005F', '\x203E') + , ('\x0061', '\x0250') + , ('\x0062', '\x0071') + , ('\x0063', '\x0254') + , ('\x0064', '\x0070') + , ('\x0065', '\x01DD') + , ('\x0066', '\x025F') + , ('\x0067', '\x0183') + , ('\x0068', '\x0265') + , ('\x0069', '\x0131') + , ('\x006A', '\x027E') + , ('\x006B', '\x029E') + , ('\x006C', '\x0283') + , ('\x006D', '\x026F') + , ('\x006E', '\x0075') + , ('\x0072', '\x0279') + , ('\x0074', '\x0287') + , ('\x0076', '\x028C') + , ('\x0077', '\x028D') + , ('\x0079', '\x028E') + , ('\x007B', '\x007D') + , ('\x203F', '\x2040') + , ('\x2045', '\x2046') + , ('\x2234', '\x2235') + ] From ffe4ba4fabafff01cae327ed59ff67219ac5537d Mon Sep 17 00:00:00 2001 From: rexim Date: Fri, 22 Nov 2019 02:15:27 +0700 Subject: [PATCH 2/2] (#807) Fix hindent remarks --- src/Bot/CustomCommand.hs | 2 +- src/Bot/Flip.hs | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Bot/CustomCommand.hs b/src/Bot/CustomCommand.hs index 2cdce92..d4f85b1 100644 --- a/src/Bot/CustomCommand.hs +++ b/src/Bot/CustomCommand.hs @@ -12,6 +12,7 @@ module Bot.CustomCommand ) where import Bot.Expr +import Bot.Flip import Bot.Replies import Command import Control.Monad @@ -30,7 +31,6 @@ import Property import Reaction import Text.InterpolatedString.QM import Transport -import Bot.Flip data CustomCommand = CustomCommand { customCommandName :: T.Text diff --git a/src/Bot/Flip.hs b/src/Bot/Flip.hs index 5c90d82..b0581b6 100644 --- a/src/Bot/Flip.hs +++ b/src/Bot/Flip.hs @@ -1,12 +1,11 @@ module Bot.Flip where import qualified Data.Map as M -import qualified Data.Text as T import Data.Maybe +import qualified Data.Text as T -- https://github.com/doherty/Text-UpsideDown/blob/master/lib/Text/UpsideDown.pm -- http://www.fileformat.info/convert/text/upside-down-map.htm - flipText :: T.Text -> T.Text flipText = T.map (\x -> fromMaybe x $ M.lookup x table) . T.reverse