packages feed

mediawiki2latex-7.6: src/Hex.hs

module Hex where
import Data.Char
import Data.Map hiding (map)
import Data.Maybe
 
nums :: [Int]
nums = [0 .. 15]
 
chars :: [Char]
chars = (['0' .. '9'] ++ ['A' .. 'F'])
 
fromm :: Map Int Char
fromm = fromList $ zip nums chars
 
tom :: Map Char Int
tom = fromList $ zip chars nums
 
hexChar :: Char -> String
hexChar c
  = concat
      (map
         (\ i ->
            fromMaybe ""
              ((Data.Map.lookup
                  ((if (i == 0) then (ord c) else (ord c) `div` (16 ^ i)) `mod`
                     (16 :: Int))
                  fromm)
                 >>= (\ x -> return [x])))
         (reverse [0 .. 7] :: [Int]))
 
hex :: String -> String
hex s = concat (map hexChar s)
 
unhex :: String -> String
unhex (a : (b : (c : (d : (e : (f : (g : (h : xs))))))))
  = (chr
       (sum
          (map
             (\ (i, cc) -> (16 ^ i) * (fromMaybe 0 (Data.Map.lookup cc tom)))
             (zip (reverse [0 .. 7] :: [Int]) [a, b, c, d, e, f, g, h]))))
      : (unhex xs)
unhex _ = []