packages feed

GGg-0.1.0.2: src/Conversions.hs

module Conversions
( asciiTextToG
, gTextToAscii
) where

import qualified Data.Bimap as Bimap
import Data.Maybe (fromMaybe)

asciiToG :: Char -> String
asciiToG a = fromMaybe [a] $ Bimap.lookup a lookupTable

gToAscii :: String -> Char
gToAscii g = fromMaybe (g !! 0) $ Bimap.lookupR g lookupTable

asciiTextToG :: String -> String
asciiTextToG  = drop 1
              . foldl (++) ""
              . map (\c -> (if c == ' ' then "" else " ") ++ asciiToG c)

gTextToAscii :: String -> String
gTextToAscii = foldr (:) ""
             . map gToAscii
             . words
             . concatMap id
             . map (\c -> if c == ',' then " ," else [c])

lookupTable :: Bimap.Bimap Char String
lookupTable =
    Bimap.fromList [ ('a', "gG")
                   , ('b', "Gggg")
                   , ('c', "GgGg")
                   , ('d', "Ggg")
                   , ('e', "g")
                   , ('f', "ggGg")
                   , ('g', "GGg")
                   , ('h', "gggg")
                   , ('i', "gg")
                   , ('j', "gGGG")
                   , ('k', "GgG")
                   , ('l', "gGgg")
                   , ('m', "GG")
                   , ('n', "Gg")
                   , ('o', "GGG")
                   , ('p', "gGGg")
                   , ('q', "GGgG")
                   , ('r', "gGg")
                   , ('s', "ggg")
                   , ('t', "G")
                   , ('u', "ggG")
                   , ('v', "gggG")
                   , ('w', "gGG")
                   , ('x', "GggG")
                   , ('y', "GgGG")
                   , ('z', "GGgg")
                   , ('A', "g-gG")
                   , ('B', "g-Gggg")
                   , ('C', "g-GgGg")
                   , ('D', "g-Ggg")
                   , ('E', "g-g")
                   , ('F', "g-ggGg")
                   , ('G', "g-GGg")
                   , ('H', "g-gggg")
                   , ('I', "g-gg")
                   , ('J', "g-gGGG")
                   , ('K', "g-GgG")
                   , ('L', "g-gGgg")
                   , ('M', "g-GG")
                   , ('N', "g-Gg")
                   , ('O', "g-GGG")
                   , ('P', "g-gGGg")
                   , ('Q', "g-GGgG")
                   , ('R', "g-gGg")
                   , ('S', "g-ggg")
                   , ('T', "g-G")
                   , ('U', "g-ggG")
                   , ('V', "g-gggG")
                   , ('W', "g-gGG")
                   , ('X', "g-GggG")
                   , ('Y', "g-GgGG")
                   , ('Z', "g-GGgg")
                   , ('0', "GGGGG")
                   , ('1', "gGGGG")
                   , ('2', "ggGGG")
                   , ('3', "gggGG")
                   , ('4', "ggggG")
                   , ('5', "ggggg")
                   , ('6', "Ggggg")
                   , ('7', "GGggg")
                   , ('8', "GGGgg")
                   , ('9', "GGGGg")
                   , ('.', "g'gG")
                   , (',', "g'Gg")
                   , (':', "g'GG")
                   , (';', "g'gg")
                   , ('!', "ggGGg")
                   , ('?', "ggGGgg")
                   , ('\'', "gGGGGg")
                   , ('-', "GggggG")
                   , ('/', "GggGg")
                   , ('"', "gGggGg")
                   , ('@', "gGGgGg")
                   , ('#', "GggGgGgG")
                   , ('$', "GGGGgGgG")
                   , ('%', "gGGggggg")
                   , ('^', "ggGGgggG")
                   , ('&', "GggGgggg")
                   , ('*', "GGgGgggg")
                   , ('|', "ggggggggg")
                   , ('(', "ggggggggG")
                   , (')', "gggggggGg")
                   , ('[', "gggggggGG")
                   , (']', "ggggggGgg")
                   , ('{', "ggggggGgG")
                   , ('}', "ggggggGGg")
                   , ('<', "ggggggGGG")
                   , ('>', "gggggGggg")
                   , ('\\', "gggggGggG")
                   , ('`', "gggggGgGg")
                   , ('~', "gggggGgGG")
                   , ('=', "GgggG")
                   , ('_', "ggGGgG")
                   , (' ', ",")
                   ]