Sha256: 06f600c8b96ce0b4b4e73feadb8686f2641348320ad89aa5708929bc00b9a0b4
Contents?: true
Size: 1.45 KB
Versions: 3
Compression:
Stored size: 1.45 KB
Contents
{-# LANGUAGE PatternGuards #-} module Language.Ruby.Hubris.ZCode (zenc,zdec,Zname(..)) where import Data.Char import Data.Ix import qualified Data.Map as M import Numeric zemap :: M.Map Char String zemap = M.fromList $ [ ('(', "ZL") , (')', "ZR") , ('[', "ZM") , (']', "ZN") , (':', "ZC") , ('Z', "ZZ") , ('z', "zz") , ('&', "za") , ('|', "zb") , ('^', "zc") , ('$', "zd") , ('=', "ze") , ('>', "zg") , ('#', "zh") , ('.', "zi") , ('<', "zl") , ('-', "zm") , ('!', "zn") , ('+', "zp") , ('\'', "zq") , ('\\', "zr") , ('/', "zs") , ('*', "zt") , ('_', "zu") , ('%', "zv") ] zdmap :: M.Map String Char zdmap = M.fromList . map (\(a, b) -> (b, a)) . M.toList $ zemap newtype Zname = Zname String zenc :: String -> Zname zenc s = Zname $ concatMap (\c -> M.findWithDefault (z c) c zemap) s where z c | any (($ c) . inRange) [('a', 'y'), ('A', 'Z'), ('0', '9')] = [c] | otherwise = let s = showHex (ord c) "U" p = if inRange ('0', '9') (head s) then id else ('0' :) in 'z' : p s zdec :: String -> String zdec "" = "" zdec [c] = [c] zdec (c : cs@(c' : cs')) | c `elem` "zZ" , Just x <- M.lookup [c, c'] zdmap = x : zdec cs' | c == 'z' , (h@(_ : _), 'U' : t) <- span isHexDigit cs , [(n, "")] <- readHex h = chr n : zdec t | otherwise = c : zdec cs
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
hubris-0.0.6 | Haskell/Language/Ruby/Hubris/ZCode.hs |
hubris-0.0.5 | Haskell/Language/Ruby/Hubris/ZCode.hs |
hubris-0.0.4 | Haskell/Language/Ruby/Hubris/ZCode.hs |