31 lines
913 B
Haskell
31 lines
913 B
Haskell
|
|
module Encoding.LetterToNumber
|
|
( encltn
|
|
, decltn
|
|
) where
|
|
|
|
import Data.Char (ord, chr, isAscii, isAlpha, isSpace, isDigit, toUpper)
|
|
import Data.ByteString (ByteString)
|
|
import qualified Data.ByteString.Char8 as BC
|
|
|
|
-- This encodes ASCII characters only and ignores all other characters
|
|
|
|
charToNumber :: Char -> ByteString
|
|
charToNumber c
|
|
| not (isAscii c) = BC.pack ""
|
|
| isAlpha c = BC.pack $ show $ ord (toUpper c) - ord 'A' + 1
|
|
| isSpace c = BC.pack "0"
|
|
| otherwise = BC.singleton c
|
|
|
|
numberToChar :: ByteString -> ByteString
|
|
numberToChar s
|
|
| s == BC.pack "0" = BC.singleton ' '
|
|
| BC.all isDigit s = BC.singleton $ chr $ (read $ BC.unpack s) + ord 'A' - 1
|
|
| otherwise = s
|
|
|
|
encltn :: ByteString -> ByteString
|
|
encltn input = BC.unwords $ filter (not . BC.null) $ map charToNumber $ BC.unpack input
|
|
|
|
decltn :: ByteString -> ByteString
|
|
decltn input = BC.concat $ map numberToChar $ BC.words input
|