tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

properties_enums.rs (104345B)


      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")]
     80        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)
     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)
    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
    119        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
    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")]
    492        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)
    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)
    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
    518        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
    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")]
    730        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
    740        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
    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")]
    781        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)
    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)
    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
    804        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
    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")]
    926        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)
    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)
    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
    947        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
    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")]
   1051        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
   1061        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
   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")]
   1148        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)
   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)
   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
   1169        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
   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")]
   1242        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)
   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)
   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
   1265        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
   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")]
   1488        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
   1498        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
   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")]
   1740        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
   1750        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
   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")]
   1822        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)
   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)
   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
   1843        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
   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, Enum)]
   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")]
   1977        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)
   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)
   1995        pub fn short_name(self) -> Option<&'static str> {
   1996            icu_properties::PropertyNamesShortBorrowed::<props::GeneralCategory>::new()
   1997                .get(self.into())
   1998        }
   1999        /// Convert to an integer value usable with ICU4C and CodePointMapData
   2000        pub fn to_integer_value(self) -> u8 {
   2001            self as u8
   2002        }
   2003 
   2004        /// Produces a GeneralCategoryGroup mask that can represent a group of general categories
   2005        #[diplomat::rust_link(icu::properties::props::GeneralCategoryGroup, Struct)]
   2006        pub fn to_group(self) -> GeneralCategoryGroup {
   2007            GeneralCategoryGroup {
   2008                mask: props::GeneralCategoryGroup::from(props::GeneralCategory::from(self)).into(),
   2009            }
   2010        }
   2011 
   2012        /// Convert from an integer using the ICU4C integer mappings for `General_Category`
   2013        #[diplomat::rust_link(
   2014            icu::properties::props::GeneralCategoryOutOfBoundsError,
   2015            Struct,
   2016            hidden
   2017        )]
   2018        /// Convert from an integer value from ICU4C or CodePointMapData
   2019        pub fn from_integer_value(other: u8) -> Option<Self> {
   2020            Some(match other {
   2021                0 => Self::Unassigned,
   2022                1 => Self::UppercaseLetter,
   2023                2 => Self::LowercaseLetter,
   2024                3 => Self::TitlecaseLetter,
   2025                4 => Self::ModifierLetter,
   2026                5 => Self::OtherLetter,
   2027                6 => Self::NonspacingMark,
   2028                8 => Self::SpacingMark,
   2029                7 => Self::EnclosingMark,
   2030                9 => Self::DecimalNumber,
   2031                10 => Self::LetterNumber,
   2032                11 => Self::OtherNumber,
   2033                12 => Self::SpaceSeparator,
   2034                13 => Self::LineSeparator,
   2035                14 => Self::ParagraphSeparator,
   2036                15 => Self::Control,
   2037                16 => Self::Format,
   2038                17 => Self::PrivateUse,
   2039                18 => Self::Surrogate,
   2040                19 => Self::DashPunctuation,
   2041                20 => Self::OpenPunctuation,
   2042                21 => Self::ClosePunctuation,
   2043                22 => Self::ConnectorPunctuation,
   2044                28 => Self::InitialPunctuation,
   2045                29 => Self::FinalPunctuation,
   2046                23 => Self::OtherPunctuation,
   2047                24 => Self::MathSymbol,
   2048                25 => Self::CurrencySymbol,
   2049                26 => Self::ModifierSymbol,
   2050                27 => Self::OtherSymbol,
   2051                _ => return None,
   2052            })
   2053        }
   2054    }
   2055 
   2056    /// A mask that is capable of representing groups of `General_Category` values.
   2057    #[diplomat::rust_link(icu::properties::props::GeneralCategoryGroup, Struct)]
   2058    #[derive(Default)]
   2059    pub struct GeneralCategoryGroup {
   2060        pub mask: u32,
   2061    }
   2062 
   2063    impl GeneralCategoryGroup {
   2064        #[inline]
   2065        pub(crate) fn into_props_group(self) -> props::GeneralCategoryGroup {
   2066            self.mask.into()
   2067        }
   2068 
   2069        #[diplomat::rust_link(icu::properties::props::GeneralCategoryGroup::contains, FnInStruct)]
   2070        pub fn contains(self, val: GeneralCategory) -> bool {
   2071            self.into_props_group().contains(val.into())
   2072        }
   2073        #[diplomat::rust_link(icu::properties::props::GeneralCategoryGroup::complement, FnInStruct)]
   2074        pub fn complement(self) -> Self {
   2075            self.into_props_group().complement().into()
   2076        }
   2077 
   2078        #[diplomat::rust_link(icu::properties::props::GeneralCategoryGroup::all, FnInStruct)]
   2079        pub fn all() -> Self {
   2080            props::GeneralCategoryGroup::all().into()
   2081        }
   2082        #[diplomat::rust_link(icu::properties::props::GeneralCategoryGroup::empty, FnInStruct)]
   2083        pub fn empty() -> Self {
   2084            props::GeneralCategoryGroup::empty().into()
   2085        }
   2086        #[diplomat::rust_link(icu::properties::props::GeneralCategoryGroup::union, FnInStruct)]
   2087        #[diplomat::attr(any(c, cpp), rename = "union_")]
   2088        pub fn union(self, other: Self) -> Self {
   2089            self.into_props_group()
   2090                .union(other.into_props_group())
   2091                .into()
   2092        }
   2093        #[diplomat::rust_link(
   2094            icu::properties::props::GeneralCategoryGroup::intersection,
   2095            FnInStruct
   2096        )]
   2097        pub fn intersection(self, other: Self) -> Self {
   2098            self.into_props_group()
   2099                .intersection(other.into_props_group())
   2100                .into()
   2101        }
   2102 
   2103        #[diplomat::rust_link(
   2104            icu::properties::props::GeneralCategoryGroup::CasedLetter,
   2105            AssociatedConstantInStruct
   2106        )]
   2107        pub fn cased_letter() -> Self {
   2108            props::GeneralCategoryGroup::CasedLetter.into()
   2109        }
   2110 
   2111        #[diplomat::rust_link(
   2112            icu::properties::props::GeneralCategoryGroup::Letter,
   2113            AssociatedConstantInStruct
   2114        )]
   2115        pub fn letter() -> Self {
   2116            props::GeneralCategoryGroup::Letter.into()
   2117        }
   2118 
   2119        #[diplomat::rust_link(
   2120            icu::properties::props::GeneralCategoryGroup::Mark,
   2121            AssociatedConstantInStruct
   2122        )]
   2123        pub fn mark() -> Self {
   2124            props::GeneralCategoryGroup::Mark.into()
   2125        }
   2126        #[diplomat::rust_link(
   2127            icu::properties::props::GeneralCategoryGroup::Number,
   2128            AssociatedConstantInStruct
   2129        )]
   2130        pub fn number() -> Self {
   2131            props::GeneralCategoryGroup::Number.into()
   2132        }
   2133        #[diplomat::rust_link(
   2134            icu::properties::props::GeneralCategoryGroup::Other,
   2135            AssociatedConstantInStruct
   2136        )]
   2137        pub fn separator() -> Self {
   2138            props::GeneralCategoryGroup::Other.into()
   2139        }
   2140        #[diplomat::rust_link(
   2141            icu::properties::props::GeneralCategoryGroup::Letter,
   2142            AssociatedConstantInStruct
   2143        )]
   2144        pub fn other() -> Self {
   2145            props::GeneralCategoryGroup::Letter.into()
   2146        }
   2147        #[diplomat::rust_link(
   2148            icu::properties::props::GeneralCategoryGroup::Punctuation,
   2149            AssociatedConstantInStruct
   2150        )]
   2151        pub fn punctuation() -> Self {
   2152            props::GeneralCategoryGroup::Punctuation.into()
   2153        }
   2154        #[diplomat::rust_link(
   2155            icu::properties::props::GeneralCategoryGroup::Symbol,
   2156            AssociatedConstantInStruct
   2157        )]
   2158        pub fn symbol() -> Self {
   2159            props::GeneralCategoryGroup::Symbol.into()
   2160        }
   2161    }
   2162 
   2163    #[diplomat::rust_link(icu::properties::props::VerticalOrientation, Struct)]
   2164    #[diplomat::enum_convert(icu_properties::props::VerticalOrientation, needs_wildcard)]
   2165    pub enum VerticalOrientation {
   2166        #[diplomat::rust_link(icu::properties::props::VerticalOrientaiton::Rotated, EnumVariant)]
   2167        Rotated = 0,
   2168        #[diplomat::rust_link(
   2169            icu::properties::props::VerticalOrientaiton::TransformedRotated,
   2170            EnumVariant
   2171        )]
   2172        TransformedRotated = 1,
   2173        #[diplomat::rust_link(
   2174            icu::properties::props::VerticalOrientaiton::TransformedUpright,
   2175            EnumVariant
   2176        )]
   2177        TransformedUpright = 2,
   2178        #[diplomat::rust_link(icu::properties::props::VerticalOrientaiton::Upright, EnumVariant)]
   2179        Upright = 3,
   2180    }
   2181 
   2182    impl VerticalOrientation {
   2183        #[diplomat::rust_link(icu::properties::props::EnumeratedProperty::for_char, FnInTrait)]
   2184        #[cfg(feature = "compiled_data")]
   2185        pub fn for_char(ch: DiplomatChar) -> Self {
   2186            icu_properties::CodePointMapData::<props::VerticalOrientation>::new()
   2187                .get32(ch)
   2188                .into()
   2189        }
   2190        #[diplomat::rust_link(icu::properties::PropertyNamesLongBorrowed::get, FnInStruct)]
   2191        #[cfg(feature = "compiled_data")]
   2192        /// Get the "long" name of this property value (returns empty if property value is unknown)
   2193        pub fn long_name(self) -> Option<&'static str> {
   2194            icu_properties::PropertyNamesLongBorrowed::<props::VerticalOrientation>::new()
   2195                .get(self.into())
   2196        }
   2197        #[diplomat::rust_link(icu::properties::PropertyNamesShortBorrowed::get, FnInStruct)]
   2198        #[cfg(feature = "compiled_data")]
   2199        /// Get the "short" name of this property value (returns empty if property value is unknown)
   2200        pub fn short_name(self) -> Option<&'static str> {
   2201            icu_properties::PropertyNamesShortBorrowed::<props::VerticalOrientation>::new()
   2202                .get(self.into())
   2203        }
   2204        #[diplomat::rust_link(
   2205            icu::properties::props::VerticalOrientation::to_icu4c_value,
   2206            FnInStruct
   2207        )]
   2208        /// Convert to an integer value usable with ICU4C and CodePointMapData
   2209        pub fn to_integer_value(self) -> u8 {
   2210            self as u8
   2211        }
   2212        #[diplomat::rust_link(
   2213            icu::properties::props::VerticalOrientation::from_icu4c_value,
   2214            FnInStruct
   2215        )]
   2216        /// Convert from an integer value from ICU4C or CodePointMapData
   2217        pub fn from_integer_value(other: u8) -> Option<Self> {
   2218            Some(match other {
   2219                0 => Self::Rotated,
   2220                1 => Self::TransformedRotated,
   2221                2 => Self::TransformedUpright,
   2222                3 => Self::Upright,
   2223                _ => return None,
   2224            })
   2225        }
   2226    }
   2227 }
   2228 
   2229 impl From<icu_properties::props::GeneralCategoryGroup> for ffi::GeneralCategoryGroup {
   2230    #[inline]
   2231    fn from(other: icu_properties::props::GeneralCategoryGroup) -> Self {
   2232        Self { mask: other.into() }
   2233    }
   2234 }
   2235 #[cfg(test)]
   2236 mod test {
   2237    use super::ffi::*;
   2238    use icu_properties::props;
   2239 
   2240    #[test]
   2241    fn test_all_cases_covered() {
   2242        for prop in props::BidiClass::ALL_VALUES {
   2243            let ffi_prop = BidiClass::from_integer_value(prop.to_icu4c_value())
   2244                .expect("Found BidiClass value not supported in ffi");
   2245            assert_eq!(prop.to_icu4c_value(), ffi_prop.to_integer_value());
   2246            assert_eq!(*prop, props::BidiClass::from(ffi_prop));
   2247        }
   2248 
   2249        for prop in props::Script::ALL_VALUES {
   2250            let ffi_prop = Script::from_integer_value(prop.to_icu4c_value())
   2251                .expect("Found Script value not supported in ffi");
   2252            assert_eq!(prop.to_icu4c_value(), ffi_prop.to_integer_value());
   2253            assert_eq!(*prop, props::Script::from(ffi_prop));
   2254        }
   2255 
   2256        for prop in props::HangulSyllableType::ALL_VALUES {
   2257            let ffi_prop = HangulSyllableType::from_integer_value(prop.to_icu4c_value())
   2258                .expect("Found HangulSyllableType value not supported in ffi");
   2259            assert_eq!(prop.to_icu4c_value(), ffi_prop.to_integer_value());
   2260            assert_eq!(*prop, props::HangulSyllableType::from(ffi_prop));
   2261        }
   2262        for prop in props::EastAsianWidth::ALL_VALUES {
   2263            let ffi_prop = EastAsianWidth::from_integer_value(prop.to_icu4c_value())
   2264                .expect("Found EastAsianWidth value not supported in ffi");
   2265            assert_eq!(prop.to_icu4c_value(), ffi_prop.to_integer_value());
   2266            assert_eq!(*prop, props::EastAsianWidth::from(ffi_prop));
   2267        }
   2268        for prop in props::LineBreak::ALL_VALUES {
   2269            let ffi_prop = LineBreak::from_integer_value(prop.to_icu4c_value())
   2270                .expect("Found LineBreak value not supported in ffi");
   2271            assert_eq!(prop.to_icu4c_value(), ffi_prop.to_integer_value());
   2272            assert_eq!(*prop, props::LineBreak::from(ffi_prop));
   2273        }
   2274        for prop in props::GraphemeClusterBreak::ALL_VALUES {
   2275            let ffi_prop = GraphemeClusterBreak::from_integer_value(prop.to_icu4c_value())
   2276                .expect("Found GraphemeClusterBreak value not supported in ffi");
   2277            assert_eq!(prop.to_icu4c_value(), ffi_prop.to_integer_value());
   2278            assert_eq!(*prop, props::GraphemeClusterBreak::from(ffi_prop));
   2279        }
   2280        for prop in props::WordBreak::ALL_VALUES {
   2281            let ffi_prop = WordBreak::from_integer_value(prop.to_icu4c_value())
   2282                .expect("Found WordBreak value not supported in ffi");
   2283            assert_eq!(prop.to_icu4c_value(), ffi_prop.to_integer_value());
   2284            assert_eq!(*prop, props::WordBreak::from(ffi_prop));
   2285        }
   2286        for prop in props::SentenceBreak::ALL_VALUES {
   2287            let ffi_prop = SentenceBreak::from_integer_value(prop.to_icu4c_value())
   2288                .expect("Found SentenceBreak value not supported in ffi");
   2289            assert_eq!(prop.to_icu4c_value(), ffi_prop.to_integer_value());
   2290            assert_eq!(*prop, props::SentenceBreak::from(ffi_prop));
   2291        }
   2292        for prop in props::CanonicalCombiningClass::ALL_VALUES {
   2293            let ffi_prop = CanonicalCombiningClass::from_integer_value(prop.to_icu4c_value())
   2294                .expect("Found CanonicalCombiningClass value not supported in ffi");
   2295            assert_eq!(prop.to_icu4c_value(), ffi_prop.to_integer_value());
   2296            assert_eq!(*prop, props::CanonicalCombiningClass::from(ffi_prop));
   2297        }
   2298        for prop in props::IndicSyllabicCategory::ALL_VALUES {
   2299            let ffi_prop = IndicSyllabicCategory::from_integer_value(prop.to_icu4c_value())
   2300                .expect("Found IndicSyllabicCategory value not supported in ffi");
   2301            assert_eq!(prop.to_icu4c_value(), ffi_prop.to_integer_value());
   2302            assert_eq!(*prop, props::IndicSyllabicCategory::from(ffi_prop));
   2303        }
   2304        for prop in props::JoiningType::ALL_VALUES {
   2305            let ffi_prop = JoiningType::from_integer_value(prop.to_icu4c_value())
   2306                .expect("Found JoiningType value not supported in ffi");
   2307            assert_eq!(prop.to_icu4c_value(), ffi_prop.to_integer_value());
   2308            assert_eq!(*prop, props::JoiningType::from(ffi_prop));
   2309        }
   2310        for prop in props::GeneralCategory::ALL_VALUES {
   2311            let ffi_prop = GeneralCategory::from_integer_value(*prop as u8)
   2312                .expect("Found GeneralCategory value not supported in ffi");
   2313            assert_eq!(*prop as u8, ffi_prop.to_integer_value());
   2314            assert_eq!(*prop, props::GeneralCategory::from(ffi_prop));
   2315        }
   2316    }
   2317 }