aboutsummaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/strings/strings.odin357
1 files changed, 179 insertions, 178 deletions
diff --git a/core/strings/strings.odin b/core/strings/strings.odin
index 83bdbcca4..2c1c769df 100644
--- a/core/strings/strings.odin
+++ b/core/strings/strings.odin
@@ -1,6 +1,7 @@
package strings
import "core:mem"
+import "core:unicode"
import "core:unicode/utf8"
clone :: proc(s: string, allocator := context.allocator) -> string {
@@ -708,190 +709,190 @@ scrub :: proc(s: string, replacement: string, allocator := context.allocator) ->
}
to_snake_case :: proc(str: string, allocator := context.allocator) -> string {
- buf := make_builder(allocator);
-
- last_chars: [2]rune;
- for char, _ in str {
- switch char {
- case 'A'..'Z':
- switch last_chars[1] {
- case 'a'..'z', '0'..'9':
- write_rune(&buf, '_');
- case 'A'..'Z':
- write_rune(&buf, last_chars[1] + ('a'-'A'));
- }
- case 'a'..'z':
- switch last_chars[1] {
- case 'A'..'Z':
- switch last_chars[0] {
- case 'A'..'Z':
- write_rune(&buf, '_');
- }
- write_rune(&buf, last_chars[1] + ('a'-'A'));
- case '0'..'9':
- write_rune(&buf, '_');
- }
- write_rune(&buf, char);
- case '0'..'9':
- switch last_chars[1] {
- case 'A'..'Z':
- write_rune(&buf, last_chars[1] + ('a'-'A'));
- write_rune(&buf, '_');
- case 'a'..'z':
- write_rune(&buf, '_');
- }
- write_rune(&buf, char);
- case '_':
- switch last_chars[1] {
- case 'A'..'Z':
- write_rune(&buf, last_chars[1] + ('a'-'A'));
- }
- write_rune(&buf, char);
- case:
- unimplemented();
- }
-
- last_chars[0] = last_chars[1];
- last_chars[1] = char;
- }
-
- switch last_chars[1] {
- case 'A'..'Z':
- write_rune(&buf, last_chars[1] + ('a'-'A'));
- }
-
- return to_string(buf);
+ buf := make_builder(allocator);
+
+ last_chars: [2]rune;
+ for char, _ in str {
+ switch char {
+ case 'A'..'Z':
+ switch last_chars[1] {
+ case 'a'..'z', '0'..'9':
+ write_rune(&buf, '_');
+ case 'A'..'Z':
+ write_rune(&buf, last_chars[1] + ('a'-'A'));
+ }
+ case 'a'..'z':
+ switch last_chars[1] {
+ case 'A'..'Z':
+ switch last_chars[0] {
+ case 'A'..'Z':
+ write_rune(&buf, '_');
+ }
+ write_rune(&buf, last_chars[1] + ('a'-'A'));
+ case '0'..'9':
+ write_rune(&buf, '_');
+ }
+ write_rune(&buf, char);
+ case '0'..'9':
+ switch last_chars[1] {
+ case 'A'..'Z':
+ write_rune(&buf, last_chars[1] + ('a'-'A'));
+ write_rune(&buf, '_');
+ case 'a'..'z':
+ write_rune(&buf, '_');
+ }
+ write_rune(&buf, char);
+ case '_':
+ switch last_chars[1] {
+ case 'A'..'Z':
+ write_rune(&buf, last_chars[1] + ('a'-'A'));
+ }
+ write_rune(&buf, char);
+ case:
+ unimplemented();
+ }
+
+ last_chars[0] = last_chars[1];
+ last_chars[1] = char;
+ }
+
+ switch last_chars[1] {
+ case 'A'..'Z':
+ write_rune(&buf, last_chars[1] + ('a'-'A'));
+ }
+
+ return to_string(buf);
}
to_ada_case :: proc(str: string, allocator := context.allocator) -> string {
- buf := make_builder(allocator);
-
- last_chars: [2]rune;
- for char, _ in str {
- switch char {
- case 'A'..'Z':
- switch last_chars[1] {
- case 'a'..'z', '0'..'9':
- write_rune(&buf, '_');
- case 'A'..'Z':
- switch last_chars[0] {
- case '_', '\x00':
- write_rune(&buf, last_chars[1]);
- case:
- write_rune(&buf, last_chars[1] + ('a'-'A'));
- }
- }
- case 'a'..'z':
- switch last_chars[1] {
- case 'A'..'Z':
- switch last_chars[0] {
- case 'A'..'Z':
- write_rune(&buf, '_');
- write_rune(&buf, last_chars[1]);
- case:
- write_rune(&buf, last_chars[1]);
- }
- write_rune(&buf, char);
- case '0'..'9':
- write_rune(&buf, '_');
- write_rune(&buf, char);
- case 'a'..'z':
- write_rune(&buf, char);
- case '_', '\x00':
- write_rune(&buf, char - ('a'-'A'));
- }
- case '0'..'9':
- switch last_chars[1] {
- case 'A'..'Z':
- write_rune(&buf, last_chars[1] + ('a'-'A'));
- write_rune(&buf, '_');
- case 'a'..'z':
- write_rune(&buf, '_');
- }
- write_rune(&buf, char);
- case '_':
- switch last_chars[1] {
- case 'A'..'Z':
- write_rune(&buf, last_chars[1] + ('a'-'A'));
- }
- write_rune(&buf, char);
- case:
- write_rune(&buf, char);
- }
-
- last_chars[0] = last_chars[1];
- last_chars[1] = char;
- }
-
- switch last_chars[1] {
- case 'A'..'Z':
- write_rune(&buf, last_chars[1] + ('a'-'A'));
- }
-
- return to_string(buf);
+ buf := make_builder(allocator);
+
+ last_chars: [2]rune;
+ for char, _ in str {
+ switch char {
+ case 'A'..'Z':
+ switch last_chars[1] {
+ case 'a'..'z', '0'..'9':
+ write_rune(&buf, '_');
+ case 'A'..'Z':
+ switch last_chars[0] {
+ case '_', '\x00':
+ write_rune(&buf, last_chars[1]);
+ case:
+ write_rune(&buf, last_chars[1] + ('a'-'A'));
+ }
+ }
+ case 'a'..'z':
+ switch last_chars[1] {
+ case 'A'..'Z':
+ switch last_chars[0] {
+ case 'A'..'Z':
+ write_rune(&buf, '_');
+ write_rune(&buf, last_chars[1]);
+ case:
+ write_rune(&buf, last_chars[1]);
+ }
+ write_rune(&buf, char);
+ case '0'..'9':
+ write_rune(&buf, '_');
+ write_rune(&buf, char);
+ case 'a'..'z':
+ write_rune(&buf, char);
+ case '_', '\x00':
+ write_rune(&buf, char - ('a'-'A'));
+ }
+ case '0'..'9':
+ switch last_chars[1] {
+ case 'A'..'Z':
+ write_rune(&buf, last_chars[1] + ('a'-'A'));
+ write_rune(&buf, '_');
+ case 'a'..'z':
+ write_rune(&buf, '_');
+ }
+ write_rune(&buf, char);
+ case '_':
+ switch last_chars[1] {
+ case 'A'..'Z':
+ write_rune(&buf, last_chars[1] + ('a'-'A'));
+ }
+ write_rune(&buf, char);
+ case:
+ write_rune(&buf, char);
+ }
+
+ last_chars[0] = last_chars[1];
+ last_chars[1] = char;
+ }
+
+ switch last_chars[1] {
+ case 'A'..'Z':
+ write_rune(&buf, last_chars[1] + ('a'-'A'));
+ }
+
+ return to_string(buf);
}
to_screaming_snake_case :: proc(str: string, allocator := context.allocator) -> string {
- buf := make_builder(allocator);
-
- last_chars: [2]rune;
- for char, _ in str {
- switch char {
- case 'A'..'Z':
- switch last_chars[1] {
- case 'a'..'z', '0'..'9':
- write_rune(&buf, '_');
- case 'A'..'Z':
- write_rune(&buf, last_chars[1]);
- }
- case 'a'..'z':
- switch last_chars[1] {
- case 'A'..'Z':
- switch last_chars[0] {
- case 'A'..'Z':
- write_rune(&buf, '_');
- write_rune(&buf, last_chars[1]);
- case:
- write_rune(&buf, last_chars[1]);
- }
- write_rune(&buf, char - ('a'-'A'));
- case '0'..'9':
- write_rune(&buf, '_');
- write_rune(&buf, char - ('a'-'A'));
- case 'a'..'z':
- write_rune(&buf, char - ('a'-'A'));
- case '_', '\x00':
- write_rune(&buf, char - ('a'-'A'));
- }
- case '0'..'9':
- switch last_chars[1] {
- case 'A'..'Z':
- write_rune(&buf, last_chars[1]);
- write_rune(&buf, '_');
- case 'a'..'z':
- write_rune(&buf, '_');
- }
- write_rune(&buf, char);
- case '_':
- switch last_chars[1] {
- case 'A'..'Z':
- write_rune(&buf, last_chars[1]);
- }
- write_rune(&buf, char);
- case:
- unimplemented();
- }
-
- last_chars[0] = last_chars[1];
- last_chars[1] = char;
- }
-
- switch last_chars[1] {
- case 'A'..'Z':
- write_rune(&buf, last_chars[1]);
- }
-
- return to_string(buf);
+ buf := make_builder(allocator);
+
+ last_chars: [2]rune;
+ for char, _ in str {
+ switch char {
+ case 'A'..'Z':
+ switch last_chars[1] {
+ case 'a'..'z', '0'..'9':
+ write_rune(&buf, '_');
+ case 'A'..'Z':
+ write_rune(&buf, last_chars[1]);
+ }
+ case 'a'..'z':
+ switch last_chars[1] {
+ case 'A'..'Z':
+ switch last_chars[0] {
+ case 'A'..'Z':
+ write_rune(&buf, '_');
+ write_rune(&buf, last_chars[1]);
+ case:
+ write_rune(&buf, last_chars[1]);
+ }
+ write_rune(&buf, char - ('a'-'A'));
+ case '0'..'9':
+ write_rune(&buf, '_');
+ write_rune(&buf, char - ('a'-'A'));
+ case 'a'..'z':
+ write_rune(&buf, char - ('a'-'A'));
+ case '_', '\x00':
+ write_rune(&buf, char - ('a'-'A'));
+ }
+ case '0'..'9':
+ switch last_chars[1] {
+ case 'A'..'Z':
+ write_rune(&buf, last_chars[1]);
+ write_rune(&buf, '_');
+ case 'a'..'z':
+ write_rune(&buf, '_');
+ }
+ write_rune(&buf, char);
+ case '_':
+ switch last_chars[1] {
+ case 'A'..'Z':
+ write_rune(&buf, last_chars[1]);
+ }
+ write_rune(&buf, char);
+ case:
+ unimplemented();
+ }
+
+ last_chars[0] = last_chars[1];
+ last_chars[1] = char;
+ }
+
+ switch last_chars[1] {
+ case 'A'..'Z':
+ write_rune(&buf, last_chars[1]);
+ }
+
+ return to_string(buf);
}
reverse :: proc(s: string, allocator := context.allocator) -> string {