inflections-0.1.0.6: Text/Inflections/Camelize.hs
module Text.Inflections.Camelize ( camelize, camelizeCustom ) where
import Text.Inflections.Parse.Types (Word(..))
import Data.Char (toUpper, toLower)
-- |Turns a an input Word List in into CamelCase. Returns the CamelCase String.
camelize
:: [Word] -- ^ Input Words to separate with underscores
-> String -- ^ The camelized String
camelize ws = camelizeCustom True ws
-- |Turns an input Word List into a CamelCase String.
camelizeCustom
:: Bool -- ^ Whether to capitalize the first character in the output String
-> [Word] -- ^ The input Words
-> String -- ^ The camelized String
camelizeCustom isFirstCap = concatMap (caseForWord isFirstCap) . isFirstList
caseForWord :: Bool -> (Word, Bool) -> String
caseForWord True (Word (c:cs), True) = toUpper c : cs
caseForWord False (Word (c:cs), True) = toLower c : cs
caseForWord _ (Word (c:cs), _) = toUpper c : cs
caseForWord _ (Word [], _) = []
caseForWord _ (Acronym s, _) = s
-- |Returns list with Bool indicating if an element is first.
isFirstList :: [a] -> [(a, Bool)]
isFirstList xs = zip xs $ True : repeat False