content: {- |
  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
  