pub use crate::names::{NamedEnumeratedProperty, ParseableEnumeratedProperty};
pub use crate::bidi::{BidiMirroringGlyph, BidiPairedBracketType};
macro_rules! create_const_array {
(
$ ( #[$meta:meta] )*
impl $enum_ty:ident {
$( $(#[$const_meta:meta])* $v:vis const $i:ident: $t:ty = $e:expr; )*
}
) => {
$( #[$meta] )*
impl $enum_ty {
$(
$(#[$const_meta])*
$v const $i: $t = $e;
)*
pub const ALL_VALUES: &'static [$enum_ty] = &[
$($enum_ty::$i),*
];
}
impl From<$enum_ty> for u16 {
fn from(other: $enum_ty) -> Self {
other.0 as u16
}
}
}
}
pub use crate::code_point_map::EnumeratedProperty;
macro_rules! make_enumerated_property {
(
name: $name:literal;
short_name: $short_name:literal;
ident: $value_ty:path;
data_marker: $data_marker:ty;
singleton: $singleton:ident;
$(ule_ty: $ule_ty:ty;)?
func:
$(#[$doc:meta])*
) => {
impl crate::private::Sealed for $value_ty {}
impl EnumeratedProperty for $value_ty {
type DataMarker = $data_marker;
#[cfg(feature = "compiled_data")]
const SINGLETON: &'static crate::provider::PropertyCodePointMap<'static, Self> =
crate::provider::Baked::$singleton;
const NAME: &'static [u8] = $name.as_bytes();
const SHORT_NAME: &'static [u8] = $short_name.as_bytes();
}
$(
impl zerovec::ule::AsULE for $value_ty {
type ULE = $ule_ty;
fn to_unaligned(self) -> Self::ULE {
self.0.to_unaligned()
}
fn from_unaligned(unaligned: Self::ULE) -> Self {
Self(zerovec::ule::AsULE::from_unaligned(unaligned))
}
}
)?
};
}
#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "datagen", derive(databake::Bake))]
#[cfg_attr(feature = "datagen", databake(path = icu_properties::props))]
#[allow(clippy::exhaustive_structs)] #[repr(transparent)]
pub struct BidiClass(pub(crate) u8);
impl BidiClass {
pub const fn to_icu4c_value(self) -> u8 {
self.0
}
pub const fn from_icu4c_value(value: u8) -> Self {
Self(value)
}
}
create_const_array! {
#[allow(non_upper_case_globals)]
impl BidiClass {
pub const LeftToRight: BidiClass = BidiClass(0);
pub const RightToLeft: BidiClass = BidiClass(1);
pub const EuropeanNumber: BidiClass = BidiClass(2);
pub const EuropeanSeparator: BidiClass = BidiClass(3);
pub const EuropeanTerminator: BidiClass = BidiClass(4);
pub const ArabicNumber: BidiClass = BidiClass(5);
pub const CommonSeparator: BidiClass = BidiClass(6);
pub const ParagraphSeparator: BidiClass = BidiClass(7);
pub const SegmentSeparator: BidiClass = BidiClass(8);
pub const WhiteSpace: BidiClass = BidiClass(9);
pub const OtherNeutral: BidiClass = BidiClass(10);
pub const LeftToRightEmbedding: BidiClass = BidiClass(11);
pub const LeftToRightOverride: BidiClass = BidiClass(12);
pub const ArabicLetter: BidiClass = BidiClass(13);
pub const RightToLeftEmbedding: BidiClass = BidiClass(14);
pub const RightToLeftOverride: BidiClass = BidiClass(15);
pub const PopDirectionalFormat: BidiClass = BidiClass(16);
pub const NonspacingMark: BidiClass = BidiClass(17);
pub const BoundaryNeutral: BidiClass = BidiClass(18);
pub const FirstStrongIsolate: BidiClass = BidiClass(19);
pub const LeftToRightIsolate: BidiClass = BidiClass(20);
pub const RightToLeftIsolate: BidiClass = BidiClass(21);
pub const PopDirectionalIsolate: BidiClass = BidiClass(22);
}
}
make_enumerated_property! {
name: "Bidi_Class";
short_name: "bc";
ident: BidiClass;
data_marker: crate::provider::BidiClassV1;
singleton: SINGLETON_BIDI_CLASS_V1;
ule_ty: u8;
func:
}
pub(crate) mod gc {
#[derive(Copy, Clone, PartialEq, Eq, Debug, Ord, PartialOrd, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "datagen", derive(databake::Bake))]
#[cfg_attr(feature = "datagen", databake(path = icu_properties::props))]
#[allow(clippy::exhaustive_enums)] #[zerovec::make_ule(GeneralCategoryULE)]
#[repr(u8)]
pub enum GeneralCategory {
Unassigned = 0,
UppercaseLetter = 1,
LowercaseLetter = 2,
TitlecaseLetter = 3,
ModifierLetter = 4,
OtherLetter = 5,
NonspacingMark = 6,
SpacingMark = 8,
EnclosingMark = 7,
DecimalNumber = 9,
LetterNumber = 10,
OtherNumber = 11,
SpaceSeparator = 12,
LineSeparator = 13,
ParagraphSeparator = 14,
Control = 15,
Format = 16,
PrivateUse = 17,
Surrogate = 18,
DashPunctuation = 19,
OpenPunctuation = 20,
ClosePunctuation = 21,
ConnectorPunctuation = 22,
InitialPunctuation = 28,
FinalPunctuation = 29,
OtherPunctuation = 23,
MathSymbol = 24,
CurrencySymbol = 25,
ModifierSymbol = 26,
OtherSymbol = 27,
}
}
pub use gc::GeneralCategory;
impl GeneralCategory {
pub const ALL_VALUES: &'static [GeneralCategory] = &[
GeneralCategory::Unassigned,
GeneralCategory::UppercaseLetter,
GeneralCategory::LowercaseLetter,
GeneralCategory::TitlecaseLetter,
GeneralCategory::ModifierLetter,
GeneralCategory::OtherLetter,
GeneralCategory::NonspacingMark,
GeneralCategory::SpacingMark,
GeneralCategory::EnclosingMark,
GeneralCategory::DecimalNumber,
GeneralCategory::LetterNumber,
GeneralCategory::OtherNumber,
GeneralCategory::SpaceSeparator,
GeneralCategory::LineSeparator,
GeneralCategory::ParagraphSeparator,
GeneralCategory::Control,
GeneralCategory::Format,
GeneralCategory::PrivateUse,
GeneralCategory::Surrogate,
GeneralCategory::DashPunctuation,
GeneralCategory::OpenPunctuation,
GeneralCategory::ClosePunctuation,
GeneralCategory::ConnectorPunctuation,
GeneralCategory::InitialPunctuation,
GeneralCategory::FinalPunctuation,
GeneralCategory::OtherPunctuation,
GeneralCategory::MathSymbol,
GeneralCategory::CurrencySymbol,
GeneralCategory::ModifierSymbol,
GeneralCategory::OtherSymbol,
];
}
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Hash, Default)]
#[non_exhaustive]
pub struct GeneralCategoryOutOfBoundsError;
impl TryFrom<u8> for GeneralCategory {
type Error = GeneralCategoryOutOfBoundsError;
fn try_from(val: u8) -> Result<Self, GeneralCategoryOutOfBoundsError> {
GeneralCategory::new_from_u8(val).ok_or(GeneralCategoryOutOfBoundsError)
}
}
make_enumerated_property! {
name: "General_Category";
short_name: "gc";
ident: GeneralCategory;
data_marker: crate::provider::GeneralCategoryV1;
singleton: SINGLETON_GENERAL_CATEGORY_V1;
func:
}
#[derive(Copy, Clone, PartialEq, Debug, Eq)]
#[allow(clippy::exhaustive_structs)] #[repr(transparent)]
pub struct GeneralCategoryGroup(pub(crate) u32);
impl crate::private::Sealed for GeneralCategoryGroup {}
use GeneralCategory as GC;
use GeneralCategoryGroup as GCG;
#[allow(non_upper_case_globals)]
impl GeneralCategoryGroup {
pub const UppercaseLetter: GeneralCategoryGroup = GCG(1 << (GC::UppercaseLetter as u32));
pub const LowercaseLetter: GeneralCategoryGroup = GCG(1 << (GC::LowercaseLetter as u32));
pub const TitlecaseLetter: GeneralCategoryGroup = GCG(1 << (GC::TitlecaseLetter as u32));
pub const ModifierLetter: GeneralCategoryGroup = GCG(1 << (GC::ModifierLetter as u32));
pub const OtherLetter: GeneralCategoryGroup = GCG(1 << (GC::OtherLetter as u32));
pub const CasedLetter: GeneralCategoryGroup = GCG((1 << (GC::UppercaseLetter as u32))
| (1 << (GC::LowercaseLetter as u32))
| (1 << (GC::TitlecaseLetter as u32)));
pub const Letter: GeneralCategoryGroup = GCG((1 << (GC::UppercaseLetter as u32))
| (1 << (GC::LowercaseLetter as u32))
| (1 << (GC::TitlecaseLetter as u32))
| (1 << (GC::ModifierLetter as u32))
| (1 << (GC::OtherLetter as u32)));
pub const NonspacingMark: GeneralCategoryGroup = GCG(1 << (GC::NonspacingMark as u32));
pub const EnclosingMark: GeneralCategoryGroup = GCG(1 << (GC::EnclosingMark as u32));
pub const SpacingMark: GeneralCategoryGroup = GCG(1 << (GC::SpacingMark as u32));
pub const Mark: GeneralCategoryGroup = GCG((1 << (GC::NonspacingMark as u32))
| (1 << (GC::EnclosingMark as u32))
| (1 << (GC::SpacingMark as u32)));
pub const DecimalNumber: GeneralCategoryGroup = GCG(1 << (GC::DecimalNumber as u32));
pub const LetterNumber: GeneralCategoryGroup = GCG(1 << (GC::LetterNumber as u32));
pub const OtherNumber: GeneralCategoryGroup = GCG(1 << (GC::OtherNumber as u32));
pub const Number: GeneralCategoryGroup = GCG((1 << (GC::DecimalNumber as u32))
| (1 << (GC::LetterNumber as u32))
| (1 << (GC::OtherNumber as u32)));
pub const SpaceSeparator: GeneralCategoryGroup = GCG(1 << (GC::SpaceSeparator as u32));
pub const LineSeparator: GeneralCategoryGroup = GCG(1 << (GC::LineSeparator as u32));
pub const ParagraphSeparator: GeneralCategoryGroup = GCG(1 << (GC::ParagraphSeparator as u32));
pub const Separator: GeneralCategoryGroup = GCG((1 << (GC::SpaceSeparator as u32))
| (1 << (GC::LineSeparator as u32))
| (1 << (GC::ParagraphSeparator as u32)));
pub const Control: GeneralCategoryGroup = GCG(1 << (GC::Control as u32));
pub const Format: GeneralCategoryGroup = GCG(1 << (GC::Format as u32));
pub const PrivateUse: GeneralCategoryGroup = GCG(1 << (GC::PrivateUse as u32));
pub const Surrogate: GeneralCategoryGroup = GCG(1 << (GC::Surrogate as u32));
pub const Unassigned: GeneralCategoryGroup = GCG(1 << (GC::Unassigned as u32));
pub const Other: GeneralCategoryGroup = GCG((1 << (GC::Control as u32))
| (1 << (GC::Format as u32))
| (1 << (GC::PrivateUse as u32))
| (1 << (GC::Surrogate as u32))
| (1 << (GC::Unassigned as u32)));
pub const DashPunctuation: GeneralCategoryGroup = GCG(1 << (GC::DashPunctuation as u32));
pub const OpenPunctuation: GeneralCategoryGroup = GCG(1 << (GC::OpenPunctuation as u32));
pub const ClosePunctuation: GeneralCategoryGroup = GCG(1 << (GC::ClosePunctuation as u32));
pub const ConnectorPunctuation: GeneralCategoryGroup =
GCG(1 << (GC::ConnectorPunctuation as u32));
pub const InitialPunctuation: GeneralCategoryGroup = GCG(1 << (GC::InitialPunctuation as u32));
pub const FinalPunctuation: GeneralCategoryGroup = GCG(1 << (GC::FinalPunctuation as u32));
pub const OtherPunctuation: GeneralCategoryGroup = GCG(1 << (GC::OtherPunctuation as u32));
pub const Punctuation: GeneralCategoryGroup = GCG((1 << (GC::DashPunctuation as u32))
| (1 << (GC::OpenPunctuation as u32))
| (1 << (GC::ClosePunctuation as u32))
| (1 << (GC::ConnectorPunctuation as u32))
| (1 << (GC::OtherPunctuation as u32))
| (1 << (GC::InitialPunctuation as u32))
| (1 << (GC::FinalPunctuation as u32)));
pub const MathSymbol: GeneralCategoryGroup = GCG(1 << (GC::MathSymbol as u32));
pub const CurrencySymbol: GeneralCategoryGroup = GCG(1 << (GC::CurrencySymbol as u32));
pub const ModifierSymbol: GeneralCategoryGroup = GCG(1 << (GC::ModifierSymbol as u32));
pub const OtherSymbol: GeneralCategoryGroup = GCG(1 << (GC::OtherSymbol as u32));
pub const Symbol: GeneralCategoryGroup = GCG((1 << (GC::MathSymbol as u32))
| (1 << (GC::CurrencySymbol as u32))
| (1 << (GC::ModifierSymbol as u32))
| (1 << (GC::OtherSymbol as u32)));
const ALL: u32 = (1 << (GC::FinalPunctuation as u32 + 1)) - 1;
pub const fn contains(self, val: GeneralCategory) -> bool {
0 != (1 << (val as u32)) & self.0
}
pub const fn complement(self) -> Self {
GeneralCategoryGroup(!self.0 & Self::ALL)
}
pub const fn all() -> Self {
Self(Self::ALL)
}
pub const fn empty() -> Self {
Self(0)
}
pub const fn union(self, other: Self) -> Self {
Self(self.0 | other.0)
}
pub const fn intersection(self, other: Self) -> Self {
Self(self.0 & other.0)
}
}
impl From<GeneralCategory> for GeneralCategoryGroup {
fn from(subcategory: GeneralCategory) -> Self {
GeneralCategoryGroup(1 << (subcategory as u32))
}
}
impl From<u32> for GeneralCategoryGroup {
fn from(mask: u32) -> Self {
GeneralCategoryGroup(mask & Self::ALL)
}
}
impl From<GeneralCategoryGroup> for u32 {
fn from(group: GeneralCategoryGroup) -> Self {
group.0
}
}
#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "datagen", derive(databake::Bake))]
#[cfg_attr(feature = "datagen", databake(path = icu_properties::props))]
#[allow(clippy::exhaustive_structs)] #[repr(transparent)]
pub struct Script(pub(crate) u16);
impl Script {
pub const fn to_icu4c_value(self) -> u16 {
self.0
}
pub const fn from_icu4c_value(value: u16) -> Self {
Self(value)
}
}
create_const_array! {
#[allow(missing_docs)] #[allow(non_upper_case_globals)]
impl Script {
pub const Adlam: Script = Script(167);
pub const Ahom: Script = Script(161);
pub const AnatolianHieroglyphs: Script = Script(156);
pub const Arabic: Script = Script(2);
pub const Armenian: Script = Script(3);
pub const Avestan: Script = Script(117);
pub const Balinese: Script = Script(62);
pub const Bamum: Script = Script(130);
pub const BassaVah: Script = Script(134);
pub const Batak: Script = Script(63);
pub const Bengali: Script = Script(4);
pub const Bhaiksuki: Script = Script(168);
pub const Bopomofo: Script = Script(5);
pub const Brahmi: Script = Script(65);
pub const Braille: Script = Script(46);
pub const Buginese: Script = Script(55);
pub const Buhid: Script = Script(44);
pub const CanadianAboriginal: Script = Script(40);
pub const Carian: Script = Script(104);
pub const CaucasianAlbanian: Script = Script(159);
pub const Chakma: Script = Script(118);
pub const Cham: Script = Script(66);
pub const Cherokee: Script = Script(6);
pub const Chorasmian: Script = Script(189);
pub const Common: Script = Script(0);
pub const Coptic: Script = Script(7);
pub const Cuneiform: Script = Script(101);
pub const Cypriot: Script = Script(47);
pub const CyproMinoan: Script = Script(193);
pub const Cyrillic: Script = Script(8);
pub const Deseret: Script = Script(9);
pub const Devanagari: Script = Script(10);
pub const DivesAkuru: Script = Script(190);
pub const Dogra: Script = Script(178);
pub const Duployan: Script = Script(135);
pub const EgyptianHieroglyphs: Script = Script(71);
pub const Elbasan: Script = Script(136);
pub const Elymaic: Script = Script(185);
pub const Ethiopian: Script = Script(11);
pub const Georgian: Script = Script(12);
pub const Glagolitic: Script = Script(56);
pub const Gothic: Script = Script(13);
pub const Grantha: Script = Script(137);
pub const Greek: Script = Script(14);
pub const Gujarati: Script = Script(15);
pub const GunjalaGondi: Script = Script(179);
pub const Gurmukhi: Script = Script(16);
pub const Han: Script = Script(17);
pub const Hangul: Script = Script(18);
pub const HanifiRohingya: Script = Script(182);
pub const Hanunoo: Script = Script(43);
pub const Hatran: Script = Script(162);
pub const Hebrew: Script = Script(19);
pub const Hiragana: Script = Script(20);
pub const ImperialAramaic: Script = Script(116);
pub const Inherited: Script = Script(1);
pub const InscriptionalPahlavi: Script = Script(122);
pub const InscriptionalParthian: Script = Script(125);
pub const Javanese: Script = Script(78);
pub const Kaithi: Script = Script(120);
pub const Kannada: Script = Script(21);
pub const Katakana: Script = Script(22);
pub const Kawi: Script = Script(198);
pub const KayahLi: Script = Script(79);
pub const Kharoshthi: Script = Script(57);
pub const KhitanSmallScript: Script = Script(191);
pub const Khmer: Script = Script(23);
pub const Khojki: Script = Script(157);
pub const Khudawadi: Script = Script(145);
pub const Lao: Script = Script(24);
pub const Latin: Script = Script(25);
pub const Lepcha: Script = Script(82);
pub const Limbu: Script = Script(48);
pub const LinearA: Script = Script(83);
pub const LinearB: Script = Script(49);
pub const Lisu: Script = Script(131);
pub const Lycian: Script = Script(107);
pub const Lydian: Script = Script(108);
pub const Mahajani: Script = Script(160);
pub const Makasar: Script = Script(180);
pub const Malayalam: Script = Script(26);
pub const Mandaic: Script = Script(84);
pub const Manichaean: Script = Script(121);
pub const Marchen: Script = Script(169);
pub const MasaramGondi: Script = Script(175);
pub const Medefaidrin: Script = Script(181);
pub const MeeteiMayek: Script = Script(115);
pub const MendeKikakui: Script = Script(140);
pub const MeroiticCursive: Script = Script(141);
pub const MeroiticHieroglyphs: Script = Script(86);
pub const Miao: Script = Script(92);
pub const Modi: Script = Script(163);
pub const Mongolian: Script = Script(27);
pub const Mro: Script = Script(149);
pub const Multani: Script = Script(164);
pub const Myanmar: Script = Script(28);
pub const Nabataean: Script = Script(143);
pub const NagMundari: Script = Script(199);
pub const Nandinagari: Script = Script(187);
pub const Nastaliq: Script = Script(200);
pub const NewTaiLue: Script = Script(59);
pub const Newa: Script = Script(170);
pub const Nko: Script = Script(87);
pub const Nushu: Script = Script(150);
pub const NyiakengPuachueHmong: Script = Script(186);
pub const Ogham: Script = Script(29);
pub const OlChiki: Script = Script(109);
pub const OldHungarian: Script = Script(76);
pub const OldItalic: Script = Script(30);
pub const OldNorthArabian: Script = Script(142);
pub const OldPermic: Script = Script(89);
pub const OldPersian: Script = Script(61);
pub const OldSogdian: Script = Script(184);
pub const OldSouthArabian: Script = Script(133);
pub const OldTurkic: Script = Script(88);
pub const OldUyghur: Script = Script(194);
pub const Oriya: Script = Script(31);
pub const Osage: Script = Script(171);
pub const Osmanya: Script = Script(50);
pub const PahawhHmong: Script = Script(75);
pub const Palmyrene: Script = Script(144);
pub const PauCinHau: Script = Script(165);
pub const PhagsPa: Script = Script(90);
pub const Phoenician: Script = Script(91);
pub const PsalterPahlavi: Script = Script(123);
pub const Rejang: Script = Script(110);
pub const Runic: Script = Script(32);
pub const Samaritan: Script = Script(126);
pub const Saurashtra: Script = Script(111);
pub const Sharada: Script = Script(151);
pub const Shavian: Script = Script(51);
pub const Siddham: Script = Script(166);
pub const SignWriting: Script = Script(112);
pub const Sinhala: Script = Script(33);
pub const Sogdian: Script = Script(183);
pub const SoraSompeng: Script = Script(152);
pub const Soyombo: Script = Script(176);
pub const Sundanese: Script = Script(113);
pub const SylotiNagri: Script = Script(58);
pub const Syriac: Script = Script(34);
pub const Tagalog: Script = Script(42);
pub const Tagbanwa: Script = Script(45);
pub const TaiLe: Script = Script(52);
pub const TaiTham: Script = Script(106);
pub const TaiViet: Script = Script(127);
pub const Takri: Script = Script(153);
pub const Tamil: Script = Script(35);
pub const Tangsa: Script = Script(195);
pub const Tangut: Script = Script(154);
pub const Telugu: Script = Script(36);
pub const Thaana: Script = Script(37);
pub const Thai: Script = Script(38);
pub const Tibetan: Script = Script(39);
pub const Tifinagh: Script = Script(60);
pub const Tirhuta: Script = Script(158);
pub const Toto: Script = Script(196);
pub const Ugaritic: Script = Script(53);
pub const Unknown: Script = Script(103);
pub const Vai: Script = Script(99);
pub const Vithkuqi: Script = Script(197);
pub const Wancho: Script = Script(188);
pub const WarangCiti: Script = Script(146);
pub const Yezidi: Script = Script(192);
pub const Yi: Script = Script(41);
pub const ZanabazarSquare: Script = Script(177);
}
}
make_enumerated_property! {
name: "Script";
short_name: "sc";
ident: Script;
data_marker: crate::provider::ScriptV1;
singleton: SINGLETON_SCRIPT_V1;
ule_ty: <u16 as zerovec::ule::AsULE>::ULE;
func:
}
#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "datagen", derive(databake::Bake))]
#[cfg_attr(feature = "datagen", databake(path = icu_properties::props))]
#[allow(clippy::exhaustive_structs)] #[repr(transparent)]
pub struct HangulSyllableType(pub(crate) u8);
impl HangulSyllableType {
pub const fn to_icu4c_value(self) -> u8 {
self.0
}
pub const fn from_icu4c_value(value: u8) -> Self {
Self(value)
}
}
create_const_array! {
#[allow(non_upper_case_globals)]
impl HangulSyllableType {
pub const NotApplicable: HangulSyllableType = HangulSyllableType(0);
pub const LeadingJamo: HangulSyllableType = HangulSyllableType(1);
pub const VowelJamo: HangulSyllableType = HangulSyllableType(2);
pub const TrailingJamo: HangulSyllableType = HangulSyllableType(3);
pub const LeadingVowelSyllable: HangulSyllableType = HangulSyllableType(4);
pub const LeadingVowelTrailingSyllable: HangulSyllableType = HangulSyllableType(5);
}
}
make_enumerated_property! {
name: "Hangul_Syllable_Type";
short_name: "hst";
ident: HangulSyllableType;
data_marker: crate::provider::HangulSyllableTypeV1;
singleton: SINGLETON_HANGUL_SYLLABLE_TYPE_V1;
ule_ty: u8;
func:
}
#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "datagen", derive(databake::Bake))]
#[cfg_attr(feature = "datagen", databake(path = icu_properties::props))]
#[allow(clippy::exhaustive_structs)] #[repr(transparent)]
pub struct EastAsianWidth(pub(crate) u8);
impl EastAsianWidth {
pub const fn to_icu4c_value(self) -> u8 {
self.0
}
pub const fn from_icu4c_value(value: u8) -> Self {
Self(value)
}
}
create_const_array! {
#[allow(missing_docs)] #[allow(non_upper_case_globals)]
impl EastAsianWidth {
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); }
}
make_enumerated_property! {
name: "East_Asian_Width";
short_name: "ea";
ident: EastAsianWidth;
data_marker: crate::provider::EastAsianWidthV1;
singleton: SINGLETON_EAST_ASIAN_WIDTH_V1;
ule_ty: u8;
func:
}
#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "datagen", derive(databake::Bake))]
#[cfg_attr(feature = "datagen", databake(path = icu_properties::props))]
#[allow(clippy::exhaustive_structs)] #[repr(transparent)]
pub struct LineBreak(pub(crate) u8);
impl LineBreak {
pub const fn to_icu4c_value(self) -> u8 {
self.0
}
pub const fn from_icu4c_value(value: u8) -> Self {
Self(value)
}
}
create_const_array! {
#[allow(missing_docs)] #[allow(non_upper_case_globals)]
impl LineBreak {
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); }
}
make_enumerated_property! {
name: "Line_Break";
short_name: "lb";
ident: LineBreak;
data_marker: crate::provider::LineBreakV1;
singleton: SINGLETON_LINE_BREAK_V1;
ule_ty: u8;
func:
}
#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "datagen", derive(databake::Bake))]
#[cfg_attr(feature = "datagen", databake(path = icu_properties::props))]
#[allow(clippy::exhaustive_structs)] #[repr(transparent)]
pub struct GraphemeClusterBreak(pub(crate) u8);
impl GraphemeClusterBreak {
pub const fn to_icu4c_value(self) -> u8 {
self.0
}
pub const fn from_icu4c_value(value: u8) -> Self {
Self(value)
}
}
create_const_array! {
#[allow(missing_docs)] #[allow(non_upper_case_globals)]
impl GraphemeClusterBreak {
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); }
}
make_enumerated_property! {
name: "Grapheme_Cluster_Break";
short_name: "GCB";
ident: GraphemeClusterBreak;
data_marker: crate::provider::GraphemeClusterBreakV1;
singleton: SINGLETON_GRAPHEME_CLUSTER_BREAK_V1;
ule_ty: u8;
func:
}
#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "datagen", derive(databake::Bake))]
#[cfg_attr(feature = "datagen", databake(path = icu_properties::props))]
#[allow(clippy::exhaustive_structs)] #[repr(transparent)]
pub struct WordBreak(pub(crate) u8);
impl WordBreak {
pub const fn to_icu4c_value(self) -> u8 {
self.0
}
pub const fn from_icu4c_value(value: u8) -> Self {
Self(value)
}
}
create_const_array! {
#[allow(missing_docs)] #[allow(non_upper_case_globals)]
impl WordBreak {
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); }
}
make_enumerated_property! {
name: "Word_Break";
short_name: "WB";
ident: WordBreak;
data_marker: crate::provider::WordBreakV1;
singleton: SINGLETON_WORD_BREAK_V1;
ule_ty: u8;
func:
}
#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "datagen", derive(databake::Bake))]
#[cfg_attr(feature = "datagen", databake(path = icu_properties::props))]
#[allow(clippy::exhaustive_structs)] #[repr(transparent)]
pub struct SentenceBreak(pub(crate) u8);
impl SentenceBreak {
pub const fn to_icu4c_value(self) -> u8 {
self.0
}
pub const fn from_icu4c_value(value: u8) -> Self {
Self(value)
}
}
create_const_array! {
#[allow(missing_docs)] #[allow(non_upper_case_globals)]
impl SentenceBreak {
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); }
}
make_enumerated_property! {
name: "Sentence_Break";
short_name: "SB";
ident: SentenceBreak;
data_marker: crate::provider::SentenceBreakV1;
singleton: SINGLETON_SENTENCE_BREAK_V1;
ule_ty: u8;
func:
}
#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "datagen", derive(databake::Bake))]
#[cfg_attr(feature = "datagen", databake(path = icu_properties::props))]
#[allow(clippy::exhaustive_structs)] #[repr(transparent)]
pub struct CanonicalCombiningClass(pub(crate) u8);
impl CanonicalCombiningClass {
pub const fn to_icu4c_value(self) -> u8 {
self.0
}
pub const fn from_icu4c_value(value: u8) -> Self {
Self(value)
}
}
create_const_array! {
#[allow(missing_docs)] #[allow(non_upper_case_globals)]
impl CanonicalCombiningClass {
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); }
}
make_enumerated_property! {
name: "Canonical_Combining_Class";
short_name: "ccc";
ident: CanonicalCombiningClass;
data_marker: crate::provider::CanonicalCombiningClassV1;
singleton: SINGLETON_CANONICAL_COMBINING_CLASS_V1;
ule_ty: u8;
func:
}
#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "datagen", derive(databake::Bake))]
#[cfg_attr(feature = "datagen", databake(path = icu_properties::props))]
#[allow(clippy::exhaustive_structs)] #[repr(transparent)]
pub struct IndicSyllabicCategory(pub(crate) u8);
impl IndicSyllabicCategory {
pub const fn to_icu4c_value(self) -> u8 {
self.0
}
pub const fn from_icu4c_value(value: u8) -> Self {
Self(value)
}
}
create_const_array! {
#[allow(missing_docs)] #[allow(non_upper_case_globals)]
impl IndicSyllabicCategory {
pub const Other: IndicSyllabicCategory = IndicSyllabicCategory(0);
pub const Avagraha: IndicSyllabicCategory = IndicSyllabicCategory(1);
pub const Bindu: IndicSyllabicCategory = IndicSyllabicCategory(2);
pub const BrahmiJoiningNumber: IndicSyllabicCategory = IndicSyllabicCategory(3);
pub const CantillationMark: IndicSyllabicCategory = IndicSyllabicCategory(4);
pub const Consonant: IndicSyllabicCategory = IndicSyllabicCategory(5);
pub const ConsonantDead: IndicSyllabicCategory = IndicSyllabicCategory(6);
pub const ConsonantFinal: IndicSyllabicCategory = IndicSyllabicCategory(7);
pub const ConsonantHeadLetter: IndicSyllabicCategory = IndicSyllabicCategory(8);
pub const ConsonantInitialPostfixed: IndicSyllabicCategory = IndicSyllabicCategory(9);
pub const ConsonantKiller: IndicSyllabicCategory = IndicSyllabicCategory(10);
pub const ConsonantMedial: IndicSyllabicCategory = IndicSyllabicCategory(11);
pub const ConsonantPlaceholder: IndicSyllabicCategory = IndicSyllabicCategory(12);
pub const ConsonantPrecedingRepha: IndicSyllabicCategory = IndicSyllabicCategory(13);
pub const ConsonantPrefixed: IndicSyllabicCategory = IndicSyllabicCategory(14);
pub const ConsonantSucceedingRepha: IndicSyllabicCategory = IndicSyllabicCategory(15);
pub const ConsonantSubjoined: IndicSyllabicCategory = IndicSyllabicCategory(16);
pub const ConsonantWithStacker: IndicSyllabicCategory = IndicSyllabicCategory(17);
pub const GeminationMark: IndicSyllabicCategory = IndicSyllabicCategory(18);
pub const InvisibleStacker: IndicSyllabicCategory = IndicSyllabicCategory(19);
pub const Joiner: IndicSyllabicCategory = IndicSyllabicCategory(20);
pub const ModifyingLetter: IndicSyllabicCategory = IndicSyllabicCategory(21);
pub const NonJoiner: IndicSyllabicCategory = IndicSyllabicCategory(22);
pub const Nukta: IndicSyllabicCategory = IndicSyllabicCategory(23);
pub const Number: IndicSyllabicCategory = IndicSyllabicCategory(24);
pub const NumberJoiner: IndicSyllabicCategory = IndicSyllabicCategory(25);
pub const PureKiller: IndicSyllabicCategory = IndicSyllabicCategory(26);
pub const RegisterShifter: IndicSyllabicCategory = IndicSyllabicCategory(27);
pub const SyllableModifier: IndicSyllabicCategory = IndicSyllabicCategory(28);
pub const ToneLetter: IndicSyllabicCategory = IndicSyllabicCategory(29);
pub const ToneMark: IndicSyllabicCategory = IndicSyllabicCategory(30);
pub const Virama: IndicSyllabicCategory = IndicSyllabicCategory(31);
pub const Visarga: IndicSyllabicCategory = IndicSyllabicCategory(32);
pub const Vowel: IndicSyllabicCategory = IndicSyllabicCategory(33);
pub const VowelDependent: IndicSyllabicCategory = IndicSyllabicCategory(34);
pub const VowelIndependent: IndicSyllabicCategory = IndicSyllabicCategory(35);
pub const ReorderingKiller: IndicSyllabicCategory = IndicSyllabicCategory(36);
}
}
make_enumerated_property! {
name: "Indic_Syllabic_Category";
short_name: "InSC";
ident: IndicSyllabicCategory;
data_marker: crate::provider::IndicSyllabicCategoryV1;
singleton: SINGLETON_INDIC_SYLLABIC_CATEGORY_V1;
ule_ty: u8;
func:
}
#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "datagen", derive(databake::Bake))]
#[cfg_attr(feature = "datagen", databake(path = icu_properties::props))]
#[allow(clippy::exhaustive_structs)] #[repr(transparent)]
pub struct JoiningType(pub(crate) u8);
impl JoiningType {
pub const fn to_icu4c_value(self) -> u8 {
self.0
}
pub const fn from_icu4c_value(value: u8) -> Self {
Self(value)
}
}
create_const_array! {
#[allow(missing_docs)] #[allow(non_upper_case_globals)]
impl JoiningType {
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); }
}
make_enumerated_property! {
name: "Joining_Type";
short_name: "jt";
ident: JoiningType;
data_marker: crate::provider::JoiningTypeV1;
singleton: SINGLETON_JOINING_TYPE_V1;
ule_ty: u8;
func:
}
pub use crate::code_point_set::BinaryProperty;
macro_rules! make_binary_property {
(
name: $name:literal;
short_name: $short_name:literal;
ident: $d:ident;
data_marker: $data_marker:ty;
singleton: $singleton:ident;
func:
$(#[$doc:meta])+
) => {
$(#[$doc])+
#[derive(Debug)]
#[non_exhaustive]
pub struct $d;
impl crate::private::Sealed for $d {}
impl BinaryProperty for $d {
type DataMarker = $data_marker;
#[cfg(feature = "compiled_data")]
const SINGLETON: &'static crate::provider::PropertyCodePointSet<'static> =
&crate::provider::Baked::$singleton;
const NAME: &'static [u8] = $name.as_bytes();
const SHORT_NAME: &'static [u8] = $short_name.as_bytes();
}
};
}
make_binary_property! {
name: "ASCII_Hex_Digit";
short_name: "AHex";
ident: AsciiHexDigit;
data_marker: crate::provider::AsciiHexDigitV1;
singleton: SINGLETON_ASCII_HEX_DIGIT_V1;
func:
}
make_binary_property! {
name: "Alnum";
short_name: "Alnum";
ident: Alnum;
data_marker: crate::provider::AlnumV1;
singleton: SINGLETON_ALNUM_V1;
func:
}
make_binary_property! {
name: "Alphabetic";
short_name: "Alpha";
ident: Alphabetic;
data_marker: crate::provider::AlphabeticV1;
singleton: SINGLETON_ALPHABETIC_V1;
func:
}
make_binary_property! {
name: "Bidi_Control";
short_name: "Bidi_C";
ident: BidiControl;
data_marker: crate::provider::BidiControlV1;
singleton: SINGLETON_BIDI_CONTROL_V1;
func:
}
make_binary_property! {
name: "Bidi_Mirrored";
short_name: "Bidi_M";
ident: BidiMirrored;
data_marker: crate::provider::BidiMirroredV1;
singleton: SINGLETON_BIDI_MIRRORED_V1;
func:
}
make_binary_property! {
name: "Blank";
short_name: "Blank";
ident: Blank;
data_marker: crate::provider::BlankV1;
singleton: SINGLETON_BLANK_V1;
func:
}
make_binary_property! {
name: "Cased";
short_name: "Cased";
ident: Cased;
data_marker: crate::provider::CasedV1;
singleton: SINGLETON_CASED_V1;
func:
}
make_binary_property! {
name: "Case_Ignorable";
short_name: "CI";
ident: CaseIgnorable;
data_marker: crate::provider::CaseIgnorableV1;
singleton: SINGLETON_CASE_IGNORABLE_V1;
func:
}
make_binary_property! {
name: "Full_Composition_Exclusion";
short_name: "Comp_Ex";
ident: FullCompositionExclusion;
data_marker: crate::provider::FullCompositionExclusionV1;
singleton: SINGLETON_FULL_COMPOSITION_EXCLUSION_V1;
func:
}
make_binary_property! {
name: "Changes_When_Casefolded";
short_name: "CWCF";
ident: ChangesWhenCasefolded;
data_marker: crate::provider::ChangesWhenCasefoldedV1;
singleton: SINGLETON_CHANGES_WHEN_CASEFOLDED_V1;
func:
}
make_binary_property! {
name: "Changes_When_Casemapped";
short_name: "CWCM";
ident: ChangesWhenCasemapped;
data_marker: crate::provider::ChangesWhenCasemappedV1;
singleton: SINGLETON_CHANGES_WHEN_CASEMAPPED_V1;
func:
}
make_binary_property! {
name: "Changes_When_NFKC_Casefolded";
short_name: "CWKCF";
ident: ChangesWhenNfkcCasefolded;
data_marker: crate::provider::ChangesWhenNfkcCasefoldedV1;
singleton: SINGLETON_CHANGES_WHEN_NFKC_CASEFOLDED_V1;
func:
}
make_binary_property! {
name: "Changes_When_Lowercased";
short_name: "CWL";
ident: ChangesWhenLowercased;
data_marker: crate::provider::ChangesWhenLowercasedV1;
singleton: SINGLETON_CHANGES_WHEN_LOWERCASED_V1;
func:
}
make_binary_property! {
name: "Changes_When_Titlecased";
short_name: "CWT";
ident: ChangesWhenTitlecased;
data_marker: crate::provider::ChangesWhenTitlecasedV1;
singleton: SINGLETON_CHANGES_WHEN_TITLECASED_V1;
func:
}
make_binary_property! {
name: "Changes_When_Uppercased";
short_name: "CWU";
ident: ChangesWhenUppercased;
data_marker: crate::provider::ChangesWhenUppercasedV1;
singleton: SINGLETON_CHANGES_WHEN_UPPERCASED_V1;
func:
}
make_binary_property! {
name: "Dash";
short_name: "Dash";
ident: Dash;
data_marker: crate::provider::DashV1;
singleton: SINGLETON_DASH_V1;
func:
}
make_binary_property! {
name: "Deprecated";
short_name: "Dep";
ident: Deprecated;
data_marker: crate::provider::DeprecatedV1;
singleton: SINGLETON_DEPRECATED_V1;
func:
}
make_binary_property! {
name: "Default_Ignorable_Code_Point";
short_name: "DI";
ident: DefaultIgnorableCodePoint;
data_marker: crate::provider::DefaultIgnorableCodePointV1;
singleton: SINGLETON_DEFAULT_IGNORABLE_CODE_POINT_V1;
func:
}
make_binary_property! {
name: "Diacritic";
short_name: "Dia";
ident: Diacritic;
data_marker: crate::provider::DiacriticV1;
singleton: SINGLETON_DIACRITIC_V1;
func:
}
make_binary_property! {
name: "Emoji_Modifier_Base";
short_name: "EBase";
ident: EmojiModifierBase;
data_marker: crate::provider::EmojiModifierBaseV1;
singleton: SINGLETON_EMOJI_MODIFIER_BASE_V1;
func:
}
make_binary_property! {
name: "Emoji_Component";
short_name: "EComp";
ident: EmojiComponent;
data_marker: crate::provider::EmojiComponentV1;
singleton: SINGLETON_EMOJI_COMPONENT_V1;
func:
}
make_binary_property! {
name: "Emoji_Modifier";
short_name: "EMod";
ident: EmojiModifier;
data_marker: crate::provider::EmojiModifierV1;
singleton: SINGLETON_EMOJI_MODIFIER_V1;
func:
}
make_binary_property! {
name: "Emoji";
short_name: "Emoji";
ident: Emoji;
data_marker: crate::provider::EmojiV1;
singleton: SINGLETON_EMOJI_V1;
func:
}
make_binary_property! {
name: "Emoji_Presentation";
short_name: "EPres";
ident: EmojiPresentation;
data_marker: crate::provider::EmojiPresentationV1;
singleton: SINGLETON_EMOJI_PRESENTATION_V1;
func:
}
make_binary_property! {
name: "Extender";
short_name: "Ext";
ident: Extender;
data_marker: crate::provider::ExtenderV1;
singleton: SINGLETON_EXTENDER_V1;
func:
}
make_binary_property! {
name: "Extended_Pictographic";
short_name: "ExtPict";
ident: ExtendedPictographic;
data_marker: crate::provider::ExtendedPictographicV1;
singleton: SINGLETON_EXTENDED_PICTOGRAPHIC_V1;
func:
}
make_binary_property! {
name: "Graph";
short_name: "Graph";
ident: Graph;
data_marker: crate::provider::GraphV1;
singleton: SINGLETON_GRAPH_V1;
func:
}
make_binary_property! {
name: "Grapheme_Base";
short_name: "Gr_Base";
ident: GraphemeBase;
data_marker: crate::provider::GraphemeBaseV1;
singleton: SINGLETON_GRAPHEME_BASE_V1;
func:
}
make_binary_property! {
name: "Grapheme_Extend";
short_name: "Gr_Ext";
ident: GraphemeExtend;
data_marker: crate::provider::GraphemeExtendV1;
singleton: SINGLETON_GRAPHEME_EXTEND_V1;
func:
}
make_binary_property! {
name: "Grapheme_Link";
short_name: "Gr_Link";
ident: GraphemeLink;
data_marker: crate::provider::GraphemeLinkV1;
singleton: SINGLETON_GRAPHEME_LINK_V1;
func:
}
make_binary_property! {
name: "Hex_Digit";
short_name: "Hex";
ident: HexDigit;
data_marker: crate::provider::HexDigitV1;
singleton: SINGLETON_HEX_DIGIT_V1;
func:
}
make_binary_property! {
name: "Hyphen";
short_name: "Hyphen";
ident: Hyphen;
data_marker: crate::provider::HyphenV1;
singleton: SINGLETON_HYPHEN_V1;
func:
}
make_binary_property! {
name: "Id_Continue";
short_name: "IDC";
ident: IdContinue;
data_marker: crate::provider::IdContinueV1;
singleton: SINGLETON_ID_CONTINUE_V1;
func:
}
make_binary_property! {
name: "Ideographic";
short_name: "Ideo";
ident: Ideographic;
data_marker: crate::provider::IdeographicV1;
singleton: SINGLETON_IDEOGRAPHIC_V1;
func:
}
make_binary_property! {
name: "Id_Start";
short_name: "IDS";
ident: IdStart;
data_marker: crate::provider::IdStartV1;
singleton: SINGLETON_ID_START_V1;
func:
}
make_binary_property! {
name: "Ids_Binary_Operator";
short_name: "IDSB";
ident: IdsBinaryOperator;
data_marker: crate::provider::IdsBinaryOperatorV1;
singleton: SINGLETON_IDS_BINARY_OPERATOR_V1;
func:
}
make_binary_property! {
name: "Ids_Trinary_Operator";
short_name: "IDST";
ident: IdsTrinaryOperator;
data_marker: crate::provider::IdsTrinaryOperatorV1;
singleton: SINGLETON_IDS_TRINARY_OPERATOR_V1;
func:
}
make_binary_property! {
name: "Join_Control";
short_name: "Join_C";
ident: JoinControl;
data_marker: crate::provider::JoinControlV1;
singleton: SINGLETON_JOIN_CONTROL_V1;
func:
}
make_binary_property! {
name: "Logical_Order_Exception";
short_name: "LOE";
ident: LogicalOrderException;
data_marker: crate::provider::LogicalOrderExceptionV1;
singleton: SINGLETON_LOGICAL_ORDER_EXCEPTION_V1;
func:
}
make_binary_property! {
name: "Lowercase";
short_name: "Lower";
ident: Lowercase;
data_marker: crate::provider::LowercaseV1;
singleton: SINGLETON_LOWERCASE_V1;
func:
}
make_binary_property! {
name: "Math";
short_name: "Math";
ident: Math;
data_marker: crate::provider::MathV1;
singleton: SINGLETON_MATH_V1;
func:
}
make_binary_property! {
name: "Noncharacter_Code_Point";
short_name: "NChar";
ident: NoncharacterCodePoint;
data_marker: crate::provider::NoncharacterCodePointV1;
singleton: SINGLETON_NONCHARACTER_CODE_POINT_V1;
func:
}
make_binary_property! {
name: "NFC_Inert";
short_name: "NFC_Inert";
ident: NfcInert;
data_marker: crate::provider::NfcInertV1;
singleton: SINGLETON_NFC_INERT_V1;
func:
}
make_binary_property! {
name: "NFD_Inert";
short_name: "NFD_Inert";
ident: NfdInert;
data_marker: crate::provider::NfdInertV1;
singleton: SINGLETON_NFD_INERT_V1;
func:
}
make_binary_property! {
name: "NFKC_Inert";
short_name: "NFKC_Inert";
ident: NfkcInert;
data_marker: crate::provider::NfkcInertV1;
singleton: SINGLETON_NFKC_INERT_V1;
func:
}
make_binary_property! {
name: "NFKD_Inert";
short_name: "NFKD_Inert";
ident: NfkdInert;
data_marker: crate::provider::NfkdInertV1;
singleton: SINGLETON_NFKD_INERT_V1;
func:
}
make_binary_property! {
name: "Pattern_Syntax";
short_name: "Pat_Syn";
ident: PatternSyntax;
data_marker: crate::provider::PatternSyntaxV1;
singleton: SINGLETON_PATTERN_SYNTAX_V1;
func:
}
make_binary_property! {
name: "Pattern_White_Space";
short_name: "Pat_WS";
ident: PatternWhiteSpace;
data_marker: crate::provider::PatternWhiteSpaceV1;
singleton: SINGLETON_PATTERN_WHITE_SPACE_V1;
func:
}
make_binary_property! {
name: "Prepended_Concatenation_Mark";
short_name: "PCM";
ident: PrependedConcatenationMark;
data_marker: crate::provider::PrependedConcatenationMarkV1;
singleton: SINGLETON_PREPENDED_CONCATENATION_MARK_V1;
func:
}
make_binary_property! {
name: "Print";
short_name: "Print";
ident: Print;
data_marker: crate::provider::PrintV1;
singleton: SINGLETON_PRINT_V1;
func:
}
make_binary_property! {
name: "Quotation_Mark";
short_name: "QMark";
ident: QuotationMark;
data_marker: crate::provider::QuotationMarkV1;
singleton: SINGLETON_QUOTATION_MARK_V1;
func:
}
make_binary_property! {
name: "Radical";
short_name: "Radical";
ident: Radical;
data_marker: crate::provider::RadicalV1;
singleton: SINGLETON_RADICAL_V1;
func:
}
make_binary_property! {
name: "Regional_Indicator";
short_name: "RI";
ident: RegionalIndicator;
data_marker: crate::provider::RegionalIndicatorV1;
singleton: SINGLETON_REGIONAL_INDICATOR_V1;
func:
}
make_binary_property! {
name: "Soft_Dotted";
short_name: "SD";
ident: SoftDotted;
data_marker: crate::provider::SoftDottedV1;
singleton: SINGLETON_SOFT_DOTTED_V1;
func:
}
make_binary_property! {
name: "Segment_Starter";
short_name: "Segment_Starter";
ident: SegmentStarter;
data_marker: crate::provider::SegmentStarterV1;
singleton: SINGLETON_SEGMENT_STARTER_V1;
func:
}
make_binary_property! {
name: "Case_Sensitive";
short_name: "Case_Sensitive";
ident: CaseSensitive;
data_marker: crate::provider::CaseSensitiveV1;
singleton: SINGLETON_CASE_SENSITIVE_V1;
func:
}
make_binary_property! {
name: "Sentence_Terminal";
short_name: "STerm";
ident: SentenceTerminal;
data_marker: crate::provider::SentenceTerminalV1;
singleton: SINGLETON_SENTENCE_TERMINAL_V1;
func:
}
make_binary_property! {
name: "Terminal_Punctuation";
short_name: "Term";
ident: TerminalPunctuation;
data_marker: crate::provider::TerminalPunctuationV1;
singleton: SINGLETON_TERMINAL_PUNCTUATION_V1;
func:
}
make_binary_property! {
name: "Unified_Ideograph";
short_name: "UIdeo";
ident: UnifiedIdeograph;
data_marker: crate::provider::UnifiedIdeographV1;
singleton: SINGLETON_UNIFIED_IDEOGRAPH_V1;
func:
}
make_binary_property! {
name: "Uppercase";
short_name: "Upper";
ident: Uppercase;
data_marker: crate::provider::UppercaseV1;
singleton: SINGLETON_UPPERCASE_V1;
func:
}
make_binary_property! {
name: "Variation_Selector";
short_name: "VS";
ident: VariationSelector;
data_marker: crate::provider::VariationSelectorV1;
singleton: SINGLETON_VARIATION_SELECTOR_V1;
func:
}
make_binary_property! {
name: "White_Space";
short_name: "space";
ident: WhiteSpace;
data_marker: crate::provider::WhiteSpaceV1;
singleton: SINGLETON_WHITE_SPACE_V1;
func:
}
make_binary_property! {
name: "Xdigit";
short_name: "Xdigit";
ident: Xdigit;
data_marker: crate::provider::XdigitV1;
singleton: SINGLETON_XDIGIT_V1;
func:
}
make_binary_property! {
name: "XID_Continue";
short_name: "XIDC";
ident: XidContinue;
data_marker: crate::provider::XidContinueV1;
singleton: SINGLETON_XID_CONTINUE_V1;
func:
}
make_binary_property! {
name: "XID_Start";
short_name: "XIDS";
ident: XidStart;
data_marker: crate::provider::XidStartV1;
singleton: SINGLETON_XID_START_V1;
func:
}
pub use crate::emoji::EmojiSet;
macro_rules! make_emoji_set {
(
ident: $marker_name:ident;
data_marker: $data_marker:ty;
singleton: $singleton:ident;
func:
$(#[$doc:meta])+
) => {
$(#[$doc])+
#[derive(Debug)]
#[non_exhaustive]
pub struct $marker_name;
impl crate::private::Sealed for $marker_name {}
impl EmojiSet for $marker_name {
type DataMarker = $data_marker;
#[cfg(feature = "compiled_data")]
const SINGLETON: &'static crate::provider::PropertyUnicodeSet<'static> =
&crate::provider::Baked::$singleton;
}
}
}
make_emoji_set! {
ident: BasicEmoji;
data_marker: crate::provider::BasicEmojiV1;
singleton: SINGLETON_BASIC_EMOJI_V1;
func:
}
#[cfg(test)]
mod test_enumerated_property_completeness {
use super::*;
use std::collections::BTreeMap;
fn check_enum<'a, T: NamedEnumeratedProperty>(
lookup: &crate::provider::names::PropertyValueNameToEnumMap<'static>,
consts: impl IntoIterator<Item = &'a T>,
) where
u16: From<T>,
{
let mut data: BTreeMap<_, _> = lookup
.map
.iter()
.map(|(name, value)| (value, (name, "Data")))
.collect();
let names = crate::PropertyNamesLong::<T>::new();
let consts = consts.into_iter().map(|value| {
(
u16::from(*value) as usize,
(
names.get(*value).unwrap_or("<unknown>").to_string(),
"Consts",
),
)
});
let mut diff = Vec::new();
for t @ (value, _) in consts {
if data.remove(&value).is_none() {
diff.push(t);
}
}
diff.extend(data);
let mut fmt_diff = String::new();
for (value, (name, source)) in diff {
fmt_diff.push_str(&format!("{source}:\t{name} = {value:?}\n"));
}
assert!(
fmt_diff.is_empty(),
"Values defined in data do not match values defined in consts. Difference:\n{}",
fmt_diff
);
}
#[test]
fn test_ea() {
check_enum(
crate::provider::Baked::SINGLETON_EAST_ASIAN_WIDTH_NAME_TO_VALUE_V2,
EastAsianWidth::ALL_VALUES,
);
}
#[test]
fn test_ccc() {
check_enum(
crate::provider::Baked::SINGLETON_CANONICAL_COMBINING_CLASS_NAME_TO_VALUE_V2,
CanonicalCombiningClass::ALL_VALUES,
);
}
#[test]
fn test_jt() {
check_enum(
crate::provider::Baked::SINGLETON_JOINING_TYPE_NAME_TO_VALUE_V2,
JoiningType::ALL_VALUES,
);
}
#[test]
fn test_insc() {
check_enum(
crate::provider::Baked::SINGLETON_INDIC_SYLLABIC_CATEGORY_NAME_TO_VALUE_V2,
IndicSyllabicCategory::ALL_VALUES,
);
}
#[test]
fn test_sb() {
check_enum(
crate::provider::Baked::SINGLETON_SENTENCE_BREAK_NAME_TO_VALUE_V2,
SentenceBreak::ALL_VALUES,
);
}
#[test]
fn test_wb() {
check_enum(
crate::provider::Baked::SINGLETON_WORD_BREAK_NAME_TO_VALUE_V2,
WordBreak::ALL_VALUES,
);
}
#[test]
fn test_bc() {
check_enum(
crate::provider::Baked::SINGLETON_BIDI_CLASS_NAME_TO_VALUE_V2,
BidiClass::ALL_VALUES,
);
}
#[test]
fn test_hst() {
check_enum(
crate::provider::Baked::SINGLETON_HANGUL_SYLLABLE_TYPE_NAME_TO_VALUE_V2,
HangulSyllableType::ALL_VALUES,
);
}
}