• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // This file is part of ICU4X. For terms of use, please see the file
2 // called LICENSE at the top level of the ICU4X source tree
3 // (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
4 
5 #[diplomat::bridge]
6 #[diplomat::abi_rename = "icu4x_{0}_mv1"]
7 #[diplomat::attr(auto, namespace = "icu4x")]
8 pub mod ffi {
9     use icu_properties::props;
10 
11     #[cfg(feature = "compiled_data")]
12     use diplomat_runtime::DiplomatChar;
13 
14     #[diplomat::rust_link(icu::properties::props::BidiClass, Struct)]
15     #[diplomat::enum_convert(icu_properties::props::BidiClass, needs_wildcard)]
16     pub enum BidiClass {
17         #[diplomat::rust_link(icu::properties::props::BidiClass::LeftToRight, EnumVariant)]
18         LeftToRight = 0,
19         #[diplomat::rust_link(icu::properties::props::BidiClass::RightToLeft, EnumVariant)]
20         RightToLeft = 1,
21         #[diplomat::rust_link(icu::properties::props::BidiClass::EuropeanNumber, EnumVariant)]
22         EuropeanNumber = 2,
23         #[diplomat::rust_link(icu::properties::props::BidiClass::EuropeanSeparator, EnumVariant)]
24         EuropeanSeparator = 3,
25         #[diplomat::rust_link(icu::properties::props::BidiClass::EuropeanTerminator, EnumVariant)]
26         EuropeanTerminator = 4,
27         #[diplomat::rust_link(icu::properties::props::BidiClass::ArabicNumber, EnumVariant)]
28         ArabicNumber = 5,
29         #[diplomat::rust_link(icu::properties::props::BidiClass::CommonSeparator, EnumVariant)]
30         CommonSeparator = 6,
31         #[diplomat::rust_link(icu::properties::props::BidiClass::ParagraphSeparator, EnumVariant)]
32         ParagraphSeparator = 7,
33         #[diplomat::rust_link(icu::properties::props::BidiClass::SegmentSeparator, EnumVariant)]
34         SegmentSeparator = 8,
35         #[diplomat::rust_link(icu::properties::props::BidiClass::WhiteSpace, EnumVariant)]
36         WhiteSpace = 9,
37         #[diplomat::rust_link(icu::properties::props::BidiClass::OtherNeutral, EnumVariant)]
38         OtherNeutral = 10,
39         #[diplomat::rust_link(
40             icu::properties::props::BidiClass::LeftToRightEmbedding,
41             EnumVariant
42         )]
43         LeftToRightEmbedding = 11,
44         #[diplomat::rust_link(icu::properties::props::BidiClass::LeftToRightOverride, EnumVariant)]
45         LeftToRightOverride = 12,
46         #[diplomat::rust_link(icu::properties::props::BidiClass::ArabicLetter, EnumVariant)]
47         ArabicLetter = 13,
48         #[diplomat::rust_link(
49             icu::properties::props::BidiClass::RightToLeftEmbedding,
50             EnumVariant
51         )]
52         RightToLeftEmbedding = 14,
53         #[diplomat::rust_link(icu::properties::props::BidiClass::RightToLeftOverride, EnumVariant)]
54         RightToLeftOverride = 15,
55         #[diplomat::rust_link(
56             icu::properties::props::BidiClass::PopDirectionalFormat,
57             EnumVariant
58         )]
59         PopDirectionalFormat = 16,
60         #[diplomat::rust_link(icu::properties::props::BidiClass::NonspacingMark, EnumVariant)]
61         NonspacingMark = 17,
62         #[diplomat::rust_link(icu::properties::props::BidiClass::BoundaryNeutral, EnumVariant)]
63         BoundaryNeutral = 18,
64         #[diplomat::rust_link(icu::properties::props::BidiClass::FirstStrongIsolate, EnumVariant)]
65         FirstStrongIsolate = 19,
66         #[diplomat::rust_link(icu::properties::props::BidiClass::LeftToRightIsolate, EnumVariant)]
67         LeftToRightIsolate = 20,
68         #[diplomat::rust_link(icu::properties::props::BidiClass::RightToLeftIsolate, EnumVariant)]
69         RightToLeftIsolate = 21,
70         #[diplomat::rust_link(
71             icu::properties::props::BidiClass::PopDirectionalIsolate,
72             EnumVariant
73         )]
74         PopDirectionalIsolate = 22,
75     }
76 
77     impl BidiClass {
78         #[diplomat::rust_link(icu::properties::props::EnumeratedProperty::for_char, FnInTrait)]
79         #[cfg(feature = "compiled_data")]
for_char(ch: DiplomatChar) -> Self80         pub fn for_char(ch: DiplomatChar) -> Self {
81             icu_properties::CodePointMapData::<props::BidiClass>::new()
82                 .get32(ch)
83                 .into()
84         }
85 
86         #[diplomat::rust_link(icu::properties::PropertyNamesLongBorrowed::get, FnInStruct)]
87         #[diplomat::rust_link(icu::properties::PropertyNamesLong, Struct, hidden)]
88         #[diplomat::rust_link(icu::properties::PropertyNamesLongBorrowed, Struct, hidden)]
89         #[diplomat::rust_link(icu::properties::PropertyNamesLong::new, FnInStruct, hidden)]
90         #[diplomat::rust_link(icu::properties::PropertyNamesLongBorrowed::new, FnInStruct, hidden)]
91         #[diplomat::rust_link(
92             icu::properties::props::NamedEnumeratedProperty::long_name,
93             FnInTrait,
94             hidden
95         )]
96         #[cfg(feature = "compiled_data")]
97         /// Get the "long" name of this property value (returns empty if property value is unknown)
long_name(self) -> Option<&'static str>98         pub fn long_name(self) -> Option<&'static str> {
99             icu_properties::PropertyNamesLongBorrowed::<props::BidiClass>::new().get(self.into())
100         }
101 
102         #[diplomat::rust_link(icu::properties::PropertyNamesShortBorrowed::get, FnInStruct)]
103         #[diplomat::rust_link(icu::properties::PropertyNamesShort, Struct, hidden)]
104         #[diplomat::rust_link(icu::properties::PropertyNamesShortBorrowed, Struct, hidden)]
105         #[diplomat::rust_link(icu::properties::PropertyNamesShort::new, FnInStruct, hidden)]
106         #[diplomat::rust_link(icu::properties::PropertyNamesShortBorrowed::new, FnInStruct, hidden)]
107         #[diplomat::rust_link(
108             icu::properties::props::NamedEnumeratedProperty::short_name,
109             FnInTrait,
110             hidden
111         )]
112         #[cfg(feature = "compiled_data")]
113         /// Get the "short" name of this property value (returns empty if property value is unknown)
short_name(self) -> Option<&'static str>114         pub fn short_name(self) -> Option<&'static str> {
115             icu_properties::PropertyNamesShortBorrowed::<props::BidiClass>::new().get(self.into())
116         }
117         #[diplomat::rust_link(icu::properties::props::BidiClass::to_icu4c_value, FnInStruct)]
118         /// Convert to an integer value usable with ICU4C and CodePointMapData
to_integer_value(self) -> u8119         pub fn to_integer_value(self) -> u8 {
120             self as u8
121         }
122         #[diplomat::rust_link(icu::properties::props::BidiClass::from_icu4c_value, FnInStruct)]
123         /// Convert from an integer value from ICU4C or CodePointMapData
from_integer_value(other: u8) -> Option<Self>124         pub fn from_integer_value(other: u8) -> Option<Self> {
125             Some(match other {
126                 0 => Self::LeftToRight,
127                 1 => Self::RightToLeft,
128                 2 => Self::EuropeanNumber,
129                 3 => Self::EuropeanSeparator,
130                 4 => Self::EuropeanTerminator,
131                 5 => Self::ArabicNumber,
132                 6 => Self::CommonSeparator,
133                 7 => Self::ParagraphSeparator,
134                 8 => Self::SegmentSeparator,
135                 9 => Self::WhiteSpace,
136                 10 => Self::OtherNeutral,
137                 11 => Self::LeftToRightEmbedding,
138                 12 => Self::LeftToRightOverride,
139                 13 => Self::ArabicLetter,
140                 14 => Self::RightToLeftEmbedding,
141                 15 => Self::RightToLeftOverride,
142                 16 => Self::PopDirectionalFormat,
143                 17 => Self::NonspacingMark,
144                 18 => Self::BoundaryNeutral,
145                 19 => Self::FirstStrongIsolate,
146                 20 => Self::LeftToRightIsolate,
147                 21 => Self::RightToLeftIsolate,
148                 22 => Self::PopDirectionalIsolate,
149                 _ => return None,
150             })
151         }
152     }
153 
154     #[diplomat::rust_link(icu::properties::props::Script, Struct)]
155     #[diplomat::enum_convert(icu_properties::props::Script, needs_wildcard)]
156     pub enum Script {
157         #[diplomat::rust_link(icu::properties::props::Script::Adlam, EnumVariant)]
158         Adlam = 167,
159         #[diplomat::rust_link(icu::properties::props::Script::Ahom, EnumVariant)]
160         Ahom = 161,
161         #[diplomat::rust_link(icu::properties::props::Script::AnatolianHieroglyphs, EnumVariant)]
162         AnatolianHieroglyphs = 156,
163         #[diplomat::rust_link(icu::properties::props::Script::Arabic, EnumVariant)]
164         Arabic = 2,
165         #[diplomat::rust_link(icu::properties::props::Script::Armenian, EnumVariant)]
166         Armenian = 3,
167         #[diplomat::rust_link(icu::properties::props::Script::Avestan, EnumVariant)]
168         Avestan = 117,
169         #[diplomat::rust_link(icu::properties::props::Script::Balinese, EnumVariant)]
170         Balinese = 62,
171         #[diplomat::rust_link(icu::properties::props::Script::Bamum, EnumVariant)]
172         Bamum = 130,
173         #[diplomat::rust_link(icu::properties::props::Script::BassaVah, EnumVariant)]
174         BassaVah = 134,
175         #[diplomat::rust_link(icu::properties::props::Script::Batak, EnumVariant)]
176         Batak = 63,
177         #[diplomat::rust_link(icu::properties::props::Script::Bengali, EnumVariant)]
178         Bengali = 4,
179         #[diplomat::rust_link(icu::properties::props::Script::Bhaiksuki, EnumVariant)]
180         Bhaiksuki = 168,
181         #[diplomat::rust_link(icu::properties::props::Script::Bopomofo, EnumVariant)]
182         Bopomofo = 5,
183         #[diplomat::rust_link(icu::properties::props::Script::Brahmi, EnumVariant)]
184         Brahmi = 65,
185         #[diplomat::rust_link(icu::properties::props::Script::Braille, EnumVariant)]
186         Braille = 46,
187         #[diplomat::rust_link(icu::properties::props::Script::Buginese, EnumVariant)]
188         Buginese = 55,
189         #[diplomat::rust_link(icu::properties::props::Script::Buhid, EnumVariant)]
190         Buhid = 44,
191         #[diplomat::rust_link(icu::properties::props::Script::CanadianAboriginal, EnumVariant)]
192         CanadianAboriginal = 40,
193         #[diplomat::rust_link(icu::properties::props::Script::Carian, EnumVariant)]
194         Carian = 104,
195         #[diplomat::rust_link(icu::properties::props::Script::CaucasianAlbanian, EnumVariant)]
196         CaucasianAlbanian = 159,
197         #[diplomat::rust_link(icu::properties::props::Script::Chakma, EnumVariant)]
198         Chakma = 118,
199         #[diplomat::rust_link(icu::properties::props::Script::Cham, EnumVariant)]
200         Cham = 66,
201         #[diplomat::rust_link(icu::properties::props::Script::Cherokee, EnumVariant)]
202         Cherokee = 6,
203         #[diplomat::rust_link(icu::properties::props::Script::Chorasmian, EnumVariant)]
204         Chorasmian = 189,
205         #[diplomat::rust_link(icu::properties::props::Script::Common, EnumVariant)]
206         Common = 0,
207         #[diplomat::rust_link(icu::properties::props::Script::Coptic, EnumVariant)]
208         Coptic = 7,
209         #[diplomat::rust_link(icu::properties::props::Script::Cuneiform, EnumVariant)]
210         Cuneiform = 101,
211         #[diplomat::rust_link(icu::properties::props::Script::Cypriot, EnumVariant)]
212         Cypriot = 47,
213         #[diplomat::rust_link(icu::properties::props::Script::CyproMinoan, EnumVariant)]
214         CyproMinoan = 193,
215         #[diplomat::rust_link(icu::properties::props::Script::Cyrillic, EnumVariant)]
216         Cyrillic = 8,
217         #[diplomat::rust_link(icu::properties::props::Script::Deseret, EnumVariant)]
218         Deseret = 9,
219         #[diplomat::rust_link(icu::properties::props::Script::Devanagari, EnumVariant)]
220         Devanagari = 10,
221         #[diplomat::rust_link(icu::properties::props::Script::DivesAkuru, EnumVariant)]
222         DivesAkuru = 190,
223         #[diplomat::rust_link(icu::properties::props::Script::Dogra, EnumVariant)]
224         Dogra = 178,
225         #[diplomat::rust_link(icu::properties::props::Script::Duployan, EnumVariant)]
226         Duployan = 135,
227         #[diplomat::rust_link(icu::properties::props::Script::EgyptianHieroglyphs, EnumVariant)]
228         EgyptianHieroglyphs = 71,
229         #[diplomat::rust_link(icu::properties::props::Script::Elbasan, EnumVariant)]
230         Elbasan = 136,
231         #[diplomat::rust_link(icu::properties::props::Script::Elymaic, EnumVariant)]
232         Elymaic = 185,
233         #[diplomat::rust_link(icu::properties::props::Script::Ethiopian, EnumVariant)]
234         Ethiopian = 11,
235         #[diplomat::rust_link(icu::properties::props::Script::Georgian, EnumVariant)]
236         Georgian = 12,
237         #[diplomat::rust_link(icu::properties::props::Script::Glagolitic, EnumVariant)]
238         Glagolitic = 56,
239         #[diplomat::rust_link(icu::properties::props::Script::Gothic, EnumVariant)]
240         Gothic = 13,
241         #[diplomat::rust_link(icu::properties::props::Script::Grantha, EnumVariant)]
242         Grantha = 137,
243         #[diplomat::rust_link(icu::properties::props::Script::Greek, EnumVariant)]
244         Greek = 14,
245         #[diplomat::rust_link(icu::properties::props::Script::Gujarati, EnumVariant)]
246         Gujarati = 15,
247         #[diplomat::rust_link(icu::properties::props::Script::GunjalaGondi, EnumVariant)]
248         GunjalaGondi = 179,
249         #[diplomat::rust_link(icu::properties::props::Script::Gurmukhi, EnumVariant)]
250         Gurmukhi = 16,
251         #[diplomat::rust_link(icu::properties::props::Script::Han, EnumVariant)]
252         Han = 17,
253         #[diplomat::rust_link(icu::properties::props::Script::Hangul, EnumVariant)]
254         Hangul = 18,
255         #[diplomat::rust_link(icu::properties::props::Script::HanifiRohingya, EnumVariant)]
256         HanifiRohingya = 182,
257         #[diplomat::rust_link(icu::properties::props::Script::Hanunoo, EnumVariant)]
258         Hanunoo = 43,
259         #[diplomat::rust_link(icu::properties::props::Script::Hatran, EnumVariant)]
260         Hatran = 162,
261         #[diplomat::rust_link(icu::properties::props::Script::Hebrew, EnumVariant)]
262         Hebrew = 19,
263         #[diplomat::rust_link(icu::properties::props::Script::Hiragana, EnumVariant)]
264         Hiragana = 20,
265         #[diplomat::rust_link(icu::properties::props::Script::ImperialAramaic, EnumVariant)]
266         ImperialAramaic = 116,
267         #[diplomat::rust_link(icu::properties::props::Script::Inherited, EnumVariant)]
268         Inherited = 1,
269         #[diplomat::rust_link(icu::properties::props::Script::InscriptionalPahlavi, EnumVariant)]
270         InscriptionalPahlavi = 122,
271         #[diplomat::rust_link(icu::properties::props::Script::InscriptionalParthian, EnumVariant)]
272         InscriptionalParthian = 125,
273         #[diplomat::rust_link(icu::properties::props::Script::Javanese, EnumVariant)]
274         Javanese = 78,
275         #[diplomat::rust_link(icu::properties::props::Script::Kaithi, EnumVariant)]
276         Kaithi = 120,
277         #[diplomat::rust_link(icu::properties::props::Script::Kannada, EnumVariant)]
278         Kannada = 21,
279         #[diplomat::rust_link(icu::properties::props::Script::Katakana, EnumVariant)]
280         Katakana = 22,
281         #[diplomat::rust_link(icu::properties::props::Script::Kawi, EnumVariant)]
282         Kawi = 198,
283         #[diplomat::rust_link(icu::properties::props::Script::KayahLi, EnumVariant)]
284         KayahLi = 79,
285         #[diplomat::rust_link(icu::properties::props::Script::Kharoshthi, EnumVariant)]
286         Kharoshthi = 57,
287         #[diplomat::rust_link(icu::properties::props::Script::KhitanSmallScript, EnumVariant)]
288         KhitanSmallScript = 191,
289         #[diplomat::rust_link(icu::properties::props::Script::Khmer, EnumVariant)]
290         Khmer = 23,
291         #[diplomat::rust_link(icu::properties::props::Script::Khojki, EnumVariant)]
292         Khojki = 157,
293         #[diplomat::rust_link(icu::properties::props::Script::Khudawadi, EnumVariant)]
294         Khudawadi = 145,
295         #[diplomat::rust_link(icu::properties::props::Script::Lao, EnumVariant)]
296         Lao = 24,
297         #[diplomat::rust_link(icu::properties::props::Script::Latin, EnumVariant)]
298         Latin = 25,
299         #[diplomat::rust_link(icu::properties::props::Script::Lepcha, EnumVariant)]
300         Lepcha = 82,
301         #[diplomat::rust_link(icu::properties::props::Script::Limbu, EnumVariant)]
302         Limbu = 48,
303         #[diplomat::rust_link(icu::properties::props::Script::LinearA, EnumVariant)]
304         LinearA = 83,
305         #[diplomat::rust_link(icu::properties::props::Script::LinearB, EnumVariant)]
306         LinearB = 49,
307         #[diplomat::rust_link(icu::properties::props::Script::Lisu, EnumVariant)]
308         Lisu = 131,
309         #[diplomat::rust_link(icu::properties::props::Script::Lycian, EnumVariant)]
310         Lycian = 107,
311         #[diplomat::rust_link(icu::properties::props::Script::Lydian, EnumVariant)]
312         Lydian = 108,
313         #[diplomat::rust_link(icu::properties::props::Script::Mahajani, EnumVariant)]
314         Mahajani = 160,
315         #[diplomat::rust_link(icu::properties::props::Script::Makasar, EnumVariant)]
316         Makasar = 180,
317         #[diplomat::rust_link(icu::properties::props::Script::Malayalam, EnumVariant)]
318         Malayalam = 26,
319         #[diplomat::rust_link(icu::properties::props::Script::Mandaic, EnumVariant)]
320         Mandaic = 84,
321         #[diplomat::rust_link(icu::properties::props::Script::Manichaean, EnumVariant)]
322         Manichaean = 121,
323         #[diplomat::rust_link(icu::properties::props::Script::Marchen, EnumVariant)]
324         Marchen = 169,
325         #[diplomat::rust_link(icu::properties::props::Script::MasaramGondi, EnumVariant)]
326         MasaramGondi = 175,
327         #[diplomat::rust_link(icu::properties::props::Script::Medefaidrin, EnumVariant)]
328         Medefaidrin = 181,
329         #[diplomat::rust_link(icu::properties::props::Script::MeeteiMayek, EnumVariant)]
330         MeeteiMayek = 115,
331         #[diplomat::rust_link(icu::properties::props::Script::MendeKikakui, EnumVariant)]
332         MendeKikakui = 140,
333         #[diplomat::rust_link(icu::properties::props::Script::MeroiticCursive, EnumVariant)]
334         MeroiticCursive = 141,
335         #[diplomat::rust_link(icu::properties::props::Script::MeroiticHieroglyphs, EnumVariant)]
336         MeroiticHieroglyphs = 86,
337         #[diplomat::rust_link(icu::properties::props::Script::Miao, EnumVariant)]
338         Miao = 92,
339         #[diplomat::rust_link(icu::properties::props::Script::Modi, EnumVariant)]
340         Modi = 163,
341         #[diplomat::rust_link(icu::properties::props::Script::Mongolian, EnumVariant)]
342         Mongolian = 27,
343         #[diplomat::rust_link(icu::properties::props::Script::Mro, EnumVariant)]
344         Mro = 149,
345         #[diplomat::rust_link(icu::properties::props::Script::Multani, EnumVariant)]
346         Multani = 164,
347         #[diplomat::rust_link(icu::properties::props::Script::Myanmar, EnumVariant)]
348         Myanmar = 28,
349         #[diplomat::rust_link(icu::properties::props::Script::Nabataean, EnumVariant)]
350         Nabataean = 143,
351         #[diplomat::rust_link(icu::properties::props::Script::NagMundari, EnumVariant)]
352         NagMundari = 199,
353         #[diplomat::rust_link(icu::properties::props::Script::Nandinagari, EnumVariant)]
354         Nandinagari = 187,
355         #[diplomat::rust_link(icu::properties::props::Script::Nastaliq, EnumVariant)]
356         Nastaliq = 200,
357         #[diplomat::rust_link(icu::properties::props::Script::NewTaiLue, EnumVariant)]
358         NewTaiLue = 59,
359         #[diplomat::rust_link(icu::properties::props::Script::Newa, EnumVariant)]
360         Newa = 170,
361         #[diplomat::rust_link(icu::properties::props::Script::Nko, EnumVariant)]
362         Nko = 87,
363         #[diplomat::rust_link(icu::properties::props::Script::Nushu, EnumVariant)]
364         Nushu = 150,
365         #[diplomat::rust_link(icu::properties::props::Script::NyiakengPuachueHmong, EnumVariant)]
366         NyiakengPuachueHmong = 186,
367         #[diplomat::rust_link(icu::properties::props::Script::Ogham, EnumVariant)]
368         Ogham = 29,
369         #[diplomat::rust_link(icu::properties::props::Script::OlChiki, EnumVariant)]
370         OlChiki = 109,
371         #[diplomat::rust_link(icu::properties::props::Script::OldHungarian, EnumVariant)]
372         OldHungarian = 76,
373         #[diplomat::rust_link(icu::properties::props::Script::OldItalic, EnumVariant)]
374         OldItalic = 30,
375         #[diplomat::rust_link(icu::properties::props::Script::OldNorthArabian, EnumVariant)]
376         OldNorthArabian = 142,
377         #[diplomat::rust_link(icu::properties::props::Script::OldPermic, EnumVariant)]
378         OldPermic = 89,
379         #[diplomat::rust_link(icu::properties::props::Script::OldPersian, EnumVariant)]
380         OldPersian = 61,
381         #[diplomat::rust_link(icu::properties::props::Script::OldSogdian, EnumVariant)]
382         OldSogdian = 184,
383         #[diplomat::rust_link(icu::properties::props::Script::OldSouthArabian, EnumVariant)]
384         OldSouthArabian = 133,
385         #[diplomat::rust_link(icu::properties::props::Script::OldTurkic, EnumVariant)]
386         OldTurkic = 88,
387         #[diplomat::rust_link(icu::properties::props::Script::OldUyghur, EnumVariant)]
388         OldUyghur = 194,
389         #[diplomat::rust_link(icu::properties::props::Script::Oriya, EnumVariant)]
390         Oriya = 31,
391         #[diplomat::rust_link(icu::properties::props::Script::Osage, EnumVariant)]
392         Osage = 171,
393         #[diplomat::rust_link(icu::properties::props::Script::Osmanya, EnumVariant)]
394         Osmanya = 50,
395         #[diplomat::rust_link(icu::properties::props::Script::PahawhHmong, EnumVariant)]
396         PahawhHmong = 75,
397         #[diplomat::rust_link(icu::properties::props::Script::Palmyrene, EnumVariant)]
398         Palmyrene = 144,
399         #[diplomat::rust_link(icu::properties::props::Script::PauCinHau, EnumVariant)]
400         PauCinHau = 165,
401         #[diplomat::rust_link(icu::properties::props::Script::PhagsPa, EnumVariant)]
402         PhagsPa = 90,
403         #[diplomat::rust_link(icu::properties::props::Script::Phoenician, EnumVariant)]
404         Phoenician = 91,
405         #[diplomat::rust_link(icu::properties::props::Script::PsalterPahlavi, EnumVariant)]
406         PsalterPahlavi = 123,
407         #[diplomat::rust_link(icu::properties::props::Script::Rejang, EnumVariant)]
408         Rejang = 110,
409         #[diplomat::rust_link(icu::properties::props::Script::Runic, EnumVariant)]
410         Runic = 32,
411         #[diplomat::rust_link(icu::properties::props::Script::Samaritan, EnumVariant)]
412         Samaritan = 126,
413         #[diplomat::rust_link(icu::properties::props::Script::Saurashtra, EnumVariant)]
414         Saurashtra = 111,
415         #[diplomat::rust_link(icu::properties::props::Script::Sharada, EnumVariant)]
416         Sharada = 151,
417         #[diplomat::rust_link(icu::properties::props::Script::Shavian, EnumVariant)]
418         Shavian = 51,
419         #[diplomat::rust_link(icu::properties::props::Script::Siddham, EnumVariant)]
420         Siddham = 166,
421         #[diplomat::rust_link(icu::properties::props::Script::SignWriting, EnumVariant)]
422         SignWriting = 112,
423         #[diplomat::rust_link(icu::properties::props::Script::Sinhala, EnumVariant)]
424         Sinhala = 33,
425         #[diplomat::rust_link(icu::properties::props::Script::Sogdian, EnumVariant)]
426         Sogdian = 183,
427         #[diplomat::rust_link(icu::properties::props::Script::SoraSompeng, EnumVariant)]
428         SoraSompeng = 152,
429         #[diplomat::rust_link(icu::properties::props::Script::Soyombo, EnumVariant)]
430         Soyombo = 176,
431         #[diplomat::rust_link(icu::properties::props::Script::Sundanese, EnumVariant)]
432         Sundanese = 113,
433         #[diplomat::rust_link(icu::properties::props::Script::SylotiNagri, EnumVariant)]
434         SylotiNagri = 58,
435         #[diplomat::rust_link(icu::properties::props::Script::Syriac, EnumVariant)]
436         Syriac = 34,
437         #[diplomat::rust_link(icu::properties::props::Script::Tagalog, EnumVariant)]
438         Tagalog = 42,
439         #[diplomat::rust_link(icu::properties::props::Script::Tagbanwa, EnumVariant)]
440         Tagbanwa = 45,
441         #[diplomat::rust_link(icu::properties::props::Script::TaiLe, EnumVariant)]
442         TaiLe = 52,
443         #[diplomat::rust_link(icu::properties::props::Script::TaiTham, EnumVariant)]
444         TaiTham = 106,
445         #[diplomat::rust_link(icu::properties::props::Script::TaiViet, EnumVariant)]
446         TaiViet = 127,
447         #[diplomat::rust_link(icu::properties::props::Script::Takri, EnumVariant)]
448         Takri = 153,
449         #[diplomat::rust_link(icu::properties::props::Script::Tamil, EnumVariant)]
450         Tamil = 35,
451         #[diplomat::rust_link(icu::properties::props::Script::Tangsa, EnumVariant)]
452         Tangsa = 195,
453         #[diplomat::rust_link(icu::properties::props::Script::Tangut, EnumVariant)]
454         Tangut = 154,
455         #[diplomat::rust_link(icu::properties::props::Script::Telugu, EnumVariant)]
456         Telugu = 36,
457         #[diplomat::rust_link(icu::properties::props::Script::Thaana, EnumVariant)]
458         Thaana = 37,
459         #[diplomat::rust_link(icu::properties::props::Script::Thai, EnumVariant)]
460         Thai = 38,
461         #[diplomat::rust_link(icu::properties::props::Script::Tibetan, EnumVariant)]
462         Tibetan = 39,
463         #[diplomat::rust_link(icu::properties::props::Script::Tifinagh, EnumVariant)]
464         Tifinagh = 60,
465         #[diplomat::rust_link(icu::properties::props::Script::Tirhuta, EnumVariant)]
466         Tirhuta = 158,
467         #[diplomat::rust_link(icu::properties::props::Script::Toto, EnumVariant)]
468         Toto = 196,
469         #[diplomat::rust_link(icu::properties::props::Script::Ugaritic, EnumVariant)]
470         Ugaritic = 53,
471         #[diplomat::rust_link(icu::properties::props::Script::Unknown, EnumVariant)]
472         Unknown = 103,
473         #[diplomat::rust_link(icu::properties::props::Script::Vai, EnumVariant)]
474         Vai = 99,
475         #[diplomat::rust_link(icu::properties::props::Script::Vithkuqi, EnumVariant)]
476         Vithkuqi = 197,
477         #[diplomat::rust_link(icu::properties::props::Script::Wancho, EnumVariant)]
478         Wancho = 188,
479         #[diplomat::rust_link(icu::properties::props::Script::WarangCiti, EnumVariant)]
480         WarangCiti = 146,
481         #[diplomat::rust_link(icu::properties::props::Script::Yezidi, EnumVariant)]
482         Yezidi = 192,
483         #[diplomat::rust_link(icu::properties::props::Script::Yi, EnumVariant)]
484         Yi = 41,
485         #[diplomat::rust_link(icu::properties::props::Script::ZanabazarSquare, EnumVariant)]
486         ZanabazarSquare = 177,
487     }
488 
489     impl Script {
490         #[diplomat::rust_link(icu::properties::props::EnumeratedProperty::for_char, FnInTrait)]
491         #[cfg(feature = "compiled_data")]
for_char(ch: DiplomatChar) -> Self492         pub fn for_char(ch: DiplomatChar) -> Self {
493             icu_properties::CodePointMapData::<props::Script>::new()
494                 .get32(ch)
495                 .into()
496         }
497 
498         #[diplomat::rust_link(icu::properties::PropertyNamesLongBorrowed::get, FnInStruct)]
499         #[cfg(feature = "compiled_data")]
500         /// Get the "long" name of this property value (returns empty if property value is unknown)
long_name(self) -> Option<&'static str>501         pub fn long_name(self) -> Option<&'static str> {
502             icu_properties::PropertyNamesLongBorrowed::<props::Script>::new().get(self.into())
503         }
504 
505         #[diplomat::rust_link(icu::properties::PropertyNamesShortBorrowed::get, FnInStruct)]
506         #[diplomat::rust_link(
507             icu::properties::PropertyNamesShortBorrowed::get_locale_script,
508             FnInStruct,
509             hidden
510         )]
511         #[cfg(feature = "compiled_data")]
512         /// Get the "short" name of this property value (returns empty if property value is unknown)
short_name(self) -> Option<&'static str>513         pub fn short_name(self) -> Option<&'static str> {
514             icu_properties::PropertyNamesShortBorrowed::<props::Script>::new().get(self.into())
515         }
516         #[diplomat::rust_link(icu::properties::props::Script::to_icu4c_value, FnInStruct)]
517         /// Convert to an integer value usable with ICU4C and CodePointMapData
to_integer_value(self) -> u16518         pub fn to_integer_value(self) -> u16 {
519             self as u16
520         }
521         #[diplomat::rust_link(icu::properties::props::Script::from_icu4c_value, FnInStruct)]
522         /// Convert from an integer value from ICU4C or CodePointMapData
from_integer_value(other: u16) -> Option<Self>523         pub fn from_integer_value(other: u16) -> Option<Self> {
524             Some(match other {
525                 167 => Self::Adlam,
526                 161 => Self::Ahom,
527                 156 => Self::AnatolianHieroglyphs,
528                 2 => Self::Arabic,
529                 3 => Self::Armenian,
530                 117 => Self::Avestan,
531                 62 => Self::Balinese,
532                 130 => Self::Bamum,
533                 134 => Self::BassaVah,
534                 63 => Self::Batak,
535                 4 => Self::Bengali,
536                 168 => Self::Bhaiksuki,
537                 5 => Self::Bopomofo,
538                 65 => Self::Brahmi,
539                 46 => Self::Braille,
540                 55 => Self::Buginese,
541                 44 => Self::Buhid,
542                 40 => Self::CanadianAboriginal,
543                 104 => Self::Carian,
544                 159 => Self::CaucasianAlbanian,
545                 118 => Self::Chakma,
546                 66 => Self::Cham,
547                 6 => Self::Cherokee,
548                 189 => Self::Chorasmian,
549                 0 => Self::Common,
550                 7 => Self::Coptic,
551                 101 => Self::Cuneiform,
552                 47 => Self::Cypriot,
553                 193 => Self::CyproMinoan,
554                 8 => Self::Cyrillic,
555                 9 => Self::Deseret,
556                 10 => Self::Devanagari,
557                 190 => Self::DivesAkuru,
558                 178 => Self::Dogra,
559                 135 => Self::Duployan,
560                 71 => Self::EgyptianHieroglyphs,
561                 136 => Self::Elbasan,
562                 185 => Self::Elymaic,
563                 11 => Self::Ethiopian,
564                 12 => Self::Georgian,
565                 56 => Self::Glagolitic,
566                 13 => Self::Gothic,
567                 137 => Self::Grantha,
568                 14 => Self::Greek,
569                 15 => Self::Gujarati,
570                 179 => Self::GunjalaGondi,
571                 16 => Self::Gurmukhi,
572                 17 => Self::Han,
573                 18 => Self::Hangul,
574                 182 => Self::HanifiRohingya,
575                 43 => Self::Hanunoo,
576                 162 => Self::Hatran,
577                 19 => Self::Hebrew,
578                 20 => Self::Hiragana,
579                 116 => Self::ImperialAramaic,
580                 1 => Self::Inherited,
581                 122 => Self::InscriptionalPahlavi,
582                 125 => Self::InscriptionalParthian,
583                 78 => Self::Javanese,
584                 120 => Self::Kaithi,
585                 21 => Self::Kannada,
586                 22 => Self::Katakana,
587                 198 => Self::Kawi,
588                 79 => Self::KayahLi,
589                 57 => Self::Kharoshthi,
590                 191 => Self::KhitanSmallScript,
591                 23 => Self::Khmer,
592                 157 => Self::Khojki,
593                 145 => Self::Khudawadi,
594                 24 => Self::Lao,
595                 25 => Self::Latin,
596                 82 => Self::Lepcha,
597                 48 => Self::Limbu,
598                 83 => Self::LinearA,
599                 49 => Self::LinearB,
600                 131 => Self::Lisu,
601                 107 => Self::Lycian,
602                 108 => Self::Lydian,
603                 160 => Self::Mahajani,
604                 180 => Self::Makasar,
605                 26 => Self::Malayalam,
606                 84 => Self::Mandaic,
607                 121 => Self::Manichaean,
608                 169 => Self::Marchen,
609                 175 => Self::MasaramGondi,
610                 181 => Self::Medefaidrin,
611                 115 => Self::MeeteiMayek,
612                 140 => Self::MendeKikakui,
613                 141 => Self::MeroiticCursive,
614                 86 => Self::MeroiticHieroglyphs,
615                 92 => Self::Miao,
616                 163 => Self::Modi,
617                 27 => Self::Mongolian,
618                 149 => Self::Mro,
619                 164 => Self::Multani,
620                 28 => Self::Myanmar,
621                 143 => Self::Nabataean,
622                 199 => Self::NagMundari,
623                 187 => Self::Nandinagari,
624                 200 => Self::Nastaliq,
625                 59 => Self::NewTaiLue,
626                 170 => Self::Newa,
627                 87 => Self::Nko,
628                 150 => Self::Nushu,
629                 186 => Self::NyiakengPuachueHmong,
630                 29 => Self::Ogham,
631                 109 => Self::OlChiki,
632                 76 => Self::OldHungarian,
633                 30 => Self::OldItalic,
634                 142 => Self::OldNorthArabian,
635                 89 => Self::OldPermic,
636                 61 => Self::OldPersian,
637                 184 => Self::OldSogdian,
638                 133 => Self::OldSouthArabian,
639                 88 => Self::OldTurkic,
640                 194 => Self::OldUyghur,
641                 31 => Self::Oriya,
642                 171 => Self::Osage,
643                 50 => Self::Osmanya,
644                 75 => Self::PahawhHmong,
645                 144 => Self::Palmyrene,
646                 165 => Self::PauCinHau,
647                 90 => Self::PhagsPa,
648                 91 => Self::Phoenician,
649                 123 => Self::PsalterPahlavi,
650                 110 => Self::Rejang,
651                 32 => Self::Runic,
652                 126 => Self::Samaritan,
653                 111 => Self::Saurashtra,
654                 151 => Self::Sharada,
655                 51 => Self::Shavian,
656                 166 => Self::Siddham,
657                 112 => Self::SignWriting,
658                 33 => Self::Sinhala,
659                 183 => Self::Sogdian,
660                 152 => Self::SoraSompeng,
661                 176 => Self::Soyombo,
662                 113 => Self::Sundanese,
663                 58 => Self::SylotiNagri,
664                 34 => Self::Syriac,
665                 42 => Self::Tagalog,
666                 45 => Self::Tagbanwa,
667                 52 => Self::TaiLe,
668                 106 => Self::TaiTham,
669                 127 => Self::TaiViet,
670                 153 => Self::Takri,
671                 35 => Self::Tamil,
672                 195 => Self::Tangsa,
673                 154 => Self::Tangut,
674                 36 => Self::Telugu,
675                 37 => Self::Thaana,
676                 38 => Self::Thai,
677                 39 => Self::Tibetan,
678                 60 => Self::Tifinagh,
679                 158 => Self::Tirhuta,
680                 196 => Self::Toto,
681                 53 => Self::Ugaritic,
682                 103 => Self::Unknown,
683                 99 => Self::Vai,
684                 197 => Self::Vithkuqi,
685                 188 => Self::Wancho,
686                 146 => Self::WarangCiti,
687                 192 => Self::Yezidi,
688                 41 => Self::Yi,
689                 177 => Self::ZanabazarSquare,
690                 _ => return None,
691             })
692         }
693     }
694 
695     #[diplomat::rust_link(icu::properties::props::HangulSyllableType, Struct)]
696     #[diplomat::enum_convert(icu_properties::props::HangulSyllableType, needs_wildcard)]
697     pub enum HangulSyllableType {
698         #[diplomat::rust_link(
699             icu::properties::props::HangulSyllableType::NotApplicable,
700             EnumVariant
701         )]
702         NotApplicable = 0,
703         #[diplomat::rust_link(
704             icu::properties::props::HangulSyllableType::LeadingJamo,
705             EnumVariant
706         )]
707         LeadingJamo = 1,
708         #[diplomat::rust_link(icu::properties::props::HangulSyllableType::VowelJamo, EnumVariant)]
709         VowelJamo = 2,
710         #[diplomat::rust_link(
711             icu::properties::props::HangulSyllableType::TrailingJamo,
712             EnumVariant
713         )]
714         TrailingJamo = 3,
715         #[diplomat::rust_link(
716             icu::properties::props::HangulSyllableType::LeadingVowelSyllable,
717             EnumVariant
718         )]
719         LeadingVowelSyllable = 4,
720         #[diplomat::rust_link(
721             icu::properties::props::HangulSyllableType::LeadingVowelTrailingSyllable,
722             EnumVariant
723         )]
724         LeadingVowelTrailingSyllable = 5,
725     }
726 
727     impl HangulSyllableType {
728         #[diplomat::rust_link(icu::properties::props::EnumeratedProperty::for_char, FnInTrait)]
729         #[cfg(feature = "compiled_data")]
for_char(ch: DiplomatChar) -> Self730         pub fn for_char(ch: DiplomatChar) -> Self {
731             icu_properties::CodePointMapData::<props::HangulSyllableType>::new()
732                 .get32(ch)
733                 .into()
734         }
735         #[diplomat::rust_link(
736             icu::properties::props::HangulSyllableType::to_icu4c_value,
737             FnInStruct
738         )]
739         /// Convert to an integer value usable with ICU4C and CodePointMapData
to_integer_value(self) -> u8740         pub fn to_integer_value(self) -> u8 {
741             self as u8
742         }
743         #[diplomat::rust_link(
744             icu::properties::props::HangulSyllableType::from_icu4c_value,
745             FnInStruct
746         )]
747         /// Convert from an integer value from ICU4C or CodePointMapData
from_integer_value(other: u8) -> Option<Self>748         pub fn from_integer_value(other: u8) -> Option<Self> {
749             Some(match other {
750                 0 => Self::NotApplicable,
751                 1 => Self::LeadingJamo,
752                 2 => Self::VowelJamo,
753                 3 => Self::TrailingJamo,
754                 4 => Self::LeadingVowelSyllable,
755                 5 => Self::LeadingVowelTrailingSyllable,
756                 _ => return None,
757             })
758         }
759     }
760 
761     #[diplomat::rust_link(icu::properties::props::EastAsianWidth, Struct)]
762     #[diplomat::enum_convert(icu_properties::props::EastAsianWidth, needs_wildcard)]
763     pub enum EastAsianWidth {
764         #[diplomat::rust_link(icu::properties::props::EastAsianWidth::Neutral, EnumVariant)]
765         Neutral = 0,
766         #[diplomat::rust_link(icu::properties::props::EastAsianWidth::Ambiguous, EnumVariant)]
767         Ambiguous = 1,
768         #[diplomat::rust_link(icu::properties::props::EastAsianWidth::Halfwidth, EnumVariant)]
769         Halfwidth = 2,
770         #[diplomat::rust_link(icu::properties::props::EastAsianWidth::Fullwidth, EnumVariant)]
771         Fullwidth = 3,
772         #[diplomat::rust_link(icu::properties::props::EastAsianWidth::Narrow, EnumVariant)]
773         Narrow = 4,
774         #[diplomat::rust_link(icu::properties::props::EastAsianWidth::Wide, EnumVariant)]
775         Wide = 5,
776     }
777 
778     impl EastAsianWidth {
779         #[diplomat::rust_link(icu::properties::props::EnumeratedProperty::for_char, FnInTrait)]
780         #[cfg(feature = "compiled_data")]
for_char(ch: DiplomatChar) -> Self781         pub fn for_char(ch: DiplomatChar) -> Self {
782             icu_properties::CodePointMapData::<props::EastAsianWidth>::new()
783                 .get32(ch)
784                 .into()
785         }
786 
787         #[diplomat::rust_link(icu::properties::PropertyNamesLongBorrowed::get, FnInStruct)]
788         #[cfg(feature = "compiled_data")]
789         /// Get the "long" name of this property value (returns empty if property value is unknown)
long_name(self) -> Option<&'static str>790         pub fn long_name(self) -> Option<&'static str> {
791             icu_properties::PropertyNamesLongBorrowed::<props::EastAsianWidth>::new()
792                 .get(self.into())
793         }
794 
795         #[diplomat::rust_link(icu::properties::PropertyNamesShortBorrowed::get, FnInStruct)]
796         #[cfg(feature = "compiled_data")]
797         /// Get the "short" name of this property value (returns empty if property value is unknown)
short_name(self) -> Option<&'static str>798         pub fn short_name(self) -> Option<&'static str> {
799             icu_properties::PropertyNamesShortBorrowed::<props::EastAsianWidth>::new()
800                 .get(self.into())
801         }
802         #[diplomat::rust_link(icu::properties::props::EastAsianWidth::to_icu4c_value, FnInStruct)]
803         /// Convert to an integer value usable with ICU4C and CodePointMapData
to_integer_value(self) -> u8804         pub fn to_integer_value(self) -> u8 {
805             self as u8
806         }
807         #[diplomat::rust_link(icu::properties::props::EastAsianWidth::from_icu4c_value, FnInStruct)]
808         /// Convert from an integer value from ICU4C or CodePointMapData
from_integer_value(other: u8) -> Option<Self>809         pub fn from_integer_value(other: u8) -> Option<Self> {
810             Some(match other {
811                 0 => Self::Neutral,
812                 1 => Self::Ambiguous,
813                 2 => Self::Halfwidth,
814                 3 => Self::Fullwidth,
815                 4 => Self::Narrow,
816                 5 => Self::Wide,
817                 _ => return None,
818             })
819         }
820     }
821 
822     #[diplomat::rust_link(icu::properties::props::LineBreak, Struct)]
823     #[diplomat::enum_convert(icu_properties::props::LineBreak, needs_wildcard)]
824     pub enum LineBreak {
825         #[diplomat::rust_link(icu::props::LineBreak::Unknown, EnumVariant)]
826         Unknown = 0,
827         #[diplomat::rust_link(icu::props::LineBreak::Ambiguous, EnumVariant)]
828         Ambiguous = 1,
829         #[diplomat::rust_link(icu::props::LineBreak::Alphabetic, EnumVariant)]
830         Alphabetic = 2,
831         #[diplomat::rust_link(icu::props::LineBreak::BreakBoth, EnumVariant)]
832         BreakBoth = 3,
833         #[diplomat::rust_link(icu::props::LineBreak::BreakAfter, EnumVariant)]
834         BreakAfter = 4,
835         #[diplomat::rust_link(icu::props::LineBreak::BreakBefore, EnumVariant)]
836         BreakBefore = 5,
837         #[diplomat::rust_link(icu::props::LineBreak::MandatoryBreak, EnumVariant)]
838         MandatoryBreak = 6,
839         #[diplomat::rust_link(icu::props::LineBreak::ContingentBreak, EnumVariant)]
840         ContingentBreak = 7,
841         #[diplomat::rust_link(icu::props::LineBreak::ClosePunctuation, EnumVariant)]
842         ClosePunctuation = 8,
843         #[diplomat::rust_link(icu::props::LineBreak::CombiningMark, EnumVariant)]
844         CombiningMark = 9,
845         #[diplomat::rust_link(icu::props::LineBreak::CarriageReturn, EnumVariant)]
846         CarriageReturn = 10,
847         #[diplomat::rust_link(icu::props::LineBreak::Exclamation, EnumVariant)]
848         Exclamation = 11,
849         #[diplomat::rust_link(icu::props::LineBreak::Glue, EnumVariant)]
850         Glue = 12,
851         #[diplomat::rust_link(icu::props::LineBreak::Hyphen, EnumVariant)]
852         Hyphen = 13,
853         #[diplomat::rust_link(icu::props::LineBreak::Ideographic, EnumVariant)]
854         Ideographic = 14,
855         #[diplomat::rust_link(icu::props::LineBreak::Inseparable, EnumVariant)]
856         Inseparable = 15,
857         #[diplomat::rust_link(icu::props::LineBreak::InfixNumeric, EnumVariant)]
858         InfixNumeric = 16,
859         #[diplomat::rust_link(icu::props::LineBreak::LineFeed, EnumVariant)]
860         LineFeed = 17,
861         #[diplomat::rust_link(icu::props::LineBreak::Nonstarter, EnumVariant)]
862         Nonstarter = 18,
863         #[diplomat::rust_link(icu::props::LineBreak::Numeric, EnumVariant)]
864         Numeric = 19,
865         #[diplomat::rust_link(icu::props::LineBreak::OpenPunctuation, EnumVariant)]
866         OpenPunctuation = 20,
867         #[diplomat::rust_link(icu::props::LineBreak::PostfixNumeric, EnumVariant)]
868         PostfixNumeric = 21,
869         #[diplomat::rust_link(icu::props::LineBreak::PrefixNumeric, EnumVariant)]
870         PrefixNumeric = 22,
871         #[diplomat::rust_link(icu::props::LineBreak::Quotation, EnumVariant)]
872         Quotation = 23,
873         #[diplomat::rust_link(icu::props::LineBreak::ComplexContext, EnumVariant)]
874         ComplexContext = 24,
875         #[diplomat::rust_link(icu::props::LineBreak::Surrogate, EnumVariant)]
876         Surrogate = 25,
877         #[diplomat::rust_link(icu::props::LineBreak::Space, EnumVariant)]
878         Space = 26,
879         #[diplomat::rust_link(icu::props::LineBreak::BreakSymbols, EnumVariant)]
880         BreakSymbols = 27,
881         #[diplomat::rust_link(icu::props::LineBreak::ZWSpace, EnumVariant)]
882         ZWSpace = 28,
883         #[diplomat::rust_link(icu::props::LineBreak::NextLine, EnumVariant)]
884         NextLine = 29,
885         #[diplomat::rust_link(icu::props::LineBreak::WordJoiner, EnumVariant)]
886         WordJoiner = 30,
887         #[diplomat::rust_link(icu::props::LineBreak::H2, EnumVariant)]
888         H2 = 31,
889         #[diplomat::rust_link(icu::props::LineBreak::H3, EnumVariant)]
890         H3 = 32,
891         #[diplomat::rust_link(icu::props::LineBreak::JL, EnumVariant)]
892         JL = 33,
893         #[diplomat::rust_link(icu::props::LineBreak::JT, EnumVariant)]
894         JT = 34,
895         #[diplomat::rust_link(icu::props::LineBreak::JV, EnumVariant)]
896         JV = 35,
897         #[diplomat::rust_link(icu::props::LineBreak::CloseParenthesis, EnumVariant)]
898         CloseParenthesis = 36,
899         #[diplomat::rust_link(icu::props::LineBreak::ConditionalJapaneseStarter, EnumVariant)]
900         ConditionalJapaneseStarter = 37,
901         #[diplomat::rust_link(icu::props::LineBreak::HebrewLetter, EnumVariant)]
902         HebrewLetter = 38,
903         #[diplomat::rust_link(icu::props::LineBreak::RegionalIndicator, EnumVariant)]
904         RegionalIndicator = 39,
905         #[diplomat::rust_link(icu::props::LineBreak::EBase, EnumVariant)]
906         EBase = 40,
907         #[diplomat::rust_link(icu::props::LineBreak::EModifier, EnumVariant)]
908         EModifier = 41,
909         #[diplomat::rust_link(icu::props::LineBreak::ZWJ, EnumVariant)]
910         ZWJ = 42,
911         #[diplomat::rust_link(icu::props::LineBreak::Aksara, EnumVariant)]
912         Aksara = 43,
913         #[diplomat::rust_link(icu::props::LineBreak::AksaraPrebase, EnumVariant)]
914         AksaraPrebase = 44,
915         #[diplomat::rust_link(icu::props::LineBreak::AksaraStart, EnumVariant)]
916         AksaraStart = 45,
917         #[diplomat::rust_link(icu::props::LineBreak::ViramaFinal, EnumVariant)]
918         ViramaFinal = 46,
919         #[diplomat::rust_link(icu::props::LineBreak::Virama, EnumVariant)]
920         Virama = 47,
921     }
922 
923     impl LineBreak {
924         #[diplomat::rust_link(icu::properties::props::EnumeratedProperty::for_char, FnInTrait)]
925         #[cfg(feature = "compiled_data")]
for_char(ch: DiplomatChar) -> Self926         pub fn for_char(ch: DiplomatChar) -> Self {
927             icu_properties::CodePointMapData::<props::LineBreak>::new()
928                 .get32(ch)
929                 .into()
930         }
931 
932         #[diplomat::rust_link(icu::properties::PropertyNamesLongBorrowed::get, FnInStruct)]
933         #[cfg(feature = "compiled_data")]
934         /// Get the "long" name of this property value (returns empty if property value is unknown)
long_name(self) -> Option<&'static str>935         pub fn long_name(self) -> Option<&'static str> {
936             icu_properties::PropertyNamesLongBorrowed::<props::LineBreak>::new().get(self.into())
937         }
938 
939         #[diplomat::rust_link(icu::properties::PropertyNamesShortBorrowed::get, FnInStruct)]
940         #[cfg(feature = "compiled_data")]
941         /// Get the "short" name of this property value (returns empty if property value is unknown)
short_name(self) -> Option<&'static str>942         pub fn short_name(self) -> Option<&'static str> {
943             icu_properties::PropertyNamesShortBorrowed::<props::LineBreak>::new().get(self.into())
944         }
945         #[diplomat::rust_link(icu::properties::props::LineBreak::to_icu4c_value, FnInStruct)]
946         /// Convert to an integer value usable with ICU4C and CodePointMapData
to_integer_value(self) -> u8947         pub fn to_integer_value(self) -> u8 {
948             self as u8
949         }
950         #[diplomat::rust_link(icu::properties::props::LineBreak::from_icu4c_value, FnInStruct)]
951         /// Convert from an integer value from ICU4C or CodePointMapData
from_integer_value(other: u8) -> Option<Self>952         pub fn from_integer_value(other: u8) -> Option<Self> {
953             Some(match other {
954                 0 => Self::Unknown,
955                 1 => Self::Ambiguous,
956                 2 => Self::Alphabetic,
957                 3 => Self::BreakBoth,
958                 4 => Self::BreakAfter,
959                 5 => Self::BreakBefore,
960                 6 => Self::MandatoryBreak,
961                 7 => Self::ContingentBreak,
962                 8 => Self::ClosePunctuation,
963                 9 => Self::CombiningMark,
964                 10 => Self::CarriageReturn,
965                 11 => Self::Exclamation,
966                 12 => Self::Glue,
967                 13 => Self::Hyphen,
968                 14 => Self::Ideographic,
969                 15 => Self::Inseparable,
970                 16 => Self::InfixNumeric,
971                 17 => Self::LineFeed,
972                 18 => Self::Nonstarter,
973                 19 => Self::Numeric,
974                 20 => Self::OpenPunctuation,
975                 21 => Self::PostfixNumeric,
976                 22 => Self::PrefixNumeric,
977                 23 => Self::Quotation,
978                 24 => Self::ComplexContext,
979                 25 => Self::Surrogate,
980                 26 => Self::Space,
981                 27 => Self::BreakSymbols,
982                 28 => Self::ZWSpace,
983                 29 => Self::NextLine,
984                 30 => Self::WordJoiner,
985                 31 => Self::H2,
986                 32 => Self::H3,
987                 33 => Self::JL,
988                 34 => Self::JT,
989                 35 => Self::JV,
990                 36 => Self::CloseParenthesis,
991                 37 => Self::ConditionalJapaneseStarter,
992                 38 => Self::HebrewLetter,
993                 39 => Self::RegionalIndicator,
994                 40 => Self::EBase,
995                 41 => Self::EModifier,
996                 42 => Self::ZWJ,
997                 43 => Self::Aksara,
998                 44 => Self::AksaraPrebase,
999                 45 => Self::AksaraStart,
1000                 46 => Self::ViramaFinal,
1001                 47 => Self::Virama,
1002                 _ => return None,
1003             })
1004         }
1005     }
1006 
1007     #[diplomat::rust_link(icu::properties::props::GraphemeClusterBreak, Struct)]
1008     #[diplomat::enum_convert(icu_properties::props::GraphemeClusterBreak, needs_wildcard)]
1009     pub enum GraphemeClusterBreak {
1010         #[diplomat::rust_link(icu::properties::props::LineBreak::Other, EnumVariant)]
1011         Other = 0,
1012         #[diplomat::rust_link(icu::properties::props::LineBreak::Control, EnumVariant)]
1013         Control = 1,
1014         #[diplomat::rust_link(icu::properties::props::LineBreak::CR, EnumVariant)]
1015         CR = 2,
1016         #[diplomat::rust_link(icu::properties::props::LineBreak::Extend, EnumVariant)]
1017         Extend = 3,
1018         #[diplomat::rust_link(icu::properties::props::LineBreak::L, EnumVariant)]
1019         L = 4,
1020         #[diplomat::rust_link(icu::properties::props::LineBreak::LF, EnumVariant)]
1021         LF = 5,
1022         #[diplomat::rust_link(icu::properties::props::LineBreak::LV, EnumVariant)]
1023         LV = 6,
1024         #[diplomat::rust_link(icu::properties::props::LineBreak::LVT, EnumVariant)]
1025         LVT = 7,
1026         #[diplomat::rust_link(icu::properties::props::LineBreak::T, EnumVariant)]
1027         T = 8,
1028         #[diplomat::rust_link(icu::properties::props::LineBreak::V, EnumVariant)]
1029         V = 9,
1030         #[diplomat::rust_link(icu::properties::props::LineBreak::SpacingMark, EnumVariant)]
1031         SpacingMark = 10,
1032         #[diplomat::rust_link(icu::properties::props::LineBreak::Prepend, EnumVariant)]
1033         Prepend = 11,
1034         #[diplomat::rust_link(icu::properties::props::LineBreak::RegionalIndicator, EnumVariant)]
1035         RegionalIndicator = 12,
1036         #[diplomat::rust_link(icu::properties::props::LineBreak::EBase, EnumVariant)]
1037         EBase = 13,
1038         #[diplomat::rust_link(icu::properties::props::LineBreak::EBaseGAZ, EnumVariant)]
1039         EBaseGAZ = 14,
1040         #[diplomat::rust_link(icu::properties::props::LineBreak::EModifier, EnumVariant)]
1041         EModifier = 15,
1042         #[diplomat::rust_link(icu::properties::props::LineBreak::GlueAfterZwj, EnumVariant)]
1043         GlueAfterZwj = 16,
1044         #[diplomat::rust_link(icu::properties::props::LineBreak::ZWJ, EnumVariant)]
1045         ZWJ = 17,
1046     }
1047 
1048     impl GraphemeClusterBreak {
1049         #[diplomat::rust_link(icu::properties::props::EnumeratedProperty::for_char, FnInTrait)]
1050         #[cfg(feature = "compiled_data")]
for_char(ch: DiplomatChar) -> Self1051         pub fn for_char(ch: DiplomatChar) -> Self {
1052             icu_properties::CodePointMapData::<props::GraphemeClusterBreak>::new()
1053                 .get32(ch)
1054                 .into()
1055         }
1056         #[diplomat::rust_link(
1057             icu::properties::props::GraphemeClusterBreak::to_icu4c_value,
1058             FnInStruct
1059         )]
1060         /// Convert to an integer value usable with ICU4C and CodePointMapData
to_integer_value(self) -> u81061         pub fn to_integer_value(self) -> u8 {
1062             self as u8
1063         }
1064         #[diplomat::rust_link(
1065             icu::properties::props::GraphemeClusterBreak::from_icu4c_value,
1066             FnInStruct
1067         )]
1068         /// Convert from an integer value from ICU4C or CodePointMapData
from_integer_value(other: u8) -> Option<Self>1069         pub fn from_integer_value(other: u8) -> Option<Self> {
1070             Some(match other {
1071                 0 => Self::Other,
1072                 1 => Self::Control,
1073                 2 => Self::CR,
1074                 3 => Self::Extend,
1075                 4 => Self::L,
1076                 5 => Self::LF,
1077                 6 => Self::LV,
1078                 7 => Self::LVT,
1079                 8 => Self::T,
1080                 9 => Self::V,
1081                 10 => Self::SpacingMark,
1082                 11 => Self::Prepend,
1083                 12 => Self::RegionalIndicator,
1084                 13 => Self::EBase,
1085                 14 => Self::EBaseGAZ,
1086                 15 => Self::EModifier,
1087                 16 => Self::GlueAfterZwj,
1088                 17 => Self::ZWJ,
1089                 _ => return None,
1090             })
1091         }
1092     }
1093 
1094     #[diplomat::rust_link(icu::properties::props::WordBreak, Struct)]
1095     #[diplomat::enum_convert(icu_properties::props::WordBreak, needs_wildcard)]
1096     pub enum WordBreak {
1097         #[diplomat::rust_link(icu::properties::props::WordBreak::Other, EnumVariant)]
1098         Other = 0,
1099         #[diplomat::rust_link(icu::properties::props::WordBreak::ALetter, EnumVariant)]
1100         ALetter = 1,
1101         #[diplomat::rust_link(icu::properties::props::WordBreak::Format, EnumVariant)]
1102         Format = 2,
1103         #[diplomat::rust_link(icu::properties::props::WordBreak::Katakana, EnumVariant)]
1104         Katakana = 3,
1105         #[diplomat::rust_link(icu::properties::props::WordBreak::MidLetter, EnumVariant)]
1106         MidLetter = 4,
1107         #[diplomat::rust_link(icu::properties::props::WordBreak::MidNum, EnumVariant)]
1108         MidNum = 5,
1109         #[diplomat::rust_link(icu::properties::props::WordBreak::Numeric, EnumVariant)]
1110         Numeric = 6,
1111         #[diplomat::rust_link(icu::properties::props::WordBreak::ExtendNumLet, EnumVariant)]
1112         ExtendNumLet = 7,
1113         #[diplomat::rust_link(icu::properties::props::WordBreak::CR, EnumVariant)]
1114         CR = 8,
1115         #[diplomat::rust_link(icu::properties::props::WordBreak::Extend, EnumVariant)]
1116         Extend = 9,
1117         #[diplomat::rust_link(icu::properties::props::WordBreak::LF, EnumVariant)]
1118         LF = 10,
1119         #[diplomat::rust_link(icu::properties::props::WordBreak::MidNumLet, EnumVariant)]
1120         MidNumLet = 11,
1121         #[diplomat::rust_link(icu::properties::props::WordBreak::Newline, EnumVariant)]
1122         Newline = 12,
1123         #[diplomat::rust_link(icu::properties::props::WordBreak::RegionalIndicator, EnumVariant)]
1124         RegionalIndicator = 13,
1125         #[diplomat::rust_link(icu::properties::props::WordBreak::HebrewLetter, EnumVariant)]
1126         HebrewLetter = 14,
1127         #[diplomat::rust_link(icu::properties::props::WordBreak::SingleQuote, EnumVariant)]
1128         SingleQuote = 15,
1129         #[diplomat::rust_link(icu::properties::props::WordBreak::DoubleQuote, EnumVariant)]
1130         DoubleQuote = 16,
1131         #[diplomat::rust_link(icu::properties::props::WordBreak::EBase, EnumVariant)]
1132         EBase = 17,
1133         #[diplomat::rust_link(icu::properties::props::WordBreak::EBaseGAZ, EnumVariant)]
1134         EBaseGAZ = 18,
1135         #[diplomat::rust_link(icu::properties::props::WordBreak::EModifier, EnumVariant)]
1136         EModifier = 19,
1137         #[diplomat::rust_link(icu::properties::props::WordBreak::GlueAfterZwj, EnumVariant)]
1138         GlueAfterZwj = 20,
1139         #[diplomat::rust_link(icu::properties::props::WordBreak::ZWJ, EnumVariant)]
1140         ZWJ = 21,
1141         #[diplomat::rust_link(icu::properties::props::WordBreak::WSegSpace, EnumVariant)]
1142         WSegSpace = 22,
1143     }
1144 
1145     impl WordBreak {
1146         #[diplomat::rust_link(icu::properties::props::EnumeratedProperty::for_char, FnInTrait)]
1147         #[cfg(feature = "compiled_data")]
for_char(ch: DiplomatChar) -> Self1148         pub fn for_char(ch: DiplomatChar) -> Self {
1149             icu_properties::CodePointMapData::<props::WordBreak>::new()
1150                 .get32(ch)
1151                 .into()
1152         }
1153 
1154         #[diplomat::rust_link(icu::properties::PropertyNamesLongBorrowed::get, FnInStruct)]
1155         #[cfg(feature = "compiled_data")]
1156         /// Get the "long" name of this property value (returns empty if property value is unknown)
long_name(self) -> Option<&'static str>1157         pub fn long_name(self) -> Option<&'static str> {
1158             icu_properties::PropertyNamesLongBorrowed::<props::WordBreak>::new().get(self.into())
1159         }
1160 
1161         #[diplomat::rust_link(icu::properties::PropertyNamesShortBorrowed::get, FnInStruct)]
1162         #[cfg(feature = "compiled_data")]
1163         /// Get the "short" name of this property value (returns empty if property value is unknown)
short_name(self) -> Option<&'static str>1164         pub fn short_name(self) -> Option<&'static str> {
1165             icu_properties::PropertyNamesShortBorrowed::<props::WordBreak>::new().get(self.into())
1166         }
1167         #[diplomat::rust_link(icu::properties::props::WordBreak::to_icu4c_value, FnInStruct)]
1168         /// Convert to an integer value usable with ICU4C and CodePointMapData
to_integer_value(self) -> u81169         pub fn to_integer_value(self) -> u8 {
1170             self as u8
1171         }
1172         #[diplomat::rust_link(icu::properties::props::WordBreak::from_icu4c_value, FnInStruct)]
1173         /// Convert from an integer value from ICU4C or CodePointMapData
from_integer_value(other: u8) -> Option<Self>1174         pub fn from_integer_value(other: u8) -> Option<Self> {
1175             Some(match other {
1176                 0 => Self::Other,
1177                 1 => Self::ALetter,
1178                 2 => Self::Format,
1179                 3 => Self::Katakana,
1180                 4 => Self::MidLetter,
1181                 5 => Self::MidNum,
1182                 6 => Self::Numeric,
1183                 7 => Self::ExtendNumLet,
1184                 8 => Self::CR,
1185                 9 => Self::Extend,
1186                 10 => Self::LF,
1187                 11 => Self::MidNumLet,
1188                 12 => Self::Newline,
1189                 13 => Self::RegionalIndicator,
1190                 14 => Self::HebrewLetter,
1191                 15 => Self::SingleQuote,
1192                 16 => Self::DoubleQuote,
1193                 17 => Self::EBase,
1194                 18 => Self::EBaseGAZ,
1195                 19 => Self::EModifier,
1196                 20 => Self::GlueAfterZwj,
1197                 21 => Self::ZWJ,
1198                 22 => Self::WSegSpace,
1199                 _ => return None,
1200             })
1201         }
1202     }
1203 
1204     #[diplomat::rust_link(icu::properties::props::SentenceBreak, Struct)]
1205     #[diplomat::enum_convert(icu_properties::props::SentenceBreak, needs_wildcard)]
1206     pub enum SentenceBreak {
1207         #[diplomat::rust_link(icu::properties::props::SentenceBreak::Other, EnumVariant)]
1208         Other = 0,
1209         #[diplomat::rust_link(icu::properties::props::SentenceBreak::ATerm, EnumVariant)]
1210         ATerm = 1,
1211         #[diplomat::rust_link(icu::properties::props::SentenceBreak::Close, EnumVariant)]
1212         Close = 2,
1213         #[diplomat::rust_link(icu::properties::props::SentenceBreak::Format, EnumVariant)]
1214         Format = 3,
1215         #[diplomat::rust_link(icu::properties::props::SentenceBreak::Lower, EnumVariant)]
1216         Lower = 4,
1217         #[diplomat::rust_link(icu::properties::props::SentenceBreak::Numeric, EnumVariant)]
1218         Numeric = 5,
1219         #[diplomat::rust_link(icu::properties::props::SentenceBreak::OLetter, EnumVariant)]
1220         OLetter = 6,
1221         #[diplomat::rust_link(icu::properties::props::SentenceBreak::Sep, EnumVariant)]
1222         Sep = 7,
1223         #[diplomat::rust_link(icu::properties::props::SentenceBreak::Sp, EnumVariant)]
1224         Sp = 8,
1225         #[diplomat::rust_link(icu::properties::props::SentenceBreak::STerm, EnumVariant)]
1226         STerm = 9,
1227         #[diplomat::rust_link(icu::properties::props::SentenceBreak::Upper, EnumVariant)]
1228         Upper = 10,
1229         #[diplomat::rust_link(icu::properties::props::SentenceBreak::CR, EnumVariant)]
1230         CR = 11,
1231         #[diplomat::rust_link(icu::properties::props::SentenceBreak::Extend, EnumVariant)]
1232         Extend = 12,
1233         #[diplomat::rust_link(icu::properties::props::SentenceBreak::LF, EnumVariant)]
1234         LF = 13,
1235         #[diplomat::rust_link(icu::properties::props::SentenceBreak::SContinue, EnumVariant)]
1236         SContinue = 14,
1237     }
1238 
1239     impl SentenceBreak {
1240         #[diplomat::rust_link(icu::properties::props::EnumeratedProperty::for_char, FnInTrait)]
1241         #[cfg(feature = "compiled_data")]
for_char(ch: DiplomatChar) -> Self1242         pub fn for_char(ch: DiplomatChar) -> Self {
1243             icu_properties::CodePointMapData::<props::SentenceBreak>::new()
1244                 .get32(ch)
1245                 .into()
1246         }
1247 
1248         #[diplomat::rust_link(icu::properties::PropertyNamesLongBorrowed::get, FnInStruct)]
1249         #[cfg(feature = "compiled_data")]
1250         /// Get the "long" name of this property value (returns empty if property value is unknown)
long_name(self) -> Option<&'static str>1251         pub fn long_name(self) -> Option<&'static str> {
1252             icu_properties::PropertyNamesLongBorrowed::<props::SentenceBreak>::new()
1253                 .get(self.into())
1254         }
1255 
1256         #[diplomat::rust_link(icu::properties::PropertyNamesShortBorrowed::get, FnInStruct)]
1257         #[cfg(feature = "compiled_data")]
1258         /// Get the "short" name of this property value (returns empty if property value is unknown)
short_name(self) -> Option<&'static str>1259         pub fn short_name(self) -> Option<&'static str> {
1260             icu_properties::PropertyNamesShortBorrowed::<props::SentenceBreak>::new()
1261                 .get(self.into())
1262         }
1263         #[diplomat::rust_link(icu::properties::props::SentenceBreak::to_icu4c_value, FnInStruct)]
1264         /// Convert to an integer value usable with ICU4C and CodePointMapData
to_integer_value(self) -> u81265         pub fn to_integer_value(self) -> u8 {
1266             self as u8
1267         }
1268         #[diplomat::rust_link(icu::properties::props::SentenceBreak::from_icu4c_value, FnInStruct)]
1269         /// Convert from an integer value from ICU4C or CodePointMapData
from_integer_value(other: u8) -> Option<Self>1270         pub fn from_integer_value(other: u8) -> Option<Self> {
1271             Some(match other {
1272                 0 => Self::Other,
1273                 1 => Self::ATerm,
1274                 2 => Self::Close,
1275                 3 => Self::Format,
1276                 4 => Self::Lower,
1277                 5 => Self::Numeric,
1278                 6 => Self::OLetter,
1279                 7 => Self::Sep,
1280                 8 => Self::Sp,
1281                 9 => Self::STerm,
1282                 10 => Self::Upper,
1283                 11 => Self::CR,
1284                 12 => Self::Extend,
1285                 13 => Self::LF,
1286                 14 => Self::SContinue,
1287                 _ => return None,
1288             })
1289         }
1290     }
1291 
1292     #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass, Struct)]
1293     #[diplomat::enum_convert(icu_properties::props::CanonicalCombiningClass, needs_wildcard)]
1294     pub enum CanonicalCombiningClass {
1295         #[diplomat::rust_link(
1296             icu::properties::props::CanonicalCombiningClass::NotReordered,
1297             EnumVariant
1298         )]
1299         NotReordered = 0,
1300         #[diplomat::rust_link(
1301             icu::properties::props::CanonicalCombiningClass::Overlay,
1302             EnumVariant
1303         )]
1304         Overlay = 1,
1305         #[diplomat::rust_link(
1306             icu::properties::props::CanonicalCombiningClass::HanReading,
1307             EnumVariant
1308         )]
1309         HanReading = 6,
1310         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::Nukta, EnumVariant)]
1311         Nukta = 7,
1312         #[diplomat::rust_link(
1313             icu::properties::props::CanonicalCombiningClass::KanaVoicing,
1314             EnumVariant
1315         )]
1316         KanaVoicing = 8,
1317         #[diplomat::rust_link(
1318             icu::properties::props::CanonicalCombiningClass::Virama,
1319             EnumVariant
1320         )]
1321         Virama = 9,
1322         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::CCC10, EnumVariant)]
1323         CCC10 = 10,
1324         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::CCC11, EnumVariant)]
1325         CCC11 = 11,
1326         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::CCC12, EnumVariant)]
1327         CCC12 = 12,
1328         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::CCC13, EnumVariant)]
1329         CCC13 = 13,
1330         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::CCC14, EnumVariant)]
1331         CCC14 = 14,
1332         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::CCC15, EnumVariant)]
1333         CCC15 = 15,
1334         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::CCC16, EnumVariant)]
1335         CCC16 = 16,
1336         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::CCC17, EnumVariant)]
1337         CCC17 = 17,
1338         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::CCC18, EnumVariant)]
1339         CCC18 = 18,
1340         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::CCC19, EnumVariant)]
1341         CCC19 = 19,
1342         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::CCC20, EnumVariant)]
1343         CCC20 = 20,
1344         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::CCC21, EnumVariant)]
1345         CCC21 = 21,
1346         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::CCC22, EnumVariant)]
1347         CCC22 = 22,
1348         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::CCC23, EnumVariant)]
1349         CCC23 = 23,
1350         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::CCC24, EnumVariant)]
1351         CCC24 = 24,
1352         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::CCC25, EnumVariant)]
1353         CCC25 = 25,
1354         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::CCC26, EnumVariant)]
1355         CCC26 = 26,
1356         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::CCC27, EnumVariant)]
1357         CCC27 = 27,
1358         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::CCC28, EnumVariant)]
1359         CCC28 = 28,
1360         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::CCC29, EnumVariant)]
1361         CCC29 = 29,
1362         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::CCC30, EnumVariant)]
1363         CCC30 = 30,
1364         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::CCC31, EnumVariant)]
1365         CCC31 = 31,
1366         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::CCC32, EnumVariant)]
1367         CCC32 = 32,
1368         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::CCC33, EnumVariant)]
1369         CCC33 = 33,
1370         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::CCC34, EnumVariant)]
1371         CCC34 = 34,
1372         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::CCC35, EnumVariant)]
1373         CCC35 = 35,
1374         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::CCC36, EnumVariant)]
1375         CCC36 = 36,
1376         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::CCC84, EnumVariant)]
1377         CCC84 = 84,
1378         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::CCC91, EnumVariant)]
1379         CCC91 = 91,
1380         #[diplomat::rust_link(
1381             icu::properties::props::CanonicalCombiningClass::CCC103,
1382             EnumVariant
1383         )]
1384         CCC103 = 103,
1385         #[diplomat::rust_link(
1386             icu::properties::props::CanonicalCombiningClass::CCC107,
1387             EnumVariant
1388         )]
1389         CCC107 = 107,
1390         #[diplomat::rust_link(
1391             icu::properties::props::CanonicalCombiningClass::CCC118,
1392             EnumVariant
1393         )]
1394         CCC118 = 118,
1395         #[diplomat::rust_link(
1396             icu::properties::props::CanonicalCombiningClass::CCC122,
1397             EnumVariant
1398         )]
1399         CCC122 = 122,
1400         #[diplomat::rust_link(
1401             icu::properties::props::CanonicalCombiningClass::CCC129,
1402             EnumVariant
1403         )]
1404         CCC129 = 129,
1405         #[diplomat::rust_link(
1406             icu::properties::props::CanonicalCombiningClass::CCC130,
1407             EnumVariant
1408         )]
1409         CCC130 = 130,
1410         #[diplomat::rust_link(
1411             icu::properties::props::CanonicalCombiningClass::CCC132,
1412             EnumVariant
1413         )]
1414         CCC132 = 132,
1415         #[diplomat::rust_link(
1416             icu::properties::props::CanonicalCombiningClass::CCC133,
1417             EnumVariant
1418         )]
1419         CCC133 = 133,
1420         #[diplomat::rust_link(
1421             icu::properties::props::CanonicalCombiningClass::AttachedBelowLeft,
1422             EnumVariant
1423         )]
1424         AttachedBelowLeft = 200,
1425         #[diplomat::rust_link(
1426             icu::properties::props::CanonicalCombiningClass::AttachedBelow,
1427             EnumVariant
1428         )]
1429         AttachedBelow = 202,
1430         #[diplomat::rust_link(
1431             icu::properties::props::CanonicalCombiningClass::AttachedAbove,
1432             EnumVariant
1433         )]
1434         AttachedAbove = 214,
1435         #[diplomat::rust_link(
1436             icu::properties::props::CanonicalCombiningClass::AttachedAboveRight,
1437             EnumVariant
1438         )]
1439         AttachedAboveRight = 216,
1440         #[diplomat::rust_link(
1441             icu::properties::props::CanonicalCombiningClass::BelowLeft,
1442             EnumVariant
1443         )]
1444         BelowLeft = 218,
1445         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::Below, EnumVariant)]
1446         Below = 220,
1447         #[diplomat::rust_link(
1448             icu::properties::props::CanonicalCombiningClass::BelowRight,
1449             EnumVariant
1450         )]
1451         BelowRight = 222,
1452         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::Left, EnumVariant)]
1453         Left = 224,
1454         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::Right, EnumVariant)]
1455         Right = 226,
1456         #[diplomat::rust_link(
1457             icu::properties::props::CanonicalCombiningClass::AboveLeft,
1458             EnumVariant
1459         )]
1460         AboveLeft = 228,
1461         #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass::Above, EnumVariant)]
1462         Above = 230,
1463         #[diplomat::rust_link(
1464             icu::properties::props::CanonicalCombiningClass::AboveRight,
1465             EnumVariant
1466         )]
1467         AboveRight = 232,
1468         #[diplomat::rust_link(
1469             icu::properties::props::CanonicalCombiningClass::DoubleBelow,
1470             EnumVariant
1471         )]
1472         DoubleBelow = 233,
1473         #[diplomat::rust_link(
1474             icu::properties::props::CanonicalCombiningClass::DoubleAbove,
1475             EnumVariant
1476         )]
1477         DoubleAbove = 234,
1478         #[diplomat::rust_link(
1479             icu::properties::props::CanonicalCombiningClass::IotaSubscript,
1480             EnumVariant
1481         )]
1482         IotaSubscript = 240,
1483     }
1484 
1485     impl CanonicalCombiningClass {
1486         #[diplomat::rust_link(icu::properties::props::EnumeratedProperty::for_char, FnInTrait)]
1487         #[cfg(feature = "compiled_data")]
for_char(ch: DiplomatChar) -> Self1488         pub fn for_char(ch: DiplomatChar) -> Self {
1489             icu_properties::CodePointMapData::<props::CanonicalCombiningClass>::new()
1490                 .get32(ch)
1491                 .into()
1492         }
1493         #[diplomat::rust_link(
1494             icu::properties::props::CanonicalCombiningClass::to_icu4c_value,
1495             FnInStruct
1496         )]
1497         /// Convert to an integer value usable with ICU4C and CodePointMapData
to_integer_value(self) -> u81498         pub fn to_integer_value(self) -> u8 {
1499             self as u8
1500         }
1501         #[diplomat::rust_link(
1502             icu::properties::props::CanonicalCombiningClass::from_icu4c_value,
1503             FnInStruct
1504         )]
1505         /// Convert from an integer value from ICU4C or CodePointMapData
from_integer_value(other: u8) -> Option<Self>1506         pub fn from_integer_value(other: u8) -> Option<Self> {
1507             Some(match other {
1508                 0 => Self::NotReordered,
1509                 1 => Self::Overlay,
1510                 6 => Self::HanReading,
1511                 7 => Self::Nukta,
1512                 8 => Self::KanaVoicing,
1513                 9 => Self::Virama,
1514                 10 => Self::CCC10,
1515                 11 => Self::CCC11,
1516                 12 => Self::CCC12,
1517                 13 => Self::CCC13,
1518                 14 => Self::CCC14,
1519                 15 => Self::CCC15,
1520                 16 => Self::CCC16,
1521                 17 => Self::CCC17,
1522                 18 => Self::CCC18,
1523                 19 => Self::CCC19,
1524                 20 => Self::CCC20,
1525                 21 => Self::CCC21,
1526                 22 => Self::CCC22,
1527                 23 => Self::CCC23,
1528                 24 => Self::CCC24,
1529                 25 => Self::CCC25,
1530                 26 => Self::CCC26,
1531                 27 => Self::CCC27,
1532                 28 => Self::CCC28,
1533                 29 => Self::CCC29,
1534                 30 => Self::CCC30,
1535                 31 => Self::CCC31,
1536                 32 => Self::CCC32,
1537                 33 => Self::CCC33,
1538                 34 => Self::CCC34,
1539                 35 => Self::CCC35,
1540                 36 => Self::CCC36,
1541                 84 => Self::CCC84,
1542                 91 => Self::CCC91,
1543                 103 => Self::CCC103,
1544                 107 => Self::CCC107,
1545                 118 => Self::CCC118,
1546                 122 => Self::CCC122,
1547                 129 => Self::CCC129,
1548                 130 => Self::CCC130,
1549                 132 => Self::CCC132,
1550                 133 => Self::CCC133,
1551                 200 => Self::AttachedBelowLeft,
1552                 202 => Self::AttachedBelow,
1553                 214 => Self::AttachedAbove,
1554                 216 => Self::AttachedAboveRight,
1555                 218 => Self::BelowLeft,
1556                 220 => Self::Below,
1557                 222 => Self::BelowRight,
1558                 224 => Self::Left,
1559                 226 => Self::Right,
1560                 228 => Self::AboveLeft,
1561                 230 => Self::Above,
1562                 232 => Self::AboveRight,
1563                 233 => Self::DoubleBelow,
1564                 234 => Self::DoubleAbove,
1565                 240 => Self::IotaSubscript,
1566                 _ => return None,
1567             })
1568         }
1569     }
1570 
1571     #[diplomat::rust_link(icu::properties::props::IndicSyllabicCategory, Struct)]
1572     #[diplomat::enum_convert(icu_properties::props::IndicSyllabicCategory, needs_wildcard)]
1573     pub enum IndicSyllabicCategory {
1574         #[diplomat::rust_link(icu::properties::props::IndicSyllabicCategory::Other, EnumVariant)]
1575         Other = 0,
1576         #[diplomat::rust_link(
1577             icu::properties::props::IndicSyllabicCategory::Avagraha,
1578             EnumVariant
1579         )]
1580         Avagraha = 1,
1581         #[diplomat::rust_link(icu::properties::props::IndicSyllabicCategory::Bindu, EnumVariant)]
1582         Bindu = 2,
1583         #[diplomat::rust_link(
1584             icu::properties::props::IndicSyllabicCategory::BrahmiJoiningNumber,
1585             EnumVariant
1586         )]
1587         BrahmiJoiningNumber = 3,
1588         #[diplomat::rust_link(
1589             icu::properties::props::IndicSyllabicCategory::CantillationMark,
1590             EnumVariant
1591         )]
1592         CantillationMark = 4,
1593         #[diplomat::rust_link(
1594             icu::properties::props::IndicSyllabicCategory::Consonant,
1595             EnumVariant
1596         )]
1597         Consonant = 5,
1598         #[diplomat::rust_link(
1599             icu::properties::props::IndicSyllabicCategory::ConsonantDead,
1600             EnumVariant
1601         )]
1602         ConsonantDead = 6,
1603         #[diplomat::rust_link(
1604             icu::properties::props::IndicSyllabicCategory::ConsonantFinal,
1605             EnumVariant
1606         )]
1607         ConsonantFinal = 7,
1608         #[diplomat::rust_link(
1609             icu::properties::props::IndicSyllabicCategory::ConsonantHeadLetter,
1610             EnumVariant
1611         )]
1612         ConsonantHeadLetter = 8,
1613         #[diplomat::rust_link(
1614             icu::properties::props::IndicSyllabicCategory::ConsonantInitialPostfixed,
1615             EnumVariant
1616         )]
1617         ConsonantInitialPostfixed = 9,
1618         #[diplomat::rust_link(
1619             icu::properties::props::IndicSyllabicCategory::ConsonantKiller,
1620             EnumVariant
1621         )]
1622         ConsonantKiller = 10,
1623         #[diplomat::rust_link(
1624             icu::properties::props::IndicSyllabicCategory::ConsonantMedial,
1625             EnumVariant
1626         )]
1627         ConsonantMedial = 11,
1628         #[diplomat::rust_link(
1629             icu::properties::props::IndicSyllabicCategory::ConsonantPlaceholder,
1630             EnumVariant
1631         )]
1632         ConsonantPlaceholder = 12,
1633         #[diplomat::rust_link(
1634             icu::properties::props::IndicSyllabicCategory::ConsonantPrecedingRepha,
1635             EnumVariant
1636         )]
1637         ConsonantPrecedingRepha = 13,
1638         #[diplomat::rust_link(
1639             icu::properties::props::IndicSyllabicCategory::ConsonantPrefixed,
1640             EnumVariant
1641         )]
1642         ConsonantPrefixed = 14,
1643         #[diplomat::rust_link(
1644             icu::properties::props::IndicSyllabicCategory::ConsonantSucceedingRepha,
1645             EnumVariant
1646         )]
1647         ConsonantSucceedingRepha = 15,
1648         #[diplomat::rust_link(
1649             icu::properties::props::IndicSyllabicCategory::ConsonantSubjoined,
1650             EnumVariant
1651         )]
1652         ConsonantSubjoined = 16,
1653         #[diplomat::rust_link(
1654             icu::properties::props::IndicSyllabicCategory::ConsonantWithStacker,
1655             EnumVariant
1656         )]
1657         ConsonantWithStacker = 17,
1658         #[diplomat::rust_link(
1659             icu::properties::props::IndicSyllabicCategory::GeminationMark,
1660             EnumVariant
1661         )]
1662         GeminationMark = 18,
1663         #[diplomat::rust_link(
1664             icu::properties::props::IndicSyllabicCategory::InvisibleStacker,
1665             EnumVariant
1666         )]
1667         InvisibleStacker = 19,
1668         #[diplomat::rust_link(icu::properties::props::IndicSyllabicCategory::Joiner, EnumVariant)]
1669         Joiner = 20,
1670         #[diplomat::rust_link(
1671             icu::properties::props::IndicSyllabicCategory::ModifyingLetter,
1672             EnumVariant
1673         )]
1674         ModifyingLetter = 21,
1675         #[diplomat::rust_link(
1676             icu::properties::props::IndicSyllabicCategory::NonJoiner,
1677             EnumVariant
1678         )]
1679         NonJoiner = 22,
1680         #[diplomat::rust_link(icu::properties::props::IndicSyllabicCategory::Nukta, EnumVariant)]
1681         Nukta = 23,
1682         #[diplomat::rust_link(icu::properties::props::IndicSyllabicCategory::Number, EnumVariant)]
1683         Number = 24,
1684         #[diplomat::rust_link(
1685             icu::properties::props::IndicSyllabicCategory::NumberJoiner,
1686             EnumVariant
1687         )]
1688         NumberJoiner = 25,
1689         #[diplomat::rust_link(
1690             icu::properties::props::IndicSyllabicCategory::PureKiller,
1691             EnumVariant
1692         )]
1693         PureKiller = 26,
1694         #[diplomat::rust_link(
1695             icu::properties::props::IndicSyllabicCategory::RegisterShifter,
1696             EnumVariant
1697         )]
1698         RegisterShifter = 27,
1699         #[diplomat::rust_link(
1700             icu::properties::props::IndicSyllabicCategory::SyllableModifier,
1701             EnumVariant
1702         )]
1703         SyllableModifier = 28,
1704         #[diplomat::rust_link(
1705             icu::properties::props::IndicSyllabicCategory::ToneLetter,
1706             EnumVariant
1707         )]
1708         ToneLetter = 29,
1709         #[diplomat::rust_link(
1710             icu::properties::props::IndicSyllabicCategory::ToneMark,
1711             EnumVariant
1712         )]
1713         ToneMark = 30,
1714         #[diplomat::rust_link(icu::properties::props::IndicSyllabicCategory::Virama, EnumVariant)]
1715         Virama = 31,
1716         #[diplomat::rust_link(icu::properties::props::IndicSyllabicCategory::Visarga, EnumVariant)]
1717         Visarga = 32,
1718         #[diplomat::rust_link(icu::properties::props::IndicSyllabicCategory::Vowel, EnumVariant)]
1719         Vowel = 33,
1720         #[diplomat::rust_link(
1721             icu::properties::props::IndicSyllabicCategory::VowelDependent,
1722             EnumVariant
1723         )]
1724         VowelDependent = 34,
1725         #[diplomat::rust_link(
1726             icu::properties::props::IndicSyllabicCategory::VowelIndependent,
1727             EnumVariant
1728         )]
1729         VowelIndependent = 35,
1730         #[diplomat::rust_link(
1731             icu::properties::props::IndicSyllabicCategory::ReorderingKiller,
1732             EnumVariant
1733         )]
1734         ReorderingKiller = 36,
1735     }
1736 
1737     impl IndicSyllabicCategory {
1738         #[diplomat::rust_link(icu::properties::props::EnumeratedProperty::for_char, FnInTrait)]
1739         #[cfg(feature = "compiled_data")]
for_char(ch: DiplomatChar) -> Self1740         pub fn for_char(ch: DiplomatChar) -> Self {
1741             icu_properties::CodePointMapData::<props::IndicSyllabicCategory>::new()
1742                 .get32(ch)
1743                 .into()
1744         }
1745         #[diplomat::rust_link(
1746             icu::properties::props::IndicSyllabicCategory::to_icu4c_value,
1747             FnInStruct
1748         )]
1749         /// Convert to an integer value usable with ICU4C and CodePointMapData
to_integer_value(self) -> u81750         pub fn to_integer_value(self) -> u8 {
1751             self as u8
1752         }
1753         #[diplomat::rust_link(
1754             icu::properties::props::IndicSyllabicCategory::from_icu4c_value,
1755             FnInStruct
1756         )]
1757         /// Convert from an integer value from ICU4C or CodePointMapData
from_integer_value(other: u8) -> Option<Self>1758         pub fn from_integer_value(other: u8) -> Option<Self> {
1759             Some(match other {
1760                 0 => Self::Other,
1761                 1 => Self::Avagraha,
1762                 2 => Self::Bindu,
1763                 3 => Self::BrahmiJoiningNumber,
1764                 4 => Self::CantillationMark,
1765                 5 => Self::Consonant,
1766                 6 => Self::ConsonantDead,
1767                 7 => Self::ConsonantFinal,
1768                 8 => Self::ConsonantHeadLetter,
1769                 9 => Self::ConsonantInitialPostfixed,
1770                 10 => Self::ConsonantKiller,
1771                 11 => Self::ConsonantMedial,
1772                 12 => Self::ConsonantPlaceholder,
1773                 13 => Self::ConsonantPrecedingRepha,
1774                 14 => Self::ConsonantPrefixed,
1775                 15 => Self::ConsonantSucceedingRepha,
1776                 16 => Self::ConsonantSubjoined,
1777                 17 => Self::ConsonantWithStacker,
1778                 18 => Self::GeminationMark,
1779                 19 => Self::InvisibleStacker,
1780                 20 => Self::Joiner,
1781                 21 => Self::ModifyingLetter,
1782                 22 => Self::NonJoiner,
1783                 23 => Self::Nukta,
1784                 24 => Self::Number,
1785                 25 => Self::NumberJoiner,
1786                 26 => Self::PureKiller,
1787                 27 => Self::RegisterShifter,
1788                 28 => Self::SyllableModifier,
1789                 29 => Self::ToneLetter,
1790                 30 => Self::ToneMark,
1791                 31 => Self::Virama,
1792                 32 => Self::Visarga,
1793                 33 => Self::Vowel,
1794                 34 => Self::VowelDependent,
1795                 35 => Self::VowelIndependent,
1796                 36 => Self::ReorderingKiller,
1797                 _ => return None,
1798             })
1799         }
1800     }
1801 
1802     #[diplomat::rust_link(icu::properties::props::JoiningType, Struct)]
1803     #[diplomat::enum_convert(icu_properties::props::JoiningType, needs_wildcard)]
1804     pub enum JoiningType {
1805         #[diplomat::rust_link(icu::properties::props::JoiningType::NonJoining, EnumVariant)]
1806         NonJoining = 0,
1807         #[diplomat::rust_link(icu::properties::props::JoiningType::JoinCausing, EnumVariant)]
1808         JoinCausing = 1,
1809         #[diplomat::rust_link(icu::properties::props::JoiningType::DualJoining, EnumVariant)]
1810         DualJoining = 2,
1811         #[diplomat::rust_link(icu::properties::props::JoiningType::LeftJoining, EnumVariant)]
1812         LeftJoining = 3,
1813         #[diplomat::rust_link(icu::properties::props::JoiningType::RightJoining, EnumVariant)]
1814         RightJoining = 4,
1815         #[diplomat::rust_link(icu::properties::props::JoiningType::Transparent, EnumVariant)]
1816         Transparent = 5,
1817     }
1818 
1819     impl JoiningType {
1820         #[diplomat::rust_link(icu::properties::props::EnumeratedProperty::for_char, FnInTrait)]
1821         #[cfg(feature = "compiled_data")]
for_char(ch: DiplomatChar) -> Self1822         pub fn for_char(ch: DiplomatChar) -> Self {
1823             icu_properties::CodePointMapData::<props::JoiningType>::new()
1824                 .get32(ch)
1825                 .into()
1826         }
1827 
1828         #[diplomat::rust_link(icu::properties::PropertyNamesLongBorrowed::get, FnInStruct)]
1829         #[cfg(feature = "compiled_data")]
1830         /// Get the "long" name of this property value (returns empty if property value is unknown)
long_name(self) -> Option<&'static str>1831         pub fn long_name(self) -> Option<&'static str> {
1832             icu_properties::PropertyNamesLongBorrowed::<props::JoiningType>::new().get(self.into())
1833         }
1834 
1835         #[diplomat::rust_link(icu::properties::PropertyNamesShortBorrowed::get, FnInStruct)]
1836         #[cfg(feature = "compiled_data")]
1837         /// Get the "short" name of this property value (returns empty if property value is unknown)
short_name(self) -> Option<&'static str>1838         pub fn short_name(self) -> Option<&'static str> {
1839             icu_properties::PropertyNamesShortBorrowed::<props::JoiningType>::new().get(self.into())
1840         }
1841         #[diplomat::rust_link(icu::properties::props::JoiningType::to_icu4c_value, FnInStruct)]
1842         /// Convert to an integer value usable with ICU4C and CodePointMapData
to_integer_value(self) -> u81843         pub fn to_integer_value(self) -> u8 {
1844             self as u8
1845         }
1846         #[diplomat::rust_link(icu::properties::props::JoiningType::from_icu4c_value, FnInStruct)]
1847         /// Convert from an integer value from ICU4C or CodePointMapData
from_integer_value(other: u8) -> Option<Self>1848         pub fn from_integer_value(other: u8) -> Option<Self> {
1849             Some(match other {
1850                 0 => Self::NonJoining,
1851                 1 => Self::JoinCausing,
1852                 2 => Self::DualJoining,
1853                 3 => Self::LeftJoining,
1854                 4 => Self::RightJoining,
1855                 5 => Self::Transparent,
1856                 _ => return None,
1857             })
1858         }
1859     }
1860 
1861     #[diplomat::rust_link(icu::properties::props::GeneralCategory, Struct)]
1862     #[diplomat::enum_convert(icu_properties::props::GeneralCategory)]
1863     pub enum GeneralCategory {
1864         #[diplomat::rust_link(icu::properties::props::GeneralCategory::Unassigned, EnumVariant)]
1865         Unassigned = 0,
1866         #[diplomat::rust_link(
1867             icu::properties::props::GeneralCategory::UppercaseLetter,
1868             EnumVariant
1869         )]
1870         UppercaseLetter = 1,
1871         #[diplomat::rust_link(
1872             icu::properties::props::GeneralCategory::LowercaseLetter,
1873             EnumVariant
1874         )]
1875         LowercaseLetter = 2,
1876         #[diplomat::rust_link(
1877             icu::properties::props::GeneralCategory::TitlecaseLetter,
1878             EnumVariant
1879         )]
1880         TitlecaseLetter = 3,
1881         #[diplomat::rust_link(
1882             icu::properties::props::GeneralCategory::ModifierLetter,
1883             EnumVariant
1884         )]
1885         ModifierLetter = 4,
1886         #[diplomat::rust_link(icu::properties::props::GeneralCategory::OtherLetter, EnumVariant)]
1887         OtherLetter = 5,
1888         #[diplomat::rust_link(
1889             icu::properties::props::GeneralCategory::NonspacingMark,
1890             EnumVariant
1891         )]
1892         NonspacingMark = 6,
1893         #[diplomat::rust_link(icu::properties::props::GeneralCategory::SpacingMark, EnumVariant)]
1894         SpacingMark = 8,
1895         #[diplomat::rust_link(icu::properties::props::GeneralCategory::EnclosingMark, EnumVariant)]
1896         EnclosingMark = 7,
1897         #[diplomat::rust_link(icu::properties::props::GeneralCategory::DecimalNumber, EnumVariant)]
1898         DecimalNumber = 9,
1899         #[diplomat::rust_link(icu::properties::props::GeneralCategory::LetterNumber, EnumVariant)]
1900         LetterNumber = 10,
1901         #[diplomat::rust_link(icu::properties::props::GeneralCategory::OtherNumber, EnumVariant)]
1902         OtherNumber = 11,
1903         #[diplomat::rust_link(
1904             icu::properties::props::GeneralCategory::SpaceSeparator,
1905             EnumVariant
1906         )]
1907         SpaceSeparator = 12,
1908         #[diplomat::rust_link(icu::properties::props::GeneralCategory::LineSeparator, EnumVariant)]
1909         LineSeparator = 13,
1910         #[diplomat::rust_link(
1911             icu::properties::props::GeneralCategory::ParagraphSeparator,
1912             EnumVariant
1913         )]
1914         ParagraphSeparator = 14,
1915         #[diplomat::rust_link(icu::properties::props::GeneralCategory::Control, EnumVariant)]
1916         Control = 15,
1917         #[diplomat::rust_link(icu::properties::props::GeneralCategory::Format, EnumVariant)]
1918         Format = 16,
1919         #[diplomat::rust_link(icu::properties::props::GeneralCategory::PrivateUse, EnumVariant)]
1920         PrivateUse = 17,
1921         #[diplomat::rust_link(icu::properties::props::GeneralCategory::Surrogate, EnumVariant)]
1922         Surrogate = 18,
1923         #[diplomat::rust_link(
1924             icu::properties::props::GeneralCategory::DashPunctuation,
1925             EnumVariant
1926         )]
1927         DashPunctuation = 19,
1928         #[diplomat::rust_link(
1929             icu::properties::props::GeneralCategory::OpenPunctuation,
1930             EnumVariant
1931         )]
1932         OpenPunctuation = 20,
1933         #[diplomat::rust_link(
1934             icu::properties::props::GeneralCategory::ClosePunctuation,
1935             EnumVariant
1936         )]
1937         ClosePunctuation = 21,
1938         #[diplomat::rust_link(
1939             icu::properties::props::GeneralCategory::ConnectorPunctuation,
1940             EnumVariant
1941         )]
1942         ConnectorPunctuation = 22,
1943         #[diplomat::rust_link(
1944             icu::properties::props::GeneralCategory::InitialPunctuation,
1945             EnumVariant
1946         )]
1947         InitialPunctuation = 28,
1948         #[diplomat::rust_link(
1949             icu::properties::props::GeneralCategory::FinalPunctuation,
1950             EnumVariant
1951         )]
1952         FinalPunctuation = 29,
1953         #[diplomat::rust_link(
1954             icu::properties::props::GeneralCategory::OtherPunctuation,
1955             EnumVariant
1956         )]
1957         OtherPunctuation = 23,
1958         #[diplomat::rust_link(icu::properties::props::GeneralCategory::MathSymbol, EnumVariant)]
1959         MathSymbol = 24,
1960         #[diplomat::rust_link(
1961             icu::properties::props::GeneralCategory::CurrencySymbol,
1962             EnumVariant
1963         )]
1964         CurrencySymbol = 25,
1965         #[diplomat::rust_link(
1966             icu::properties::props::GeneralCategory::ModifierSymbol,
1967             EnumVariant
1968         )]
1969         ModifierSymbol = 26,
1970         #[diplomat::rust_link(icu::properties::props::GeneralCategory::OtherSymbol, EnumVariant)]
1971         OtherSymbol = 27,
1972     }
1973 
1974     impl GeneralCategory {
1975         #[diplomat::rust_link(icu::properties::props::EnumeratedProperty::for_char, FnInTrait)]
1976         #[cfg(feature = "compiled_data")]
for_char(ch: DiplomatChar) -> Self1977         pub fn for_char(ch: DiplomatChar) -> Self {
1978             icu_properties::CodePointMapData::<props::GeneralCategory>::new()
1979                 .get32(ch)
1980                 .into()
1981         }
1982         /// Convert to an integer using the ICU4C integer mappings for `General_Category`
1983 
1984         #[diplomat::rust_link(icu::properties::PropertyNamesLongBorrowed::get, FnInStruct)]
1985         #[cfg(feature = "compiled_data")]
1986         /// Get the "long" name of this property value (returns empty if property value is unknown)
long_name(self) -> Option<&'static str>1987         pub fn long_name(self) -> Option<&'static str> {
1988             icu_properties::PropertyNamesLongBorrowed::<props::GeneralCategory>::new()
1989                 .get(self.into())
1990         }
1991 
1992         #[diplomat::rust_link(icu::properties::PropertyNamesShortBorrowed::get, FnInStruct)]
1993         #[cfg(feature = "compiled_data")]
1994         /// Get the "short" name of this property value (returns empty if property value is unknown)
short_name(self) -> Option<&'static str>1995         pub fn short_name(self) -> Option<&'static str> {
1996             icu_properties::PropertyNamesShortBorrowed::<props::GeneralCategory>::new()
1997                 .get(self.into())
1998         }
1999         #[diplomat::rust_link(icu::properties::props::GeneralCategory::to_icu4c_value, FnInStruct)]
2000         /// Convert to an integer value usable with ICU4C and CodePointMapData
to_integer_value(self) -> u82001         pub fn to_integer_value(self) -> u8 {
2002             self as u8
2003         }
2004 
2005         /// Produces a GeneralCategoryGroup mask that can represent a group of general categories
2006         #[diplomat::rust_link(icu::properties::props::GeneralCategoryGroup, Struct)]
to_group(self) -> GeneralCategoryGroup2007         pub fn to_group(self) -> GeneralCategoryGroup {
2008             GeneralCategoryGroup {
2009                 mask: props::GeneralCategoryGroup::from(props::GeneralCategory::from(self)).into(),
2010             }
2011         }
2012 
2013         /// Convert from an integer using the ICU4C integer mappings for `General_Category`
2014         #[diplomat::rust_link(
2015             icu::properties::props::GeneralCategory::from_icu4c_value,
2016             FnInStruct
2017         )]
2018         #[diplomat::rust_link(
2019             icu::properties::props::GeneralCategoryOutOfBoundsError,
2020             Struct,
2021             hidden
2022         )]
2023         /// Convert from an integer value from ICU4C or CodePointMapData
from_integer_value(other: u8) -> Option<Self>2024         pub fn from_integer_value(other: u8) -> Option<Self> {
2025             Some(match other {
2026                 0 => Self::Unassigned,
2027                 1 => Self::UppercaseLetter,
2028                 2 => Self::LowercaseLetter,
2029                 3 => Self::TitlecaseLetter,
2030                 4 => Self::ModifierLetter,
2031                 5 => Self::OtherLetter,
2032                 6 => Self::NonspacingMark,
2033                 8 => Self::SpacingMark,
2034                 7 => Self::EnclosingMark,
2035                 9 => Self::DecimalNumber,
2036                 10 => Self::LetterNumber,
2037                 11 => Self::OtherNumber,
2038                 12 => Self::SpaceSeparator,
2039                 13 => Self::LineSeparator,
2040                 14 => Self::ParagraphSeparator,
2041                 15 => Self::Control,
2042                 16 => Self::Format,
2043                 17 => Self::PrivateUse,
2044                 18 => Self::Surrogate,
2045                 19 => Self::DashPunctuation,
2046                 20 => Self::OpenPunctuation,
2047                 21 => Self::ClosePunctuation,
2048                 22 => Self::ConnectorPunctuation,
2049                 28 => Self::InitialPunctuation,
2050                 29 => Self::FinalPunctuation,
2051                 23 => Self::OtherPunctuation,
2052                 24 => Self::MathSymbol,
2053                 25 => Self::CurrencySymbol,
2054                 26 => Self::ModifierSymbol,
2055                 27 => Self::OtherSymbol,
2056                 _ => return None,
2057             })
2058         }
2059     }
2060 
2061     /// A mask that is capable of representing groups of `General_Category` values.
2062     #[diplomat::rust_link(icu::properties::props::GeneralCategoryGroup, Struct)]
2063     #[derive(Default)]
2064     pub struct GeneralCategoryGroup {
2065         pub mask: u32,
2066     }
2067 
2068     impl GeneralCategoryGroup {
2069         #[inline]
into_props_group(self) -> props::GeneralCategoryGroup2070         pub(crate) fn into_props_group(self) -> props::GeneralCategoryGroup {
2071             self.mask.into()
2072         }
2073 
2074         #[diplomat::rust_link(icu::properties::props::GeneralCategoryGroup::contains, FnInStruct)]
contains(self, val: GeneralCategory) -> bool2075         pub fn contains(self, val: GeneralCategory) -> bool {
2076             self.into_props_group().contains(val.into())
2077         }
2078         #[diplomat::rust_link(icu::properties::props::GeneralCategoryGroup::complement, FnInStruct)]
complement(self) -> Self2079         pub fn complement(self) -> Self {
2080             self.into_props_group().complement().into()
2081         }
2082 
2083         #[diplomat::rust_link(icu::properties::props::GeneralCategoryGroup::all, FnInStruct)]
all() -> Self2084         pub fn all() -> Self {
2085             props::GeneralCategoryGroup::all().into()
2086         }
2087         #[diplomat::rust_link(icu::properties::props::GeneralCategoryGroup::empty, FnInStruct)]
empty() -> Self2088         pub fn empty() -> Self {
2089             props::GeneralCategoryGroup::empty().into()
2090         }
2091         #[diplomat::rust_link(icu::properties::props::GeneralCategoryGroup::union, FnInStruct)]
2092         #[diplomat::attr(any(c, cpp), rename = "union_")]
union(self, other: Self) -> Self2093         pub fn union(self, other: Self) -> Self {
2094             self.into_props_group()
2095                 .union(other.into_props_group())
2096                 .into()
2097         }
2098         #[diplomat::rust_link(
2099             icu::properties::props::GeneralCategoryGroup::intersection,
2100             FnInStruct
2101         )]
intersection(self, other: Self) -> Self2102         pub fn intersection(self, other: Self) -> Self {
2103             self.into_props_group()
2104                 .intersection(other.into_props_group())
2105                 .into()
2106         }
2107 
2108         #[diplomat::rust_link(
2109             icu::properties::props::GeneralCategoryGroup::CasedLetter,
2110             AssociatedConstantInStruct
2111         )]
cased_letter() -> Self2112         pub fn cased_letter() -> Self {
2113             props::GeneralCategoryGroup::CasedLetter.into()
2114         }
2115 
2116         #[diplomat::rust_link(
2117             icu::properties::props::GeneralCategoryGroup::Letter,
2118             AssociatedConstantInStruct
2119         )]
letter() -> Self2120         pub fn letter() -> Self {
2121             props::GeneralCategoryGroup::Letter.into()
2122         }
2123 
2124         #[diplomat::rust_link(
2125             icu::properties::props::GeneralCategoryGroup::Mark,
2126             AssociatedConstantInStruct
2127         )]
mark() -> Self2128         pub fn mark() -> Self {
2129             props::GeneralCategoryGroup::Mark.into()
2130         }
2131         #[diplomat::rust_link(
2132             icu::properties::props::GeneralCategoryGroup::Number,
2133             AssociatedConstantInStruct
2134         )]
number() -> Self2135         pub fn number() -> Self {
2136             props::GeneralCategoryGroup::Number.into()
2137         }
2138         #[diplomat::rust_link(
2139             icu::properties::props::GeneralCategoryGroup::Other,
2140             AssociatedConstantInStruct
2141         )]
separator() -> Self2142         pub fn separator() -> Self {
2143             props::GeneralCategoryGroup::Other.into()
2144         }
2145         #[diplomat::rust_link(
2146             icu::properties::props::GeneralCategoryGroup::Letter,
2147             AssociatedConstantInStruct
2148         )]
other() -> Self2149         pub fn other() -> Self {
2150             props::GeneralCategoryGroup::Letter.into()
2151         }
2152         #[diplomat::rust_link(
2153             icu::properties::props::GeneralCategoryGroup::Punctuation,
2154             AssociatedConstantInStruct
2155         )]
punctuation() -> Self2156         pub fn punctuation() -> Self {
2157             props::GeneralCategoryGroup::Punctuation.into()
2158         }
2159         #[diplomat::rust_link(
2160             icu::properties::props::GeneralCategoryGroup::Symbol,
2161             AssociatedConstantInStruct
2162         )]
symbol() -> Self2163         pub fn symbol() -> Self {
2164             props::GeneralCategoryGroup::Symbol.into()
2165         }
2166     }
2167 }
2168 
2169 impl From<icu_properties::props::GeneralCategoryGroup> for ffi::GeneralCategoryGroup {
2170     #[inline]
from(other: icu_properties::props::GeneralCategoryGroup) -> Self2171     fn from(other: icu_properties::props::GeneralCategoryGroup) -> Self {
2172         Self { mask: other.into() }
2173     }
2174 }
2175 #[cfg(test)]
2176 mod test {
2177     use super::ffi::*;
2178     use icu_properties::props;
2179 
2180     #[test]
test_all_cases_covered()2181     fn test_all_cases_covered() {
2182         for prop in props::BidiClass::ALL_VALUES {
2183             let ffi_prop = BidiClass::from_integer_value(prop.to_icu4c_value())
2184                 .expect("Found BidiClass value not supported in ffi");
2185             assert_eq!(prop.to_icu4c_value(), ffi_prop.to_integer_value());
2186             assert_eq!(*prop, props::BidiClass::from(ffi_prop));
2187         }
2188 
2189         for prop in props::Script::ALL_VALUES {
2190             let ffi_prop = Script::from_integer_value(prop.to_icu4c_value())
2191                 .expect("Found Script value not supported in ffi");
2192             assert_eq!(prop.to_icu4c_value(), ffi_prop.to_integer_value());
2193             assert_eq!(*prop, props::Script::from(ffi_prop));
2194         }
2195 
2196         for prop in props::HangulSyllableType::ALL_VALUES {
2197             let ffi_prop = HangulSyllableType::from_integer_value(prop.to_icu4c_value())
2198                 .expect("Found HangulSyllableType value not supported in ffi");
2199             assert_eq!(prop.to_icu4c_value(), ffi_prop.to_integer_value());
2200             assert_eq!(*prop, props::HangulSyllableType::from(ffi_prop));
2201         }
2202         for prop in props::EastAsianWidth::ALL_VALUES {
2203             let ffi_prop = EastAsianWidth::from_integer_value(prop.to_icu4c_value())
2204                 .expect("Found EastAsianWidth value not supported in ffi");
2205             assert_eq!(prop.to_icu4c_value(), ffi_prop.to_integer_value());
2206             assert_eq!(*prop, props::EastAsianWidth::from(ffi_prop));
2207         }
2208         for prop in props::LineBreak::ALL_VALUES {
2209             let ffi_prop = LineBreak::from_integer_value(prop.to_icu4c_value())
2210                 .expect("Found LineBreak value not supported in ffi");
2211             assert_eq!(prop.to_icu4c_value(), ffi_prop.to_integer_value());
2212             assert_eq!(*prop, props::LineBreak::from(ffi_prop));
2213         }
2214         for prop in props::GraphemeClusterBreak::ALL_VALUES {
2215             let ffi_prop = GraphemeClusterBreak::from_integer_value(prop.to_icu4c_value())
2216                 .expect("Found GraphemeClusterBreak value not supported in ffi");
2217             assert_eq!(prop.to_icu4c_value(), ffi_prop.to_integer_value());
2218             assert_eq!(*prop, props::GraphemeClusterBreak::from(ffi_prop));
2219         }
2220         for prop in props::WordBreak::ALL_VALUES {
2221             let ffi_prop = WordBreak::from_integer_value(prop.to_icu4c_value())
2222                 .expect("Found WordBreak value not supported in ffi");
2223             assert_eq!(prop.to_icu4c_value(), ffi_prop.to_integer_value());
2224             assert_eq!(*prop, props::WordBreak::from(ffi_prop));
2225         }
2226         for prop in props::SentenceBreak::ALL_VALUES {
2227             let ffi_prop = SentenceBreak::from_integer_value(prop.to_icu4c_value())
2228                 .expect("Found SentenceBreak value not supported in ffi");
2229             assert_eq!(prop.to_icu4c_value(), ffi_prop.to_integer_value());
2230             assert_eq!(*prop, props::SentenceBreak::from(ffi_prop));
2231         }
2232         for prop in props::CanonicalCombiningClass::ALL_VALUES {
2233             let ffi_prop = CanonicalCombiningClass::from_integer_value(prop.to_icu4c_value())
2234                 .expect("Found CanonicalCombiningClass value not supported in ffi");
2235             assert_eq!(prop.to_icu4c_value(), ffi_prop.to_integer_value());
2236             assert_eq!(*prop, props::CanonicalCombiningClass::from(ffi_prop));
2237         }
2238         for prop in props::IndicSyllabicCategory::ALL_VALUES {
2239             let ffi_prop = IndicSyllabicCategory::from_integer_value(prop.to_icu4c_value())
2240                 .expect("Found IndicSyllabicCategory value not supported in ffi");
2241             assert_eq!(prop.to_icu4c_value(), ffi_prop.to_integer_value());
2242             assert_eq!(*prop, props::IndicSyllabicCategory::from(ffi_prop));
2243         }
2244         for prop in props::JoiningType::ALL_VALUES {
2245             let ffi_prop = JoiningType::from_integer_value(prop.to_icu4c_value())
2246                 .expect("Found JoiningType value not supported in ffi");
2247             assert_eq!(prop.to_icu4c_value(), ffi_prop.to_integer_value());
2248             assert_eq!(*prop, props::JoiningType::from(ffi_prop));
2249         }
2250         for prop in props::GeneralCategory::ALL_VALUES {
2251             let ffi_prop = GeneralCategory::from_integer_value(*prop as u8)
2252                 .expect("Found GeneralCategory value not supported in ffi");
2253             assert_eq!(*prop as u8, ffi_prop.to_integer_value());
2254             assert_eq!(*prop, props::GeneralCategory::from(ffi_prop));
2255         }
2256     }
2257 }
2258