summaryrefslogtreecommitdiffstats
path: root/third_party/rust/jsparagus-parser/src/unicode.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /third_party/rust/jsparagus-parser/src/unicode.rs
parentInitial commit. (diff)
downloadfirefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz
firefox-26a029d407be480d791972afb5975cf62c9360a6.zip
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/rust/jsparagus-parser/src/unicode.rs')
-rw-r--r--third_party/rust/jsparagus-parser/src/unicode.rs41
1 files changed, 41 insertions, 0 deletions
diff --git a/third_party/rust/jsparagus-parser/src/unicode.rs b/third_party/rust/jsparagus-parser/src/unicode.rs
new file mode 100644
index 0000000000..16bfc1fe85
--- /dev/null
+++ b/third_party/rust/jsparagus-parser/src/unicode.rs
@@ -0,0 +1,41 @@
+use crate::unicode_data::{
+ char_info, is_id_continue_non_bmp, is_id_start_non_bmp, IS_ID_CONTINUE_TABLE, IS_ID_START_TABLE,
+};
+
+const UTF16_MAX: char = '\u{ffff}';
+
+fn is_id_start_ascii(c: char) -> bool {
+ IS_ID_START_TABLE[c as usize]
+}
+
+fn is_id_continue_ascii(c: char) -> bool {
+ IS_ID_CONTINUE_TABLE[c as usize]
+}
+
+fn is_id_start_bmp_non_ascii(c: char) -> bool {
+ char_info(c).is_id_start()
+}
+
+fn is_id_continue_bmp_non_ascii(c: char) -> bool {
+ char_info(c).is_id_continue()
+}
+
+pub fn is_id_start(c: char) -> bool {
+ if c > UTF16_MAX {
+ return is_id_start_non_bmp(c);
+ }
+ if c < '\u{80}' {
+ return is_id_start_ascii(c);
+ }
+ is_id_start_bmp_non_ascii(c)
+}
+
+pub fn is_id_continue(c: char) -> bool {
+ if c > UTF16_MAX {
+ return is_id_continue_non_bmp(c);
+ }
+ if c < '\u{80}' {
+ return is_id_continue_ascii(c);
+ }
+ is_id_continue_bmp_non_ascii(c)
+}