2022-08-03 18:02:13 +03:00
|
|
|
(* This file is part of the Catala compiler, a specification language for tax
|
|
|
|
and social benefits computation rules. Copyright (C) 2020 Inria, contributor:
|
|
|
|
Denis Merigoux <denis.merigoux@inria.fr>, Emile Rolley <emile.rolley@tuta.io>
|
|
|
|
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
|
|
|
use this file except in compliance with the License. You may obtain a copy of
|
|
|
|
the License at
|
|
|
|
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
|
|
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
|
|
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
|
|
License for the specific language governing permissions and limitations under
|
|
|
|
the License. *)
|
|
|
|
|
2022-11-21 13:17:42 +03:00
|
|
|
include Stdlib.String
|
|
|
|
|
2022-08-03 18:02:13 +03:00
|
|
|
let to_ascii : string -> string = Ubase.from_utf8
|
2022-11-24 20:00:45 +03:00
|
|
|
let is_uppercase_ascii = function 'A' .. 'Z' -> true | _ -> false
|
2022-08-03 18:02:13 +03:00
|
|
|
|
|
|
|
let begins_with_uppercase (s : string) : bool =
|
2022-11-21 13:17:42 +03:00
|
|
|
"" <> s && is_uppercase_ascii (get (to_ascii s) 0)
|
2022-08-03 18:02:13 +03:00
|
|
|
|
|
|
|
let to_snake_case (s : string) : string =
|
|
|
|
let out = ref "" in
|
|
|
|
to_ascii s
|
2022-11-21 13:17:42 +03:00
|
|
|
|> iteri (fun i c ->
|
2022-08-03 18:02:13 +03:00
|
|
|
out :=
|
|
|
|
!out
|
2022-08-05 19:18:06 +03:00
|
|
|
^ (if is_uppercase_ascii c && 0 <> i then "_" else "")
|
2022-11-21 13:17:42 +03:00
|
|
|
^ lowercase_ascii (make 1 c));
|
2022-08-03 18:02:13 +03:00
|
|
|
!out
|
|
|
|
|
|
|
|
let to_camel_case (s : string) : string =
|
|
|
|
let last_was_underscore = ref false in
|
|
|
|
let out = ref "" in
|
|
|
|
to_ascii s
|
2022-11-21 13:17:42 +03:00
|
|
|
|> iteri (fun i c ->
|
2022-08-03 18:02:13 +03:00
|
|
|
let is_underscore = c = '_' in
|
2022-11-21 13:17:42 +03:00
|
|
|
let c_string = make 1 c in
|
2022-08-03 18:02:13 +03:00
|
|
|
out :=
|
|
|
|
!out
|
|
|
|
^
|
|
|
|
if is_underscore then ""
|
2022-11-24 20:00:45 +03:00
|
|
|
else if !last_was_underscore || 0 = i then uppercase_ascii c_string
|
2022-08-03 18:02:13 +03:00
|
|
|
else c_string;
|
|
|
|
last_was_underscore := is_underscore);
|
|
|
|
!out
|
2022-11-22 22:57:59 +03:00
|
|
|
|
|
|
|
let format_t = Format.pp_print_string
|
|
|
|
|
|
|
|
module Set = Set.Make (Stdlib.String)
|
|
|
|
module Map = Map.Make (Stdlib.String)
|