changed octal encoding to bytestring instead of string
This commit is contained in:
parent
b91f110f42
commit
a472d309a6
14
app/Main.hs
14
app/Main.hs
|
@ -11,7 +11,7 @@ import qualified Data.ByteString as B
|
|||
import qualified Data.ByteString.Char8 as BC
|
||||
--import Text.Regex.TDFA
|
||||
--import Encoding.Base2 (enc2, dec2)
|
||||
--import Encoding.Base8 (enc8, dec8)
|
||||
import Encoding.Base8 (enc8, dec8)
|
||||
import Encoding.Base10 (enc10, dec10)
|
||||
import Encoding.Base16 (enc16, dec16)
|
||||
import Encoding.Base32 (enc32, dec32)
|
||||
|
@ -41,7 +41,7 @@ data Based = Decode {
|
|||
b32 :: Bool,
|
||||
b16 :: Bool,
|
||||
b10 :: Bool,
|
||||
-- b8 :: Bool,
|
||||
b8 :: Bool,
|
||||
-- b2 :: Bool,
|
||||
qp :: Bool,
|
||||
uu :: Bool,
|
||||
|
@ -62,7 +62,7 @@ data Based = Decode {
|
|||
b32 :: Bool,
|
||||
b16 :: Bool,
|
||||
b10 :: Bool,
|
||||
-- b8 :: Bool,
|
||||
b8 :: Bool,
|
||||
-- b2 :: Bool,
|
||||
qp :: Bool,
|
||||
uu :: Bool,
|
||||
|
@ -173,8 +173,8 @@ optionHandler Decode{b16=True} = dec16
|
|||
optionHandler Encode{b16=True} = enc16
|
||||
optionHandler Decode{b10=True} = dec10
|
||||
optionHandler Encode{b10=True} = enc10
|
||||
--optionHandler Decode{b8=True} = dec8
|
||||
--optionHandler Encode{b8=True} = enc8
|
||||
optionHandler Decode{b8=True} = dec8
|
||||
optionHandler Encode{b8=True} = enc8
|
||||
--optionHandler Decode{b2=True} = dec2
|
||||
--optionHandler Encode{b2=True} = enc2
|
||||
optionHandler Decode{qp=True} = decqp
|
||||
|
@ -202,7 +202,7 @@ decodeMode = Decode {
|
|||
b32 = def &= help "decode base32",
|
||||
b16 = def &= help "decode base16",
|
||||
b10 = def &= help "decode decimal from hex",
|
||||
-- b8 = def &= help "decode octal from hex",
|
||||
b8 = def &= help "decode octal from hex",
|
||||
-- b2 = def &= help "decode binary from hex",
|
||||
qp = def &= help "decode quoted-printable",
|
||||
uu = def &= help "decode uu",
|
||||
|
@ -225,7 +225,7 @@ encodeMode = Encode {
|
|||
b32 = def &= help "encode base32",
|
||||
b16 = def &= help "encode base16",
|
||||
b10 = def &= help "encode base10 to hex",
|
||||
-- b8 = def &= help "encode octal to hex",
|
||||
b8 = def &= help "encode octal to hex",
|
||||
-- b2 = def &= help "encode binary to hex",
|
||||
qp = def &= help "encode quoted-printable",
|
||||
uu = def &= help "encode uu",
|
||||
|
|
|
@ -1,30 +1,60 @@
|
|||
-- module Encoding.Base8
|
||||
-- ( enc8
|
||||
-- , dec8
|
||||
-- ) where
|
||||
|
||||
-- import Data.Char (ord, chr, intToDigit)
|
||||
|
||||
-- octalToChar :: String -> Char
|
||||
-- octalToChar octal = chr (read ("0o" ++ octal)) -- Assumes input is in base 8 (octal)
|
||||
|
||||
-- -- Function to split a string into chunks of three characters each
|
||||
-- chunksOf3 :: String -> [String]
|
||||
-- chunksOf3 [] = []
|
||||
-- chunksOf3 str = Prelude.take 3 str : chunksOf3 (Prelude.drop 3 str)
|
||||
|
||||
-- dec8 :: String -> String
|
||||
-- dec8 = map octalToChar . words
|
||||
|
||||
-- chunksOf :: Int -> [a] -> [[a]]
|
||||
-- chunksOf _ [] = []
|
||||
-- chunksOf n xs = Prelude.take n xs : chunksOf n (Prelude.drop n xs)
|
||||
|
||||
-- unicodeToOctal :: Char -> [String]
|
||||
-- unicodeToOctal c = chunksOf 3 $ reverse $ decimalToOctal' (ord c)
|
||||
-- where
|
||||
-- decimalToOctal' 0 = "0"
|
||||
-- decimalToOctal' m = let (q, r) = m `divMod` 8 in intToDigit r : if q == 0 then "" else decimalToOctal' q
|
||||
|
||||
-- enc8 :: String -> String
|
||||
-- enc8 = unwords . concatMap unicodeToOctal
|
||||
|
||||
module Encoding.Base8
|
||||
( enc8
|
||||
, dec8
|
||||
) where
|
||||
|
||||
import Data.Char (ord, chr, intToDigit)
|
||||
import qualified Data.ByteString.Char8 as BC
|
||||
import Data.ByteString (ByteString)
|
||||
import qualified Data.ByteString as B
|
||||
|
||||
octalToChar :: String -> Char
|
||||
octalToChar octal = chr (read ("0o" ++ octal)) -- Assumes input is in base 8 (octal)
|
||||
octalToChar :: ByteString -> Char
|
||||
octalToChar octal = chr (read ("0o" ++ BC.unpack octal)) -- Assumes input is in base 8 (octal)
|
||||
|
||||
-- Function to split a string into chunks of three characters each
|
||||
chunksOf3 :: String -> [String]
|
||||
chunksOf3 [] = []
|
||||
chunksOf3 str = Prelude.take 3 str : chunksOf3 (Prelude.drop 3 str)
|
||||
chunksOf :: Int -> ByteString -> [ByteString]
|
||||
chunksOf n bs
|
||||
| B.null bs = []
|
||||
| otherwise = BC.take n bs : chunksOf n (BC.drop n bs)
|
||||
|
||||
dec8 :: String -> String
|
||||
dec8 = map octalToChar . words
|
||||
dec8 :: ByteString -> ByteString
|
||||
dec8 = BC.pack . map octalToChar . BC.words
|
||||
|
||||
chunksOf :: Int -> [a] -> [[a]]
|
||||
chunksOf _ [] = []
|
||||
chunksOf n xs = Prelude.take n xs : chunksOf n (Prelude.drop n xs)
|
||||
|
||||
unicodeToOctal :: Char -> [String]
|
||||
unicodeToOctal c = chunksOf 3 $ reverse $ decimalToOctal' (ord c)
|
||||
unicodeToOctal :: Char -> [ByteString]
|
||||
unicodeToOctal c = chunksOf 3 (BC.pack $ reverse $ decimalToOctal' (ord c))
|
||||
where
|
||||
decimalToOctal' 0 = "0"
|
||||
decimalToOctal' m = let (q, r) = m `divMod` 8 in intToDigit r : if q == 0 then "" else decimalToOctal' q
|
||||
|
||||
enc8 :: String -> String
|
||||
enc8 = unwords . concatMap unicodeToOctal
|
||||
enc8 :: ByteString -> ByteString
|
||||
enc8 = BC.unwords . concatMap unicodeToOctal . BC.unpack
|
||||
|
|
Loading…
Reference in New Issue