diff --git a/src/core/CCChar.ml b/src/core/CCChar.ml index a1622930..460d2eed 100644 --- a/src/core/CCChar.ml +++ b/src/core/CCChar.ml @@ -11,3 +11,13 @@ let compare = Char.compare let pp = Buffer.add_char let print = Format.pp_print_char + +let lowercase_ascii c = + if c >= 'A' && c <= 'Z' + then Char.unsafe_chr (Char. code c + 32) + else c + +let uppercase_ascii c = + if c >= 'a' && c <= 'z' + then Char.unsafe_chr (Char.code c - 32) + else c diff --git a/src/core/CCChar.mli b/src/core/CCChar.mli index 1ca8dcd3..345049b2 100644 --- a/src/core/CCChar.mli +++ b/src/core/CCChar.mli @@ -9,5 +9,13 @@ type t = char val equal : t -> t -> bool val compare : t -> t -> int +val lowercase_ascii : t -> t +(** See {!Char} + @since NEXT_RELEASE *) + +val uppercase_ascii : t -> t +(** See {!Char} + @since NEXT_RELEASE *) + val pp : Buffer.t -> t -> unit val print : Format.formatter -> t -> unit diff --git a/src/core/CCString.cppo.ml b/src/core/CCString.cppo.ml index d29da1e6..61fa8240 100644 --- a/src/core/CCString.cppo.ml +++ b/src/core/CCString.cppo.ml @@ -651,10 +651,20 @@ let lowercase_ascii = String.lowercase_ascii #else -let capitalize_ascii = String.capitalize -let uncapitalize_ascii = String.uncapitalize -let uppercase_ascii = String.uppercase -let lowercase_ascii = String.lowercase +let capitalize_ascii s = + mapi + (fun i c -> if i=0 then CCChar.uppercase_ascii c else c) + s + + +let uncapitalize_ascii s = + mapi + (fun i c -> if i=0 then CCChar.lowercase_ascii c else c) + s + +let uppercase_ascii = map CCChar.uppercase_ascii + +let lowercase_ascii = map CCChar.lowercase_ascii #endif