summaryrefslogtreecommitdiffstats
path: root/vendor/pest/src/unicode/mod.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
commit698f8c2f01ea549d77d7dc3338a12e04c11057b9 (patch)
tree173a775858bd501c378080a10dca74132f05bc50 /vendor/pest/src/unicode/mod.rs
parentInitial commit. (diff)
downloadrustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.tar.xz
rustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.zip
Adding upstream version 1.64.0+dfsg1.upstream/1.64.0+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/pest/src/unicode/mod.rs')
-rw-r--r--vendor/pest/src/unicode/mod.rs66
1 files changed, 66 insertions, 0 deletions
diff --git a/vendor/pest/src/unicode/mod.rs b/vendor/pest/src/unicode/mod.rs
new file mode 100644
index 000000000..3def67e34
--- /dev/null
+++ b/vendor/pest/src/unicode/mod.rs
@@ -0,0 +1,66 @@
+//! Character inclusion in binary or General_Category value Unicode sets.
+//!
+//! We rely on dead code elimination to remove the tables that aren't needed.
+
+#![allow(bad_style)]
+#![allow(clippy::all)]
+
+macro_rules! char_property_functions {
+ {$(
+ mod $module:ident;
+ [$(
+ $prop:ident,
+ )*];
+ )*} => {$(
+ #[allow(unused)]
+ mod $module;
+ $(pub fn $prop(c: char) -> bool {
+ self::$module::$prop.contains_char(c)
+ })*
+ )*};
+}
+
+char_property_functions! {
+ mod binary;
+ [
+ // ASCII_HEX_DIGIT, // let this one be stripped out -- the full trie is wasteful for ASCII
+ ALPHABETIC, BIDI_CONTROL, CASE_IGNORABLE, CASED, CHANGES_WHEN_CASEFOLDED,
+ CHANGES_WHEN_CASEMAPPED, CHANGES_WHEN_LOWERCASED, CHANGES_WHEN_TITLECASED,
+ CHANGES_WHEN_UPPERCASED, DASH, DEFAULT_IGNORABLE_CODE_POINT, DEPRECATED, DIACRITIC,
+ EXTENDER, GRAPHEME_BASE, GRAPHEME_EXTEND, GRAPHEME_LINK, HEX_DIGIT, HYPHEN,
+ IDS_BINARY_OPERATOR, IDS_TRINARY_OPERATOR, ID_CONTINUE, ID_START, IDEOGRAPHIC, JOIN_CONTROL,
+ LOGICAL_ORDER_EXCEPTION, LOWERCASE, MATH, NONCHARACTER_CODE_POINT, OTHER_ALPHABETIC,
+ OTHER_DEFAULT_IGNORABLE_CODE_POINT, OTHER_GRAPHEME_EXTEND, OTHER_ID_CONTINUE,
+ OTHER_ID_START, OTHER_LOWERCASE, OTHER_MATH, OTHER_UPPERCASE, PATTERN_SYNTAX,
+ PATTERN_WHITE_SPACE, PREPENDED_CONCATENATION_MARK, QUOTATION_MARK, RADICAL,
+ REGIONAL_INDICATOR, SENTENCE_TERMINAL, SOFT_DOTTED, TERMINAL_PUNCTUATION, UNIFIED_IDEOGRAPH,
+ UPPERCASE, VARIATION_SELECTOR, WHITE_SPACE, XID_CONTINUE, XID_START,
+ ];
+
+ mod category;
+ [
+ CASED_LETTER, CLOSE_PUNCTUATION, CONNECTOR_PUNCTUATION, CONTROL, CURRENCY_SYMBOL,
+ DASH_PUNCTUATION, DECIMAL_NUMBER, ENCLOSING_MARK, FINAL_PUNCTUATION, FORMAT,
+ INITIAL_PUNCTUATION, LETTER, LETTER_NUMBER, LINE_SEPARATOR, LOWERCASE_LETTER, MARK,
+ MATH_SYMBOL, MODIFIER_LETTER, MODIFIER_SYMBOL, NONSPACING_MARK, NUMBER, OPEN_PUNCTUATION,
+ OTHER, OTHER_LETTER, OTHER_NUMBER, OTHER_PUNCTUATION, OTHER_SYMBOL, PARAGRAPH_SEPARATOR,
+ PRIVATE_USE, PUNCTUATION, SEPARATOR, SPACE_SEPARATOR, SPACING_MARK, SURROGATE, SYMBOL,
+ TITLECASE_LETTER, UNASSIGNED, UPPERCASE_LETTER,
+ ];
+}
+
+pub fn by_name(name: &str) -> Option<Box<dyn Fn(char) -> bool>> {
+ for property in binary::BY_NAME {
+ if name == property.0.to_uppercase() {
+ return Some(Box::new(move |c| property.1.contains_char(c)));
+ }
+ }
+
+ for property in category::BY_NAME {
+ if name == property.0.to_uppercase() {
+ return Some(Box::new(move |c| property.1.contains_char(c)));
+ }
+ }
+
+ None
+}