module Codec.Text.Raw(
hexdump,
hexdumpBy,
) where
import Data.List
import Codec.Utils
import Numeric
import Text.PrettyPrint
split :: Int -> [a] -> [[a]]
split :: forall a. Int -> [a] -> [[a]]
split Int
n [a]
xs = forall b a. (b -> Maybe (a, b)) -> b -> [a]
unfoldr (forall a. Int -> [a] -> Maybe ([a], [a])
g Int
n) [a]
xs
g :: Int -> [a] -> Maybe ([a],[a])
g :: forall a. Int -> [a] -> Maybe ([a], [a])
g Int
n [] = forall a. Maybe a
Nothing
g Int
n [a]
y = forall a. a -> Maybe a
Just (forall a. Int -> [a] -> ([a], [a])
splitAt Int
n [a]
y)
sh :: a -> [Char]
sh a
x | a
x forall a. Ord a => a -> a -> Bool
< a
16 = Char
'0'forall a. a -> [a] -> [a]
:(forall a. (Integral a, Show a) => a -> ShowS
showHex a
x [Char]
"")
| Bool
otherwise = forall a. (Integral a, Show a) => a -> ShowS
showHex a
x [Char]
""
type OctetsPerLine = Int
hexdump :: OctetsPerLine -> [Octet] -> Doc
hexdump :: Int -> [Octet] -> Doc
hexdump Int
n =
[Doc] -> Doc
vcat forall b c a. (b -> c) -> (a -> b) -> a -> c
.
forall a b. (a -> b) -> [a] -> [b]
map [Doc] -> Doc
hcat forall b c a. (b -> c) -> (a -> b) -> a -> c
.
forall a b. (a -> b) -> [a] -> [b]
map (forall a. a -> [a] -> [a]
intersperse Doc
colon) forall b c a. (b -> c) -> (a -> b) -> a -> c
.
forall a b. (a -> b) -> [a] -> [b]
map (forall a b. (a -> b) -> [a] -> [b]
map ([Char] -> Doc
text forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {a}. (Integral a, Show a) => a -> [Char]
sh)) forall b c a. (b -> c) -> (a -> b) -> a -> c
.
forall a. Int -> [a] -> [[a]]
split Int
n
hexdumpBy :: String -> OctetsPerLine -> [Octet] -> Doc
hexdumpBy :: [Char] -> Int -> [Octet] -> Doc
hexdumpBy [Char]
s Int
n =
[Doc] -> Doc
vcat forall b c a. (b -> c) -> (a -> b) -> a -> c
.
forall a b. (a -> b) -> [a] -> [b]
map [Doc] -> Doc
hcat forall b c a. (b -> c) -> (a -> b) -> a -> c
.
forall a b. (a -> b) -> [a] -> [b]
map (forall a. a -> [a] -> [a]
intersperse ([Char] -> Doc
text [Char]
s)) forall b c a. (b -> c) -> (a -> b) -> a -> c
.
forall a b. (a -> b) -> [a] -> [b]
map (forall a b. (a -> b) -> [a] -> [b]
map ([Char] -> Doc
text forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall {a}. (Integral a, Show a) => a -> [Char]
sh)) forall b c a. (b -> c) -> (a -> b) -> a -> c
.
forall a. Int -> [a] -> [[a]]
split Int
n