icu_properties/
provider.rs

1// This file is part of ICU4X. For terms of use, please see the file
2// called LICENSE at the top level of the ICU4X source tree
3// (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
4
5// Provider structs must be stable
6#![allow(clippy::exhaustive_structs, clippy::exhaustive_enums)]
7
8//! 🚧 \[Unstable\] Data provider struct definitions for this ICU4X component.
9//!
10//! <div class="stab unstable">
11//! 🚧 This code is considered unstable; it may change at any time, in breaking or non-breaking ways,
12//! including in SemVer minor releases. While the serde representation of data structs is guaranteed
13//! to be stable, their Rust representation might not be. Use with caution.
14//! </div>
15//!
16//! Read more about data providers: [`icu_provider`]
17
18pub mod names;
19
20pub use names::{
21    PropertyNameLongBidiClassV1, PropertyNameLongCanonicalCombiningClassV1,
22    PropertyNameLongEastAsianWidthV1, PropertyNameLongGeneralCategoryV1,
23    PropertyNameLongGraphemeClusterBreakV1, PropertyNameLongHangulSyllableTypeV1,
24    PropertyNameLongIndicSyllabicCategoryV1, PropertyNameLongJoiningTypeV1,
25    PropertyNameLongLineBreakV1, PropertyNameLongScriptV1, PropertyNameLongSentenceBreakV1,
26    PropertyNameLongVerticalOrientationV1, PropertyNameLongWordBreakV1,
27    PropertyNameParseBidiClassV1, PropertyNameParseCanonicalCombiningClassV1,
28    PropertyNameParseEastAsianWidthV1, PropertyNameParseGeneralCategoryMaskV1,
29    PropertyNameParseGeneralCategoryV1, PropertyNameParseGraphemeClusterBreakV1,
30    PropertyNameParseHangulSyllableTypeV1, PropertyNameParseIndicSyllabicCategoryV1,
31    PropertyNameParseJoiningTypeV1, PropertyNameParseLineBreakV1, PropertyNameParseScriptV1,
32    PropertyNameParseSentenceBreakV1, PropertyNameParseVerticalOrientationV1,
33    PropertyNameParseWordBreakV1, PropertyNameShortBidiClassV1,
34    PropertyNameShortCanonicalCombiningClassV1, PropertyNameShortEastAsianWidthV1,
35    PropertyNameShortGeneralCategoryV1, PropertyNameShortGraphemeClusterBreakV1,
36    PropertyNameShortHangulSyllableTypeV1, PropertyNameShortIndicSyllabicCategoryV1,
37    PropertyNameShortJoiningTypeV1, PropertyNameShortLineBreakV1, PropertyNameShortScriptV1,
38    PropertyNameShortSentenceBreakV1, PropertyNameShortVerticalOrientationV1,
39    PropertyNameShortWordBreakV1,
40};
41
42pub use crate::props::gc::GeneralCategoryULE;
43use crate::props::*;
44use crate::script::ScriptWithExt;
45use core::ops::RangeInclusive;
46use icu_collections::codepointinvlist::CodePointInversionList;
47use icu_collections::codepointinvliststringlist::CodePointInversionListAndStringList;
48use icu_collections::codepointtrie::{CodePointMapRange, CodePointTrie, TrieValue};
49use icu_provider::prelude::*;
50use zerofrom::ZeroFrom;
51use zerovec::{VarZeroVec, ZeroSlice};
52
53#[cfg(feature = "compiled_data")]
54#[derive(Debug)]
55/// Baked data
56///
57/// <div class="stab unstable">
58/// 🚧 This code is considered unstable; it may change at any time, in breaking or non-breaking ways,
59/// including in SemVer minor releases. In particular, the `DataProvider` implementations are only
60/// guaranteed to match with this version's `*_unstable` providers. Use with caution.
61/// </div>
62pub struct Baked;
63
64#[cfg(feature = "compiled_data")]
65#[allow(unused_imports)]
66const _: () = {
67    use icu_properties_data::*;
68    pub mod icu {
69        pub use crate as properties;
70        pub use icu_collections as collections;
71    }
72    make_provider!(Baked);
73    impl_property_binary_alnum_v1!(Baked);
74    impl_property_binary_alphabetic_v1!(Baked);
75    impl_property_binary_ascii_hex_digit_v1!(Baked);
76    impl_property_binary_basic_emoji_v1!(Baked);
77    impl_property_binary_bidi_control_v1!(Baked);
78    impl_property_binary_bidi_mirrored_v1!(Baked);
79    impl_property_binary_blank_v1!(Baked);
80    impl_property_binary_case_ignorable_v1!(Baked);
81    impl_property_binary_case_sensitive_v1!(Baked);
82    impl_property_binary_cased_v1!(Baked);
83    impl_property_binary_changes_when_casefolded_v1!(Baked);
84    impl_property_binary_changes_when_casemapped_v1!(Baked);
85    impl_property_binary_changes_when_lowercased_v1!(Baked);
86    impl_property_binary_changes_when_nfkc_casefolded_v1!(Baked);
87    impl_property_binary_changes_when_titlecased_v1!(Baked);
88    impl_property_binary_changes_when_uppercased_v1!(Baked);
89    impl_property_binary_dash_v1!(Baked);
90    impl_property_binary_default_ignorable_code_point_v1!(Baked);
91    impl_property_binary_deprecated_v1!(Baked);
92    impl_property_binary_diacritic_v1!(Baked);
93    impl_property_binary_emoji_component_v1!(Baked);
94    impl_property_binary_emoji_modifier_base_v1!(Baked);
95    impl_property_binary_emoji_modifier_v1!(Baked);
96    impl_property_binary_emoji_presentation_v1!(Baked);
97    impl_property_binary_emoji_v1!(Baked);
98    impl_property_binary_extended_pictographic_v1!(Baked);
99    impl_property_binary_extender_v1!(Baked);
100    impl_property_binary_full_composition_exclusion_v1!(Baked);
101    impl_property_binary_graph_v1!(Baked);
102    impl_property_binary_grapheme_base_v1!(Baked);
103    impl_property_binary_grapheme_extend_v1!(Baked);
104    impl_property_binary_grapheme_link_v1!(Baked);
105    impl_property_binary_hex_digit_v1!(Baked);
106    impl_property_binary_hyphen_v1!(Baked);
107    impl_property_binary_id_continue_v1!(Baked);
108    impl_property_binary_id_start_v1!(Baked);
109    impl_property_binary_ideographic_v1!(Baked);
110    impl_property_binary_ids_binary_operator_v1!(Baked);
111    impl_property_binary_ids_trinary_operator_v1!(Baked);
112    impl_property_binary_join_control_v1!(Baked);
113    impl_property_binary_logical_order_exception_v1!(Baked);
114    impl_property_binary_lowercase_v1!(Baked);
115    impl_property_binary_math_v1!(Baked);
116    impl_property_binary_nfc_inert_v1!(Baked);
117    impl_property_binary_nfd_inert_v1!(Baked);
118    impl_property_binary_nfkc_inert_v1!(Baked);
119    impl_property_binary_nfkd_inert_v1!(Baked);
120    impl_property_binary_noncharacter_code_point_v1!(Baked);
121    impl_property_binary_pattern_syntax_v1!(Baked);
122    impl_property_binary_pattern_white_space_v1!(Baked);
123    impl_property_binary_prepended_concatenation_mark_v1!(Baked);
124    impl_property_binary_print_v1!(Baked);
125    impl_property_binary_quotation_mark_v1!(Baked);
126    impl_property_binary_radical_v1!(Baked);
127    impl_property_binary_regional_indicator_v1!(Baked);
128    impl_property_binary_segment_starter_v1!(Baked);
129    impl_property_binary_sentence_terminal_v1!(Baked);
130    impl_property_binary_soft_dotted_v1!(Baked);
131    impl_property_binary_terminal_punctuation_v1!(Baked);
132    impl_property_binary_unified_ideograph_v1!(Baked);
133    impl_property_binary_uppercase_v1!(Baked);
134    impl_property_binary_variation_selector_v1!(Baked);
135    impl_property_binary_white_space_v1!(Baked);
136    impl_property_binary_xdigit_v1!(Baked);
137    impl_property_binary_xid_continue_v1!(Baked);
138    impl_property_binary_xid_start_v1!(Baked);
139    impl_property_enum_bidi_class_v1!(Baked);
140    impl_property_enum_bidi_mirroring_glyph_v1!(Baked);
141    impl_property_enum_canonical_combining_class_v1!(Baked);
142    impl_property_enum_east_asian_width_v1!(Baked);
143    impl_property_enum_general_category_v1!(Baked);
144    impl_property_enum_grapheme_cluster_break_v1!(Baked);
145    impl_property_enum_hangul_syllable_type_v1!(Baked);
146    impl_property_enum_indic_conjunct_break_v1!(Baked);
147    impl_property_enum_indic_syllabic_category_v1!(Baked);
148    impl_property_enum_joining_type_v1!(Baked);
149    impl_property_enum_line_break_v1!(Baked);
150    impl_property_enum_script_v1!(Baked);
151    impl_property_enum_sentence_break_v1!(Baked);
152    impl_property_enum_vertical_orientation_v1!(Baked);
153    impl_property_enum_word_break_v1!(Baked);
154    impl_property_name_long_bidi_class_v1!(Baked);
155    impl_property_name_long_canonical_combining_class_v1!(Baked);
156    impl_property_name_long_east_asian_width_v1!(Baked);
157    impl_property_name_long_general_category_v1!(Baked);
158    impl_property_name_long_grapheme_cluster_break_v1!(Baked);
159    impl_property_name_long_hangul_syllable_type_v1!(Baked);
160    impl_property_name_long_indic_syllabic_category_v1!(Baked);
161    impl_property_name_long_joining_type_v1!(Baked);
162    impl_property_name_long_line_break_v1!(Baked);
163    impl_property_name_long_script_v1!(Baked);
164    impl_property_name_long_sentence_break_v1!(Baked);
165    impl_property_name_long_vertical_orientation_v1!(Baked);
166    impl_property_name_long_word_break_v1!(Baked);
167    impl_property_name_parse_bidi_class_v1!(Baked);
168    impl_property_name_parse_canonical_combining_class_v1!(Baked);
169    impl_property_name_parse_east_asian_width_v1!(Baked);
170    impl_property_name_parse_general_category_mask_v1!(Baked);
171    impl_property_name_parse_general_category_v1!(Baked);
172    impl_property_name_parse_grapheme_cluster_break_v1!(Baked);
173    impl_property_name_parse_hangul_syllable_type_v1!(Baked);
174    impl_property_name_parse_indic_syllabic_category_v1!(Baked);
175    impl_property_name_parse_joining_type_v1!(Baked);
176    impl_property_name_parse_line_break_v1!(Baked);
177    impl_property_name_parse_script_v1!(Baked);
178    impl_property_name_parse_sentence_break_v1!(Baked);
179    impl_property_name_parse_vertical_orientation_v1!(Baked);
180    impl_property_name_parse_word_break_v1!(Baked);
181    impl_property_name_short_bidi_class_v1!(Baked);
182    impl_property_name_short_canonical_combining_class_v1!(Baked);
183    impl_property_name_short_east_asian_width_v1!(Baked);
184    impl_property_name_short_general_category_v1!(Baked);
185    impl_property_name_short_grapheme_cluster_break_v1!(Baked);
186    impl_property_name_short_hangul_syllable_type_v1!(Baked);
187    impl_property_name_short_indic_syllabic_category_v1!(Baked);
188    impl_property_name_short_joining_type_v1!(Baked);
189    impl_property_name_short_line_break_v1!(Baked);
190    impl_property_name_short_script_v1!(Baked);
191    impl_property_name_short_sentence_break_v1!(Baked);
192    impl_property_name_short_vertical_orientation_v1!(Baked);
193    impl_property_name_short_word_break_v1!(Baked);
194    impl_property_script_with_extensions_v1!(Baked);
195};
196
197icu_provider::data_marker!(
198    /// `PropertyBinaryAlnumV1`
199    PropertyBinaryAlnumV1,
200    PropertyCodePointSet<'static>,
201    is_singleton = true
202);
203icu_provider::data_marker!(
204    /// `PropertyBinaryAlphabeticV1`
205    PropertyBinaryAlphabeticV1,
206    PropertyCodePointSet<'static>,
207    is_singleton = true
208);
209icu_provider::data_marker!(
210    /// `PropertyBinaryAsciiHexDigitV1`
211    PropertyBinaryAsciiHexDigitV1,
212    PropertyCodePointSet<'static>,
213    is_singleton = true
214);
215icu_provider::data_marker!(
216    /// `PropertyBinaryBidiControlV1`
217    PropertyBinaryBidiControlV1,
218    PropertyCodePointSet<'static>,
219    is_singleton = true
220);
221icu_provider::data_marker!(
222    /// `PropertyBinaryBidiMirroredV1`
223    PropertyBinaryBidiMirroredV1,
224    PropertyCodePointSet<'static>,
225    is_singleton = true
226);
227icu_provider::data_marker!(
228    /// `PropertyBinaryBlankV1`
229    PropertyBinaryBlankV1,
230    PropertyCodePointSet<'static>,
231    is_singleton = true
232);
233icu_provider::data_marker!(
234    /// `PropertyBinaryCasedV1`
235    PropertyBinaryCasedV1,
236    PropertyCodePointSet<'static>,
237    is_singleton = true
238);
239icu_provider::data_marker!(
240    /// `PropertyBinaryCaseIgnorableV1`
241    PropertyBinaryCaseIgnorableV1,
242    PropertyCodePointSet<'static>,
243    is_singleton = true
244);
245icu_provider::data_marker!(
246    /// `PropertyBinaryCaseSensitiveV1`
247    PropertyBinaryCaseSensitiveV1,
248    PropertyCodePointSet<'static>,
249    is_singleton = true
250);
251icu_provider::data_marker!(
252    /// `PropertyBinaryChangesWhenCasefoldedV1`
253    PropertyBinaryChangesWhenCasefoldedV1,
254    PropertyCodePointSet<'static>,
255    is_singleton = true
256);
257icu_provider::data_marker!(
258    /// `PropertyBinaryChangesWhenCasemappedV1`
259    PropertyBinaryChangesWhenCasemappedV1,
260    PropertyCodePointSet<'static>,
261    is_singleton = true
262);
263icu_provider::data_marker!(
264    /// `PropertyBinaryChangesWhenLowercasedV1`
265    PropertyBinaryChangesWhenLowercasedV1,
266    PropertyCodePointSet<'static>,
267    is_singleton = true
268);
269icu_provider::data_marker!(
270    /// `PropertyBinaryChangesWhenNfkcCasefoldedV1`
271    PropertyBinaryChangesWhenNfkcCasefoldedV1,
272    PropertyCodePointSet<'static>,
273    is_singleton = true
274);
275icu_provider::data_marker!(
276    /// `PropertyBinaryChangesWhenTitlecasedV1`
277    PropertyBinaryChangesWhenTitlecasedV1,
278    PropertyCodePointSet<'static>,
279    is_singleton = true
280);
281icu_provider::data_marker!(
282    /// `PropertyBinaryChangesWhenUppercasedV1`
283    PropertyBinaryChangesWhenUppercasedV1,
284    PropertyCodePointSet<'static>,
285    is_singleton = true
286);
287icu_provider::data_marker!(
288    /// `PropertyBinaryDashV1`
289    PropertyBinaryDashV1,
290    PropertyCodePointSet<'static>,
291    is_singleton = true
292);
293icu_provider::data_marker!(
294    /// `PropertyBinaryDefaultIgnorableCodePointV1`
295    PropertyBinaryDefaultIgnorableCodePointV1,
296    PropertyCodePointSet<'static>,
297    is_singleton = true
298);
299icu_provider::data_marker!(
300    /// `PropertyBinaryDeprecatedV1`
301    PropertyBinaryDeprecatedV1,
302    PropertyCodePointSet<'static>,
303    is_singleton = true
304);
305icu_provider::data_marker!(
306    /// `PropertyBinaryDiacriticV1`
307    PropertyBinaryDiacriticV1,
308    PropertyCodePointSet<'static>,
309    is_singleton = true
310);
311icu_provider::data_marker!(
312    /// `PropertyBinaryEmojiComponentV1`
313    PropertyBinaryEmojiComponentV1,
314    PropertyCodePointSet<'static>,
315    is_singleton = true
316);
317icu_provider::data_marker!(
318    /// `PropertyBinaryEmojiModifierBaseV1`
319    PropertyBinaryEmojiModifierBaseV1,
320    PropertyCodePointSet<'static>,
321    is_singleton = true
322);
323icu_provider::data_marker!(
324    /// `PropertyBinaryEmojiModifierV1`
325    PropertyBinaryEmojiModifierV1,
326    PropertyCodePointSet<'static>,
327    is_singleton = true
328);
329icu_provider::data_marker!(
330    /// `PropertyBinaryEmojiPresentationV1`
331    PropertyBinaryEmojiPresentationV1,
332    PropertyCodePointSet<'static>,
333    is_singleton = true
334);
335icu_provider::data_marker!(
336    /// `PropertyBinaryEmojiV1`
337    PropertyBinaryEmojiV1,
338    PropertyCodePointSet<'static>,
339    is_singleton = true
340);
341icu_provider::data_marker!(
342    /// `PropertyBinaryExtendedPictographicV1`
343    PropertyBinaryExtendedPictographicV1,
344    PropertyCodePointSet<'static>,
345    is_singleton = true
346);
347icu_provider::data_marker!(
348    /// `PropertyBinaryExtenderV1`
349    PropertyBinaryExtenderV1,
350    PropertyCodePointSet<'static>,
351    is_singleton = true
352);
353icu_provider::data_marker!(
354    /// `PropertyBinaryFullCompositionExclusionV1`
355    PropertyBinaryFullCompositionExclusionV1,
356    PropertyCodePointSet<'static>,
357    is_singleton = true
358);
359icu_provider::data_marker!(
360    /// `PropertyBinaryGraphemeBaseV1`
361    PropertyBinaryGraphemeBaseV1,
362    PropertyCodePointSet<'static>,
363    is_singleton = true
364);
365icu_provider::data_marker!(
366    /// `PropertyBinaryGraphemeExtendV1`
367    PropertyBinaryGraphemeExtendV1,
368    PropertyCodePointSet<'static>,
369    is_singleton = true
370);
371icu_provider::data_marker!(
372    /// `PropertyBinaryGraphemeLinkV1`
373    PropertyBinaryGraphemeLinkV1,
374    PropertyCodePointSet<'static>,
375    is_singleton = true
376);
377icu_provider::data_marker!(
378    /// `PropertyBinaryGraphV1`
379    PropertyBinaryGraphV1,
380    PropertyCodePointSet<'static>,
381    is_singleton = true
382);
383icu_provider::data_marker!(
384    /// `PropertyBinaryHexDigitV1`
385    PropertyBinaryHexDigitV1,
386    PropertyCodePointSet<'static>,
387    is_singleton = true
388);
389icu_provider::data_marker!(
390    /// `PropertyBinaryHyphenV1`
391    PropertyBinaryHyphenV1,
392    PropertyCodePointSet<'static>,
393    is_singleton = true
394);
395icu_provider::data_marker!(
396    /// `PropertyBinaryIdContinueV1`
397    PropertyBinaryIdContinueV1,
398    PropertyCodePointSet<'static>,
399    is_singleton = true
400);
401icu_provider::data_marker!(
402    /// `PropertyBinaryIdeographicV1`
403    PropertyBinaryIdeographicV1,
404    PropertyCodePointSet<'static>,
405    is_singleton = true
406);
407icu_provider::data_marker!(
408    /// `PropertyBinaryIdsBinaryOperatorV1`
409    PropertyBinaryIdsBinaryOperatorV1,
410    PropertyCodePointSet<'static>,
411    is_singleton = true
412);
413icu_provider::data_marker!(
414    /// `PropertyBinaryIdStartV1`
415    PropertyBinaryIdStartV1,
416    PropertyCodePointSet<'static>,
417    is_singleton = true
418);
419icu_provider::data_marker!(
420    /// `PropertyBinaryIdsTrinaryOperatorV1`
421    PropertyBinaryIdsTrinaryOperatorV1,
422    PropertyCodePointSet<'static>,
423    is_singleton = true
424);
425icu_provider::data_marker!(
426    /// `PropertyBinaryJoinControlV1`
427    PropertyBinaryJoinControlV1,
428    PropertyCodePointSet<'static>,
429    is_singleton = true
430);
431icu_provider::data_marker!(
432    /// `PropertyBinaryLogicalOrderExceptionV1`
433    PropertyBinaryLogicalOrderExceptionV1,
434    PropertyCodePointSet<'static>,
435    is_singleton = true
436);
437icu_provider::data_marker!(
438    /// `PropertyBinaryLowercaseV1`
439    PropertyBinaryLowercaseV1,
440    PropertyCodePointSet<'static>,
441    is_singleton = true
442);
443icu_provider::data_marker!(
444    /// `PropertyBinaryMathV1`
445    PropertyBinaryMathV1,
446    PropertyCodePointSet<'static>,
447    is_singleton = true
448);
449icu_provider::data_marker!(
450    /// `PropertyBinaryNfcInertV1`
451    PropertyBinaryNfcInertV1,
452    PropertyCodePointSet<'static>,
453    is_singleton = true
454);
455icu_provider::data_marker!(
456    /// `PropertyBinaryNfdInertV1`
457    PropertyBinaryNfdInertV1,
458    PropertyCodePointSet<'static>,
459    is_singleton = true
460);
461icu_provider::data_marker!(
462    /// `PropertyBinaryNfkcInertV1`
463    PropertyBinaryNfkcInertV1,
464    PropertyCodePointSet<'static>,
465    is_singleton = true
466);
467icu_provider::data_marker!(
468    /// `PropertyBinaryNfkdInertV1`
469    PropertyBinaryNfkdInertV1,
470    PropertyCodePointSet<'static>,
471    is_singleton = true
472);
473icu_provider::data_marker!(
474    /// `PropertyBinaryNoncharacterCodePointV1`
475    PropertyBinaryNoncharacterCodePointV1,
476    PropertyCodePointSet<'static>,
477    is_singleton = true
478);
479icu_provider::data_marker!(
480    /// `PropertyBinaryPatternSyntaxV1`
481    PropertyBinaryPatternSyntaxV1,
482    PropertyCodePointSet<'static>,
483    is_singleton = true
484);
485icu_provider::data_marker!(
486    /// `PropertyBinaryPatternWhiteSpaceV1`
487    PropertyBinaryPatternWhiteSpaceV1,
488    PropertyCodePointSet<'static>,
489    is_singleton = true
490);
491icu_provider::data_marker!(
492    /// `PropertyBinaryPrependedConcatenationMarkV1`
493    PropertyBinaryPrependedConcatenationMarkV1,
494    PropertyCodePointSet<'static>,
495    is_singleton = true
496);
497icu_provider::data_marker!(
498    /// `PropertyBinaryPrintV1`
499    PropertyBinaryPrintV1,
500    PropertyCodePointSet<'static>,
501    is_singleton = true
502);
503icu_provider::data_marker!(
504    /// `PropertyBinaryQuotationMarkV1`
505    PropertyBinaryQuotationMarkV1,
506    PropertyCodePointSet<'static>,
507    is_singleton = true
508);
509icu_provider::data_marker!(
510    /// `PropertyBinaryRadicalV1`
511    PropertyBinaryRadicalV1,
512    PropertyCodePointSet<'static>,
513    is_singleton = true
514);
515icu_provider::data_marker!(
516    /// `PropertyBinaryRegionalIndicatorV1`
517    PropertyBinaryRegionalIndicatorV1,
518    PropertyCodePointSet<'static>,
519    is_singleton = true
520);
521icu_provider::data_marker!(
522    /// `PropertyBinarySegmentStarterV1`
523    PropertyBinarySegmentStarterV1,
524    PropertyCodePointSet<'static>,
525    is_singleton = true
526);
527icu_provider::data_marker!(
528    /// `PropertyBinarySentenceTerminalV1`
529    PropertyBinarySentenceTerminalV1,
530    PropertyCodePointSet<'static>,
531    is_singleton = true
532);
533icu_provider::data_marker!(
534    /// `PropertyBinarySoftDottedV1`
535    PropertyBinarySoftDottedV1,
536    PropertyCodePointSet<'static>,
537    is_singleton = true
538);
539icu_provider::data_marker!(
540    /// `PropertyBinaryTerminalPunctuationV1`
541    PropertyBinaryTerminalPunctuationV1,
542    PropertyCodePointSet<'static>,
543    is_singleton = true
544);
545icu_provider::data_marker!(
546    /// `PropertyBinaryUnifiedIdeographV1`
547    PropertyBinaryUnifiedIdeographV1,
548    PropertyCodePointSet<'static>,
549    is_singleton = true
550);
551icu_provider::data_marker!(
552    /// `PropertyBinaryUppercaseV1`
553    PropertyBinaryUppercaseV1,
554    PropertyCodePointSet<'static>,
555    is_singleton = true
556);
557icu_provider::data_marker!(
558    /// `PropertyBinaryVariationSelectorV1`
559    PropertyBinaryVariationSelectorV1,
560    PropertyCodePointSet<'static>,
561    is_singleton = true
562);
563icu_provider::data_marker!(
564    /// `PropertyBinaryWhiteSpaceV1`
565    PropertyBinaryWhiteSpaceV1,
566    PropertyCodePointSet<'static>,
567    is_singleton = true
568);
569icu_provider::data_marker!(
570    /// `PropertyBinaryXdigitV1`
571    PropertyBinaryXdigitV1,
572    PropertyCodePointSet<'static>,
573    is_singleton = true
574);
575icu_provider::data_marker!(
576    /// `PropertyBinaryXidContinueV1`
577    PropertyBinaryXidContinueV1,
578    PropertyCodePointSet<'static>,
579    is_singleton = true
580);
581icu_provider::data_marker!(
582    /// `PropertyBinaryXidStartV1`
583    PropertyBinaryXidStartV1,
584    PropertyCodePointSet<'static>,
585    is_singleton = true
586);
587icu_provider::data_marker!(
588    /// Data marker for the 'BidiClass' Unicode property
589    PropertyEnumBidiClassV1,
590    PropertyCodePointMap<'static, crate::props::BidiClass>,
591    is_singleton = true,
592);
593icu_provider::data_marker!(
594    /// Data marker for the 'CanonicalCombiningClass' Unicode property
595    PropertyEnumCanonicalCombiningClassV1,
596    PropertyCodePointMap<'static, crate::props::CanonicalCombiningClass>,
597    is_singleton = true,
598);
599icu_provider::data_marker!(
600    /// Data marker for the 'EastAsianWidth' Unicode property
601    PropertyEnumEastAsianWidthV1,
602    PropertyCodePointMap<'static, crate::props::EastAsianWidth>,
603    is_singleton = true,
604);
605icu_provider::data_marker!(
606    /// Data marker for the 'GeneralCategory' Unicode property
607    PropertyEnumGeneralCategoryV1,
608    PropertyCodePointMap<'static, crate::props::GeneralCategory>,
609    is_singleton = true,
610);
611icu_provider::data_marker!(
612    /// Data marker for the 'GraphemeClusterBreak' Unicode property
613    PropertyEnumGraphemeClusterBreakV1,
614    PropertyCodePointMap<'static, crate::props::GraphemeClusterBreak>,
615    is_singleton = true,
616);
617icu_provider::data_marker!(
618    /// Data marker for the 'HangulSyllableType' Unicode property
619    PropertyEnumHangulSyllableTypeV1,
620    PropertyCodePointMap<'static, crate::props::HangulSyllableType>,
621    is_singleton = true,
622);
623icu_provider::data_marker!(
624    /// Data marker for the 'IndicConjunctBreak' Unicode property
625    PropertyEnumIndicConjunctBreakV1,
626    PropertyCodePointMap<'static, crate::props::IndicConjunctBreak>,
627    is_singleton = true,
628);
629icu_provider::data_marker!(
630    /// Data marker for the 'IndicSyllabicCategory' Unicode property
631    PropertyEnumIndicSyllabicCategoryV1,
632    PropertyCodePointMap<'static, crate::props::IndicSyllabicCategory>,
633    is_singleton = true,
634);
635icu_provider::data_marker!(
636    /// Data marker for the 'JoiningType' Unicode property
637    PropertyEnumJoiningTypeV1,
638    PropertyCodePointMap<'static, crate::props::JoiningType>,
639    is_singleton = true,
640);
641icu_provider::data_marker!(
642    /// Data marker for the 'LineBreak' Unicode property
643    PropertyEnumLineBreakV1,
644    PropertyCodePointMap<'static, crate::props::LineBreak>,
645    is_singleton = true,
646);
647icu_provider::data_marker!(
648    /// Data marker for the 'Script' Unicode property
649    PropertyEnumScriptV1,
650    PropertyCodePointMap<'static, crate::props::Script>,
651    is_singleton = true,
652);
653icu_provider::data_marker!(
654    /// Data marker for the 'SentenceBreak' Unicode property
655    PropertyEnumSentenceBreakV1,
656    PropertyCodePointMap<'static, crate::props::SentenceBreak>,
657    is_singleton = true,
658);
659icu_provider::data_marker!(
660    /// Data marker for the 'Vertical_Orientation' Unicode property
661    PropertyEnumVerticalOrientationV1,
662    PropertyCodePointMap<'static, crate::props::VerticalOrientation>,
663    is_singleton = true,
664);
665icu_provider::data_marker!(
666    /// Data marker for the 'WordBreak' Unicode property
667    PropertyEnumWordBreakV1,
668    PropertyCodePointMap<'static, crate::props::WordBreak>,
669    is_singleton = true,
670);
671icu_provider::data_marker!(
672    /// Data marker for the 'BidiMirroringGlyph' Unicode property
673    PropertyEnumBidiMirroringGlyphV1,
674    PropertyCodePointMap<'static, crate::bidi::BidiMirroringGlyph>,
675    is_singleton = true,
676);
677icu_provider::data_marker!(
678    /// `PropertyBinaryBasicEmojiV1`
679    PropertyBinaryBasicEmojiV1,
680    PropertyUnicodeSet<'static>,
681    is_singleton = true
682);
683icu_provider::data_marker!(
684    /// `PropertyScriptWithExtensionsV1`
685    PropertyScriptWithExtensionsV1,
686    ScriptWithExtensionsProperty<'static>,
687    is_singleton = true
688);
689
690/// All data keys in this module.
691pub const MARKERS: &[DataMarkerInfo] = &[
692    PropertyNameLongBidiClassV1::INFO,
693    PropertyNameLongCanonicalCombiningClassV1::INFO,
694    PropertyNameLongEastAsianWidthV1::INFO,
695    PropertyNameLongGeneralCategoryV1::INFO,
696    PropertyNameLongGraphemeClusterBreakV1::INFO,
697    PropertyNameLongHangulSyllableTypeV1::INFO,
698    PropertyNameLongIndicSyllabicCategoryV1::INFO,
699    PropertyNameLongJoiningTypeV1::INFO,
700    PropertyNameLongLineBreakV1::INFO,
701    PropertyNameLongScriptV1::INFO,
702    PropertyNameLongSentenceBreakV1::INFO,
703    PropertyNameLongVerticalOrientationV1::INFO,
704    PropertyNameLongWordBreakV1::INFO,
705    PropertyNameParseBidiClassV1::INFO,
706    PropertyNameParseCanonicalCombiningClassV1::INFO,
707    PropertyNameParseEastAsianWidthV1::INFO,
708    PropertyNameParseGeneralCategoryMaskV1::INFO,
709    PropertyNameParseGeneralCategoryV1::INFO,
710    PropertyNameParseGraphemeClusterBreakV1::INFO,
711    PropertyNameParseHangulSyllableTypeV1::INFO,
712    PropertyNameParseIndicSyllabicCategoryV1::INFO,
713    PropertyNameParseJoiningTypeV1::INFO,
714    PropertyNameParseLineBreakV1::INFO,
715    PropertyNameParseScriptV1::INFO,
716    PropertyNameParseSentenceBreakV1::INFO,
717    PropertyNameParseVerticalOrientationV1::INFO,
718    PropertyNameParseWordBreakV1::INFO,
719    PropertyNameShortBidiClassV1::INFO,
720    PropertyNameShortCanonicalCombiningClassV1::INFO,
721    PropertyNameShortEastAsianWidthV1::INFO,
722    PropertyNameShortGeneralCategoryV1::INFO,
723    PropertyNameShortGraphemeClusterBreakV1::INFO,
724    PropertyNameShortHangulSyllableTypeV1::INFO,
725    PropertyNameShortIndicSyllabicCategoryV1::INFO,
726    PropertyNameShortJoiningTypeV1::INFO,
727    PropertyNameShortLineBreakV1::INFO,
728    PropertyNameShortScriptV1::INFO,
729    PropertyNameShortSentenceBreakV1::INFO,
730    PropertyNameShortVerticalOrientationV1::INFO,
731    PropertyNameShortWordBreakV1::INFO,
732    PropertyBinaryAlnumV1::INFO,
733    PropertyBinaryAlphabeticV1::INFO,
734    PropertyBinaryAsciiHexDigitV1::INFO,
735    PropertyBinaryBidiControlV1::INFO,
736    PropertyBinaryBidiMirroredV1::INFO,
737    PropertyBinaryBlankV1::INFO,
738    PropertyBinaryCasedV1::INFO,
739    PropertyBinaryCaseIgnorableV1::INFO,
740    PropertyBinaryCaseSensitiveV1::INFO,
741    PropertyBinaryChangesWhenCasefoldedV1::INFO,
742    PropertyBinaryChangesWhenCasemappedV1::INFO,
743    PropertyBinaryChangesWhenLowercasedV1::INFO,
744    PropertyBinaryChangesWhenNfkcCasefoldedV1::INFO,
745    PropertyBinaryChangesWhenTitlecasedV1::INFO,
746    PropertyBinaryChangesWhenUppercasedV1::INFO,
747    PropertyBinaryDashV1::INFO,
748    PropertyBinaryDefaultIgnorableCodePointV1::INFO,
749    PropertyBinaryDeprecatedV1::INFO,
750    PropertyBinaryDiacriticV1::INFO,
751    PropertyBinaryEmojiComponentV1::INFO,
752    PropertyBinaryEmojiModifierBaseV1::INFO,
753    PropertyBinaryEmojiModifierV1::INFO,
754    PropertyBinaryEmojiPresentationV1::INFO,
755    PropertyBinaryEmojiV1::INFO,
756    PropertyBinaryExtendedPictographicV1::INFO,
757    PropertyBinaryExtenderV1::INFO,
758    PropertyBinaryFullCompositionExclusionV1::INFO,
759    PropertyBinaryGraphemeBaseV1::INFO,
760    PropertyBinaryGraphemeExtendV1::INFO,
761    PropertyBinaryGraphemeLinkV1::INFO,
762    PropertyBinaryGraphV1::INFO,
763    PropertyBinaryHexDigitV1::INFO,
764    PropertyBinaryHyphenV1::INFO,
765    PropertyBinaryIdContinueV1::INFO,
766    PropertyBinaryIdeographicV1::INFO,
767    PropertyBinaryIdsBinaryOperatorV1::INFO,
768    PropertyBinaryIdStartV1::INFO,
769    PropertyBinaryIdsTrinaryOperatorV1::INFO,
770    PropertyBinaryJoinControlV1::INFO,
771    PropertyBinaryLogicalOrderExceptionV1::INFO,
772    PropertyBinaryLowercaseV1::INFO,
773    PropertyBinaryMathV1::INFO,
774    PropertyBinaryNfcInertV1::INFO,
775    PropertyBinaryNfdInertV1::INFO,
776    PropertyBinaryNfkcInertV1::INFO,
777    PropertyBinaryNfkdInertV1::INFO,
778    PropertyBinaryNoncharacterCodePointV1::INFO,
779    PropertyBinaryPatternSyntaxV1::INFO,
780    PropertyBinaryPatternWhiteSpaceV1::INFO,
781    PropertyBinaryPrependedConcatenationMarkV1::INFO,
782    PropertyBinaryPrintV1::INFO,
783    PropertyBinaryQuotationMarkV1::INFO,
784    PropertyBinaryRadicalV1::INFO,
785    PropertyBinaryRegionalIndicatorV1::INFO,
786    PropertyBinarySegmentStarterV1::INFO,
787    PropertyBinarySentenceTerminalV1::INFO,
788    PropertyBinarySoftDottedV1::INFO,
789    PropertyBinaryTerminalPunctuationV1::INFO,
790    PropertyBinaryUnifiedIdeographV1::INFO,
791    PropertyBinaryUppercaseV1::INFO,
792    PropertyBinaryVariationSelectorV1::INFO,
793    PropertyBinaryWhiteSpaceV1::INFO,
794    PropertyBinaryXdigitV1::INFO,
795    PropertyBinaryXidContinueV1::INFO,
796    PropertyBinaryXidStartV1::INFO,
797    PropertyEnumBidiClassV1::INFO,
798    PropertyEnumCanonicalCombiningClassV1::INFO,
799    PropertyEnumEastAsianWidthV1::INFO,
800    PropertyEnumGeneralCategoryV1::INFO,
801    PropertyEnumGraphemeClusterBreakV1::INFO,
802    PropertyEnumHangulSyllableTypeV1::INFO,
803    PropertyEnumIndicConjunctBreakV1::INFO,
804    PropertyEnumIndicSyllabicCategoryV1::INFO,
805    PropertyEnumJoiningTypeV1::INFO,
806    PropertyEnumLineBreakV1::INFO,
807    PropertyEnumScriptV1::INFO,
808    PropertyEnumSentenceBreakV1::INFO,
809    PropertyEnumVerticalOrientationV1::INFO,
810    PropertyEnumWordBreakV1::INFO,
811    PropertyEnumBidiMirroringGlyphV1::INFO,
812    PropertyBinaryBasicEmojiV1::INFO,
813    PropertyScriptWithExtensionsV1::INFO,
814];
815
816/// A set of characters which share a particular property value.
817///
818/// This data enum is extensible, more backends may be added in the future.
819/// Old data can be used with newer code but not vice versa.
820///
821/// <div class="stab unstable">
822/// 🚧 This code is considered unstable; it may change at any time, in breaking or non-breaking ways,
823/// including in SemVer minor releases. While the serde representation of data structs is guaranteed
824/// to be stable, their Rust representation might not be. Use with caution.
825/// </div>
826#[derive(Debug, Eq, PartialEq, Clone, yoke::Yokeable, zerofrom::ZeroFrom)]
827#[cfg_attr(feature = "datagen", derive(serde::Serialize, databake::Bake))]
828#[cfg_attr(feature = "datagen", databake(path = icu_properties::provider))]
829#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
830#[non_exhaustive]
831pub enum PropertyCodePointSet<'data> {
832    /// The set of characters, represented as an inversion list
833    InversionList(#[cfg_attr(feature = "serde", serde(borrow))] CodePointInversionList<'data>),
834    // new variants should go BELOW existing ones
835    // Serde serializes based on variant name and index in the enum
836    // https://docs.rs/serde/latest/serde/trait.Serializer.html#tymethod.serialize_unit_variant
837}
838
839icu_provider::data_struct!(
840    PropertyCodePointSet<'_>,
841    #[cfg(feature = "datagen")]
842);
843
844// See CodePointSetData for documentation of these functions
845impl<'data> PropertyCodePointSet<'data> {
846    #[inline]
847    pub(crate) fn contains(&self, ch: char) -> bool {
848        match *self {
849            Self::InversionList(ref l) => l.contains(ch),
850        }
851    }
852
853    #[inline]
854    pub(crate) fn contains32(&self, ch: u32) -> bool {
855        match *self {
856            Self::InversionList(ref l) => l.contains32(ch),
857        }
858    }
859
860    #[inline]
861    pub(crate) fn iter_ranges(&self) -> impl Iterator<Item = RangeInclusive<u32>> + '_ {
862        match *self {
863            Self::InversionList(ref l) => l.iter_ranges(),
864        }
865    }
866
867    #[inline]
868    pub(crate) fn iter_ranges_complemented(
869        &self,
870    ) -> impl Iterator<Item = RangeInclusive<u32>> + '_ {
871        match *self {
872            Self::InversionList(ref l) => l.iter_ranges_complemented(),
873        }
874    }
875
876    #[inline]
877    pub(crate) fn from_code_point_inversion_list(l: CodePointInversionList<'static>) -> Self {
878        Self::InversionList(l)
879    }
880
881    #[inline]
882    pub(crate) fn as_code_point_inversion_list(
883        &'_ self,
884    ) -> Option<&'_ CodePointInversionList<'data>> {
885        match *self {
886            Self::InversionList(ref l) => Some(l),
887            // any other backing data structure that cannot return a CPInvList in O(1) time should return None
888        }
889    }
890
891    #[inline]
892    pub(crate) fn to_code_point_inversion_list(&self) -> CodePointInversionList<'_> {
893        match *self {
894            Self::InversionList(ref t) => ZeroFrom::zero_from(t),
895        }
896    }
897}
898
899/// A map efficiently storing data about individual characters.
900///
901/// This data enum is extensible, more backends may be added in the future.
902/// Old data can be used with newer code but not vice versa.
903///
904/// <div class="stab unstable">
905/// 🚧 This code is considered unstable; it may change at any time, in breaking or non-breaking ways,
906/// including in SemVer minor releases. While the serde representation of data structs is guaranteed
907/// to be stable, their Rust representation might not be. Use with caution.
908/// </div>
909#[derive(Clone, Debug, Eq, PartialEq, yoke::Yokeable, zerofrom::ZeroFrom)]
910#[cfg_attr(feature = "datagen", derive(serde::Serialize, databake::Bake))]
911#[cfg_attr(feature = "datagen", databake(path = icu_properties::provider))]
912#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
913#[non_exhaustive]
914pub enum PropertyCodePointMap<'data, T: TrieValue> {
915    /// A codepoint trie storing the data
916    CodePointTrie(#[cfg_attr(feature = "serde", serde(borrow))] CodePointTrie<'data, T>),
917    // new variants should go BELOW existing ones
918    // Serde serializes based on variant name and index in the enum
919    // https://docs.rs/serde/latest/serde/trait.Serializer.html#tymethod.serialize_unit_variant
920}
921
922icu_provider::data_struct!(
923    <T: TrieValue> PropertyCodePointMap<'_, T>,
924    #[cfg(feature = "datagen")]
925);
926
927// See CodePointMapData for documentation of these functions
928impl<'data, T: TrieValue> PropertyCodePointMap<'data, T> {
929    #[inline]
930    pub(crate) fn get32(&self, ch: u32) -> T {
931        match *self {
932            Self::CodePointTrie(ref t) => t.get32(ch),
933        }
934    }
935
936    #[inline]
937    #[cfg(feature = "alloc")]
938    pub(crate) fn try_into_converted<P>(
939        self,
940    ) -> Result<PropertyCodePointMap<'data, P>, zerovec::ule::UleError>
941    where
942        P: TrieValue,
943    {
944        match self {
945            Self::CodePointTrie(t) => t
946                .try_into_converted()
947                .map(PropertyCodePointMap::CodePointTrie),
948        }
949    }
950
951    #[inline]
952    #[cfg(feature = "alloc")]
953    pub(crate) fn get_set_for_value(&self, value: T) -> CodePointInversionList<'static> {
954        match *self {
955            Self::CodePointTrie(ref t) => t.get_set_for_value(value),
956        }
957    }
958
959    #[inline]
960    pub(crate) fn iter_ranges(&self) -> impl Iterator<Item = CodePointMapRange<T>> + '_ {
961        match *self {
962            Self::CodePointTrie(ref t) => t.iter_ranges(),
963        }
964    }
965    #[inline]
966    pub(crate) fn iter_ranges_mapped<'a, U: Eq + 'a>(
967        &'a self,
968        map: impl FnMut(T) -> U + Copy + 'a,
969    ) -> impl Iterator<Item = CodePointMapRange<U>> + 'a {
970        match *self {
971            Self::CodePointTrie(ref t) => t.iter_ranges_mapped(map),
972        }
973    }
974
975    #[inline]
976    pub(crate) fn from_code_point_trie(trie: CodePointTrie<'static, T>) -> Self {
977        Self::CodePointTrie(trie)
978    }
979
980    #[inline]
981    pub(crate) fn as_code_point_trie(&self) -> Option<&CodePointTrie<'data, T>> {
982        match *self {
983            Self::CodePointTrie(ref t) => Some(t),
984            // any other backing data structure that cannot return a CPT in O(1) time should return None
985        }
986    }
987
988    #[inline]
989    pub(crate) fn to_code_point_trie(&self) -> CodePointTrie<'_, T> {
990        match *self {
991            Self::CodePointTrie(ref t) => ZeroFrom::zero_from(t),
992        }
993    }
994}
995
996/// A set of characters and strings which share a particular property value.
997///
998/// <div class="stab unstable">
999/// 🚧 This code is considered unstable; it may change at any time, in breaking or non-breaking ways,
1000/// including in SemVer minor releases. While the serde representation of data structs is guaranteed
1001/// to be stable, their Rust representation might not be. Use with caution.
1002/// </div>
1003#[derive(Debug, Eq, PartialEq, Clone, yoke::Yokeable, zerofrom::ZeroFrom)]
1004#[cfg_attr(feature = "datagen", derive(serde::Serialize, databake::Bake))]
1005#[cfg_attr(feature = "datagen", databake(path = icu_properties::provider))]
1006#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
1007#[non_exhaustive]
1008pub enum PropertyUnicodeSet<'data> {
1009    /// A set representing characters in an inversion list, and the strings in a list.
1010    CPInversionListStrList(
1011        #[cfg_attr(feature = "serde", serde(borrow))] CodePointInversionListAndStringList<'data>,
1012    ),
1013    // new variants should go BELOW existing ones
1014    // Serde serializes based on variant name and index in the enum
1015    // https://docs.rs/serde/latest/serde/trait.Serializer.html#tymethod.serialize_unit_variant
1016}
1017
1018icu_provider::data_struct!(
1019    PropertyUnicodeSet<'_>,
1020    #[cfg(feature = "datagen")]
1021);
1022
1023impl<'data> PropertyUnicodeSet<'data> {
1024    #[inline]
1025    pub(crate) fn contains_str(&self, s: &str) -> bool {
1026        match *self {
1027            Self::CPInversionListStrList(ref l) => l.contains_str(s),
1028        }
1029    }
1030
1031    #[inline]
1032    pub(crate) fn contains32(&self, cp: u32) -> bool {
1033        match *self {
1034            Self::CPInversionListStrList(ref l) => l.contains32(cp),
1035        }
1036    }
1037
1038    #[inline]
1039    pub(crate) fn contains(&self, ch: char) -> bool {
1040        match *self {
1041            Self::CPInversionListStrList(ref l) => l.contains(ch),
1042        }
1043    }
1044
1045    #[inline]
1046    pub(crate) fn from_code_point_inversion_list_string_list(
1047        l: CodePointInversionListAndStringList<'static>,
1048    ) -> Self {
1049        Self::CPInversionListStrList(l)
1050    }
1051
1052    #[inline]
1053    pub(crate) fn as_code_point_inversion_list_string_list(
1054        &'_ self,
1055    ) -> Option<&'_ CodePointInversionListAndStringList<'data>> {
1056        match *self {
1057            Self::CPInversionListStrList(ref l) => Some(l),
1058            // any other backing data structure that cannot return a CPInversionListStrList in O(1) time should return None
1059        }
1060    }
1061
1062    #[inline]
1063    pub(crate) fn to_code_point_inversion_list_string_list(
1064        &self,
1065    ) -> CodePointInversionListAndStringList<'_> {
1066        match *self {
1067            Self::CPInversionListStrList(ref t) => ZeroFrom::zero_from(t),
1068        }
1069    }
1070}
1071
1072/// A struct that efficiently stores `Script` and `Script_Extensions` property data.
1073///
1074/// <div class="stab unstable">
1075/// 🚧 This code is considered unstable; it may change at any time, in breaking or non-breaking ways,
1076/// including in SemVer minor releases. While the serde representation of data structs is guaranteed
1077/// to be stable, their Rust representation might not be. Use with caution.
1078/// </div>
1079#[derive(Debug, Eq, PartialEq, Clone, yoke::Yokeable, zerofrom::ZeroFrom)]
1080#[cfg_attr(feature = "datagen", derive(serde::Serialize, databake::Bake))]
1081#[cfg_attr(feature = "datagen", databake(path = icu_properties::provider))]
1082#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
1083pub struct ScriptWithExtensionsProperty<'data> {
1084    /// Note: The `ScriptWithExt` values in this array will assume a 12-bit layout. The 2
1085    /// higher order bits 11..10 will indicate how to deduce the Script value and
1086    /// Script_Extensions value, nearly matching the representation
1087    /// [in ICU](https://github.com/unicode-org/icu/blob/main/icu4c/source/common/uprops.h):
1088    ///
1089    /// | High order 2 bits value | Script                                                 | Script_Extensions                                              |
1090    /// |-------------------------|--------------------------------------------------------|----------------------------------------------------------------|
1091    /// | 3                       | First value in sub-array, index given by lower 10 bits | Sub-array excluding first value, index given by lower 10 bits  |
1092    /// | 2                       | Script=Inherited                                       | Entire sub-array, index given by lower 10 bits                 |
1093    /// | 1                       | Script=Common                                          | Entire sub-array, index given by lower 10 bits                 |
1094    /// | 0                       | Value in lower 10 bits                                 | `[ Script value ]` single-element array                        |
1095    ///
1096    /// When the lower 10 bits of the value are used as an index, that index is
1097    /// used for the outer-level vector of the nested `extensions` structure.
1098    #[cfg_attr(feature = "serde", serde(borrow))]
1099    pub trie: CodePointTrie<'data, ScriptWithExt>,
1100
1101    /// This companion structure stores Script_Extensions values, which are
1102    /// themselves arrays / vectors. This structure only stores the values for
1103    /// cases in which `scx(cp) != [ sc(cp) ]`. Each sub-vector is distinct. The
1104    /// sub-vector represents the Script_Extensions array value for a code point,
1105    /// and may also indicate Script value, as described for the `trie` field.
1106    #[cfg_attr(feature = "serde", serde(borrow))]
1107    pub extensions: VarZeroVec<'data, ZeroSlice<Script>>,
1108}
1109
1110icu_provider::data_struct!(
1111    ScriptWithExtensionsProperty<'_>,
1112    #[cfg(feature = "datagen")]
1113);