added bindings for morse code, bug fix
This commit is contained in:
parent
3bd5530544
commit
b60acf2008
|
@ -23,6 +23,7 @@ import Encoding.UnixToUnix (encuu, decuu)
|
||||||
import Encoding.Yenc (ency, decy)
|
import Encoding.Yenc (ency, decy)
|
||||||
import Encoding.LetterToNumber (encltn, decltn)
|
import Encoding.LetterToNumber (encltn, decltn)
|
||||||
import Encoding.Rotate (rotate)
|
import Encoding.Rotate (rotate)
|
||||||
|
import Encoding.Morse (encmorse, decmorse)
|
||||||
import Encoding.Solve (solveEnc)
|
import Encoding.Solve (solveEnc)
|
||||||
|
|
||||||
|
|
||||||
|
@ -46,6 +47,7 @@ data Based = Decode {
|
||||||
yenc :: Bool,
|
yenc :: Bool,
|
||||||
a1z26 :: Bool,
|
a1z26 :: Bool,
|
||||||
rot :: Maybe Int,
|
rot :: Maybe Int,
|
||||||
|
morse :: Bool,
|
||||||
solve :: Bool
|
solve :: Bool
|
||||||
}
|
}
|
||||||
| Encode {
|
| Encode {
|
||||||
|
@ -67,6 +69,7 @@ data Based = Decode {
|
||||||
xx :: Bool,
|
xx :: Bool,
|
||||||
yenc :: Bool,
|
yenc :: Bool,
|
||||||
a1z26 :: Bool,
|
a1z26 :: Bool,
|
||||||
|
morse :: Bool,
|
||||||
rot :: Maybe Int
|
rot :: Maybe Int
|
||||||
}
|
}
|
||||||
deriving(Show, Data, Typeable)
|
deriving(Show, Data, Typeable)
|
||||||
|
@ -111,6 +114,8 @@ optionHandler Decode{a1z26=True} = decltn
|
||||||
optionHandler Encode{a1z26=True} = encltn
|
optionHandler Encode{a1z26=True} = encltn
|
||||||
optionHandler Decode{rot=Just n} = rotate n
|
optionHandler Decode{rot=Just n} = rotate n
|
||||||
optionHandler Encode{rot=Just n} = rotate n
|
optionHandler Encode{rot=Just n} = rotate n
|
||||||
|
optionHandler Decode{morse=True} = decmorse
|
||||||
|
optionHandler Encode{morse=True} = encmorse
|
||||||
optionHandler Decode{solve=True} = solveEnc
|
optionHandler Decode{solve=True} = solveEnc
|
||||||
|
|
||||||
decodeMode :: Based
|
decodeMode :: Based
|
||||||
|
@ -134,6 +139,7 @@ decodeMode = Decode {
|
||||||
yenc = def &= help "decode yEncode",
|
yenc = def &= help "decode yEncode",
|
||||||
a1z26 = def &= help "decode letter to number",
|
a1z26 = def &= help "decode letter to number",
|
||||||
rot = def &= help "rotate characters by n positions",
|
rot = def &= help "rotate characters by n positions",
|
||||||
|
morse = def &= help "decode morse",
|
||||||
solve = def &= help "solve encoding"
|
solve = def &= help "solve encoding"
|
||||||
} &= help "Decode chosen base" &=auto
|
} &= help "Decode chosen base" &=auto
|
||||||
|
|
||||||
|
@ -157,7 +163,8 @@ encodeMode = Encode {
|
||||||
xx = def &= help "encode xx, without padding",
|
xx = def &= help "encode xx, without padding",
|
||||||
yenc = def &= help "encode yEncode",
|
yenc = def &= help "encode yEncode",
|
||||||
a1z26 = def &= help "encode letter to number",
|
a1z26 = def &= help "encode letter to number",
|
||||||
rot = def &= help "rotate characters by n positions"
|
rot = def &= help "rotate characters by n positions",
|
||||||
|
morse = def &= help "encode morse"
|
||||||
} &= help "Encode chosen base"
|
} &= help "Encode chosen base"
|
||||||
|
|
||||||
main :: IO()
|
main :: IO()
|
||||||
|
|
|
@ -5,13 +5,14 @@ module Encoding.Morse
|
||||||
|
|
||||||
import Text.Morse as M
|
import Text.Morse as M
|
||||||
import Data.ByteString (ByteString)
|
import Data.ByteString (ByteString)
|
||||||
|
import Data.Char (isSpace)
|
||||||
import qualified Data.ByteString.Char8 as BC
|
import qualified Data.ByteString.Char8 as BC
|
||||||
|
|
||||||
encmorse :: ByteString -> ByteString
|
encmorse :: ByteString -> ByteString
|
||||||
encmorse input = BC.pack $ encodeValidMorseChars (BC.unpack input)
|
encmorse input = BC.pack $ encodeValidMorseChars (BC.unpack input)
|
||||||
where
|
where
|
||||||
encodeValidMorseChars :: String -> String
|
encodeValidMorseChars :: String -> String
|
||||||
encodeValidMorseChars = concatMap (\c -> if canEncodeToMorse c then M.encodeMorse [c] else "")
|
encodeValidMorseChars = concatMap (\c -> M.encodeMorse [c])
|
||||||
|
|
||||||
decmorse :: ByteString -> ByteString
|
decmorse :: ByteString -> ByteString
|
||||||
decmorse input = case M.decodeMorse (BC.unpack input) of
|
decmorse input = case M.decodeMorse (BC.unpack input) of
|
||||||
|
|
Loading…
Reference in New Issue