From 7a823b16d8b39b3f466b35eff10d1cf4576e440f Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Sun, 18 Sep 2016 20:31:53 +0200 Subject: [PATCH] fix `CCString.*_ascii`; add `CCChar.{upper,lower}case_ascii` --- src/core/CCChar.ml | 10 ++++++++++ src/core/CCChar.mli | 8 ++++++++ src/core/CCString.cppo.ml | 18 ++++++++++++++---- 3 files changed, 32 insertions(+), 4 deletions(-) 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