feat(ident): normalise names into C macro identifiers
Uppercases, replaces non-alphanumerics with underscores, and derives the HAVE_X and SIZEOF_X forms the generated header uses.
This commit is contained in:
1 file changed
+18
@@ -0,0 +1,18 @@
|
||||
let cident s =
|
||||
let b = Buffer.create (String.length s + 4) in
|
||||
String.iter
|
||||
(fun c ->
|
||||
match c with
|
||||
| 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' -> Buffer.add_char b (Char.uppercase_ascii c)
|
||||
| '*' -> Buffer.add_string b "_P"
|
||||
| _ -> Buffer.add_char b '_')
|
||||
s;
|
||||
let raw = Buffer.contents b in
|
||||
let parts = String.split_on_char '_' raw |> List.filter (fun p -> p <> "") in
|
||||
String.concat "_" parts
|
||||
|
||||
let lower s = String.lowercase_ascii (cident s)
|
||||
let have s = "HAVE_" ^ cident s
|
||||
let have_var s = "have_" ^ lower s
|
||||
let sizeof_name s = "SIZEOF_" ^ cident s
|
||||
let sizeof_var s = "sizeof_" ^ lower s
|
||||
Reference in new issue
Block a user