aboutsummaryrefslogtreecommitdiff
path: root/xs_unicode.h
diff options
context:
space:
mode:
authorGiacomo Tesio <giacomo@tesio.it>2024-12-05 22:53:40 +0100
committerGiacomo Tesio <giacomo@tesio.it>2024-12-05 22:53:40 +0100
commitbd74ffda5b25cc07e8d559815e027c8dab3b9d73 (patch)
tree00725a5d5f53ed421b923de6fc1892c58815cc16 /xs_unicode.h
parentb6107c8777a6f98dd89218ede1020a27ee83be70 (diff)
parent221eeabf0c00f076ee8ae670811aabbc5b11a826 (diff)
Merge branch 'master' into build-with-musl
Diffstat (limited to 'xs_unicode.h')
-rw-r--r--xs_unicode.h24
1 files changed, 24 insertions, 0 deletions
diff --git a/xs_unicode.h b/xs_unicode.h
index 9663190..cfcd8ff 100644
--- a/xs_unicode.h
+++ b/xs_unicode.h
@@ -21,6 +21,7 @@
int xs_unicode_nfd(unsigned int cpoint, unsigned int *base, unsigned int *diac);
int xs_unicode_nfc(unsigned int base, unsigned int diac, unsigned int *cpoint);
int xs_unicode_is_alpha(unsigned int cpoint);
+ int xs_unicode_is_right_to_left(unsigned int cpoint);
#ifdef _XS_H
xs_str *xs_utf8_insert(xs_str *str, unsigned int cpoint, int *offset);
@@ -350,6 +351,29 @@ int xs_unicode_is_alpha(unsigned int cpoint)
}
+int xs_unicode_is_right_to_left(unsigned int cpoint)
+/* checks if a codepoint is a right-to-left letter */
+{
+ int b = 0;
+ int t = xs_countof(xs_unicode_right_to_left_table) / 2 - 1;
+
+ while (t >= b) {
+ int n = (b + t) / 2;
+ unsigned int *p = &xs_unicode_right_to_left_table[n * 2];
+
+ if (cpoint < p[0])
+ t = n - 1;
+ else
+ if (cpoint > p[1])
+ b = n + 1;
+ else
+ return 1;
+ }
+
+ return 0;
+}
+
+
#ifdef _XS_H
xs_str *xs_utf8_to_upper(const char *str)