{- |
Module : ./atermlib/src/ATerm/Base64.hs
Description : Base64 character conversions
Copyright : (c) Ian Lynagh, 2005, 2007, Christian Maeder, DFKI GmbH 2008
License : GPLv2 or higher, see LICENSE.txt
Maintainer : Christian.Maeder@dfki.de
Stability : provisional
Portability : portable
base64 character conversions
-}
module ATerm.Base64
( toBase64Int
, toBase64Char
, isBase64Char
, ord0
) where
import Data.Char
{-
toBase64 :: [Char]
toBase64 =
[ 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P',
'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f',
'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v',
'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/'
]
-}
toBase64Int :: Char -> Int
toBase64Int c
| isUpper c = ord c - ordA
| isLower c = ord c - i71
| isDigit c = ord c + i4
| c == '+' = 62
| c == '/' = 63
| otherwise = error "toBase64Int"
toBase64Char :: Int -> Char
toBase64Char i
| i < 26 = chr (ordA + i)
| i < 52 = chr (i71 + i)
| i < 62 = chr (i - i4)
| i == 62 = '+'
| i == 63 = '/'
| otherwise = error "toBase64Char"
isBase64Char :: Char -> Bool
isBase64Char c = isAscii c && (isAlphaNum c || c == '+' || c == '/')
-- a couple of constants
ordA :: Int
ordA = ord 'A'
i71 :: Int
i71 = ord 'a' - 26
ord0 :: Int
ord0 = ord '0'
i4 :: Int
i4 = 52 - ord0