aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikkel Hjortshoej <fyoucon@gmail.com>2020-08-23 15:25:45 +0200
committerMikkel Hjortshoej <fyoucon@gmail.com>2020-08-23 15:25:45 +0200
commitea19f3e77fb32ed25cd6daad5637bfbe91b677f0 (patch)
tree3b7bdcfbba464877496b402ed032d0be85e68734
parentae2fc5830e18d536909fdb816c73b240867bff69 (diff)
parentb9b2b90f0ce670563600429995706b037934df6a (diff)
Merge branch 'master' of github.com:odin-lang/Odin
-rw-r--r--core/unicode/letter.odin24
1 files changed, 24 insertions, 0 deletions
diff --git a/core/unicode/letter.odin b/core/unicode/letter.odin
index bd701ab85..4bf5cf4ea 100644
--- a/core/unicode/letter.odin
+++ b/core/unicode/letter.odin
@@ -59,6 +59,9 @@ to_title :: proc(r: rune) -> rune {
is_lower :: proc(r: rune) -> bool {
+ if r <= MAX_ASCII {
+ return u8(r)-'a' < 26;
+ }
c := i32(r);
p := binary_search(c, to_upper_ranges[:], len(to_upper_ranges)/3, 3);
if p >= 0 && to_upper_ranges[p] <= c && c <= to_upper_ranges[p+1] {
@@ -72,6 +75,9 @@ is_lower :: proc(r: rune) -> bool {
}
is_upper :: proc(r: rune) -> bool {
+ if r <= MAX_ASCII {
+ return u8(r)-'A' < 26;
+ }
c := i32(r);
p := binary_search(c, to_lower_ranges[:], len(to_lower_ranges)/3, 3);
if p >= 0 && to_lower_ranges[p] <= c && c <= to_lower_ranges[p+1] {
@@ -85,6 +91,9 @@ is_upper :: proc(r: rune) -> bool {
}
is_alpha :: proc(r: rune) -> bool {
+ if r <= MAX_ASCII {
+ return (u8(r)|32)-'a' < 26;
+ }
if is_upper(r) || is_lower(r) {
return true;
}
@@ -105,8 +114,23 @@ is_title :: proc(r: rune) -> bool {
return is_upper(r) && is_lower(r);
}
+is_digit :: proc(r: rune) -> bool {
+ if r <= MAX_LATIN1 {
+ return '0' <= r && r <= '9';
+ }
+ return false;
+}
+
+
is_white_space :: is_space;
is_space :: proc(r: rune) -> bool {
+ if u32(r) <= MAX_LATIN1 {
+ switch r {
+ case '\t', '\n', '\v', '\f', '\r', ' ', 0x85, 0xa0:
+ return true;
+ }
+ return false;
+ }
c := i32(r);
p := binary_search(c, space_ranges[:], len(space_ranges)/2, 2);
if p >= 0 && space_ranges[p] <= c && c <= space_ranges[p+1] {