summaryrefslogtreecommitdiffstats
path: root/third_party/rust/jsparagus-parser/src/unicode.rs
diff options
context:
space:
mode:
Diffstat (limited to '')
-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)
+}