1use crate::{props::EnumeratedProperty, provider::PropertyEnumBidiMirroringGlyphV1};
6use icu_collections::codepointtrie::TrieValue;
7use zerovec::ule::{AsULE, RawBytesULE};
8
9#[derive(#[automatically_derived]
#[allow(clippy::exhaustive_structs)]
impl ::core::fmt::Debug for BidiMirroringGlyph {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f,
"BidiMirroringGlyph", "mirroring_glyph", &self.mirroring_glyph,
"mirrored", &self.mirrored, "paired_bracket_type",
&&self.paired_bracket_type)
}
}Debug, #[automatically_derived]
#[allow(clippy::exhaustive_structs)]
impl ::core::cmp::Eq for BidiMirroringGlyph {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_receiver_is_total_eq(&self) -> () {
let _: ::core::cmp::AssertParamIsEq<Option<char>>;
let _: ::core::cmp::AssertParamIsEq<bool>;
let _: ::core::cmp::AssertParamIsEq<BidiPairedBracketType>;
}
}Eq, #[automatically_derived]
#[allow(clippy::exhaustive_structs)]
impl ::core::cmp::PartialEq for BidiMirroringGlyph {
#[inline]
fn eq(&self, other: &BidiMirroringGlyph) -> bool {
self.mirrored == other.mirrored &&
self.mirroring_glyph == other.mirroring_glyph &&
self.paired_bracket_type == other.paired_bracket_type
}
}PartialEq, #[automatically_derived]
#[allow(clippy::exhaustive_structs)]
impl ::core::clone::Clone for BidiMirroringGlyph {
#[inline]
fn clone(&self) -> BidiMirroringGlyph {
let _: ::core::clone::AssertParamIsClone<Option<char>>;
let _: ::core::clone::AssertParamIsClone<bool>;
let _: ::core::clone::AssertParamIsClone<BidiPairedBracketType>;
*self
}
}Clone, #[automatically_derived]
#[allow(clippy::exhaustive_structs)]
impl ::core::marker::Copy for BidiMirroringGlyph { }Copy, #[automatically_derived]
#[allow(clippy::exhaustive_structs)]
impl ::core::default::Default for BidiMirroringGlyph {
#[inline]
fn default() -> BidiMirroringGlyph {
BidiMirroringGlyph {
mirroring_glyph: ::core::default::Default::default(),
mirrored: ::core::default::Default::default(),
paired_bracket_type: ::core::default::Default::default(),
}
}
}Default)]
12#[cfg_attr(feature = "datagen", derive(serde::Serialize, databake::Bake))]
13#[cfg_attr(feature = "datagen", databake(path = icu_properties::props))]
14#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
15#[allow(clippy::exhaustive_structs)] pub struct BidiMirroringGlyph {
17 pub mirroring_glyph: Option<char>,
19 pub mirrored: bool,
21 pub paired_bracket_type: BidiPairedBracketType,
23}
24
25impl EnumeratedProperty for BidiMirroringGlyph {
26 type DataMarker = PropertyEnumBidiMirroringGlyphV1;
27 #[cfg(feature = "compiled_data")]
28 const SINGLETON: &'static crate::provider::PropertyCodePointMap<'static, Self> =
29 crate::provider::Baked::SINGLETON_PROPERTY_ENUM_BIDI_MIRRORING_GLYPH_V1;
30 const NAME: &'static [u8] = b"Bidi_Mirroring_Glyph";
31 const SHORT_NAME: &'static [u8] = b"bmg";
32}
33
34impl crate::private::Sealed for BidiMirroringGlyph {}
35
36impl AsULE for BidiMirroringGlyph {
37 type ULE = zerovec::ule::RawBytesULE<3>;
38
39 fn to_unaligned(self) -> Self::ULE {
40 let [a, b, c, _] = TrieValue::to_u32(self).to_le_bytes();
41 RawBytesULE([a, b, c])
42 }
43 fn from_unaligned(unaligned: Self::ULE) -> Self {
44 let [a, b, c] = unaligned.0;
45 TrieValue::try_from_u32(u32::from_le_bytes([a, b, c, 0])).unwrap_or_default()
46 }
47}
48
49#[derive(#[automatically_derived]
impl ::core::fmt::Debug for BidiPairedBracketType {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::write_str(f,
match self {
BidiPairedBracketType::Open => "Open",
BidiPairedBracketType::Close => "Close",
BidiPairedBracketType::None => "None",
})
}
}Debug, #[automatically_derived]
impl ::core::cmp::Eq for BidiPairedBracketType {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_receiver_is_total_eq(&self) -> () {}
}Eq, #[automatically_derived]
impl ::core::cmp::PartialEq for BidiPairedBracketType {
#[inline]
fn eq(&self, other: &BidiPairedBracketType) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr
}
}PartialEq, #[automatically_derived]
impl ::core::marker::Copy for BidiPairedBracketType { }Copy, #[automatically_derived]
impl ::core::clone::Clone for BidiPairedBracketType {
#[inline]
fn clone(&self) -> BidiPairedBracketType { *self }
}Clone, #[automatically_derived]
impl ::core::default::Default for BidiPairedBracketType {
#[inline]
fn default() -> BidiPairedBracketType { Self::None }
}Default)]
57#[cfg_attr(feature = "datagen", derive(serde::Serialize, databake::Bake))]
58#[cfg_attr(feature = "datagen", databake(path = icu_properties::props))]
59#[cfg_attr(feature = "serde", derive(serde::Deserialize))]
60#[non_exhaustive]
61pub enum BidiPairedBracketType {
62 Open,
64 Close,
66 #[default]
68 None,
69}
70
71#[cfg(feature = "unicode_bidi")]
72use crate::props::BidiClass;
73
74#[cfg(feature = "unicode_bidi")]
121impl unicode_bidi::data_source::BidiDataSource for crate::CodePointMapDataBorrowed<'_, BidiClass> {
122 fn bidi_class(&self, c: char) -> unicode_bidi::BidiClass {
123 self.get(c).into()
124 }
125}
126
127#[cfg(feature = "unicode_bidi")]
128impl From<BidiClass> for unicode_bidi::BidiClass {
129 fn from(value: BidiClass) -> Self {
130 match value {
131 BidiClass::LeftToRight => unicode_bidi::BidiClass::L,
132 BidiClass::RightToLeft => unicode_bidi::BidiClass::R,
133 BidiClass::EuropeanNumber => unicode_bidi::BidiClass::EN,
134 BidiClass::EuropeanSeparator => unicode_bidi::BidiClass::ES,
135 BidiClass::EuropeanTerminator => unicode_bidi::BidiClass::ET,
136 BidiClass::ArabicNumber => unicode_bidi::BidiClass::AN,
137 BidiClass::CommonSeparator => unicode_bidi::BidiClass::CS,
138 BidiClass::ParagraphSeparator => unicode_bidi::BidiClass::B,
139 BidiClass::SegmentSeparator => unicode_bidi::BidiClass::S,
140 BidiClass::WhiteSpace => unicode_bidi::BidiClass::WS,
141 BidiClass::OtherNeutral => unicode_bidi::BidiClass::ON,
142 BidiClass::LeftToRightEmbedding => unicode_bidi::BidiClass::LRE,
143 BidiClass::LeftToRightOverride => unicode_bidi::BidiClass::LRO,
144 BidiClass::ArabicLetter => unicode_bidi::BidiClass::AL,
145 BidiClass::RightToLeftEmbedding => unicode_bidi::BidiClass::RLE,
146 BidiClass::RightToLeftOverride => unicode_bidi::BidiClass::RLO,
147 BidiClass::PopDirectionalFormat => unicode_bidi::BidiClass::PDF,
148 BidiClass::NonspacingMark => unicode_bidi::BidiClass::NSM,
149 BidiClass::BoundaryNeutral => unicode_bidi::BidiClass::BN,
150 BidiClass::FirstStrongIsolate => unicode_bidi::BidiClass::FSI,
151 BidiClass::LeftToRightIsolate => unicode_bidi::BidiClass::LRI,
152 BidiClass::RightToLeftIsolate => unicode_bidi::BidiClass::RLI,
153 BidiClass::PopDirectionalIsolate => unicode_bidi::BidiClass::PDI,
154 _ => unicode_bidi::BidiClass::ON,
156 }
157 }
158}
159
160#[cfg(feature = "unicode_bidi")]
161impl From<unicode_bidi::BidiClass> for BidiClass {
162 fn from(value: unicode_bidi::BidiClass) -> Self {
163 match value {
164 unicode_bidi::BidiClass::L => BidiClass::LeftToRight,
165 unicode_bidi::BidiClass::R => BidiClass::RightToLeft,
166 unicode_bidi::BidiClass::EN => BidiClass::EuropeanNumber,
167 unicode_bidi::BidiClass::ES => BidiClass::EuropeanSeparator,
168 unicode_bidi::BidiClass::ET => BidiClass::EuropeanTerminator,
169 unicode_bidi::BidiClass::AN => BidiClass::ArabicNumber,
170 unicode_bidi::BidiClass::CS => BidiClass::CommonSeparator,
171 unicode_bidi::BidiClass::B => BidiClass::ParagraphSeparator,
172 unicode_bidi::BidiClass::S => BidiClass::SegmentSeparator,
173 unicode_bidi::BidiClass::WS => BidiClass::WhiteSpace,
174 unicode_bidi::BidiClass::ON => BidiClass::OtherNeutral,
175 unicode_bidi::BidiClass::LRE => BidiClass::LeftToRightEmbedding,
176 unicode_bidi::BidiClass::LRO => BidiClass::LeftToRightOverride,
177 unicode_bidi::BidiClass::AL => BidiClass::ArabicLetter,
178 unicode_bidi::BidiClass::RLE => BidiClass::RightToLeftEmbedding,
179 unicode_bidi::BidiClass::RLO => BidiClass::RightToLeftOverride,
180 unicode_bidi::BidiClass::PDF => BidiClass::PopDirectionalFormat,
181 unicode_bidi::BidiClass::NSM => BidiClass::NonspacingMark,
182 unicode_bidi::BidiClass::BN => BidiClass::BoundaryNeutral,
183 unicode_bidi::BidiClass::FSI => BidiClass::FirstStrongIsolate,
184 unicode_bidi::BidiClass::LRI => BidiClass::LeftToRightIsolate,
185 unicode_bidi::BidiClass::RLI => BidiClass::RightToLeftIsolate,
186 unicode_bidi::BidiClass::PDI => BidiClass::PopDirectionalIsolate,
187 }
188 }
189}