ampersand-3.0.3: src/Database/Design/Ampersand/Basics/String.hs
-- | This module contains some common String funcions
module Database.Design.Ampersand.Basics.String (unCap,upCap,escapeNonAlphaNum) where
import Data.Char
-- | Converts the first character of a string to lowercase, with the exception that there is a second character, which is uppercase.
-- uncap "AbcDe" == "abcDe"
-- uncap "ABcDE" == "ABcDE"
unCap :: String -> String
unCap [] = []
unCap [h] = [toLower h]
unCap (h:h':t) | isUpper h' = h:h':t
| otherwise = toLower h:h':t
-- | Converts the first character of a string to uppercase
upCap :: String -> String
upCap [] = []
upCap (h:t) = toUpper h:t
-- | escape anything except regular characters and digits to _<character code>
-- e.g. escapeNonAlphaNum "a_é" = "a_95_233"
escapeNonAlphaNum :: String -> String
escapeNonAlphaNum = concatMap escapeNonAlphaNumChar
where escapeNonAlphaNumChar c
| isAlphaNum c && isAscii c = [c]
| otherwise = '_' : show (ord c)