1pub use crate::names::{NamedEnumeratedProperty, ParseableEnumeratedProperty};
21
22pub use crate::bidi::{BidiMirroringGlyph, BidiPairedBracketType};
23
24macro_rules! create_const_array {
36 (
37 $ ( #[$meta:meta] )*
38 impl $enum_ty:ident {
39 $( $(#[$const_meta:meta])* $v:vis const $i:ident: $t:ty = $e:expr; )*
40 }
41 #[test]
42 fn $consts_test:ident();
43 ) => {
44 $( #[$meta] )*
45 impl $enum_ty {
46 $(
47 $(#[$const_meta])*
48 $v const $i: $t = $e;
49 )*
50
51 pub const ALL_VALUES: &'static [$enum_ty] = &[
54 $($enum_ty::$i),*
55 ];
56 }
57
58 #[cfg(feature = "datagen")]
59 impl databake::Bake for $enum_ty {
60 fn bake(&self, env: &databake::CrateEnv) -> databake::TokenStream {
61 env.insert("icu_properties");
62 match *self {
63 $(
64 Self::$i => databake::quote!(icu_properties::props::$enum_ty::$i),
65 )*
66 Self(v) => databake::quote!(icu_properties::props::$enum_ty::from_icu4c_value(#v)),
67 }
68 }
69 }
70
71
72 impl From<$enum_ty> for u16 {
73 #[allow(trivial_numeric_casts)]
74 fn from(other: $enum_ty) -> Self {
75 other.0 as u16
76 }
77 }
78
79 #[test]
80 fn $consts_test() {
81 $(
82 assert_eq!(
83 crate::names::PropertyNamesLong::<$enum_ty>::new().get($enum_ty::$i).unwrap()
84 .replace('_', "")
86 .replace("Ethiopic", "Ethiopian")
88 .replace("Aran", "Nastaliq")
90 .replace("LVSyllable", "LeadingVowelSyllable")
92 .replace("LVTSyllable", "LeadingVowelTrailingSyllable"),
93 stringify!($i)
94 );
95 )*
96 }
97 }
98}
99
100pub use crate::code_point_map::EnumeratedProperty;
101
102macro_rules! make_enumerated_property {
103 (
104 name: $name:literal;
105 short_name: $short_name:literal;
106 ident: $value_ty:path;
107 data_marker: $data_marker:ty;
108 singleton: $singleton:ident;
109 $(ule_ty: $ule_ty:ty;)?
110 ) => {
111 impl crate::private::Sealed for $value_ty {}
112
113 impl EnumeratedProperty for $value_ty {
114 type DataMarker = $data_marker;
115 #[cfg(feature = "compiled_data")]
116 const SINGLETON: &'static crate::provider::PropertyCodePointMap<'static, Self> =
117 crate::provider::Baked::$singleton;
118 const NAME: &'static [u8] = $name.as_bytes();
119 const SHORT_NAME: &'static [u8] = $short_name.as_bytes();
120 }
121
122 $(
123 impl zerovec::ule::AsULE for $value_ty {
124 type ULE = $ule_ty;
125
126 fn to_unaligned(self) -> Self::ULE {
127 self.0.to_unaligned()
128 }
129 fn from_unaligned(unaligned: Self::ULE) -> Self {
130 Self(zerovec::ule::AsULE::from_unaligned(unaligned))
131 }
132 }
133 )?
134 };
135}
136
137#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
158#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
159#[allow(clippy::exhaustive_structs)] #[repr(transparent)]
161pub struct BidiClass(pub(crate) u8);
162
163impl BidiClass {
164 pub const fn to_icu4c_value(self) -> u8 {
166 self.0
167 }
168 pub const fn from_icu4c_value(value: u8) -> Self {
170 Self(value)
171 }
172}
173
174create_const_array! {
175#[allow(non_upper_case_globals)]
176impl BidiClass {
177 pub const LeftToRight: BidiClass = BidiClass(0);
179 pub const RightToLeft: BidiClass = BidiClass(1);
181 pub const EuropeanNumber: BidiClass = BidiClass(2);
183 pub const EuropeanSeparator: BidiClass = BidiClass(3);
185 pub const EuropeanTerminator: BidiClass = BidiClass(4);
187 pub const ArabicNumber: BidiClass = BidiClass(5);
189 pub const CommonSeparator: BidiClass = BidiClass(6);
191 pub const ParagraphSeparator: BidiClass = BidiClass(7);
193 pub const SegmentSeparator: BidiClass = BidiClass(8);
195 pub const WhiteSpace: BidiClass = BidiClass(9);
197 pub const OtherNeutral: BidiClass = BidiClass(10);
199 pub const LeftToRightEmbedding: BidiClass = BidiClass(11);
201 pub const LeftToRightOverride: BidiClass = BidiClass(12);
203 pub const ArabicLetter: BidiClass = BidiClass(13);
205 pub const RightToLeftEmbedding: BidiClass = BidiClass(14);
207 pub const RightToLeftOverride: BidiClass = BidiClass(15);
209 pub const PopDirectionalFormat: BidiClass = BidiClass(16);
211 pub const NonspacingMark: BidiClass = BidiClass(17);
213 pub const BoundaryNeutral: BidiClass = BidiClass(18);
215 pub const FirstStrongIsolate: BidiClass = BidiClass(19);
217 pub const LeftToRightIsolate: BidiClass = BidiClass(20);
219 pub const RightToLeftIsolate: BidiClass = BidiClass(21);
221 pub const PopDirectionalIsolate: BidiClass = BidiClass(22);
223}
224#[test]
225fn bidi_props_consts();
226}
227
228make_enumerated_property! {
229 name: "Bidi_Class";
230 short_name: "bc";
231 ident: BidiClass;
232 data_marker: crate::provider::PropertyEnumBidiClassV1;
233 singleton: SINGLETON_PROPERTY_ENUM_BIDI_CLASS_V1;
234 ule_ty: u8;
235}
236
237#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
257#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
258#[allow(clippy::exhaustive_structs)] #[repr(transparent)]
260pub struct NumericType(pub(crate) u8);
261
262impl NumericType {
263 pub const fn to_icu4c_value(self) -> u8 {
265 self.0
266 }
267 pub const fn from_icu4c_value(value: u8) -> Self {
269 Self(value)
270 }
271}
272
273create_const_array! {
274#[allow(non_upper_case_globals)]
275impl NumericType {
276 pub const None: NumericType = NumericType(0);
278 pub const Decimal: NumericType = NumericType(1);
282 pub const Digit: NumericType = NumericType(2);
288 pub const Numeric: NumericType = NumericType(3);
290}
291#[test]
292fn numeric_type_consts();
293}
294
295make_enumerated_property! {
296 name: "Numeric_Type";
297 short_name: "nt";
298 ident: NumericType;
299 data_marker: crate::provider::PropertyEnumNumericTypeV1;
300 singleton: SINGLETON_PROPERTY_ENUM_NUMERIC_TYPE_V1;
301 ule_ty: u8;
302}
303
304pub(crate) mod gc {
306 #[derive(Copy, Clone, PartialEq, Eq, Debug, Ord, PartialOrd, Hash)]
331 #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
332 #[cfg_attr(feature = "datagen", derive(databake::Bake))]
333 #[cfg_attr(feature = "datagen", databake(path = icu_properties::props))]
334 #[allow(clippy::exhaustive_enums)] #[zerovec::make_ule(GeneralCategoryULE)]
336 #[cfg_attr(not(feature = "alloc"), zerovec::skip_derive(ZeroMapKV))]
337 #[repr(u8)]
338 pub enum GeneralCategory {
339 Unassigned = 0,
341
342 UppercaseLetter = 1,
344 LowercaseLetter = 2,
346 TitlecaseLetter = 3,
348 ModifierLetter = 4,
350 OtherLetter = 5,
352
353 NonspacingMark = 6,
355 SpacingMark = 8,
357 EnclosingMark = 7,
359
360 DecimalNumber = 9,
362 LetterNumber = 10,
364 OtherNumber = 11,
366
367 SpaceSeparator = 12,
369 LineSeparator = 13,
371 ParagraphSeparator = 14,
373
374 Control = 15,
376 Format = 16,
378 PrivateUse = 17,
380 Surrogate = 18,
382
383 DashPunctuation = 19,
385 OpenPunctuation = 20,
387 ClosePunctuation = 21,
389 ConnectorPunctuation = 22,
391 InitialPunctuation = 28,
393 FinalPunctuation = 29,
395 OtherPunctuation = 23,
397
398 MathSymbol = 24,
400 CurrencySymbol = 25,
402 ModifierSymbol = 26,
404 OtherSymbol = 27,
406 }
407}
408
409pub use gc::GeneralCategory;
410
411impl GeneralCategory {
412 pub const ALL_VALUES: &'static [GeneralCategory] = &[
414 GeneralCategory::Unassigned,
415 GeneralCategory::UppercaseLetter,
416 GeneralCategory::LowercaseLetter,
417 GeneralCategory::TitlecaseLetter,
418 GeneralCategory::ModifierLetter,
419 GeneralCategory::OtherLetter,
420 GeneralCategory::NonspacingMark,
421 GeneralCategory::SpacingMark,
422 GeneralCategory::EnclosingMark,
423 GeneralCategory::DecimalNumber,
424 GeneralCategory::LetterNumber,
425 GeneralCategory::OtherNumber,
426 GeneralCategory::SpaceSeparator,
427 GeneralCategory::LineSeparator,
428 GeneralCategory::ParagraphSeparator,
429 GeneralCategory::Control,
430 GeneralCategory::Format,
431 GeneralCategory::PrivateUse,
432 GeneralCategory::Surrogate,
433 GeneralCategory::DashPunctuation,
434 GeneralCategory::OpenPunctuation,
435 GeneralCategory::ClosePunctuation,
436 GeneralCategory::ConnectorPunctuation,
437 GeneralCategory::InitialPunctuation,
438 GeneralCategory::FinalPunctuation,
439 GeneralCategory::OtherPunctuation,
440 GeneralCategory::MathSymbol,
441 GeneralCategory::CurrencySymbol,
442 GeneralCategory::ModifierSymbol,
443 GeneralCategory::OtherSymbol,
444 ];
445}
446
447#[test]
448fn gc_variants() {
449 for &variant in GeneralCategory::ALL_VALUES {
450 assert_eq!(
451 crate::names::PropertyNamesLong::<GeneralCategory>::new()
452 .get(variant)
453 .unwrap()
454 .replace('_', ""),
456 format!("{variant:?}")
457 );
458 }
459}
460
461#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Hash, Default)]
462#[non_exhaustive]
464pub struct GeneralCategoryOutOfBoundsError;
465
466impl TryFrom<u8> for GeneralCategory {
467 type Error = GeneralCategoryOutOfBoundsError;
468 fn try_from(val: u8) -> Result<Self, GeneralCategoryOutOfBoundsError> {
471 GeneralCategory::new_from_u8(val).ok_or(GeneralCategoryOutOfBoundsError)
472 }
473}
474
475make_enumerated_property! {
476 name: "General_Category";
477 short_name: "gc";
478 ident: GeneralCategory;
479 data_marker: crate::provider::PropertyEnumGeneralCategoryV1;
480 singleton: SINGLETON_PROPERTY_ENUM_GENERAL_CATEGORY_V1;
481}
482
483#[derive(Copy, Clone, PartialEq, Debug, Eq)]
499#[allow(clippy::exhaustive_structs)] #[repr(transparent)]
501pub struct GeneralCategoryGroup(pub(crate) u32);
502
503impl crate::private::Sealed for GeneralCategoryGroup {}
504
505use GeneralCategory as GC;
506use GeneralCategoryGroup as GCG;
507
508#[allow(non_upper_case_globals)]
509impl GeneralCategoryGroup {
510 pub const UppercaseLetter: GeneralCategoryGroup = GCG(1 << (GC::UppercaseLetter as u32));
512 pub const LowercaseLetter: GeneralCategoryGroup = GCG(1 << (GC::LowercaseLetter as u32));
514 pub const TitlecaseLetter: GeneralCategoryGroup = GCG(1 << (GC::TitlecaseLetter as u32));
516 pub const ModifierLetter: GeneralCategoryGroup = GCG(1 << (GC::ModifierLetter as u32));
518 pub const OtherLetter: GeneralCategoryGroup = GCG(1 << (GC::OtherLetter as u32));
520 pub const CasedLetter: GeneralCategoryGroup = GCG((1 << (GC::UppercaseLetter as u32))
522 | (1 << (GC::LowercaseLetter as u32))
523 | (1 << (GC::TitlecaseLetter as u32)));
524 pub const Letter: GeneralCategoryGroup = GCG((1 << (GC::UppercaseLetter as u32))
526 | (1 << (GC::LowercaseLetter as u32))
527 | (1 << (GC::TitlecaseLetter as u32))
528 | (1 << (GC::ModifierLetter as u32))
529 | (1 << (GC::OtherLetter as u32)));
530
531 pub const NonspacingMark: GeneralCategoryGroup = GCG(1 << (GC::NonspacingMark as u32));
533 pub const EnclosingMark: GeneralCategoryGroup = GCG(1 << (GC::EnclosingMark as u32));
535 pub const SpacingMark: GeneralCategoryGroup = GCG(1 << (GC::SpacingMark as u32));
537 pub const Mark: GeneralCategoryGroup = GCG((1 << (GC::NonspacingMark as u32))
539 | (1 << (GC::EnclosingMark as u32))
540 | (1 << (GC::SpacingMark as u32)));
541
542 pub const DecimalNumber: GeneralCategoryGroup = GCG(1 << (GC::DecimalNumber as u32));
544 pub const LetterNumber: GeneralCategoryGroup = GCG(1 << (GC::LetterNumber as u32));
546 pub const OtherNumber: GeneralCategoryGroup = GCG(1 << (GC::OtherNumber as u32));
548 pub const Number: GeneralCategoryGroup = GCG((1 << (GC::DecimalNumber as u32))
550 | (1 << (GC::LetterNumber as u32))
551 | (1 << (GC::OtherNumber as u32)));
552
553 pub const SpaceSeparator: GeneralCategoryGroup = GCG(1 << (GC::SpaceSeparator as u32));
555 pub const LineSeparator: GeneralCategoryGroup = GCG(1 << (GC::LineSeparator as u32));
557 pub const ParagraphSeparator: GeneralCategoryGroup = GCG(1 << (GC::ParagraphSeparator as u32));
559 pub const Separator: GeneralCategoryGroup = GCG((1 << (GC::SpaceSeparator as u32))
561 | (1 << (GC::LineSeparator as u32))
562 | (1 << (GC::ParagraphSeparator as u32)));
563
564 pub const Control: GeneralCategoryGroup = GCG(1 << (GC::Control as u32));
566 pub const Format: GeneralCategoryGroup = GCG(1 << (GC::Format as u32));
568 pub const PrivateUse: GeneralCategoryGroup = GCG(1 << (GC::PrivateUse as u32));
570 pub const Surrogate: GeneralCategoryGroup = GCG(1 << (GC::Surrogate as u32));
572 pub const Unassigned: GeneralCategoryGroup = GCG(1 << (GC::Unassigned as u32));
574 pub const Other: GeneralCategoryGroup = GCG((1 << (GC::Control as u32))
576 | (1 << (GC::Format as u32))
577 | (1 << (GC::PrivateUse as u32))
578 | (1 << (GC::Surrogate as u32))
579 | (1 << (GC::Unassigned as u32)));
580
581 pub const DashPunctuation: GeneralCategoryGroup = GCG(1 << (GC::DashPunctuation as u32));
583 pub const OpenPunctuation: GeneralCategoryGroup = GCG(1 << (GC::OpenPunctuation as u32));
585 pub const ClosePunctuation: GeneralCategoryGroup = GCG(1 << (GC::ClosePunctuation as u32));
587 pub const ConnectorPunctuation: GeneralCategoryGroup =
589 GCG(1 << (GC::ConnectorPunctuation as u32));
590 pub const InitialPunctuation: GeneralCategoryGroup = GCG(1 << (GC::InitialPunctuation as u32));
592 pub const FinalPunctuation: GeneralCategoryGroup = GCG(1 << (GC::FinalPunctuation as u32));
594 pub const OtherPunctuation: GeneralCategoryGroup = GCG(1 << (GC::OtherPunctuation as u32));
596 pub const Punctuation: GeneralCategoryGroup = GCG((1 << (GC::DashPunctuation as u32))
598 | (1 << (GC::OpenPunctuation as u32))
599 | (1 << (GC::ClosePunctuation as u32))
600 | (1 << (GC::ConnectorPunctuation as u32))
601 | (1 << (GC::OtherPunctuation as u32))
602 | (1 << (GC::InitialPunctuation as u32))
603 | (1 << (GC::FinalPunctuation as u32)));
604
605 pub const MathSymbol: GeneralCategoryGroup = GCG(1 << (GC::MathSymbol as u32));
607 pub const CurrencySymbol: GeneralCategoryGroup = GCG(1 << (GC::CurrencySymbol as u32));
609 pub const ModifierSymbol: GeneralCategoryGroup = GCG(1 << (GC::ModifierSymbol as u32));
611 pub const OtherSymbol: GeneralCategoryGroup = GCG(1 << (GC::OtherSymbol as u32));
613 pub const Symbol: GeneralCategoryGroup = GCG((1 << (GC::MathSymbol as u32))
615 | (1 << (GC::CurrencySymbol as u32))
616 | (1 << (GC::ModifierSymbol as u32))
617 | (1 << (GC::OtherSymbol as u32)));
618
619 const ALL: u32 = (1 << (GC::FinalPunctuation as u32 + 1)) - 1;
620
621 pub const fn contains(self, val: GeneralCategory) -> bool {
665 0 != (1 << (val as u32)) & self.0
666 }
667
668 pub const fn complement(self) -> Self {
686 GeneralCategoryGroup(!self.0 & Self::ALL)
689 }
690
691 pub const fn all() -> Self {
705 Self(Self::ALL)
706 }
707
708 pub const fn empty() -> Self {
722 Self(0)
723 }
724
725 pub const fn union(self, other: Self) -> Self {
741 Self(self.0 | other.0)
742 }
743
744 pub const fn intersection(self, other: Self) -> Self {
761 Self(self.0 & other.0)
762 }
763}
764
765impl From<GeneralCategory> for GeneralCategoryGroup {
766 fn from(subcategory: GeneralCategory) -> Self {
767 GeneralCategoryGroup(1 << (subcategory as u32))
768 }
769}
770impl From<u32> for GeneralCategoryGroup {
771 fn from(mask: u32) -> Self {
772 GeneralCategoryGroup(mask & Self::ALL)
775 }
776}
777impl From<GeneralCategoryGroup> for u32 {
778 fn from(group: GeneralCategoryGroup) -> Self {
779 group.0
780 }
781}
782
783#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
806#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
807#[allow(clippy::exhaustive_structs)] #[repr(transparent)]
809pub struct Script(pub(crate) u16);
810
811impl Script {
812 pub const fn to_icu4c_value(self) -> u16 {
814 self.0
815 }
816 pub const fn from_icu4c_value(value: u16) -> Self {
818 Self(value)
819 }
820}
821
822create_const_array! {
823#[allow(missing_docs)] #[allow(non_upper_case_globals)]
825impl Script {
826 pub const Adlam: Script = Script(167);
827 pub const Ahom: Script = Script(161);
828 pub const AnatolianHieroglyphs: Script = Script(156);
829 pub const Arabic: Script = Script(2);
830 pub const Armenian: Script = Script(3);
831 pub const Avestan: Script = Script(117);
832 pub const Balinese: Script = Script(62);
833 pub const Bamum: Script = Script(130);
834 pub const BassaVah: Script = Script(134);
835 pub const Batak: Script = Script(63);
836 pub const Bengali: Script = Script(4);
837 pub const BeriaErfe: Script = Script(208);
838 pub const Bhaiksuki: Script = Script(168);
839 pub const Bopomofo: Script = Script(5);
840 pub const Brahmi: Script = Script(65);
841 pub const Braille: Script = Script(46);
842 pub const Buginese: Script = Script(55);
843 pub const Buhid: Script = Script(44);
844 pub const CanadianAboriginal: Script = Script(40);
845 pub const Carian: Script = Script(104);
846 pub const CaucasianAlbanian: Script = Script(159);
847 pub const Chakma: Script = Script(118);
848 pub const Cham: Script = Script(66);
849 pub const Cherokee: Script = Script(6);
850 pub const Chorasmian: Script = Script(189);
851 pub const Common: Script = Script(0);
852 pub const Coptic: Script = Script(7);
853 pub const Cuneiform: Script = Script(101);
854 pub const Cypriot: Script = Script(47);
855 pub const CyproMinoan: Script = Script(193);
856 pub const Cyrillic: Script = Script(8);
857 pub const Deseret: Script = Script(9);
858 pub const Devanagari: Script = Script(10);
859 pub const DivesAkuru: Script = Script(190);
860 pub const Dogra: Script = Script(178);
861 pub const Duployan: Script = Script(135);
862 pub const EgyptianHieroglyphs: Script = Script(71);
863 pub const Elbasan: Script = Script(136);
864 pub const Elymaic: Script = Script(185);
865 pub const Ethiopian: Script = Script(11);
866 pub const Garay: Script = Script(201);
867 pub const Georgian: Script = Script(12);
868 pub const Glagolitic: Script = Script(56);
869 pub const Gothic: Script = Script(13);
870 pub const Grantha: Script = Script(137);
871 pub const Greek: Script = Script(14);
872 pub const Gujarati: Script = Script(15);
873 pub const GunjalaGondi: Script = Script(179);
874 pub const Gurmukhi: Script = Script(16);
875 pub const GurungKhema: Script = Script(202);
876 pub const Han: Script = Script(17);
877 pub const Hangul: Script = Script(18);
878 pub const HanifiRohingya: Script = Script(182);
879 pub const Hanunoo: Script = Script(43);
880 pub const Hatran: Script = Script(162);
881 pub const Hebrew: Script = Script(19);
882 pub const Hiragana: Script = Script(20);
883 pub const ImperialAramaic: Script = Script(116);
884 pub const Inherited: Script = Script(1);
885 pub const InscriptionalPahlavi: Script = Script(122);
886 pub const InscriptionalParthian: Script = Script(125);
887 pub const Javanese: Script = Script(78);
888 pub const Kaithi: Script = Script(120);
889 pub const Kannada: Script = Script(21);
890 pub const Katakana: Script = Script(22);
891 pub const Kawi: Script = Script(198);
892 pub const KayahLi: Script = Script(79);
893 pub const Kharoshthi: Script = Script(57);
894 pub const KhitanSmallScript: Script = Script(191);
895 pub const Khmer: Script = Script(23);
896 pub const Khojki: Script = Script(157);
897 pub const Khudawadi: Script = Script(145);
898 pub const KiratRai: Script = Script(203);
899 pub const Lao: Script = Script(24);
900 pub const Latin: Script = Script(25);
901 pub const Lepcha: Script = Script(82);
902 pub const Limbu: Script = Script(48);
903 pub const LinearA: Script = Script(83);
904 pub const LinearB: Script = Script(49);
905 pub const Lisu: Script = Script(131);
906 pub const Lycian: Script = Script(107);
907 pub const Lydian: Script = Script(108);
908 pub const Mahajani: Script = Script(160);
909 pub const Makasar: Script = Script(180);
910 pub const Malayalam: Script = Script(26);
911 pub const Mandaic: Script = Script(84);
912 pub const Manichaean: Script = Script(121);
913 pub const Marchen: Script = Script(169);
914 pub const MasaramGondi: Script = Script(175);
915 pub const Medefaidrin: Script = Script(181);
916 pub const MeeteiMayek: Script = Script(115);
917 pub const MendeKikakui: Script = Script(140);
918 pub const MeroiticCursive: Script = Script(141);
919 pub const MeroiticHieroglyphs: Script = Script(86);
920 pub const Miao: Script = Script(92);
921 pub const Modi: Script = Script(163);
922 pub const Mongolian: Script = Script(27);
923 pub const Mro: Script = Script(149);
924 pub const Multani: Script = Script(164);
925 pub const Myanmar: Script = Script(28);
926 pub const Nabataean: Script = Script(143);
927 pub const NagMundari: Script = Script(199);
928 pub const Nandinagari: Script = Script(187);
929 pub const Nastaliq: Script = Script(200);
930 pub const Newa: Script = Script(170);
931 pub const NewTaiLue: Script = Script(59);
932 pub const Nko: Script = Script(87);
933 pub const Nushu: Script = Script(150);
934 pub const NyiakengPuachueHmong: Script = Script(186);
935 pub const Ogham: Script = Script(29);
936 pub const OlChiki: Script = Script(109);
937 pub const OldHungarian: Script = Script(76);
938 pub const OldItalic: Script = Script(30);
939 pub const OldNorthArabian: Script = Script(142);
940 pub const OldPermic: Script = Script(89);
941 pub const OldPersian: Script = Script(61);
942 pub const OldSogdian: Script = Script(184);
943 pub const OldSouthArabian: Script = Script(133);
944 pub const OldTurkic: Script = Script(88);
945 pub const OldUyghur: Script = Script(194);
946 pub const OlOnal: Script = Script(204);
947 pub const Oriya: Script = Script(31);
948 pub const Osage: Script = Script(171);
949 pub const Osmanya: Script = Script(50);
950 pub const PahawhHmong: Script = Script(75);
951 pub const Palmyrene: Script = Script(144);
952 pub const PauCinHau: Script = Script(165);
953 pub const PhagsPa: Script = Script(90);
954 pub const Phoenician: Script = Script(91);
955 pub const PsalterPahlavi: Script = Script(123);
956 pub const Rejang: Script = Script(110);
957 pub const Runic: Script = Script(32);
958 pub const Samaritan: Script = Script(126);
959 pub const Saurashtra: Script = Script(111);
960 pub const Sharada: Script = Script(151);
961 pub const Shavian: Script = Script(51);
962 pub const Siddham: Script = Script(166);
963 pub const Sidetic: Script = Script(209);
964 pub const SignWriting: Script = Script(112);
965 pub const Sinhala: Script = Script(33);
966 pub const Sogdian: Script = Script(183);
967 pub const SoraSompeng: Script = Script(152);
968 pub const Soyombo: Script = Script(176);
969 pub const Sundanese: Script = Script(113);
970 pub const Sunuwar: Script = Script(205);
971 pub const SylotiNagri: Script = Script(58);
972 pub const Syriac: Script = Script(34);
973 pub const Tagalog: Script = Script(42);
974 pub const Tagbanwa: Script = Script(45);
975 pub const TaiLe: Script = Script(52);
976 pub const TaiTham: Script = Script(106);
977 pub const TaiViet: Script = Script(127);
978 pub const TaiYo: Script = Script(210);
979 pub const Takri: Script = Script(153);
980 pub const Tamil: Script = Script(35);
981 pub const Tangsa: Script = Script(195);
982 pub const Tangut: Script = Script(154);
983 pub const Telugu: Script = Script(36);
984 pub const Thaana: Script = Script(37);
985 pub const Thai: Script = Script(38);
986 pub const Tibetan: Script = Script(39);
987 pub const Tifinagh: Script = Script(60);
988 pub const Tirhuta: Script = Script(158);
989 pub const Todhri: Script = Script(206);
990 pub const TolongSiki: Script = Script(211);
991 pub const Toto: Script = Script(196);
992 pub const TuluTigalari: Script = Script(207);
993 pub const Ugaritic: Script = Script(53);
994 pub const Unknown: Script = Script(103);
995 pub const Vai: Script = Script(99);
996 pub const Vithkuqi: Script = Script(197);
997 pub const Wancho: Script = Script(188);
998 pub const WarangCiti: Script = Script(146);
999 pub const Yezidi: Script = Script(192);
1000 pub const Yi: Script = Script(41);
1001 pub const ZanabazarSquare: Script = Script(177);
1002}
1003#[test]
1004fn script_consts();
1005}
1006
1007impl Script {
1008 #[doc(hidden)]
1010 #[allow(non_upper_case_globals)]
1011 #[deprecated]
1012 pub const Chisoi: Script = Self(60_000);
1014}
1015
1016#[cfg(feature = "compiled_data")]
1018impl From<Script> for icu_locale_core::subtags::Script {
1019 fn from(value: Script) -> Self {
1020 crate::PropertyNamesShort::new()
1021 .get_locale_script(value)
1022 .unwrap_or(icu_locale_core::subtags::script!("Zzzz"))
1023 }
1024}
1025
1026#[cfg(feature = "compiled_data")]
1028impl From<icu_locale_core::subtags::Script> for Script {
1029 fn from(value: icu_locale_core::subtags::Script) -> Self {
1030 crate::PropertyParser::new()
1031 .get_strict(value.as_str())
1032 .unwrap_or(Self::Unknown)
1033 }
1034}
1035
1036make_enumerated_property! {
1037 name: "Script";
1038 short_name: "sc";
1039 ident: Script;
1040 data_marker: crate::provider::PropertyEnumScriptV1;
1041 singleton: SINGLETON_PROPERTY_ENUM_SCRIPT_V1;
1042 ule_ty: <u16 as zerovec::ule::AsULE>::ULE;
1043}
1044
1045#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
1067#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1068#[allow(clippy::exhaustive_structs)] #[repr(transparent)]
1070pub struct HangulSyllableType(pub(crate) u8);
1071
1072impl HangulSyllableType {
1073 pub const fn to_icu4c_value(self) -> u8 {
1075 self.0
1076 }
1077 pub const fn from_icu4c_value(value: u8) -> Self {
1079 Self(value)
1080 }
1081}
1082
1083create_const_array! {
1084#[allow(non_upper_case_globals)]
1085impl HangulSyllableType {
1086 pub const NotApplicable: HangulSyllableType = HangulSyllableType(0);
1088 pub const LeadingJamo: HangulSyllableType = HangulSyllableType(1);
1090 pub const VowelJamo: HangulSyllableType = HangulSyllableType(2);
1092 pub const TrailingJamo: HangulSyllableType = HangulSyllableType(3);
1094 pub const LeadingVowelSyllable: HangulSyllableType = HangulSyllableType(4);
1096 pub const LeadingVowelTrailingSyllable: HangulSyllableType = HangulSyllableType(5);
1098}
1099#[test]
1100fn hangul_syllable_type_consts();
1101}
1102
1103make_enumerated_property! {
1104 name: "Hangul_Syllable_Type";
1105 short_name: "hst";
1106 ident: HangulSyllableType;
1107 data_marker: crate::provider::PropertyEnumHangulSyllableTypeV1;
1108 singleton: SINGLETON_PROPERTY_ENUM_HANGUL_SYLLABLE_TYPE_V1;
1109 ule_ty: u8;
1110
1111}
1112
1113#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
1133#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1134#[allow(clippy::exhaustive_structs)] #[repr(transparent)]
1136pub struct EastAsianWidth(pub(crate) u8);
1137
1138impl EastAsianWidth {
1139 pub const fn to_icu4c_value(self) -> u8 {
1141 self.0
1142 }
1143 pub const fn from_icu4c_value(value: u8) -> Self {
1145 Self(value)
1146 }
1147}
1148
1149create_const_array! {
1150#[allow(missing_docs)] #[allow(non_upper_case_globals)]
1152impl EastAsianWidth {
1153 pub const Neutral: EastAsianWidth = EastAsianWidth(0); pub const Ambiguous: EastAsianWidth = EastAsianWidth(1); pub const Halfwidth: EastAsianWidth = EastAsianWidth(2); pub const Fullwidth: EastAsianWidth = EastAsianWidth(3); pub const Narrow: EastAsianWidth = EastAsianWidth(4); pub const Wide: EastAsianWidth = EastAsianWidth(5); }
1160#[test]
1161fn east_asian_width_consts();
1162}
1163
1164make_enumerated_property! {
1165 name: "East_Asian_Width";
1166 short_name: "ea";
1167 ident: EastAsianWidth;
1168 data_marker: crate::provider::PropertyEnumEastAsianWidthV1;
1169 singleton: SINGLETON_PROPERTY_ENUM_EAST_ASIAN_WIDTH_V1;
1170 ule_ty: u8;
1171}
1172
1173#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
1197#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1198#[allow(clippy::exhaustive_structs)] #[repr(transparent)]
1200pub struct LineBreak(pub(crate) u8);
1201
1202impl LineBreak {
1203 pub const fn to_icu4c_value(self) -> u8 {
1205 self.0
1206 }
1207 pub const fn from_icu4c_value(value: u8) -> Self {
1209 Self(value)
1210 }
1211}
1212
1213create_const_array! {
1214#[allow(missing_docs)] #[allow(non_upper_case_globals)]
1216impl LineBreak {
1217 pub const Unknown: LineBreak = LineBreak(0); pub const Ambiguous: LineBreak = LineBreak(1); pub const Alphabetic: LineBreak = LineBreak(2); pub const BreakBoth: LineBreak = LineBreak(3); pub const BreakAfter: LineBreak = LineBreak(4); pub const BreakBefore: LineBreak = LineBreak(5); pub const MandatoryBreak: LineBreak = LineBreak(6); pub const ContingentBreak: LineBreak = LineBreak(7); pub const ClosePunctuation: LineBreak = LineBreak(8); pub const CombiningMark: LineBreak = LineBreak(9); pub const CarriageReturn: LineBreak = LineBreak(10); pub const Exclamation: LineBreak = LineBreak(11); pub const Glue: LineBreak = LineBreak(12); pub const Hyphen: LineBreak = LineBreak(13); pub const Ideographic: LineBreak = LineBreak(14); pub const Inseparable: LineBreak = LineBreak(15); pub const InfixNumeric: LineBreak = LineBreak(16); pub const LineFeed: LineBreak = LineBreak(17); pub const Nonstarter: LineBreak = LineBreak(18); pub const Numeric: LineBreak = LineBreak(19); pub const OpenPunctuation: LineBreak = LineBreak(20); pub const PostfixNumeric: LineBreak = LineBreak(21); pub const PrefixNumeric: LineBreak = LineBreak(22); pub const Quotation: LineBreak = LineBreak(23); pub const ComplexContext: LineBreak = LineBreak(24); pub const Surrogate: LineBreak = LineBreak(25); pub const Space: LineBreak = LineBreak(26); pub const BreakSymbols: LineBreak = LineBreak(27); pub const ZWSpace: LineBreak = LineBreak(28); pub const NextLine: LineBreak = LineBreak(29); pub const WordJoiner: LineBreak = LineBreak(30); pub const H2: LineBreak = LineBreak(31); pub const H3: LineBreak = LineBreak(32); pub const JL: LineBreak = LineBreak(33); pub const JT: LineBreak = LineBreak(34); pub const JV: LineBreak = LineBreak(35); pub const CloseParenthesis: LineBreak = LineBreak(36); pub const ConditionalJapaneseStarter: LineBreak = LineBreak(37); pub const HebrewLetter: LineBreak = LineBreak(38); pub const RegionalIndicator: LineBreak = LineBreak(39); pub const EBase: LineBreak = LineBreak(40); pub const EModifier: LineBreak = LineBreak(41); pub const ZWJ: LineBreak = LineBreak(42); pub const Aksara: LineBreak = LineBreak(43); pub const AksaraPrebase: LineBreak = LineBreak(44); pub const AksaraStart: LineBreak = LineBreak(45); pub const ViramaFinal: LineBreak = LineBreak(46); pub const Virama: LineBreak = LineBreak(47); pub const UnambiguousHyphen: LineBreak = LineBreak(48); }
1271#[test]
1272fn line_break_consts();
1273}
1274
1275make_enumerated_property! {
1276 name: "Line_Break";
1277 short_name: "lb";
1278 ident: LineBreak;
1279 data_marker: crate::provider::PropertyEnumLineBreakV1;
1280 singleton: SINGLETON_PROPERTY_ENUM_LINE_BREAK_V1;
1281 ule_ty: u8;
1282}
1283
1284#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
1307#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1308#[allow(clippy::exhaustive_structs)] #[repr(transparent)]
1310pub struct GraphemeClusterBreak(pub(crate) u8);
1311
1312impl GraphemeClusterBreak {
1313 pub const fn to_icu4c_value(self) -> u8 {
1315 self.0
1316 }
1317 pub const fn from_icu4c_value(value: u8) -> Self {
1319 Self(value)
1320 }
1321}
1322
1323create_const_array! {
1324#[allow(missing_docs)] #[allow(non_upper_case_globals)]
1326impl GraphemeClusterBreak {
1327 pub const Other: GraphemeClusterBreak = GraphemeClusterBreak(0); pub const Control: GraphemeClusterBreak = GraphemeClusterBreak(1); pub const CR: GraphemeClusterBreak = GraphemeClusterBreak(2); pub const Extend: GraphemeClusterBreak = GraphemeClusterBreak(3); pub const L: GraphemeClusterBreak = GraphemeClusterBreak(4); pub const LF: GraphemeClusterBreak = GraphemeClusterBreak(5); pub const LV: GraphemeClusterBreak = GraphemeClusterBreak(6); pub const LVT: GraphemeClusterBreak = GraphemeClusterBreak(7); pub const T: GraphemeClusterBreak = GraphemeClusterBreak(8); pub const V: GraphemeClusterBreak = GraphemeClusterBreak(9); pub const SpacingMark: GraphemeClusterBreak = GraphemeClusterBreak(10); pub const Prepend: GraphemeClusterBreak = GraphemeClusterBreak(11); pub const RegionalIndicator: GraphemeClusterBreak = GraphemeClusterBreak(12); pub const EBase: GraphemeClusterBreak = GraphemeClusterBreak(13); pub const EBaseGAZ: GraphemeClusterBreak = GraphemeClusterBreak(14); pub const EModifier: GraphemeClusterBreak = GraphemeClusterBreak(15); pub const GlueAfterZwj: GraphemeClusterBreak = GraphemeClusterBreak(16); pub const ZWJ: GraphemeClusterBreak = GraphemeClusterBreak(17); }
1350#[test]
1351fn gcb_consts();
1352}
1353
1354make_enumerated_property! {
1355 name: "Grapheme_Cluster_Break";
1356 short_name: "GCB";
1357 ident: GraphemeClusterBreak;
1358 data_marker: crate::provider::PropertyEnumGraphemeClusterBreakV1;
1359 singleton: SINGLETON_PROPERTY_ENUM_GRAPHEME_CLUSTER_BREAK_V1;
1360 ule_ty: u8;
1361}
1362
1363#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
1386#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1387#[allow(clippy::exhaustive_structs)] #[repr(transparent)]
1389pub struct WordBreak(pub(crate) u8);
1390
1391impl WordBreak {
1392 pub const fn to_icu4c_value(self) -> u8 {
1394 self.0
1395 }
1396 pub const fn from_icu4c_value(value: u8) -> Self {
1398 Self(value)
1399 }
1400}
1401
1402create_const_array! {
1403#[allow(missing_docs)] #[allow(non_upper_case_globals)]
1405impl WordBreak {
1406 pub const Other: WordBreak = WordBreak(0); pub const ALetter: WordBreak = WordBreak(1); pub const Format: WordBreak = WordBreak(2); pub const Katakana: WordBreak = WordBreak(3); pub const MidLetter: WordBreak = WordBreak(4); pub const MidNum: WordBreak = WordBreak(5); pub const Numeric: WordBreak = WordBreak(6); pub const ExtendNumLet: WordBreak = WordBreak(7); pub const CR: WordBreak = WordBreak(8); pub const Extend: WordBreak = WordBreak(9); pub const LF: WordBreak = WordBreak(10); pub const MidNumLet: WordBreak = WordBreak(11); pub const Newline: WordBreak = WordBreak(12); pub const RegionalIndicator: WordBreak = WordBreak(13); pub const HebrewLetter: WordBreak = WordBreak(14); pub const SingleQuote: WordBreak = WordBreak(15); pub const DoubleQuote: WordBreak = WordBreak(16); pub const EBase: WordBreak = WordBreak(17); pub const EBaseGAZ: WordBreak = WordBreak(18); pub const EModifier: WordBreak = WordBreak(19); pub const GlueAfterZwj: WordBreak = WordBreak(20); pub const ZWJ: WordBreak = WordBreak(21); pub const WSegSpace: WordBreak = WordBreak(22); }
1434#[test]
1435fn word_break_consts();
1436}
1437
1438make_enumerated_property! {
1439 name: "Word_Break";
1440 short_name: "WB";
1441 ident: WordBreak;
1442 data_marker: crate::provider::PropertyEnumWordBreakV1;
1443 singleton: SINGLETON_PROPERTY_ENUM_WORD_BREAK_V1;
1444 ule_ty: u8;
1445}
1446
1447#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
1470#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1471#[allow(clippy::exhaustive_structs)] #[repr(transparent)]
1473pub struct SentenceBreak(pub(crate) u8);
1474
1475impl SentenceBreak {
1476 pub const fn to_icu4c_value(self) -> u8 {
1478 self.0
1479 }
1480 pub const fn from_icu4c_value(value: u8) -> Self {
1482 Self(value)
1483 }
1484}
1485
1486create_const_array! {
1487#[allow(missing_docs)] #[allow(non_upper_case_globals)]
1489impl SentenceBreak {
1490 pub const Other: SentenceBreak = SentenceBreak(0); pub const ATerm: SentenceBreak = SentenceBreak(1); pub const Close: SentenceBreak = SentenceBreak(2); pub const Format: SentenceBreak = SentenceBreak(3); pub const Lower: SentenceBreak = SentenceBreak(4); pub const Numeric: SentenceBreak = SentenceBreak(5); pub const OLetter: SentenceBreak = SentenceBreak(6); pub const Sep: SentenceBreak = SentenceBreak(7); pub const Sp: SentenceBreak = SentenceBreak(8); pub const STerm: SentenceBreak = SentenceBreak(9); pub const Upper: SentenceBreak = SentenceBreak(10); pub const CR: SentenceBreak = SentenceBreak(11); pub const Extend: SentenceBreak = SentenceBreak(12); pub const LF: SentenceBreak = SentenceBreak(13); pub const SContinue: SentenceBreak = SentenceBreak(14); }
1506#[test]
1507fn sentence_break_consts();
1508}
1509
1510make_enumerated_property! {
1511 name: "Sentence_Break";
1512 short_name: "SB";
1513 ident: SentenceBreak;
1514 data_marker: crate::provider::PropertyEnumSentenceBreakV1;
1515 singleton: SINGLETON_PROPERTY_ENUM_SENTENCE_BREAK_V1;
1516 ule_ty: u8;
1517}
1518
1519#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
1549#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1550#[allow(clippy::exhaustive_structs)] #[repr(transparent)]
1552pub struct CanonicalCombiningClass(pub(crate) u8);
1553
1554impl CanonicalCombiningClass {
1555 pub const fn to_icu4c_value(self) -> u8 {
1557 self.0
1558 }
1559 pub const fn from_icu4c_value(value: u8) -> Self {
1561 Self(value)
1562 }
1563}
1564
1565create_const_array! {
1566#[allow(missing_docs)] #[allow(non_upper_case_globals)]
1569impl CanonicalCombiningClass {
1570 pub const NotReordered: CanonicalCombiningClass = CanonicalCombiningClass(0); pub const Overlay: CanonicalCombiningClass = CanonicalCombiningClass(1); pub const HanReading: CanonicalCombiningClass = CanonicalCombiningClass(6); pub const Nukta: CanonicalCombiningClass = CanonicalCombiningClass(7); pub const KanaVoicing: CanonicalCombiningClass = CanonicalCombiningClass(8); pub const Virama: CanonicalCombiningClass = CanonicalCombiningClass(9); pub const CCC10: CanonicalCombiningClass = CanonicalCombiningClass(10); pub const CCC11: CanonicalCombiningClass = CanonicalCombiningClass(11); pub const CCC12: CanonicalCombiningClass = CanonicalCombiningClass(12); pub const CCC13: CanonicalCombiningClass = CanonicalCombiningClass(13); pub const CCC14: CanonicalCombiningClass = CanonicalCombiningClass(14); pub const CCC15: CanonicalCombiningClass = CanonicalCombiningClass(15); pub const CCC16: CanonicalCombiningClass = CanonicalCombiningClass(16); pub const CCC17: CanonicalCombiningClass = CanonicalCombiningClass(17); pub const CCC18: CanonicalCombiningClass = CanonicalCombiningClass(18); pub const CCC19: CanonicalCombiningClass = CanonicalCombiningClass(19); pub const CCC20: CanonicalCombiningClass = CanonicalCombiningClass(20); pub const CCC21: CanonicalCombiningClass = CanonicalCombiningClass(21); pub const CCC22: CanonicalCombiningClass = CanonicalCombiningClass(22); pub const CCC23: CanonicalCombiningClass = CanonicalCombiningClass(23); pub const CCC24: CanonicalCombiningClass = CanonicalCombiningClass(24); pub const CCC25: CanonicalCombiningClass = CanonicalCombiningClass(25); pub const CCC26: CanonicalCombiningClass = CanonicalCombiningClass(26); pub const CCC27: CanonicalCombiningClass = CanonicalCombiningClass(27); pub const CCC28: CanonicalCombiningClass = CanonicalCombiningClass(28); pub const CCC29: CanonicalCombiningClass = CanonicalCombiningClass(29); pub const CCC30: CanonicalCombiningClass = CanonicalCombiningClass(30); pub const CCC31: CanonicalCombiningClass = CanonicalCombiningClass(31); pub const CCC32: CanonicalCombiningClass = CanonicalCombiningClass(32); pub const CCC33: CanonicalCombiningClass = CanonicalCombiningClass(33); pub const CCC34: CanonicalCombiningClass = CanonicalCombiningClass(34); pub const CCC35: CanonicalCombiningClass = CanonicalCombiningClass(35); pub const CCC36: CanonicalCombiningClass = CanonicalCombiningClass(36); pub const CCC84: CanonicalCombiningClass = CanonicalCombiningClass(84); pub const CCC91: CanonicalCombiningClass = CanonicalCombiningClass(91); pub const CCC103: CanonicalCombiningClass = CanonicalCombiningClass(103); pub const CCC107: CanonicalCombiningClass = CanonicalCombiningClass(107); pub const CCC118: CanonicalCombiningClass = CanonicalCombiningClass(118); pub const CCC122: CanonicalCombiningClass = CanonicalCombiningClass(122); pub const CCC129: CanonicalCombiningClass = CanonicalCombiningClass(129); pub const CCC130: CanonicalCombiningClass = CanonicalCombiningClass(130); pub const CCC132: CanonicalCombiningClass = CanonicalCombiningClass(132); pub const CCC133: CanonicalCombiningClass = CanonicalCombiningClass(133); pub const AttachedBelowLeft: CanonicalCombiningClass = CanonicalCombiningClass(200); pub const AttachedBelow: CanonicalCombiningClass = CanonicalCombiningClass(202); pub const AttachedAbove: CanonicalCombiningClass = CanonicalCombiningClass(214); pub const AttachedAboveRight: CanonicalCombiningClass = CanonicalCombiningClass(216); pub const BelowLeft: CanonicalCombiningClass = CanonicalCombiningClass(218); pub const Below: CanonicalCombiningClass = CanonicalCombiningClass(220); pub const BelowRight: CanonicalCombiningClass = CanonicalCombiningClass(222); pub const Left: CanonicalCombiningClass = CanonicalCombiningClass(224); pub const Right: CanonicalCombiningClass = CanonicalCombiningClass(226); pub const AboveLeft: CanonicalCombiningClass = CanonicalCombiningClass(228); pub const Above: CanonicalCombiningClass = CanonicalCombiningClass(230); pub const AboveRight: CanonicalCombiningClass = CanonicalCombiningClass(232); pub const DoubleBelow: CanonicalCombiningClass = CanonicalCombiningClass(233); pub const DoubleAbove: CanonicalCombiningClass = CanonicalCombiningClass(234); pub const IotaSubscript: CanonicalCombiningClass = CanonicalCombiningClass(240); }
1629#[test]
1630fn ccc_consts();
1631}
1632
1633make_enumerated_property! {
1634 name: "Canonical_Combining_Class";
1635 short_name: "ccc";
1636 ident: CanonicalCombiningClass;
1637 data_marker: crate::provider::PropertyEnumCanonicalCombiningClassV1;
1638 singleton: SINGLETON_PROPERTY_ENUM_CANONICAL_COMBINING_CLASS_V1;
1639 ule_ty: u8;
1640}
1641
1642#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
1669#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1670#[allow(clippy::exhaustive_structs)] #[repr(transparent)]
1672pub struct IndicConjunctBreak(pub(crate) u8);
1673
1674impl IndicConjunctBreak {
1675 pub const fn to_icu4c_value(self) -> u8 {
1677 self.0
1678 }
1679 pub const fn from_icu4c_value(value: u8) -> Self {
1681 Self(value)
1682 }
1683}
1684
1685create_const_array! {
1686#[allow(missing_docs)] #[allow(non_upper_case_globals)]
1688impl IndicConjunctBreak {
1689 pub const None: IndicConjunctBreak = IndicConjunctBreak(0);
1690 pub const Consonant: IndicConjunctBreak = IndicConjunctBreak(1);
1691 pub const Extend: IndicConjunctBreak = IndicConjunctBreak(2);
1692 pub const Linker: IndicConjunctBreak = IndicConjunctBreak(3);
1693}
1694#[test]
1695fn indic_conjunct_break_consts();
1696}
1697
1698make_enumerated_property! {
1699 name: "Indic_Conjunct_Break";
1700 short_name: "InCB";
1701 ident: IndicConjunctBreak;
1702 data_marker: crate::provider::PropertyEnumIndicConjunctBreakV1;
1703 singleton: SINGLETON_PROPERTY_ENUM_INDIC_CONJUNCT_BREAK_V1;
1704 ule_ty: u8;
1705}
1706
1707#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
1726#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1727#[allow(clippy::exhaustive_structs)] #[repr(transparent)]
1729pub struct IndicSyllabicCategory(pub(crate) u8);
1730
1731impl IndicSyllabicCategory {
1732 pub const fn to_icu4c_value(self) -> u8 {
1734 self.0
1735 }
1736 pub const fn from_icu4c_value(value: u8) -> Self {
1738 Self(value)
1739 }
1740}
1741
1742create_const_array! {
1743#[allow(missing_docs)] #[allow(non_upper_case_globals)]
1745impl IndicSyllabicCategory {
1746 pub const Other: IndicSyllabicCategory = IndicSyllabicCategory(0);
1747 pub const Avagraha: IndicSyllabicCategory = IndicSyllabicCategory(1);
1748 pub const Bindu: IndicSyllabicCategory = IndicSyllabicCategory(2);
1749 pub const BrahmiJoiningNumber: IndicSyllabicCategory = IndicSyllabicCategory(3);
1750 pub const CantillationMark: IndicSyllabicCategory = IndicSyllabicCategory(4);
1751 pub const Consonant: IndicSyllabicCategory = IndicSyllabicCategory(5);
1752 pub const ConsonantDead: IndicSyllabicCategory = IndicSyllabicCategory(6);
1753 pub const ConsonantFinal: IndicSyllabicCategory = IndicSyllabicCategory(7);
1754 pub const ConsonantHeadLetter: IndicSyllabicCategory = IndicSyllabicCategory(8);
1755 pub const ConsonantInitialPostfixed: IndicSyllabicCategory = IndicSyllabicCategory(9);
1756 pub const ConsonantKiller: IndicSyllabicCategory = IndicSyllabicCategory(10);
1757 pub const ConsonantMedial: IndicSyllabicCategory = IndicSyllabicCategory(11);
1758 pub const ConsonantPlaceholder: IndicSyllabicCategory = IndicSyllabicCategory(12);
1759 pub const ConsonantPrecedingRepha: IndicSyllabicCategory = IndicSyllabicCategory(13);
1760 pub const ConsonantPrefixed: IndicSyllabicCategory = IndicSyllabicCategory(14);
1761 pub const ConsonantSubjoined: IndicSyllabicCategory = IndicSyllabicCategory(15);
1762 pub const ConsonantSucceedingRepha: IndicSyllabicCategory = IndicSyllabicCategory(16);
1763 pub const ConsonantWithStacker: IndicSyllabicCategory = IndicSyllabicCategory(17);
1764 pub const GeminationMark: IndicSyllabicCategory = IndicSyllabicCategory(18);
1765 pub const InvisibleStacker: IndicSyllabicCategory = IndicSyllabicCategory(19);
1766 pub const Joiner: IndicSyllabicCategory = IndicSyllabicCategory(20);
1767 pub const ModifyingLetter: IndicSyllabicCategory = IndicSyllabicCategory(21);
1768 pub const NonJoiner: IndicSyllabicCategory = IndicSyllabicCategory(22);
1769 pub const Nukta: IndicSyllabicCategory = IndicSyllabicCategory(23);
1770 pub const Number: IndicSyllabicCategory = IndicSyllabicCategory(24);
1771 pub const NumberJoiner: IndicSyllabicCategory = IndicSyllabicCategory(25);
1772 pub const PureKiller: IndicSyllabicCategory = IndicSyllabicCategory(26);
1773 pub const RegisterShifter: IndicSyllabicCategory = IndicSyllabicCategory(27);
1774 pub const SyllableModifier: IndicSyllabicCategory = IndicSyllabicCategory(28);
1775 pub const ToneLetter: IndicSyllabicCategory = IndicSyllabicCategory(29);
1776 pub const ToneMark: IndicSyllabicCategory = IndicSyllabicCategory(30);
1777 pub const Virama: IndicSyllabicCategory = IndicSyllabicCategory(31);
1778 pub const Visarga: IndicSyllabicCategory = IndicSyllabicCategory(32);
1779 pub const Vowel: IndicSyllabicCategory = IndicSyllabicCategory(33);
1780 pub const VowelDependent: IndicSyllabicCategory = IndicSyllabicCategory(34);
1781 pub const VowelIndependent: IndicSyllabicCategory = IndicSyllabicCategory(35);
1782 pub const ReorderingKiller: IndicSyllabicCategory = IndicSyllabicCategory(36);
1783}
1784#[test]
1785fn indic_syllabic_category_consts();
1786}
1787
1788make_enumerated_property! {
1789 name: "Indic_Syllabic_Category";
1790 short_name: "InSC";
1791 ident: IndicSyllabicCategory;
1792 data_marker: crate::provider::PropertyEnumIndicSyllabicCategoryV1;
1793 singleton: SINGLETON_PROPERTY_ENUM_INDIC_SYLLABIC_CATEGORY_V1;
1794 ule_ty: u8;
1795}
1796
1797#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
1815#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1816#[allow(clippy::exhaustive_structs)] #[repr(transparent)]
1818pub struct JoiningGroup(pub(crate) u8);
1819
1820impl JoiningGroup {
1821 pub const fn to_icu4c_value(self) -> u8 {
1823 self.0
1824 }
1825 pub const fn from_icu4c_value(value: u8) -> Self {
1827 Self(value)
1828 }
1829}
1830
1831create_const_array! {
1832#[allow(missing_docs)] #[allow(non_upper_case_globals)]
1834impl JoiningGroup {
1835 pub const NoJoiningGroup: JoiningGroup = JoiningGroup(0);
1836 pub const Ain: JoiningGroup = JoiningGroup(1);
1837 pub const Alaph: JoiningGroup = JoiningGroup(2);
1838 pub const Alef: JoiningGroup = JoiningGroup(3);
1839 pub const Beh: JoiningGroup = JoiningGroup(4);
1840 pub const Beth: JoiningGroup = JoiningGroup(5);
1841 pub const Dal: JoiningGroup = JoiningGroup(6);
1842 pub const DalathRish: JoiningGroup = JoiningGroup(7);
1843 pub const E: JoiningGroup = JoiningGroup(8);
1844 pub const Feh: JoiningGroup = JoiningGroup(9);
1845 pub const FinalSemkath: JoiningGroup = JoiningGroup(10);
1846 pub const Gaf: JoiningGroup = JoiningGroup(11);
1847 pub const Gamal: JoiningGroup = JoiningGroup(12);
1848 pub const Hah: JoiningGroup = JoiningGroup(13);
1849 pub const TehMarbutaGoal: JoiningGroup = JoiningGroup(14);
1850 pub const He: JoiningGroup = JoiningGroup(15);
1851 pub const Heh: JoiningGroup = JoiningGroup(16);
1852 pub const HehGoal: JoiningGroup = JoiningGroup(17);
1853 pub const Heth: JoiningGroup = JoiningGroup(18);
1854 pub const Kaf: JoiningGroup = JoiningGroup(19);
1855 pub const Kaph: JoiningGroup = JoiningGroup(20);
1856 pub const KnottedHeh: JoiningGroup = JoiningGroup(21);
1857 pub const Lam: JoiningGroup = JoiningGroup(22);
1858 pub const Lamadh: JoiningGroup = JoiningGroup(23);
1859 pub const Meem: JoiningGroup = JoiningGroup(24);
1860 pub const Mim: JoiningGroup = JoiningGroup(25);
1861 pub const Noon: JoiningGroup = JoiningGroup(26);
1862 pub const Nun: JoiningGroup = JoiningGroup(27);
1863 pub const Pe: JoiningGroup = JoiningGroup(28);
1864 pub const Qaf: JoiningGroup = JoiningGroup(29);
1865 pub const Qaph: JoiningGroup = JoiningGroup(30);
1866 pub const Reh: JoiningGroup = JoiningGroup(31);
1867 pub const ReversedPe: JoiningGroup = JoiningGroup(32);
1868 pub const Sad: JoiningGroup = JoiningGroup(33);
1869 pub const Sadhe: JoiningGroup = JoiningGroup(34);
1870 pub const Seen: JoiningGroup = JoiningGroup(35);
1871 pub const Semkath: JoiningGroup = JoiningGroup(36);
1872 pub const Shin: JoiningGroup = JoiningGroup(37);
1873 pub const SwashKaf: JoiningGroup = JoiningGroup(38);
1874 pub const SyriacWaw: JoiningGroup = JoiningGroup(39);
1875 pub const Tah: JoiningGroup = JoiningGroup(40);
1876 pub const Taw: JoiningGroup = JoiningGroup(41);
1877 pub const TehMarbuta: JoiningGroup = JoiningGroup(42);
1878 pub const Teth: JoiningGroup = JoiningGroup(43);
1879 pub const Waw: JoiningGroup = JoiningGroup(44);
1880 pub const Yeh: JoiningGroup = JoiningGroup(45);
1881 pub const YehBarree: JoiningGroup = JoiningGroup(46);
1882 pub const YehWithTail: JoiningGroup = JoiningGroup(47);
1883 pub const Yudh: JoiningGroup = JoiningGroup(48);
1884 pub const YudhHe: JoiningGroup = JoiningGroup(49);
1885 pub const Zain: JoiningGroup = JoiningGroup(50);
1886 pub const Fe: JoiningGroup = JoiningGroup(51);
1887 pub const Khaph: JoiningGroup = JoiningGroup(52);
1888 pub const Zhain: JoiningGroup = JoiningGroup(53);
1889 pub const BurushaskiYehBarree: JoiningGroup = JoiningGroup(54);
1890 pub const FarsiYeh: JoiningGroup = JoiningGroup(55);
1891 pub const Nya: JoiningGroup = JoiningGroup(56);
1892 pub const RohingyaYeh: JoiningGroup = JoiningGroup(57);
1893 pub const ManichaeanAleph: JoiningGroup = JoiningGroup(58);
1894 pub const ManichaeanAyin: JoiningGroup = JoiningGroup(59);
1895 pub const ManichaeanBeth: JoiningGroup = JoiningGroup(60);
1896 pub const ManichaeanDaleth: JoiningGroup = JoiningGroup(61);
1897 pub const ManichaeanDhamedh: JoiningGroup = JoiningGroup(62);
1898 pub const ManichaeanFive: JoiningGroup = JoiningGroup(63);
1899 pub const ManichaeanGimel: JoiningGroup = JoiningGroup(64);
1900 pub const ManichaeanHeth: JoiningGroup = JoiningGroup(65);
1901 pub const ManichaeanHundred: JoiningGroup = JoiningGroup(66);
1902 pub const ManichaeanKaph: JoiningGroup = JoiningGroup(67);
1903 pub const ManichaeanLamedh: JoiningGroup = JoiningGroup(68);
1904 pub const ManichaeanMem: JoiningGroup = JoiningGroup(69);
1905 pub const ManichaeanNun: JoiningGroup = JoiningGroup(70);
1906 pub const ManichaeanOne: JoiningGroup = JoiningGroup(71);
1907 pub const ManichaeanPe: JoiningGroup = JoiningGroup(72);
1908 pub const ManichaeanQoph: JoiningGroup = JoiningGroup(73);
1909 pub const ManichaeanResh: JoiningGroup = JoiningGroup(74);
1910 pub const ManichaeanSadhe: JoiningGroup = JoiningGroup(75);
1911 pub const ManichaeanSamekh: JoiningGroup = JoiningGroup(76);
1912 pub const ManichaeanTaw: JoiningGroup = JoiningGroup(77);
1913 pub const ManichaeanTen: JoiningGroup = JoiningGroup(78);
1914 pub const ManichaeanTeth: JoiningGroup = JoiningGroup(79);
1915 pub const ManichaeanThamedh: JoiningGroup = JoiningGroup(80);
1916 pub const ManichaeanTwenty: JoiningGroup = JoiningGroup(81);
1917 pub const ManichaeanWaw: JoiningGroup = JoiningGroup(82);
1918 pub const ManichaeanYodh: JoiningGroup = JoiningGroup(83);
1919 pub const ManichaeanZayin: JoiningGroup = JoiningGroup(84);
1920 pub const StraightWaw: JoiningGroup = JoiningGroup(85);
1921 pub const AfricanFeh: JoiningGroup = JoiningGroup(86);
1922 pub const AfricanNoon: JoiningGroup = JoiningGroup(87);
1923 pub const AfricanQaf: JoiningGroup = JoiningGroup(88);
1924 pub const MalayalamBha: JoiningGroup = JoiningGroup(89);
1925 pub const MalayalamJa: JoiningGroup = JoiningGroup(90);
1926 pub const MalayalamLla: JoiningGroup = JoiningGroup(91);
1927 pub const MalayalamLlla: JoiningGroup = JoiningGroup(92);
1928 pub const MalayalamNga: JoiningGroup = JoiningGroup(93);
1929 pub const MalayalamNna: JoiningGroup = JoiningGroup(94);
1930 pub const MalayalamNnna: JoiningGroup = JoiningGroup(95);
1931 pub const MalayalamNya: JoiningGroup = JoiningGroup(96);
1932 pub const MalayalamRa: JoiningGroup = JoiningGroup(97);
1933 pub const MalayalamSsa: JoiningGroup = JoiningGroup(98);
1934 pub const MalayalamTta: JoiningGroup = JoiningGroup(99);
1935 pub const HanifiRohingyaKinnaYa: JoiningGroup = JoiningGroup(100);
1936 pub const HanifiRohingyaPa: JoiningGroup = JoiningGroup(101);
1937 pub const ThinYeh: JoiningGroup = JoiningGroup(102);
1938 pub const VerticalTail: JoiningGroup = JoiningGroup(103);
1939 pub const KashmiriYeh: JoiningGroup = JoiningGroup(104);
1940 pub const ThinNoon: JoiningGroup = JoiningGroup(105);
1941}
1942#[test]
1943fn joining_group_consts();
1944}
1945
1946make_enumerated_property! {
1947 name: "Joining_Group";
1948 short_name: "jg";
1949 ident: JoiningGroup;
1950 data_marker: crate::provider::PropertyEnumJoiningGroupV1;
1951 singleton: SINGLETON_PROPERTY_ENUM_JOINING_GROUP_V1;
1952 ule_ty: u8;
1953}
1954
1955#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
1975#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1976#[allow(clippy::exhaustive_structs)] #[repr(transparent)]
1978pub struct JoiningType(pub(crate) u8);
1979
1980impl JoiningType {
1981 pub const fn to_icu4c_value(self) -> u8 {
1983 self.0
1984 }
1985 pub const fn from_icu4c_value(value: u8) -> Self {
1987 Self(value)
1988 }
1989}
1990
1991create_const_array! {
1992#[allow(missing_docs)] #[allow(non_upper_case_globals)]
1994impl JoiningType {
1995 pub const NonJoining: JoiningType = JoiningType(0); pub const JoinCausing: JoiningType = JoiningType(1); pub const DualJoining: JoiningType = JoiningType(2); pub const LeftJoining: JoiningType = JoiningType(3); pub const RightJoining: JoiningType = JoiningType(4); pub const Transparent: JoiningType = JoiningType(5); }
2002#[test]
2003fn joining_type_consts();
2004}
2005
2006make_enumerated_property! {
2007 name: "Joining_Type";
2008 short_name: "jt";
2009 ident: JoiningType;
2010 data_marker: crate::provider::PropertyEnumJoiningTypeV1;
2011 singleton: SINGLETON_PROPERTY_ENUM_JOINING_TYPE_V1;
2012 ule_ty: u8;
2013}
2014
2015#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
2043#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2044#[allow(clippy::exhaustive_structs)] #[repr(transparent)]
2046pub struct VerticalOrientation(pub(crate) u8);
2047
2048impl VerticalOrientation {
2049 pub const fn to_icu4c_value(self) -> u8 {
2051 self.0
2052 }
2053 pub const fn from_icu4c_value(value: u8) -> Self {
2055 Self(value)
2056 }
2057}
2058
2059create_const_array! {
2060#[allow(missing_docs)] #[allow(non_upper_case_globals)]
2062impl VerticalOrientation {
2063 pub const Rotated: VerticalOrientation = VerticalOrientation(0); pub const TransformedRotated: VerticalOrientation = VerticalOrientation(1); pub const TransformedUpright: VerticalOrientation = VerticalOrientation(2); pub const Upright: VerticalOrientation = VerticalOrientation(3); }
2068#[test]
2069fn vertical_orientation_consts();
2070}
2071
2072make_enumerated_property! {
2073 name: "Vertical_Orientation";
2074 short_name: "vo";
2075 ident: VerticalOrientation;
2076 data_marker: crate::provider::PropertyEnumVerticalOrientationV1;
2077 singleton: SINGLETON_PROPERTY_ENUM_VERTICAL_ORIENTATION_V1;
2078 ule_ty: u8;
2079}
2080
2081pub use crate::code_point_set::BinaryProperty;
2082
2083macro_rules! make_binary_property {
2084 (
2085 name: $name:literal;
2086 short_name: $short_name:literal;
2087 ident: $ident:ident;
2088 data_marker: $data_marker:ty;
2089 singleton: $singleton:ident;
2090 $(#[$doc:meta])+
2091 ) => {
2092 $(#[$doc])+
2093 #[derive(Debug)]
2094 #[non_exhaustive]
2095 pub struct $ident;
2096
2097 impl crate::private::Sealed for $ident {}
2098
2099 impl BinaryProperty for $ident {
2100 type DataMarker = $data_marker;
2101 #[cfg(feature = "compiled_data")]
2102 const SINGLETON: &'static crate::provider::PropertyCodePointSet<'static> =
2103 &crate::provider::Baked::$singleton;
2104 const NAME: &'static [u8] = $name.as_bytes();
2105 const SHORT_NAME: &'static [u8] = $short_name.as_bytes();
2106 }
2107 };
2108}
2109
2110make_binary_property! {
2111 name: "ASCII_Hex_Digit";
2112 short_name: "AHex";
2113 ident: AsciiHexDigit;
2114 data_marker: crate::provider::PropertyBinaryAsciiHexDigitV1;
2115 singleton: SINGLETON_PROPERTY_BINARY_ASCII_HEX_DIGIT_V1;
2116 }
2132
2133make_binary_property! {
2134 name: "alnum";
2135 short_name: "alnum";
2136 ident: Alnum;
2137 data_marker: crate::provider::PropertyBinaryAlnumV1;
2138 singleton: SINGLETON_PROPERTY_BINARY_ALNUM_V1;
2139 }
2143
2144make_binary_property! {
2145 name: "Alphabetic";
2146 short_name: "Alpha";
2147 ident: Alphabetic;
2148 data_marker: crate::provider::PropertyBinaryAlphabeticV1;
2149 singleton: SINGLETON_PROPERTY_BINARY_ALPHABETIC_V1;
2150 }
2167
2168make_binary_property! {
2169 name: "Bidi_Control";
2170 short_name: "Bidi_C";
2171 ident: BidiControl;
2172 data_marker: crate::provider::PropertyBinaryBidiControlV1;
2173 singleton: SINGLETON_PROPERTY_BINARY_BIDI_CONTROL_V1;
2174 }
2190
2191make_binary_property! {
2192 name: "Bidi_Mirrored";
2193 short_name: "Bidi_M";
2194 ident: BidiMirrored;
2195 data_marker: crate::provider::PropertyBinaryBidiMirroredV1;
2196 singleton: SINGLETON_PROPERTY_BINARY_BIDI_MIRRORED_V1;
2197 }
2214
2215make_binary_property! {
2216 name: "blank";
2217 short_name: "blank";
2218 ident: Blank;
2219 data_marker: crate::provider::PropertyBinaryBlankV1;
2220 singleton: SINGLETON_PROPERTY_BINARY_BLANK_V1;
2221 }
2224
2225make_binary_property! {
2226 name: "Cased";
2227 short_name: "Cased";
2228 ident: Cased;
2229 data_marker: crate::provider::PropertyBinaryCasedV1;
2230 singleton: SINGLETON_PROPERTY_BINARY_CASED_V1;
2231 }
2246
2247make_binary_property! {
2248 name: "Case_Ignorable";
2249 short_name: "CI";
2250 ident: CaseIgnorable;
2251 data_marker: crate::provider::PropertyBinaryCaseIgnorableV1;
2252 singleton: SINGLETON_PROPERTY_BINARY_CASE_IGNORABLE_V1;
2253 }
2268
2269make_binary_property! {
2270 name: "Full_Composition_Exclusion";
2271 short_name: "Comp_Ex";
2272 ident: FullCompositionExclusion;
2273 data_marker: crate::provider::PropertyBinaryFullCompositionExclusionV1;
2274 singleton: SINGLETON_PROPERTY_BINARY_FULL_COMPOSITION_EXCLUSION_V1;
2275 }
2280
2281make_binary_property! {
2282 name: "Changes_When_Casefolded";
2283 short_name: "CWCF";
2284 ident: ChangesWhenCasefolded;
2285 data_marker: crate::provider::PropertyBinaryChangesWhenCasefoldedV1;
2286 singleton: SINGLETON_PROPERTY_BINARY_CHANGES_WHEN_CASEFOLDED_V1;
2287 }
2302
2303make_binary_property! {
2304 name: "Changes_When_Casemapped";
2305 short_name: "CWCM";
2306 ident: ChangesWhenCasemapped;
2307 data_marker: crate::provider::PropertyBinaryChangesWhenCasemappedV1;
2308 singleton: SINGLETON_PROPERTY_BINARY_CHANGES_WHEN_CASEMAPPED_V1;
2309 }
2312
2313make_binary_property! {
2314 name: "Changes_When_NFKC_Casefolded";
2315 short_name: "CWKCF";
2316 ident: ChangesWhenNfkcCasefolded;
2317 data_marker: crate::provider::PropertyBinaryChangesWhenNfkcCasefoldedV1;
2318 singleton: SINGLETON_PROPERTY_BINARY_CHANGES_WHEN_NFKC_CASEFOLDED_V1;
2319 }
2334
2335make_binary_property! {
2336 name: "Changes_When_Lowercased";
2337 short_name: "CWL";
2338 ident: ChangesWhenLowercased;
2339 data_marker: crate::provider::PropertyBinaryChangesWhenLowercasedV1;
2340 singleton: SINGLETON_PROPERTY_BINARY_CHANGES_WHEN_LOWERCASED_V1;
2341 }
2356
2357make_binary_property! {
2358 name: "Changes_When_Titlecased";
2359 short_name: "CWT";
2360 ident: ChangesWhenTitlecased;
2361 data_marker: crate::provider::PropertyBinaryChangesWhenTitlecasedV1;
2362 singleton: SINGLETON_PROPERTY_BINARY_CHANGES_WHEN_TITLECASED_V1;
2363 }
2378
2379make_binary_property! {
2380 name: "Changes_When_Uppercased";
2381 short_name: "CWU";
2382 ident: ChangesWhenUppercased;
2383 data_marker: crate::provider::PropertyBinaryChangesWhenUppercasedV1;
2384 singleton: SINGLETON_PROPERTY_BINARY_CHANGES_WHEN_UPPERCASED_V1;
2385 }
2400
2401make_binary_property! {
2402 name: "Dash";
2403 short_name: "Dash";
2404 ident: Dash;
2405 data_marker: crate::provider::PropertyBinaryDashV1;
2406 singleton: SINGLETON_PROPERTY_BINARY_DASH_V1;
2407 }
2424
2425make_binary_property! {
2426 name: "Deprecated";
2427 short_name: "Dep";
2428 ident: Deprecated;
2429 data_marker: crate::provider::PropertyBinaryDeprecatedV1;
2430 singleton: SINGLETON_PROPERTY_BINARY_DEPRECATED_V1;
2431 }
2449
2450make_binary_property! {
2451 name: "Default_Ignorable_Code_Point";
2452 short_name: "DI";
2453 ident: DefaultIgnorableCodePoint;
2454 data_marker: crate::provider::PropertyBinaryDefaultIgnorableCodePointV1;
2455 singleton: SINGLETON_PROPERTY_BINARY_DEFAULT_IGNORABLE_CODE_POINT_V1;
2456 }
2476
2477make_binary_property! {
2478 name: "Diacritic";
2479 short_name: "Dia";
2480 ident: Diacritic;
2481 data_marker: crate::provider::PropertyBinaryDiacriticV1;
2482 singleton: SINGLETON_PROPERTY_BINARY_DIACRITIC_V1;
2483 }
2498
2499make_binary_property! {
2500 name: "Emoji_Modifier_Base";
2501 short_name: "EBase";
2502 ident: EmojiModifierBase;
2503 data_marker: crate::provider::PropertyBinaryEmojiModifierBaseV1;
2504 singleton: SINGLETON_PROPERTY_BINARY_EMOJI_MODIFIER_BASE_V1;
2505 }
2520
2521make_binary_property! {
2522 name: "Emoji_Component";
2523 short_name: "EComp";
2524 ident: EmojiComponent;
2525 data_marker: crate::provider::PropertyBinaryEmojiComponentV1;
2526 singleton: SINGLETON_PROPERTY_BINARY_EMOJI_COMPONENT_V1;
2527 }
2545
2546make_binary_property! {
2547 name: "Emoji_Modifier";
2548 short_name: "EMod";
2549 ident: EmojiModifier;
2550 data_marker: crate::provider::PropertyBinaryEmojiModifierV1;
2551 singleton: SINGLETON_PROPERTY_BINARY_EMOJI_MODIFIER_V1;
2552 }
2567
2568make_binary_property! {
2569 name: "Emoji";
2570 short_name: "Emoji";
2571 ident: Emoji;
2572 data_marker: crate::provider::PropertyBinaryEmojiV1;
2573 singleton: SINGLETON_PROPERTY_BINARY_EMOJI_V1;
2574 }
2589
2590make_binary_property! {
2591 name: "Emoji_Presentation";
2592 short_name: "EPres";
2593 ident: EmojiPresentation;
2594 data_marker: crate::provider::PropertyBinaryEmojiPresentationV1;
2595 singleton: SINGLETON_PROPERTY_BINARY_EMOJI_PRESENTATION_V1;
2596 }
2611
2612make_binary_property! {
2613 name: "Extender";
2614 short_name: "Ext";
2615 ident: Extender;
2616 data_marker: crate::provider::PropertyBinaryExtenderV1;
2617 singleton: SINGLETON_PROPERTY_BINARY_EXTENDER_V1;
2618 }
2635
2636make_binary_property! {
2637 name: "Extended_Pictographic";
2638 short_name: "ExtPict";
2639 ident: ExtendedPictographic;
2640 data_marker: crate::provider::PropertyBinaryExtendedPictographicV1;
2641 singleton: SINGLETON_PROPERTY_BINARY_EXTENDED_PICTOGRAPHIC_V1;
2642 }
2658
2659make_binary_property! {
2660 name: "graph";
2661 short_name: "graph";
2662 ident: Graph;
2663 data_marker: crate::provider::PropertyBinaryGraphV1;
2664 singleton: SINGLETON_PROPERTY_BINARY_GRAPH_V1;
2665 }
2670
2671make_binary_property! {
2672 name: "Grapheme_Base";
2673 short_name: "Gr_Base";
2674 ident: GraphemeBase;
2675 data_marker: crate::provider::PropertyBinaryGraphemeBaseV1;
2676 singleton: SINGLETON_PROPERTY_BINARY_GRAPHEME_BASE_V1;
2677 }
2696
2697make_binary_property! {
2698 name: "Grapheme_Extend";
2699 short_name: "Gr_Ext";
2700 ident: GraphemeExtend;
2701 data_marker: crate::provider::PropertyBinaryGraphemeExtendV1;
2702 singleton: SINGLETON_PROPERTY_BINARY_GRAPHEME_EXTEND_V1;
2703 }
2722
2723make_binary_property! {
2724 name: "Grapheme_Link";
2725 short_name: "Gr_Link";
2726 ident: GraphemeLink;
2727 data_marker: crate::provider::PropertyBinaryGraphemeLinkV1;
2728 singleton: SINGLETON_PROPERTY_BINARY_GRAPHEME_LINK_V1;
2729 }
2734
2735make_binary_property! {
2736 name: "Hex_Digit";
2737 short_name: "Hex";
2738 ident: HexDigit;
2739 data_marker: crate::provider::PropertyBinaryHexDigitV1;
2740 singleton: SINGLETON_PROPERTY_BINARY_HEX_DIGIT_V1;
2741 }
2760
2761make_binary_property! {
2762 name: "Hyphen";
2763 short_name: "Hyphen";
2764 ident: Hyphen;
2765 data_marker: crate::provider::PropertyBinaryHyphenV1;
2766 singleton: SINGLETON_PROPERTY_BINARY_HYPHEN_V1;
2767 }
2772
2773make_binary_property! {
2774 name: "ID_Compat_Math_Continue";
2775 short_name: "ID_Compat_Math_Continue";
2776 ident: IdCompatMathContinue;
2777 data_marker: crate::provider::PropertyBinaryIdCompatMathContinueV1;
2778 singleton: SINGLETON_PROPERTY_BINARY_ID_COMPAT_MATH_CONTINUE_V1;
2779 }
2781
2782make_binary_property! {
2783 name: "ID_Compat_Math_Start";
2784 short_name: "ID_Compat_Math_Start";
2785 ident: IdCompatMathStart;
2786 data_marker: crate::provider::PropertyBinaryIdCompatMathStartV1;
2787 singleton: SINGLETON_PROPERTY_BINARY_ID_COMPAT_MATH_START_V1;
2788 }
2790
2791make_binary_property! {
2792 name: "ID_Continue";
2793 short_name: "IDC";
2794 ident: IdContinue;
2795 data_marker: crate::provider::PropertyBinaryIdContinueV1;
2796 singleton: SINGLETON_PROPERTY_BINARY_ID_CONTINUE_V1;
2797 }
2820
2821make_binary_property! {
2822 name: "Ideographic";
2823 short_name: "Ideo";
2824 ident: Ideographic;
2825 data_marker: crate::provider::PropertyBinaryIdeographicV1;
2826 singleton: SINGLETON_PROPERTY_BINARY_IDEOGRAPHIC_V1;
2827 }
2842
2843make_binary_property! {
2844 name: "ID_Start";
2845 short_name: "IDS";
2846 ident: IdStart;
2847 data_marker: crate::provider::PropertyBinaryIdStartV1;
2848 singleton: SINGLETON_PROPERTY_BINARY_ID_START_V1;
2849 }
2871
2872make_binary_property! {
2873 name: "IDS_Binary_Operator";
2874 short_name: "IDSB";
2875 ident: IdsBinaryOperator;
2876 data_marker: crate::provider::PropertyBinaryIdsBinaryOperatorV1;
2877 singleton: SINGLETON_PROPERTY_BINARY_IDS_BINARY_OPERATOR_V1;
2878 }
2892
2893make_binary_property! {
2894 name: "IDS_Trinary_Operator";
2895 short_name: "IDST";
2896 ident: IdsTrinaryOperator;
2897 data_marker: crate::provider::PropertyBinaryIdsTrinaryOperatorV1;
2898 singleton: SINGLETON_PROPERTY_BINARY_IDS_TRINARY_OPERATOR_V1;
2899 }
2916
2917make_binary_property! {
2918 name: "IDS_Unary_Operator";
2919 short_name: "IDSU";
2920 ident: IdsUnaryOperator;
2921 data_marker: crate::provider::PropertyBinaryIdsUnaryOperatorV1;
2922 singleton: SINGLETON_PROPERTY_BINARY_IDS_UNARY_OPERATOR_V1;
2923 }
2925
2926make_binary_property! {
2927 name: "Join_Control";
2928 short_name: "Join_C";
2929 ident: JoinControl;
2930 data_marker: crate::provider::PropertyBinaryJoinControlV1;
2931 singleton: SINGLETON_PROPERTY_BINARY_JOIN_CONTROL_V1;
2932 }
2948
2949make_binary_property! {
2950 name: "Logical_Order_Exception";
2951 short_name: "LOE";
2952 ident: LogicalOrderException;
2953 data_marker: crate::provider::PropertyBinaryLogicalOrderExceptionV1;
2954 singleton: SINGLETON_PROPERTY_BINARY_LOGICAL_ORDER_EXCEPTION_V1;
2955 }
2969
2970make_binary_property! {
2971 name: "Lowercase";
2972 short_name: "Lower";
2973 ident: Lowercase;
2974 data_marker: crate::provider::PropertyBinaryLowercaseV1;
2975 singleton: SINGLETON_PROPERTY_BINARY_LOWERCASE_V1;
2976 }
2990
2991make_binary_property! {
2992 name: "Math";
2993 short_name: "Math";
2994 ident: Math;
2995 data_marker: crate::provider::PropertyBinaryMathV1;
2996 singleton: SINGLETON_PROPERTY_BINARY_MATH_V1;
2997 }
3015
3016make_binary_property! {
3017 name: "Modifier_Combining_Mark";
3018 short_name: "MCM";
3019 ident: ModifierCombiningMark;
3020 data_marker: crate::provider::PropertyBinaryModifierCombiningMarkV1;
3021 singleton: SINGLETON_PROPERTY_BINARY_MODIFIER_COMBINING_MARK_V1;
3022 }
3024
3025make_binary_property! {
3026 name: "Noncharacter_Code_Point";
3027 short_name: "NChar";
3028 ident: NoncharacterCodePoint;
3029 data_marker: crate::provider::PropertyBinaryNoncharacterCodePointV1;
3030 singleton: SINGLETON_PROPERTY_BINARY_NONCHARACTER_CODE_POINT_V1;
3031 }
3046
3047make_binary_property! {
3048 name: "NFC_Inert";
3049 short_name: "nfcinert";
3050 ident: NfcInert;
3051 data_marker: crate::provider::PropertyBinaryNfcInertV1;
3052 singleton: SINGLETON_PROPERTY_BINARY_NFC_INERT_V1;
3053 }
3055
3056make_binary_property! {
3057 name: "NFD_Inert";
3058 short_name: "nfdinert";
3059 ident: NfdInert;
3060 data_marker: crate::provider::PropertyBinaryNfdInertV1;
3061 singleton: SINGLETON_PROPERTY_BINARY_NFD_INERT_V1;
3062 }
3064
3065make_binary_property! {
3066 name: "NFKC_Inert";
3067 short_name: "nfkcinert";
3068 ident: NfkcInert;
3069 data_marker: crate::provider::PropertyBinaryNfkcInertV1;
3070 singleton: SINGLETON_PROPERTY_BINARY_NFKC_INERT_V1;
3071 }
3073
3074make_binary_property! {
3075 name: "NFKD_Inert";
3076 short_name: "nfkdinert";
3077 ident: NfkdInert;
3078 data_marker: crate::provider::PropertyBinaryNfkdInertV1;
3079 singleton: SINGLETON_PROPERTY_BINARY_NFKD_INERT_V1;
3080 }
3082
3083make_binary_property! {
3084 name: "Pattern_Syntax";
3085 short_name: "Pat_Syn";
3086 ident: PatternSyntax;
3087 data_marker: crate::provider::PropertyBinaryPatternSyntaxV1;
3088 singleton: SINGLETON_PROPERTY_BINARY_PATTERN_SYNTAX_V1;
3089 }
3108
3109make_binary_property! {
3110 name: "Pattern_White_Space";
3111 short_name: "Pat_WS";
3112 ident: PatternWhiteSpace;
3113 data_marker: crate::provider::PropertyBinaryPatternWhiteSpaceV1;
3114 singleton: SINGLETON_PROPERTY_BINARY_PATTERN_WHITE_SPACE_V1;
3115 }
3135
3136make_binary_property! {
3137 name: "Prepended_Concatenation_Mark";
3138 short_name: "PCM";
3139 ident: PrependedConcatenationMark;
3140 data_marker: crate::provider::PropertyBinaryPrependedConcatenationMarkV1;
3141 singleton: SINGLETON_PROPERTY_BINARY_PREPENDED_CONCATENATION_MARK_V1;
3142 }
3145
3146make_binary_property! {
3147 name: "print";
3148 short_name: "print";
3149 ident: Print;
3150 data_marker: crate::provider::PropertyBinaryPrintV1;
3151 singleton: SINGLETON_PROPERTY_BINARY_PRINT_V1;
3152 }
3156
3157make_binary_property! {
3158 name: "Quotation_Mark";
3159 short_name: "QMark";
3160 ident: QuotationMark;
3161 data_marker: crate::provider::PropertyBinaryQuotationMarkV1;
3162 singleton: SINGLETON_PROPERTY_BINARY_QUOTATION_MARK_V1;
3163 }
3178
3179make_binary_property! {
3180 name: "Radical";
3181 short_name: "Radical";
3182 ident: Radical;
3183 data_marker: crate::provider::PropertyBinaryRadicalV1;
3184 singleton: SINGLETON_PROPERTY_BINARY_RADICAL_V1;
3185 }
3199
3200make_binary_property! {
3201 name: "Regional_Indicator";
3202 short_name: "RI";
3203 ident: RegionalIndicator;
3204 data_marker: crate::provider::PropertyBinaryRegionalIndicatorV1;
3205 singleton: SINGLETON_PROPERTY_BINARY_REGIONAL_INDICATOR_V1;
3206 }
3221
3222make_binary_property! {
3223 name: "Soft_Dotted";
3224 short_name: "SD";
3225 ident: SoftDotted;
3226 data_marker: crate::provider::PropertyBinarySoftDottedV1;
3227 singleton: SINGLETON_PROPERTY_BINARY_SOFT_DOTTED_V1;
3228 }
3245
3246make_binary_property! {
3247 name: "Segment_Starter";
3248 short_name: "segstart";
3249 ident: SegmentStarter;
3250 data_marker: crate::provider::PropertyBinarySegmentStarterV1;
3251 singleton: SINGLETON_PROPERTY_BINARY_SEGMENT_STARTER_V1;
3252 }
3255
3256make_binary_property! {
3257 name: "Case_Sensitive";
3258 short_name: "Sensitive";
3259 ident: CaseSensitive;
3260 data_marker: crate::provider::PropertyBinaryCaseSensitiveV1;
3261 singleton: SINGLETON_PROPERTY_BINARY_CASE_SENSITIVE_V1;
3262 }
3265
3266make_binary_property! {
3267 name: "Sentence_Terminal";
3268 short_name: "STerm";
3269 ident: SentenceTerminal;
3270 data_marker: crate::provider::PropertyBinarySentenceTerminalV1;
3271 singleton: SINGLETON_PROPERTY_BINARY_SENTENCE_TERMINAL_V1;
3272 }
3289
3290make_binary_property! {
3291 name: "Terminal_Punctuation";
3292 short_name: "Term";
3293 ident: TerminalPunctuation;
3294 data_marker: crate::provider::PropertyBinaryTerminalPunctuationV1;
3295 singleton: SINGLETON_PROPERTY_BINARY_TERMINAL_PUNCTUATION_V1;
3296 }
3313
3314make_binary_property! {
3315 name: "Unified_Ideograph";
3316 short_name: "UIdeo";
3317 ident: UnifiedIdeograph;
3318 data_marker: crate::provider::PropertyBinaryUnifiedIdeographV1;
3319 singleton: SINGLETON_PROPERTY_BINARY_UNIFIED_IDEOGRAPH_V1;
3320 }
3335
3336make_binary_property! {
3337 name: "Uppercase";
3338 short_name: "Upper";
3339 ident: Uppercase;
3340 data_marker: crate::provider::PropertyBinaryUppercaseV1;
3341 singleton: SINGLETON_PROPERTY_BINARY_UPPERCASE_V1;
3342 }
3356
3357make_binary_property! {
3358 name: "Variation_Selector";
3359 short_name: "VS";
3360 ident: VariationSelector;
3361 data_marker: crate::provider::PropertyBinaryVariationSelectorV1;
3362 singleton: SINGLETON_PROPERTY_BINARY_VARIATION_SELECTOR_V1;
3363 }
3380
3381make_binary_property! {
3382 name: "White_Space";
3383 short_name: "WSpace";
3384 ident: WhiteSpace;
3385 data_marker: crate::provider::PropertyBinaryWhiteSpaceV1;
3386 singleton: SINGLETON_PROPERTY_BINARY_WHITE_SPACE_V1;
3387 }
3404
3405make_binary_property! {
3406 name: "xdigit";
3407 short_name: "xdigit";
3408 ident: Xdigit;
3409 data_marker: crate::provider::PropertyBinaryXdigitV1;
3410 singleton: SINGLETON_PROPERTY_BINARY_XDIGIT_V1;
3411 }
3415
3416make_binary_property! {
3417 name: "XID_Continue";
3418 short_name: "XIDC";
3419 ident: XidContinue;
3420 data_marker: crate::provider::PropertyBinaryXidContinueV1;
3421 singleton: SINGLETON_PROPERTY_BINARY_XID_CONTINUE_V1;
3422 }
3443
3444make_binary_property! {
3445 name: "XID_Start";
3446 short_name: "XIDS";
3447 ident: XidStart;
3448 data_marker: crate::provider::PropertyBinaryXidStartV1;
3449 singleton: SINGLETON_PROPERTY_BINARY_XID_START_V1;
3450 }
3472
3473pub use crate::emoji::EmojiSet;
3474
3475macro_rules! make_emoji_set {
3476 (
3477 name: $name:literal;
3478 short_name: $short_name:literal;
3479 ident: $ident:ident;
3480 data_marker: $data_marker:ty;
3481 singleton: $singleton:ident;
3482 $(#[$doc:meta])+
3483 ) => {
3484 $(#[$doc])+
3485 #[derive(Debug)]
3486 #[non_exhaustive]
3487 pub struct $ident;
3488
3489 impl crate::private::Sealed for $ident {}
3490
3491 impl EmojiSet for $ident {
3492 type DataMarker = $data_marker;
3493 #[cfg(feature = "compiled_data")]
3494 const SINGLETON: &'static crate::provider::PropertyUnicodeSet<'static> =
3495 &crate::provider::Baked::$singleton;
3496 const NAME: &'static [u8] = $name.as_bytes();
3497 const SHORT_NAME: &'static [u8] = $short_name.as_bytes();
3498 }
3499 }
3500}
3501
3502make_emoji_set! {
3503 name: "Basic_Emoji";
3504 short_name: "Basic_Emoji";
3505 ident: BasicEmoji;
3506 data_marker: crate::provider::PropertyBinaryBasicEmojiV1;
3507 singleton: SINGLETON_PROPERTY_BINARY_BASIC_EMOJI_V1;
3508 }
3529
3530#[cfg(test)]
3531mod test_enumerated_property_completeness {
3532 use super::*;
3533 use std::collections::BTreeMap;
3534
3535 fn check_enum<'a, T: NamedEnumeratedProperty>(
3536 lookup: &crate::provider::names::PropertyValueNameToEnumMap<'static>,
3537 consts: impl IntoIterator<Item = &'a T>,
3538 ) where
3539 u16: From<T>,
3540 {
3541 let mut data: BTreeMap<_, _> = lookup
3542 .map
3543 .iter()
3544 .map(|(name, value)| (value, (name, "Data")))
3545 .collect();
3546
3547 let names = crate::PropertyNamesLong::<T>::new();
3548 let consts = consts.into_iter().map(|value| {
3549 (
3550 u16::from(*value) as usize,
3551 (
3552 names.get(*value).unwrap_or("<unknown>").to_string(),
3553 "Consts",
3554 ),
3555 )
3556 });
3557
3558 let mut diff = Vec::new();
3559 for t @ (value, _) in consts {
3560 if data.remove(&value).is_none() {
3561 diff.push(t);
3562 }
3563 }
3564 diff.extend(data);
3565
3566 let mut fmt_diff = String::new();
3567 for (value, (name, source)) in diff {
3568 fmt_diff.push_str(&format!("{source}:\t{name} = {value:?}\n"));
3569 }
3570
3571 assert!(
3572 fmt_diff.is_empty(),
3573 "Values defined in data do not match values defined in consts. Difference:\n{fmt_diff}"
3574 );
3575 }
3576
3577 #[test]
3578 fn test_ea() {
3579 check_enum(
3580 crate::provider::Baked::SINGLETON_PROPERTY_NAME_PARSE_EAST_ASIAN_WIDTH_V1,
3581 EastAsianWidth::ALL_VALUES,
3582 );
3583 }
3584
3585 #[test]
3586 fn test_ccc() {
3587 check_enum(
3588 crate::provider::Baked::SINGLETON_PROPERTY_NAME_PARSE_CANONICAL_COMBINING_CLASS_V1,
3589 CanonicalCombiningClass::ALL_VALUES,
3590 );
3591 }
3592
3593 #[test]
3594 fn test_jt() {
3595 check_enum(
3596 crate::provider::Baked::SINGLETON_PROPERTY_NAME_PARSE_JOINING_TYPE_V1,
3597 JoiningType::ALL_VALUES,
3598 );
3599 }
3600
3601 #[test]
3602 fn test_insc() {
3603 check_enum(
3604 crate::provider::Baked::SINGLETON_PROPERTY_NAME_PARSE_INDIC_SYLLABIC_CATEGORY_V1,
3605 IndicSyllabicCategory::ALL_VALUES,
3606 );
3607 }
3608
3609 #[test]
3610 fn test_sb() {
3611 check_enum(
3612 crate::provider::Baked::SINGLETON_PROPERTY_NAME_PARSE_SENTENCE_BREAK_V1,
3613 SentenceBreak::ALL_VALUES,
3614 );
3615 }
3616
3617 #[test]
3618 fn test_wb() {
3619 check_enum(
3620 crate::provider::Baked::SINGLETON_PROPERTY_NAME_PARSE_WORD_BREAK_V1,
3621 WordBreak::ALL_VALUES,
3622 );
3623 }
3624
3625 #[test]
3626 fn test_bc() {
3627 check_enum(
3628 crate::provider::Baked::SINGLETON_PROPERTY_NAME_PARSE_BIDI_CLASS_V1,
3629 BidiClass::ALL_VALUES,
3630 );
3631 }
3632
3633 #[test]
3634 fn test_nt() {
3635 check_enum(
3636 crate::provider::Baked::SINGLETON_PROPERTY_NAME_PARSE_NUMERIC_TYPE_V1,
3637 NumericType::ALL_VALUES,
3638 );
3639 }
3640
3641 #[test]
3642 fn test_hst() {
3643 check_enum(
3644 crate::provider::Baked::SINGLETON_PROPERTY_NAME_PARSE_HANGUL_SYLLABLE_TYPE_V1,
3645 HangulSyllableType::ALL_VALUES,
3646 );
3647 }
3648
3649 #[test]
3650 fn test_vo() {
3651 check_enum(
3652 crate::provider::Baked::SINGLETON_PROPERTY_NAME_PARSE_VERTICAL_ORIENTATION_V1,
3653 VerticalOrientation::ALL_VALUES,
3654 );
3655 }
3656}