// This file is part of ICU4X. For terms of use, please see the file
// called LICENSE at the top level of the ICU4X source tree
// (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).

// @generated by tools/make/codegen/src/properties.rs

#![allow(missing_docs)] // only documented if long and short name differ
#![allow(non_upper_case_globals)] // use camel casing to look like enum variants

use crate::props::*;

impl BidiClass {
    pub const LeftToRight: Self = Self(0);
    pub const L: Self = Self::LeftToRight;
    pub const RightToLeft: Self = Self(1);
    pub const R: Self = Self::RightToLeft;
    pub const EuropeanNumber: Self = Self(2);
    pub const EN: Self = Self::EuropeanNumber;
    pub const EuropeanSeparator: Self = Self(3);
    pub const ES: Self = Self::EuropeanSeparator;
    pub const EuropeanTerminator: Self = Self(4);
    pub const ET: Self = Self::EuropeanTerminator;
    pub const ArabicNumber: Self = Self(5);
    pub const AN: Self = Self::ArabicNumber;
    pub const CommonSeparator: Self = Self(6);
    pub const CS: Self = Self::CommonSeparator;
    pub const ParagraphSeparator: Self = Self(7);
    pub const B: Self = Self::ParagraphSeparator;
    pub const SegmentSeparator: Self = Self(8);
    pub const S: Self = Self::SegmentSeparator;
    pub const WhiteSpace: Self = Self(9);
    pub const WS: Self = Self::WhiteSpace;
    pub const OtherNeutral: Self = Self(10);
    pub const ON: Self = Self::OtherNeutral;
    pub const LeftToRightEmbedding: Self = Self(11);
    pub const LRE: Self = Self::LeftToRightEmbedding;
    pub const LeftToRightOverride: Self = Self(12);
    pub const LRO: Self = Self::LeftToRightOverride;
    pub const ArabicLetter: Self = Self(13);
    pub const AL: Self = Self::ArabicLetter;
    pub const RightToLeftEmbedding: Self = Self(14);
    pub const RLE: Self = Self::RightToLeftEmbedding;
    pub const RightToLeftOverride: Self = Self(15);
    pub const RLO: Self = Self::RightToLeftOverride;
    pub const PopDirectionalFormat: Self = Self(16);
    pub const PDF: Self = Self::PopDirectionalFormat;
    pub const NonspacingMark: Self = Self(17);
    pub const NSM: Self = Self::NonspacingMark;
    pub const BoundaryNeutral: Self = Self(18);
    pub const BN: Self = Self::BoundaryNeutral;
    pub const FirstStrongIsolate: Self = Self(19);
    pub const FSI: Self = Self::FirstStrongIsolate;
    pub const LeftToRightIsolate: Self = Self(20);
    pub const LRI: Self = Self::LeftToRightIsolate;
    pub const RightToLeftIsolate: Self = Self(21);
    pub const RLI: Self = Self::RightToLeftIsolate;
    pub const PopDirectionalIsolate: Self = Self(22);
    pub const PDI: Self = Self::PopDirectionalIsolate;
}

#[cfg(feature = "datagen")]
impl databake::Bake for BidiClass {
    fn bake(&self, env: &databake::CrateEnv) -> databake::TokenStream {
        env.insert("icu_properties");
        match *self {
            Self::LeftToRight => databake::quote!(icu_properties::props::BidiClass::LeftToRight),
            Self::RightToLeft => databake::quote!(icu_properties::props::BidiClass::RightToLeft),
            Self::EuropeanNumber => databake::quote!(icu_properties::props::BidiClass::EuropeanNumber),
            Self::EuropeanSeparator => databake::quote!(icu_properties::props::BidiClass::EuropeanSeparator),
            Self::EuropeanTerminator => databake::quote!(icu_properties::props::BidiClass::EuropeanTerminator),
            Self::ArabicNumber => databake::quote!(icu_properties::props::BidiClass::ArabicNumber),
            Self::CommonSeparator => databake::quote!(icu_properties::props::BidiClass::CommonSeparator),
            Self::ParagraphSeparator => databake::quote!(icu_properties::props::BidiClass::ParagraphSeparator),
            Self::SegmentSeparator => databake::quote!(icu_properties::props::BidiClass::SegmentSeparator),
            Self::WhiteSpace => databake::quote!(icu_properties::props::BidiClass::WhiteSpace),
            Self::OtherNeutral => databake::quote!(icu_properties::props::BidiClass::OtherNeutral),
            Self::LeftToRightEmbedding => databake::quote!(icu_properties::props::BidiClass::LeftToRightEmbedding),
            Self::LeftToRightOverride => databake::quote!(icu_properties::props::BidiClass::LeftToRightOverride),
            Self::ArabicLetter => databake::quote!(icu_properties::props::BidiClass::ArabicLetter),
            Self::RightToLeftEmbedding => databake::quote!(icu_properties::props::BidiClass::RightToLeftEmbedding),
            Self::RightToLeftOverride => databake::quote!(icu_properties::props::BidiClass::RightToLeftOverride),
            Self::PopDirectionalFormat => databake::quote!(icu_properties::props::BidiClass::PopDirectionalFormat),
            Self::NonspacingMark => databake::quote!(icu_properties::props::BidiClass::NonspacingMark),
            Self::BoundaryNeutral => databake::quote!(icu_properties::props::BidiClass::BoundaryNeutral),
            Self::FirstStrongIsolate => databake::quote!(icu_properties::props::BidiClass::FirstStrongIsolate),
            Self::LeftToRightIsolate => databake::quote!(icu_properties::props::BidiClass::LeftToRightIsolate),
            Self::RightToLeftIsolate => databake::quote!(icu_properties::props::BidiClass::RightToLeftIsolate),
            Self::PopDirectionalIsolate => databake::quote!(icu_properties::props::BidiClass::PopDirectionalIsolate),
            Self(v) => databake::quote!(icu_properties::props::BidiClass(#v)),
        }
    }
}


impl From<BidiClass> for u16  {
    fn from(other: BidiClass) -> Self {
        other.0 as u16
    }
}

impl BidiClass {
    /// Deprecated
    #[deprecated]
    pub const ALL_VALUES: &'static [Self] = &[
        Self::LeftToRight,
        Self::RightToLeft,
        Self::EuropeanNumber,
        Self::EuropeanSeparator,
        Self::EuropeanTerminator,
        Self::ArabicNumber,
        Self::CommonSeparator,
        Self::ParagraphSeparator,
        Self::SegmentSeparator,
        Self::WhiteSpace,
        Self::OtherNeutral,
        Self::LeftToRightEmbedding,
        Self::LeftToRightOverride,
        Self::ArabicLetter,
        Self::RightToLeftEmbedding,
        Self::RightToLeftOverride,
        Self::PopDirectionalFormat,
        Self::NonspacingMark,
        Self::BoundaryNeutral,
        Self::FirstStrongIsolate,
        Self::LeftToRightIsolate,
        Self::RightToLeftIsolate,
        Self::PopDirectionalIsolate,
    ];

    #[cfg(feature = "datagen")]
    #[doc(hidden)]
    pub fn names() -> impl Iterator<Item = (&'static str, Self)> {
        [
            ("L", Self::LeftToRight),
            ("R", Self::RightToLeft),
            ("EN", Self::EuropeanNumber),
            ("ES", Self::EuropeanSeparator),
            ("ET", Self::EuropeanTerminator),
            ("AN", Self::ArabicNumber),
            ("CS", Self::CommonSeparator),
            ("B", Self::ParagraphSeparator),
            ("S", Self::SegmentSeparator),
            ("WS", Self::WhiteSpace),
            ("ON", Self::OtherNeutral),
            ("LRE", Self::LeftToRightEmbedding),
            ("LRO", Self::LeftToRightOverride),
            ("AL", Self::ArabicLetter),
            ("RLE", Self::RightToLeftEmbedding),
            ("RLO", Self::RightToLeftOverride),
            ("PDF", Self::PopDirectionalFormat),
            ("NSM", Self::NonspacingMark),
            ("BN", Self::BoundaryNeutral),
            ("FSI", Self::FirstStrongIsolate),
            ("LRI", Self::LeftToRightIsolate),
            ("RLI", Self::RightToLeftIsolate),
            ("PDI", Self::PopDirectionalIsolate),
        ].into_iter()
    }
}

impl CanonicalCombiningClass {
    pub const NotReordered: Self = Self(0);
    pub const NR: Self = Self::NotReordered;
    pub const Overlay: Self = Self(1);
    pub const OV: Self = Self::Overlay;
    pub const HanReading: Self = Self(6);
    pub const HANR: Self = Self::HanReading;
    pub const Nukta: Self = Self(7);
    pub const NK: Self = Self::Nukta;
    pub const KanaVoicing: Self = Self(8);
    pub const KV: Self = Self::KanaVoicing;
    pub const Virama: Self = Self(9);
    pub const VR: Self = Self::Virama;
    pub const CCC10: Self = Self(10);
    pub const CCC11: Self = Self(11);
    pub const CCC12: Self = Self(12);
    pub const CCC13: Self = Self(13);
    pub const CCC14: Self = Self(14);
    pub const CCC15: Self = Self(15);
    pub const CCC16: Self = Self(16);
    pub const CCC17: Self = Self(17);
    pub const CCC18: Self = Self(18);
    pub const CCC19: Self = Self(19);
    pub const CCC20: Self = Self(20);
    pub const CCC21: Self = Self(21);
    pub const CCC22: Self = Self(22);
    pub const CCC23: Self = Self(23);
    pub const CCC24: Self = Self(24);
    pub const CCC25: Self = Self(25);
    pub const CCC26: Self = Self(26);
    pub const CCC27: Self = Self(27);
    pub const CCC28: Self = Self(28);
    pub const CCC29: Self = Self(29);
    pub const CCC30: Self = Self(30);
    pub const CCC31: Self = Self(31);
    pub const CCC32: Self = Self(32);
    pub const CCC33: Self = Self(33);
    pub const CCC34: Self = Self(34);
    pub const CCC35: Self = Self(35);
    pub const CCC36: Self = Self(36);
    pub const CCC84: Self = Self(84);
    pub const CCC91: Self = Self(91);
    pub const CCC103: Self = Self(103);
    pub const CCC107: Self = Self(107);
    pub const CCC118: Self = Self(118);
    pub const CCC122: Self = Self(122);
    pub const CCC129: Self = Self(129);
    pub const CCC130: Self = Self(130);
    pub const CCC132: Self = Self(132);
    pub const CCC133: Self = Self(133);
    pub const AttachedBelowLeft: Self = Self(200);
    pub const ATBL: Self = Self::AttachedBelowLeft;
    pub const AttachedBelow: Self = Self(202);
    pub const ATB: Self = Self::AttachedBelow;
    pub const AttachedAbove: Self = Self(214);
    pub const ATA: Self = Self::AttachedAbove;
    pub const AttachedAboveRight: Self = Self(216);
    pub const ATAR: Self = Self::AttachedAboveRight;
    pub const BelowLeft: Self = Self(218);
    pub const BL: Self = Self::BelowLeft;
    pub const Below: Self = Self(220);
    pub const B: Self = Self::Below;
    pub const BelowRight: Self = Self(222);
    pub const BR: Self = Self::BelowRight;
    pub const Left: Self = Self(224);
    pub const L: Self = Self::Left;
    pub const Right: Self = Self(226);
    pub const R: Self = Self::Right;
    pub const AboveLeft: Self = Self(228);
    pub const AL: Self = Self::AboveLeft;
    pub const Above: Self = Self(230);
    pub const A: Self = Self::Above;
    pub const AboveRight: Self = Self(232);
    pub const AR: Self = Self::AboveRight;
    pub const DoubleBelow: Self = Self(233);
    pub const DB: Self = Self::DoubleBelow;
    pub const DoubleAbove: Self = Self(234);
    pub const DA: Self = Self::DoubleAbove;
    pub const IotaSubscript: Self = Self(240);
    pub const IS: Self = Self::IotaSubscript;
}

#[cfg(feature = "datagen")]
impl databake::Bake for CanonicalCombiningClass {
    fn bake(&self, env: &databake::CrateEnv) -> databake::TokenStream {
        env.insert("icu_properties");
        match *self {
            Self::NotReordered => databake::quote!(icu_properties::props::CanonicalCombiningClass::NotReordered),
            Self::Overlay => databake::quote!(icu_properties::props::CanonicalCombiningClass::Overlay),
            Self::HanReading => databake::quote!(icu_properties::props::CanonicalCombiningClass::HanReading),
            Self::Nukta => databake::quote!(icu_properties::props::CanonicalCombiningClass::Nukta),
            Self::KanaVoicing => databake::quote!(icu_properties::props::CanonicalCombiningClass::KanaVoicing),
            Self::Virama => databake::quote!(icu_properties::props::CanonicalCombiningClass::Virama),
            Self::CCC10 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC10),
            Self::CCC11 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC11),
            Self::CCC12 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC12),
            Self::CCC13 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC13),
            Self::CCC14 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC14),
            Self::CCC15 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC15),
            Self::CCC16 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC16),
            Self::CCC17 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC17),
            Self::CCC18 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC18),
            Self::CCC19 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC19),
            Self::CCC20 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC20),
            Self::CCC21 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC21),
            Self::CCC22 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC22),
            Self::CCC23 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC23),
            Self::CCC24 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC24),
            Self::CCC25 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC25),
            Self::CCC26 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC26),
            Self::CCC27 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC27),
            Self::CCC28 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC28),
            Self::CCC29 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC29),
            Self::CCC30 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC30),
            Self::CCC31 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC31),
            Self::CCC32 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC32),
            Self::CCC33 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC33),
            Self::CCC34 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC34),
            Self::CCC35 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC35),
            Self::CCC36 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC36),
            Self::CCC84 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC84),
            Self::CCC91 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC91),
            Self::CCC103 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC103),
            Self::CCC107 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC107),
            Self::CCC118 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC118),
            Self::CCC122 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC122),
            Self::CCC129 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC129),
            Self::CCC130 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC130),
            Self::CCC132 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC132),
            Self::CCC133 => databake::quote!(icu_properties::props::CanonicalCombiningClass::CCC133),
            Self::AttachedBelowLeft => databake::quote!(icu_properties::props::CanonicalCombiningClass::AttachedBelowLeft),
            Self::AttachedBelow => databake::quote!(icu_properties::props::CanonicalCombiningClass::AttachedBelow),
            Self::AttachedAbove => databake::quote!(icu_properties::props::CanonicalCombiningClass::AttachedAbove),
            Self::AttachedAboveRight => databake::quote!(icu_properties::props::CanonicalCombiningClass::AttachedAboveRight),
            Self::BelowLeft => databake::quote!(icu_properties::props::CanonicalCombiningClass::BelowLeft),
            Self::Below => databake::quote!(icu_properties::props::CanonicalCombiningClass::Below),
            Self::BelowRight => databake::quote!(icu_properties::props::CanonicalCombiningClass::BelowRight),
            Self::Left => databake::quote!(icu_properties::props::CanonicalCombiningClass::Left),
            Self::Right => databake::quote!(icu_properties::props::CanonicalCombiningClass::Right),
            Self::AboveLeft => databake::quote!(icu_properties::props::CanonicalCombiningClass::AboveLeft),
            Self::Above => databake::quote!(icu_properties::props::CanonicalCombiningClass::Above),
            Self::AboveRight => databake::quote!(icu_properties::props::CanonicalCombiningClass::AboveRight),
            Self::DoubleBelow => databake::quote!(icu_properties::props::CanonicalCombiningClass::DoubleBelow),
            Self::DoubleAbove => databake::quote!(icu_properties::props::CanonicalCombiningClass::DoubleAbove),
            Self::IotaSubscript => databake::quote!(icu_properties::props::CanonicalCombiningClass::IotaSubscript),
            Self(v) => databake::quote!(icu_properties::props::CanonicalCombiningClass(#v)),
        }
    }
}


impl From<CanonicalCombiningClass> for u16  {
    fn from(other: CanonicalCombiningClass) -> Self {
        other.0 as u16
    }
}

impl CanonicalCombiningClass {
    /// Deprecated
    #[deprecated]
    pub const ALL_VALUES: &'static [Self] = &[
        Self::NotReordered,
        Self::Overlay,
        Self::HanReading,
        Self::Nukta,
        Self::KanaVoicing,
        Self::Virama,
        Self::CCC10,
        Self::CCC11,
        Self::CCC12,
        Self::CCC13,
        Self::CCC14,
        Self::CCC15,
        Self::CCC16,
        Self::CCC17,
        Self::CCC18,
        Self::CCC19,
        Self::CCC20,
        Self::CCC21,
        Self::CCC22,
        Self::CCC23,
        Self::CCC24,
        Self::CCC25,
        Self::CCC26,
        Self::CCC27,
        Self::CCC28,
        Self::CCC29,
        Self::CCC30,
        Self::CCC31,
        Self::CCC32,
        Self::CCC33,
        Self::CCC34,
        Self::CCC35,
        Self::CCC36,
        Self::CCC84,
        Self::CCC91,
        Self::CCC103,
        Self::CCC107,
        Self::CCC118,
        Self::CCC122,
        Self::CCC129,
        Self::CCC130,
        Self::CCC132,
        Self::CCC133,
        Self::AttachedBelowLeft,
        Self::AttachedBelow,
        Self::AttachedAbove,
        Self::AttachedAboveRight,
        Self::BelowLeft,
        Self::Below,
        Self::BelowRight,
        Self::Left,
        Self::Right,
        Self::AboveLeft,
        Self::Above,
        Self::AboveRight,
        Self::DoubleBelow,
        Self::DoubleAbove,
        Self::IotaSubscript,
    ];

    #[cfg(feature = "datagen")]
    #[doc(hidden)]
    pub fn names() -> impl Iterator<Item = (&'static str, Self)> {
        [
            ("NR", Self::NotReordered),
            ("OV", Self::Overlay),
            ("HANR", Self::HanReading),
            ("NK", Self::Nukta),
            ("KV", Self::KanaVoicing),
            ("VR", Self::Virama),
            ("CCC10", Self::CCC10),
            ("CCC11", Self::CCC11),
            ("CCC12", Self::CCC12),
            ("CCC13", Self::CCC13),
            ("CCC14", Self::CCC14),
            ("CCC15", Self::CCC15),
            ("CCC16", Self::CCC16),
            ("CCC17", Self::CCC17),
            ("CCC18", Self::CCC18),
            ("CCC19", Self::CCC19),
            ("CCC20", Self::CCC20),
            ("CCC21", Self::CCC21),
            ("CCC22", Self::CCC22),
            ("CCC23", Self::CCC23),
            ("CCC24", Self::CCC24),
            ("CCC25", Self::CCC25),
            ("CCC26", Self::CCC26),
            ("CCC27", Self::CCC27),
            ("CCC28", Self::CCC28),
            ("CCC29", Self::CCC29),
            ("CCC30", Self::CCC30),
            ("CCC31", Self::CCC31),
            ("CCC32", Self::CCC32),
            ("CCC33", Self::CCC33),
            ("CCC34", Self::CCC34),
            ("CCC35", Self::CCC35),
            ("CCC36", Self::CCC36),
            ("CCC84", Self::CCC84),
            ("CCC91", Self::CCC91),
            ("CCC103", Self::CCC103),
            ("CCC107", Self::CCC107),
            ("CCC118", Self::CCC118),
            ("CCC122", Self::CCC122),
            ("CCC129", Self::CCC129),
            ("CCC130", Self::CCC130),
            ("CCC132", Self::CCC132),
            ("CCC133", Self::CCC133),
            ("ATBL", Self::AttachedBelowLeft),
            ("ATB", Self::AttachedBelow),
            ("ATA", Self::AttachedAbove),
            ("ATAR", Self::AttachedAboveRight),
            ("BL", Self::BelowLeft),
            ("B", Self::Below),
            ("BR", Self::BelowRight),
            ("L", Self::Left),
            ("R", Self::Right),
            ("AL", Self::AboveLeft),
            ("A", Self::Above),
            ("AR", Self::AboveRight),
            ("DB", Self::DoubleBelow),
            ("DA", Self::DoubleAbove),
            ("IS", Self::IotaSubscript),
        ].into_iter()
    }
}

impl EastAsianWidth {
    pub const Neutral: Self = Self(0);
    pub const N: Self = Self::Neutral;
    pub const Ambiguous: Self = Self(1);
    pub const A: Self = Self::Ambiguous;
    pub const Halfwidth: Self = Self(2);
    pub const H: Self = Self::Halfwidth;
    pub const Fullwidth: Self = Self(3);
    pub const F: Self = Self::Fullwidth;
    pub const Narrow: Self = Self(4);
    pub const Na: Self = Self::Narrow;
    pub const Wide: Self = Self(5);
    pub const W: Self = Self::Wide;
}

#[cfg(feature = "datagen")]
impl databake::Bake for EastAsianWidth {
    fn bake(&self, env: &databake::CrateEnv) -> databake::TokenStream {
        env.insert("icu_properties");
        match *self {
            Self::Neutral => databake::quote!(icu_properties::props::EastAsianWidth::Neutral),
            Self::Ambiguous => databake::quote!(icu_properties::props::EastAsianWidth::Ambiguous),
            Self::Halfwidth => databake::quote!(icu_properties::props::EastAsianWidth::Halfwidth),
            Self::Fullwidth => databake::quote!(icu_properties::props::EastAsianWidth::Fullwidth),
            Self::Narrow => databake::quote!(icu_properties::props::EastAsianWidth::Narrow),
            Self::Wide => databake::quote!(icu_properties::props::EastAsianWidth::Wide),
            Self(v) => databake::quote!(icu_properties::props::EastAsianWidth(#v)),
        }
    }
}


impl From<EastAsianWidth> for u16  {
    fn from(other: EastAsianWidth) -> Self {
        other.0 as u16
    }
}

impl EastAsianWidth {
    /// Deprecated
    #[deprecated]
    pub const ALL_VALUES: &'static [Self] = &[
        Self::Neutral,
        Self::Ambiguous,
        Self::Halfwidth,
        Self::Fullwidth,
        Self::Narrow,
        Self::Wide,
    ];

    #[cfg(feature = "datagen")]
    #[doc(hidden)]
    pub fn names() -> impl Iterator<Item = (&'static str, Self)> {
        [
            ("N", Self::Neutral),
            ("A", Self::Ambiguous),
            ("H", Self::Halfwidth),
            ("F", Self::Fullwidth),
            ("Na", Self::Narrow),
            ("W", Self::Wide),
        ].into_iter()
    }
}

#[derive(Copy, Clone, PartialEq, Eq, Debug, Ord, PartialOrd, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[allow(clippy::exhaustive_enums)] // this type is stable
#[zerovec::make_ule(GeneralCategoryULE)]
#[cfg_attr(not(feature = "alloc"), zerovec::skip_derive(ZeroMapKV))]
#[repr(u8)]
#[allow(missing_docs)] // These variants don't need individual documentation.
pub enum GeneralCategory {
    Unassigned = 0,
    UppercaseLetter = 1,
    LowercaseLetter = 2,
    TitlecaseLetter = 3,
    ModifierLetter = 4,
    OtherLetter = 5,
    NonspacingMark = 6,
    EnclosingMark = 7,
    SpacingMark = 8,
    DecimalNumber = 9,
    LetterNumber = 10,
    OtherNumber = 11,
    SpaceSeparator = 12,
    LineSeparator = 13,
    ParagraphSeparator = 14,
    Control = 15,
    Format = 16,
    PrivateUse = 17,
    Surrogate = 18,
    DashPunctuation = 19,
    OpenPunctuation = 20,
    ClosePunctuation = 21,
    ConnectorPunctuation = 22,
    OtherPunctuation = 23,
    MathSymbol = 24,
    CurrencySymbol = 25,
    ModifierSymbol = 26,
    OtherSymbol = 27,
    InitialPunctuation = 28,
    FinalPunctuation = 29,
}

impl GeneralCategory {
    pub const Cn: Self = Self::Unassigned;
    pub const Lu: Self = Self::UppercaseLetter;
    pub const Ll: Self = Self::LowercaseLetter;
    pub const Lt: Self = Self::TitlecaseLetter;
    pub const Lm: Self = Self::ModifierLetter;
    pub const Lo: Self = Self::OtherLetter;
    pub const Mn: Self = Self::NonspacingMark;
    pub const Me: Self = Self::EnclosingMark;
    pub const Mc: Self = Self::SpacingMark;
    pub const Nd: Self = Self::DecimalNumber;
    pub const Digit: Self = Self::DecimalNumber;
    pub const Nl: Self = Self::LetterNumber;
    pub const No: Self = Self::OtherNumber;
    pub const Zs: Self = Self::SpaceSeparator;
    pub const Zl: Self = Self::LineSeparator;
    pub const Zp: Self = Self::ParagraphSeparator;
    pub const Cc: Self = Self::Control;
    pub const Cntrl: Self = Self::Control;
    pub const Cf: Self = Self::Format;
    pub const Co: Self = Self::PrivateUse;
    pub const Cs: Self = Self::Surrogate;
    pub const Pd: Self = Self::DashPunctuation;
    pub const Ps: Self = Self::OpenPunctuation;
    pub const Pe: Self = Self::ClosePunctuation;
    pub const Pc: Self = Self::ConnectorPunctuation;
    pub const Po: Self = Self::OtherPunctuation;
    pub const Sm: Self = Self::MathSymbol;
    pub const Sc: Self = Self::CurrencySymbol;
    pub const Sk: Self = Self::ModifierSymbol;
    pub const So: Self = Self::OtherSymbol;
    pub const Pi: Self = Self::InitialPunctuation;
    pub const Pf: Self = Self::FinalPunctuation;
}

#[cfg(feature = "datagen")]
impl databake::Bake for GeneralCategory {
    fn bake(&self, env: &databake::CrateEnv) -> databake::TokenStream {
        env.insert("icu_properties");
        match *self {
            Self::Unassigned => databake::quote!(icu_properties::props::GeneralCategory::Unassigned),
            Self::UppercaseLetter => databake::quote!(icu_properties::props::GeneralCategory::UppercaseLetter),
            Self::LowercaseLetter => databake::quote!(icu_properties::props::GeneralCategory::LowercaseLetter),
            Self::TitlecaseLetter => databake::quote!(icu_properties::props::GeneralCategory::TitlecaseLetter),
            Self::ModifierLetter => databake::quote!(icu_properties::props::GeneralCategory::ModifierLetter),
            Self::OtherLetter => databake::quote!(icu_properties::props::GeneralCategory::OtherLetter),
            Self::NonspacingMark => databake::quote!(icu_properties::props::GeneralCategory::NonspacingMark),
            Self::EnclosingMark => databake::quote!(icu_properties::props::GeneralCategory::EnclosingMark),
            Self::SpacingMark => databake::quote!(icu_properties::props::GeneralCategory::SpacingMark),
            Self::DecimalNumber => databake::quote!(icu_properties::props::GeneralCategory::DecimalNumber),
            Self::LetterNumber => databake::quote!(icu_properties::props::GeneralCategory::LetterNumber),
            Self::OtherNumber => databake::quote!(icu_properties::props::GeneralCategory::OtherNumber),
            Self::SpaceSeparator => databake::quote!(icu_properties::props::GeneralCategory::SpaceSeparator),
            Self::LineSeparator => databake::quote!(icu_properties::props::GeneralCategory::LineSeparator),
            Self::ParagraphSeparator => databake::quote!(icu_properties::props::GeneralCategory::ParagraphSeparator),
            Self::Control => databake::quote!(icu_properties::props::GeneralCategory::Control),
            Self::Format => databake::quote!(icu_properties::props::GeneralCategory::Format),
            Self::PrivateUse => databake::quote!(icu_properties::props::GeneralCategory::PrivateUse),
            Self::Surrogate => databake::quote!(icu_properties::props::GeneralCategory::Surrogate),
            Self::DashPunctuation => databake::quote!(icu_properties::props::GeneralCategory::DashPunctuation),
            Self::OpenPunctuation => databake::quote!(icu_properties::props::GeneralCategory::OpenPunctuation),
            Self::ClosePunctuation => databake::quote!(icu_properties::props::GeneralCategory::ClosePunctuation),
            Self::ConnectorPunctuation => databake::quote!(icu_properties::props::GeneralCategory::ConnectorPunctuation),
            Self::OtherPunctuation => databake::quote!(icu_properties::props::GeneralCategory::OtherPunctuation),
            Self::MathSymbol => databake::quote!(icu_properties::props::GeneralCategory::MathSymbol),
            Self::CurrencySymbol => databake::quote!(icu_properties::props::GeneralCategory::CurrencySymbol),
            Self::ModifierSymbol => databake::quote!(icu_properties::props::GeneralCategory::ModifierSymbol),
            Self::OtherSymbol => databake::quote!(icu_properties::props::GeneralCategory::OtherSymbol),
            Self::InitialPunctuation => databake::quote!(icu_properties::props::GeneralCategory::InitialPunctuation),
            Self::FinalPunctuation => databake::quote!(icu_properties::props::GeneralCategory::FinalPunctuation),
        }
    }
}


impl From<GeneralCategory> for u16  {
    fn from(other: GeneralCategory) -> Self {
        other as u16
    }
}

impl GeneralCategory {
    /// Deprecated
    #[deprecated]
    pub const ALL_VALUES: &'static [Self] = &[
        Self::Unassigned,
        Self::UppercaseLetter,
        Self::LowercaseLetter,
        Self::TitlecaseLetter,
        Self::ModifierLetter,
        Self::OtherLetter,
        Self::NonspacingMark,
        Self::EnclosingMark,
        Self::SpacingMark,
        Self::DecimalNumber,
        Self::LetterNumber,
        Self::OtherNumber,
        Self::SpaceSeparator,
        Self::LineSeparator,
        Self::ParagraphSeparator,
        Self::Control,
        Self::Format,
        Self::PrivateUse,
        Self::Surrogate,
        Self::DashPunctuation,
        Self::OpenPunctuation,
        Self::ClosePunctuation,
        Self::ConnectorPunctuation,
        Self::OtherPunctuation,
        Self::MathSymbol,
        Self::CurrencySymbol,
        Self::ModifierSymbol,
        Self::OtherSymbol,
        Self::InitialPunctuation,
        Self::FinalPunctuation,
    ];

    #[cfg(feature = "datagen")]
    #[doc(hidden)]
    pub fn names() -> impl Iterator<Item = (&'static str, Self)> {
        [
            ("Cn", Self::Unassigned),
            ("Lu", Self::UppercaseLetter),
            ("Ll", Self::LowercaseLetter),
            ("Lt", Self::TitlecaseLetter),
            ("Lm", Self::ModifierLetter),
            ("Lo", Self::OtherLetter),
            ("Mn", Self::NonspacingMark),
            ("Me", Self::EnclosingMark),
            ("Mc", Self::SpacingMark),
            ("Nd", Self::DecimalNumber),
            ("Nl", Self::LetterNumber),
            ("No", Self::OtherNumber),
            ("Zs", Self::SpaceSeparator),
            ("Zl", Self::LineSeparator),
            ("Zp", Self::ParagraphSeparator),
            ("Cc", Self::Control),
            ("Cf", Self::Format),
            ("Co", Self::PrivateUse),
            ("Cs", Self::Surrogate),
            ("Pd", Self::DashPunctuation),
            ("Ps", Self::OpenPunctuation),
            ("Pe", Self::ClosePunctuation),
            ("Pc", Self::ConnectorPunctuation),
            ("Po", Self::OtherPunctuation),
            ("Sm", Self::MathSymbol),
            ("Sc", Self::CurrencySymbol),
            ("Sk", Self::ModifierSymbol),
            ("So", Self::OtherSymbol),
            ("Pi", Self::InitialPunctuation),
            ("Pf", Self::FinalPunctuation),
        ].into_iter()
    }
}

impl GraphemeClusterBreak {
    pub const Other: Self = Self(0);
    pub const XX: Self = Self::Other;
    pub const Control: Self = Self(1);
    pub const CN: Self = Self::Control;
    pub const CR: Self = Self(2);
    pub const Extend: Self = Self(3);
    pub const EX: Self = Self::Extend;
    pub const L: Self = Self(4);
    pub const LF: Self = Self(5);
    pub const LV: Self = Self(6);
    pub const LVT: Self = Self(7);
    pub const T: Self = Self(8);
    pub const V: Self = Self(9);
    pub const SpacingMark: Self = Self(10);
    pub const SM: Self = Self::SpacingMark;
    pub const Prepend: Self = Self(11);
    pub const PP: Self = Self::Prepend;
    pub const RegionalIndicator: Self = Self(12);
    pub const RI: Self = Self::RegionalIndicator;
    pub const EBase: Self = Self(13);
    pub const EB: Self = Self::EBase;
    pub const EBaseGAZ: Self = Self(14);
    pub const EBG: Self = Self::EBaseGAZ;
    pub const EModifier: Self = Self(15);
    pub const EM: Self = Self::EModifier;
    pub const GlueAfterZwj: Self = Self(16);
    pub const GAZ: Self = Self::GlueAfterZwj;
    pub const ZWJ: Self = Self(17);
}

#[cfg(feature = "datagen")]
impl databake::Bake for GraphemeClusterBreak {
    fn bake(&self, env: &databake::CrateEnv) -> databake::TokenStream {
        env.insert("icu_properties");
        match *self {
            Self::Other => databake::quote!(icu_properties::props::GraphemeClusterBreak::Other),
            Self::Control => databake::quote!(icu_properties::props::GraphemeClusterBreak::Control),
            Self::CR => databake::quote!(icu_properties::props::GraphemeClusterBreak::CR),
            Self::Extend => databake::quote!(icu_properties::props::GraphemeClusterBreak::Extend),
            Self::L => databake::quote!(icu_properties::props::GraphemeClusterBreak::L),
            Self::LF => databake::quote!(icu_properties::props::GraphemeClusterBreak::LF),
            Self::LV => databake::quote!(icu_properties::props::GraphemeClusterBreak::LV),
            Self::LVT => databake::quote!(icu_properties::props::GraphemeClusterBreak::LVT),
            Self::T => databake::quote!(icu_properties::props::GraphemeClusterBreak::T),
            Self::V => databake::quote!(icu_properties::props::GraphemeClusterBreak::V),
            Self::SpacingMark => databake::quote!(icu_properties::props::GraphemeClusterBreak::SpacingMark),
            Self::Prepend => databake::quote!(icu_properties::props::GraphemeClusterBreak::Prepend),
            Self::RegionalIndicator => databake::quote!(icu_properties::props::GraphemeClusterBreak::RegionalIndicator),
            Self::EBase => databake::quote!(icu_properties::props::GraphemeClusterBreak::EBase),
            Self::EBaseGAZ => databake::quote!(icu_properties::props::GraphemeClusterBreak::EBaseGAZ),
            Self::EModifier => databake::quote!(icu_properties::props::GraphemeClusterBreak::EModifier),
            Self::GlueAfterZwj => databake::quote!(icu_properties::props::GraphemeClusterBreak::GlueAfterZwj),
            Self::ZWJ => databake::quote!(icu_properties::props::GraphemeClusterBreak::ZWJ),
            Self(v) => databake::quote!(icu_properties::props::GraphemeClusterBreak(#v)),
        }
    }
}


impl From<GraphemeClusterBreak> for u16  {
    fn from(other: GraphemeClusterBreak) -> Self {
        other.0 as u16
    }
}

impl GraphemeClusterBreak {
    /// Deprecated
    #[deprecated]
    pub const ALL_VALUES: &'static [Self] = &[
        Self::Other,
        Self::Control,
        Self::CR,
        Self::Extend,
        Self::L,
        Self::LF,
        Self::LV,
        Self::LVT,
        Self::T,
        Self::V,
        Self::SpacingMark,
        Self::Prepend,
        Self::RegionalIndicator,
        Self::EBase,
        Self::EBaseGAZ,
        Self::EModifier,
        Self::GlueAfterZwj,
        Self::ZWJ,
    ];

    #[cfg(feature = "datagen")]
    #[doc(hidden)]
    pub fn names() -> impl Iterator<Item = (&'static str, Self)> {
        [
            ("XX", Self::Other),
            ("CN", Self::Control),
            ("CR", Self::CR),
            ("EX", Self::Extend),
            ("L", Self::L),
            ("LF", Self::LF),
            ("LV", Self::LV),
            ("LVT", Self::LVT),
            ("T", Self::T),
            ("V", Self::V),
            ("SM", Self::SpacingMark),
            ("PP", Self::Prepend),
            ("RI", Self::RegionalIndicator),
            ("EB", Self::EBase),
            ("EBG", Self::EBaseGAZ),
            ("EM", Self::EModifier),
            ("GAZ", Self::GlueAfterZwj),
            ("ZWJ", Self::ZWJ),
        ].into_iter()
    }
}

impl HangulSyllableType {
    pub const NotApplicable: Self = Self(0);
    pub const NA: Self = Self::NotApplicable;
    pub const LeadingJamo: Self = Self(1);
    pub const L: Self = Self::LeadingJamo;
    pub const VowelJamo: Self = Self(2);
    pub const V: Self = Self::VowelJamo;
    pub const TrailingJamo: Self = Self(3);
    pub const T: Self = Self::TrailingJamo;
    pub const LVSyllable: Self = Self(4);
    pub const LV: Self = Self::LVSyllable;
    pub const LVTSyllable: Self = Self(5);
    pub const LVT: Self = Self::LVTSyllable;
}

#[cfg(feature = "datagen")]
impl databake::Bake for HangulSyllableType {
    fn bake(&self, env: &databake::CrateEnv) -> databake::TokenStream {
        env.insert("icu_properties");
        match *self {
            Self::NotApplicable => databake::quote!(icu_properties::props::HangulSyllableType::NotApplicable),
            Self::LeadingJamo => databake::quote!(icu_properties::props::HangulSyllableType::LeadingJamo),
            Self::VowelJamo => databake::quote!(icu_properties::props::HangulSyllableType::VowelJamo),
            Self::TrailingJamo => databake::quote!(icu_properties::props::HangulSyllableType::TrailingJamo),
            Self::LVSyllable => databake::quote!(icu_properties::props::HangulSyllableType::LVSyllable),
            Self::LVTSyllable => databake::quote!(icu_properties::props::HangulSyllableType::LVTSyllable),
            Self(v) => databake::quote!(icu_properties::props::HangulSyllableType(#v)),
        }
    }
}


impl From<HangulSyllableType> for u16  {
    fn from(other: HangulSyllableType) -> Self {
        other.0 as u16
    }
}

impl HangulSyllableType {
    /// Deprecated
    #[deprecated]
    pub const ALL_VALUES: &'static [Self] = &[
        Self::NotApplicable,
        Self::LeadingJamo,
        Self::VowelJamo,
        Self::TrailingJamo,
        Self::LVSyllable,
        Self::LVTSyllable,
    ];

    #[cfg(feature = "datagen")]
    #[doc(hidden)]
    pub fn names() -> impl Iterator<Item = (&'static str, Self)> {
        [
            ("NA", Self::NotApplicable),
            ("L", Self::LeadingJamo),
            ("V", Self::VowelJamo),
            ("T", Self::TrailingJamo),
            ("LV", Self::LVSyllable),
            ("LVT", Self::LVTSyllable),
        ].into_iter()
    }
}

impl IndicConjunctBreak {
    pub const None: Self = Self(0);
    pub const Consonant: Self = Self(1);
    pub const Extend: Self = Self(2);
    pub const Linker: Self = Self(3);
}

#[cfg(feature = "datagen")]
impl databake::Bake for IndicConjunctBreak {
    fn bake(&self, env: &databake::CrateEnv) -> databake::TokenStream {
        env.insert("icu_properties");
        match *self {
            Self::None => databake::quote!(icu_properties::props::IndicConjunctBreak::None),
            Self::Consonant => databake::quote!(icu_properties::props::IndicConjunctBreak::Consonant),
            Self::Extend => databake::quote!(icu_properties::props::IndicConjunctBreak::Extend),
            Self::Linker => databake::quote!(icu_properties::props::IndicConjunctBreak::Linker),
            Self(v) => databake::quote!(icu_properties::props::IndicConjunctBreak(#v)),
        }
    }
}


impl From<IndicConjunctBreak> for u16  {
    fn from(other: IndicConjunctBreak) -> Self {
        other.0 as u16
    }
}

impl IndicConjunctBreak {
    /// Deprecated
    #[deprecated]
    pub const ALL_VALUES: &'static [Self] = &[
        Self::None,
        Self::Consonant,
        Self::Extend,
        Self::Linker,
    ];

    #[cfg(feature = "datagen")]
    #[doc(hidden)]
    pub fn names() -> impl Iterator<Item = (&'static str, Self)> {
        [
            ("None", Self::None),
            ("Consonant", Self::Consonant),
            ("Extend", Self::Extend),
            ("Linker", Self::Linker),
        ].into_iter()
    }
}

impl IndicSyllabicCategory {
    pub const Other: Self = Self(0);
    pub const Avagraha: Self = Self(1);
    pub const Bindu: Self = Self(2);
    pub const BrahmiJoiningNumber: Self = Self(3);
    pub const CantillationMark: Self = Self(4);
    pub const Consonant: Self = Self(5);
    pub const ConsonantDead: Self = Self(6);
    pub const ConsonantFinal: Self = Self(7);
    pub const ConsonantHeadLetter: Self = Self(8);
    pub const ConsonantInitialPostfixed: Self = Self(9);
    pub const ConsonantKiller: Self = Self(10);
    pub const ConsonantMedial: Self = Self(11);
    pub const ConsonantPlaceholder: Self = Self(12);
    pub const ConsonantPrecedingRepha: Self = Self(13);
    pub const ConsonantPrefixed: Self = Self(14);
    pub const ConsonantSubjoined: Self = Self(15);
    pub const ConsonantSucceedingRepha: Self = Self(16);
    pub const ConsonantWithStacker: Self = Self(17);
    pub const GeminationMark: Self = Self(18);
    pub const InvisibleStacker: Self = Self(19);
    pub const Joiner: Self = Self(20);
    pub const ModifyingLetter: Self = Self(21);
    pub const NonJoiner: Self = Self(22);
    pub const Nukta: Self = Self(23);
    pub const Number: Self = Self(24);
    pub const NumberJoiner: Self = Self(25);
    pub const PureKiller: Self = Self(26);
    pub const RegisterShifter: Self = Self(27);
    pub const SyllableModifier: Self = Self(28);
    pub const ToneLetter: Self = Self(29);
    pub const ToneMark: Self = Self(30);
    pub const Virama: Self = Self(31);
    pub const Visarga: Self = Self(32);
    pub const Vowel: Self = Self(33);
    pub const VowelDependent: Self = Self(34);
    pub const VowelIndependent: Self = Self(35);
    pub const ReorderingKiller: Self = Self(36);
}

#[cfg(feature = "datagen")]
impl databake::Bake for IndicSyllabicCategory {
    fn bake(&self, env: &databake::CrateEnv) -> databake::TokenStream {
        env.insert("icu_properties");
        match *self {
            Self::Other => databake::quote!(icu_properties::props::IndicSyllabicCategory::Other),
            Self::Avagraha => databake::quote!(icu_properties::props::IndicSyllabicCategory::Avagraha),
            Self::Bindu => databake::quote!(icu_properties::props::IndicSyllabicCategory::Bindu),
            Self::BrahmiJoiningNumber => databake::quote!(icu_properties::props::IndicSyllabicCategory::BrahmiJoiningNumber),
            Self::CantillationMark => databake::quote!(icu_properties::props::IndicSyllabicCategory::CantillationMark),
            Self::Consonant => databake::quote!(icu_properties::props::IndicSyllabicCategory::Consonant),
            Self::ConsonantDead => databake::quote!(icu_properties::props::IndicSyllabicCategory::ConsonantDead),
            Self::ConsonantFinal => databake::quote!(icu_properties::props::IndicSyllabicCategory::ConsonantFinal),
            Self::ConsonantHeadLetter => databake::quote!(icu_properties::props::IndicSyllabicCategory::ConsonantHeadLetter),
            Self::ConsonantInitialPostfixed => databake::quote!(icu_properties::props::IndicSyllabicCategory::ConsonantInitialPostfixed),
            Self::ConsonantKiller => databake::quote!(icu_properties::props::IndicSyllabicCategory::ConsonantKiller),
            Self::ConsonantMedial => databake::quote!(icu_properties::props::IndicSyllabicCategory::ConsonantMedial),
            Self::ConsonantPlaceholder => databake::quote!(icu_properties::props::IndicSyllabicCategory::ConsonantPlaceholder),
            Self::ConsonantPrecedingRepha => databake::quote!(icu_properties::props::IndicSyllabicCategory::ConsonantPrecedingRepha),
            Self::ConsonantPrefixed => databake::quote!(icu_properties::props::IndicSyllabicCategory::ConsonantPrefixed),
            Self::ConsonantSubjoined => databake::quote!(icu_properties::props::IndicSyllabicCategory::ConsonantSubjoined),
            Self::ConsonantSucceedingRepha => databake::quote!(icu_properties::props::IndicSyllabicCategory::ConsonantSucceedingRepha),
            Self::ConsonantWithStacker => databake::quote!(icu_properties::props::IndicSyllabicCategory::ConsonantWithStacker),
            Self::GeminationMark => databake::quote!(icu_properties::props::IndicSyllabicCategory::GeminationMark),
            Self::InvisibleStacker => databake::quote!(icu_properties::props::IndicSyllabicCategory::InvisibleStacker),
            Self::Joiner => databake::quote!(icu_properties::props::IndicSyllabicCategory::Joiner),
            Self::ModifyingLetter => databake::quote!(icu_properties::props::IndicSyllabicCategory::ModifyingLetter),
            Self::NonJoiner => databake::quote!(icu_properties::props::IndicSyllabicCategory::NonJoiner),
            Self::Nukta => databake::quote!(icu_properties::props::IndicSyllabicCategory::Nukta),
            Self::Number => databake::quote!(icu_properties::props::IndicSyllabicCategory::Number),
            Self::NumberJoiner => databake::quote!(icu_properties::props::IndicSyllabicCategory::NumberJoiner),
            Self::PureKiller => databake::quote!(icu_properties::props::IndicSyllabicCategory::PureKiller),
            Self::RegisterShifter => databake::quote!(icu_properties::props::IndicSyllabicCategory::RegisterShifter),
            Self::SyllableModifier => databake::quote!(icu_properties::props::IndicSyllabicCategory::SyllableModifier),
            Self::ToneLetter => databake::quote!(icu_properties::props::IndicSyllabicCategory::ToneLetter),
            Self::ToneMark => databake::quote!(icu_properties::props::IndicSyllabicCategory::ToneMark),
            Self::Virama => databake::quote!(icu_properties::props::IndicSyllabicCategory::Virama),
            Self::Visarga => databake::quote!(icu_properties::props::IndicSyllabicCategory::Visarga),
            Self::Vowel => databake::quote!(icu_properties::props::IndicSyllabicCategory::Vowel),
            Self::VowelDependent => databake::quote!(icu_properties::props::IndicSyllabicCategory::VowelDependent),
            Self::VowelIndependent => databake::quote!(icu_properties::props::IndicSyllabicCategory::VowelIndependent),
            Self::ReorderingKiller => databake::quote!(icu_properties::props::IndicSyllabicCategory::ReorderingKiller),
            Self(v) => databake::quote!(icu_properties::props::IndicSyllabicCategory(#v)),
        }
    }
}


impl From<IndicSyllabicCategory> for u16  {
    fn from(other: IndicSyllabicCategory) -> Self {
        other.0 as u16
    }
}

impl IndicSyllabicCategory {
    /// Deprecated
    #[deprecated]
    pub const ALL_VALUES: &'static [Self] = &[
        Self::Other,
        Self::Avagraha,
        Self::Bindu,
        Self::BrahmiJoiningNumber,
        Self::CantillationMark,
        Self::Consonant,
        Self::ConsonantDead,
        Self::ConsonantFinal,
        Self::ConsonantHeadLetter,
        Self::ConsonantInitialPostfixed,
        Self::ConsonantKiller,
        Self::ConsonantMedial,
        Self::ConsonantPlaceholder,
        Self::ConsonantPrecedingRepha,
        Self::ConsonantPrefixed,
        Self::ConsonantSubjoined,
        Self::ConsonantSucceedingRepha,
        Self::ConsonantWithStacker,
        Self::GeminationMark,
        Self::InvisibleStacker,
        Self::Joiner,
        Self::ModifyingLetter,
        Self::NonJoiner,
        Self::Nukta,
        Self::Number,
        Self::NumberJoiner,
        Self::PureKiller,
        Self::RegisterShifter,
        Self::SyllableModifier,
        Self::ToneLetter,
        Self::ToneMark,
        Self::Virama,
        Self::Visarga,
        Self::Vowel,
        Self::VowelDependent,
        Self::VowelIndependent,
        Self::ReorderingKiller,
    ];

    #[cfg(feature = "datagen")]
    #[doc(hidden)]
    pub fn names() -> impl Iterator<Item = (&'static str, Self)> {
        [
            ("Other", Self::Other),
            ("Avagraha", Self::Avagraha),
            ("Bindu", Self::Bindu),
            ("Brahmi_Joining_Number", Self::BrahmiJoiningNumber),
            ("Cantillation_Mark", Self::CantillationMark),
            ("Consonant", Self::Consonant),
            ("Consonant_Dead", Self::ConsonantDead),
            ("Consonant_Final", Self::ConsonantFinal),
            ("Consonant_Head_Letter", Self::ConsonantHeadLetter),
            ("Consonant_Initial_Postfixed", Self::ConsonantInitialPostfixed),
            ("Consonant_Killer", Self::ConsonantKiller),
            ("Consonant_Medial", Self::ConsonantMedial),
            ("Consonant_Placeholder", Self::ConsonantPlaceholder),
            ("Consonant_Preceding_Repha", Self::ConsonantPrecedingRepha),
            ("Consonant_Prefixed", Self::ConsonantPrefixed),
            ("Consonant_Subjoined", Self::ConsonantSubjoined),
            ("Consonant_Succeeding_Repha", Self::ConsonantSucceedingRepha),
            ("Consonant_With_Stacker", Self::ConsonantWithStacker),
            ("Gemination_Mark", Self::GeminationMark),
            ("Invisible_Stacker", Self::InvisibleStacker),
            ("Joiner", Self::Joiner),
            ("Modifying_Letter", Self::ModifyingLetter),
            ("Non_Joiner", Self::NonJoiner),
            ("Nukta", Self::Nukta),
            ("Number", Self::Number),
            ("Number_Joiner", Self::NumberJoiner),
            ("Pure_Killer", Self::PureKiller),
            ("Register_Shifter", Self::RegisterShifter),
            ("Syllable_Modifier", Self::SyllableModifier),
            ("Tone_Letter", Self::ToneLetter),
            ("Tone_Mark", Self::ToneMark),
            ("Virama", Self::Virama),
            ("Visarga", Self::Visarga),
            ("Vowel", Self::Vowel),
            ("Vowel_Dependent", Self::VowelDependent),
            ("Vowel_Independent", Self::VowelIndependent),
            ("Reordering_Killer", Self::ReorderingKiller),
        ].into_iter()
    }
}

impl JoiningGroup {
    pub const NoJoiningGroup: Self = Self(0);
    pub const Ain: Self = Self(1);
    pub const Alaph: Self = Self(2);
    pub const Alef: Self = Self(3);
    pub const Beh: Self = Self(4);
    pub const Beth: Self = Self(5);
    pub const Dal: Self = Self(6);
    pub const DalathRish: Self = Self(7);
    pub const E: Self = Self(8);
    pub const Feh: Self = Self(9);
    pub const FinalSemkath: Self = Self(10);
    pub const Gaf: Self = Self(11);
    pub const Gamal: Self = Self(12);
    pub const Hah: Self = Self(13);
    pub const TehMarbutaGoal: Self = Self(14);
    pub const HamzaOnHehGoal: Self = Self::TehMarbutaGoal;
    pub const He: Self = Self(15);
    pub const Heh: Self = Self(16);
    pub const HehGoal: Self = Self(17);
    pub const Heth: Self = Self(18);
    pub const Kaf: Self = Self(19);
    pub const Kaph: Self = Self(20);
    pub const KnottedHeh: Self = Self(21);
    pub const Lam: Self = Self(22);
    pub const Lamadh: Self = Self(23);
    pub const Meem: Self = Self(24);
    pub const Mim: Self = Self(25);
    pub const Noon: Self = Self(26);
    pub const Nun: Self = Self(27);
    pub const Pe: Self = Self(28);
    pub const Qaf: Self = Self(29);
    pub const Qaph: Self = Self(30);
    pub const Reh: Self = Self(31);
    pub const ReversedPe: Self = Self(32);
    pub const Sad: Self = Self(33);
    pub const Sadhe: Self = Self(34);
    pub const Seen: Self = Self(35);
    pub const Semkath: Self = Self(36);
    pub const Shin: Self = Self(37);
    pub const SwashKaf: Self = Self(38);
    pub const SyriacWaw: Self = Self(39);
    pub const Tah: Self = Self(40);
    pub const Taw: Self = Self(41);
    pub const TehMarbuta: Self = Self(42);
    pub const Teth: Self = Self(43);
    pub const Waw: Self = Self(44);
    pub const Yeh: Self = Self(45);
    pub const YehBarree: Self = Self(46);
    pub const YehWithTail: Self = Self(47);
    pub const Yudh: Self = Self(48);
    pub const YudhHe: Self = Self(49);
    pub const Zain: Self = Self(50);
    pub const Fe: Self = Self(51);
    pub const Khaph: Self = Self(52);
    pub const Zhain: Self = Self(53);
    pub const BurushaskiYehBarree: Self = Self(54);
    pub const FarsiYeh: Self = Self(55);
    pub const Nya: Self = Self(56);
    pub const RohingyaYeh: Self = Self(57);
    pub const ManichaeanAleph: Self = Self(58);
    pub const ManichaeanAyin: Self = Self(59);
    pub const ManichaeanBeth: Self = Self(60);
    pub const ManichaeanDaleth: Self = Self(61);
    pub const ManichaeanDhamedh: Self = Self(62);
    pub const ManichaeanFive: Self = Self(63);
    pub const ManichaeanGimel: Self = Self(64);
    pub const ManichaeanHeth: Self = Self(65);
    pub const ManichaeanHundred: Self = Self(66);
    pub const ManichaeanKaph: Self = Self(67);
    pub const ManichaeanLamedh: Self = Self(68);
    pub const ManichaeanMem: Self = Self(69);
    pub const ManichaeanNun: Self = Self(70);
    pub const ManichaeanOne: Self = Self(71);
    pub const ManichaeanPe: Self = Self(72);
    pub const ManichaeanQoph: Self = Self(73);
    pub const ManichaeanResh: Self = Self(74);
    pub const ManichaeanSadhe: Self = Self(75);
    pub const ManichaeanSamekh: Self = Self(76);
    pub const ManichaeanTaw: Self = Self(77);
    pub const ManichaeanTen: Self = Self(78);
    pub const ManichaeanTeth: Self = Self(79);
    pub const ManichaeanThamedh: Self = Self(80);
    pub const ManichaeanTwenty: Self = Self(81);
    pub const ManichaeanWaw: Self = Self(82);
    pub const ManichaeanYodh: Self = Self(83);
    pub const ManichaeanZayin: Self = Self(84);
    pub const StraightWaw: Self = Self(85);
    pub const AfricanFeh: Self = Self(86);
    pub const AfricanNoon: Self = Self(87);
    pub const AfricanQaf: Self = Self(88);
    pub const MalayalamBha: Self = Self(89);
    pub const MalayalamJa: Self = Self(90);
    pub const MalayalamLla: Self = Self(91);
    pub const MalayalamLlla: Self = Self(92);
    pub const MalayalamNga: Self = Self(93);
    pub const MalayalamNna: Self = Self(94);
    pub const MalayalamNnna: Self = Self(95);
    pub const MalayalamNya: Self = Self(96);
    pub const MalayalamRa: Self = Self(97);
    pub const MalayalamSsa: Self = Self(98);
    pub const MalayalamTta: Self = Self(99);
    pub const HanifiRohingyaKinnaYa: Self = Self(100);
    pub const HanifiRohingyaPa: Self = Self(101);
    pub const ThinYeh: Self = Self(102);
    pub const VerticalTail: Self = Self(103);
    pub const KashmiriYeh: Self = Self(104);
    pub const ThinNoon: Self = Self(105);
}

#[cfg(feature = "datagen")]
impl databake::Bake for JoiningGroup {
    fn bake(&self, env: &databake::CrateEnv) -> databake::TokenStream {
        env.insert("icu_properties");
        match *self {
            Self::NoJoiningGroup => databake::quote!(icu_properties::props::JoiningGroup::NoJoiningGroup),
            Self::Ain => databake::quote!(icu_properties::props::JoiningGroup::Ain),
            Self::Alaph => databake::quote!(icu_properties::props::JoiningGroup::Alaph),
            Self::Alef => databake::quote!(icu_properties::props::JoiningGroup::Alef),
            Self::Beh => databake::quote!(icu_properties::props::JoiningGroup::Beh),
            Self::Beth => databake::quote!(icu_properties::props::JoiningGroup::Beth),
            Self::Dal => databake::quote!(icu_properties::props::JoiningGroup::Dal),
            Self::DalathRish => databake::quote!(icu_properties::props::JoiningGroup::DalathRish),
            Self::E => databake::quote!(icu_properties::props::JoiningGroup::E),
            Self::Feh => databake::quote!(icu_properties::props::JoiningGroup::Feh),
            Self::FinalSemkath => databake::quote!(icu_properties::props::JoiningGroup::FinalSemkath),
            Self::Gaf => databake::quote!(icu_properties::props::JoiningGroup::Gaf),
            Self::Gamal => databake::quote!(icu_properties::props::JoiningGroup::Gamal),
            Self::Hah => databake::quote!(icu_properties::props::JoiningGroup::Hah),
            Self::TehMarbutaGoal => databake::quote!(icu_properties::props::JoiningGroup::TehMarbutaGoal),
            Self::He => databake::quote!(icu_properties::props::JoiningGroup::He),
            Self::Heh => databake::quote!(icu_properties::props::JoiningGroup::Heh),
            Self::HehGoal => databake::quote!(icu_properties::props::JoiningGroup::HehGoal),
            Self::Heth => databake::quote!(icu_properties::props::JoiningGroup::Heth),
            Self::Kaf => databake::quote!(icu_properties::props::JoiningGroup::Kaf),
            Self::Kaph => databake::quote!(icu_properties::props::JoiningGroup::Kaph),
            Self::KnottedHeh => databake::quote!(icu_properties::props::JoiningGroup::KnottedHeh),
            Self::Lam => databake::quote!(icu_properties::props::JoiningGroup::Lam),
            Self::Lamadh => databake::quote!(icu_properties::props::JoiningGroup::Lamadh),
            Self::Meem => databake::quote!(icu_properties::props::JoiningGroup::Meem),
            Self::Mim => databake::quote!(icu_properties::props::JoiningGroup::Mim),
            Self::Noon => databake::quote!(icu_properties::props::JoiningGroup::Noon),
            Self::Nun => databake::quote!(icu_properties::props::JoiningGroup::Nun),
            Self::Pe => databake::quote!(icu_properties::props::JoiningGroup::Pe),
            Self::Qaf => databake::quote!(icu_properties::props::JoiningGroup::Qaf),
            Self::Qaph => databake::quote!(icu_properties::props::JoiningGroup::Qaph),
            Self::Reh => databake::quote!(icu_properties::props::JoiningGroup::Reh),
            Self::ReversedPe => databake::quote!(icu_properties::props::JoiningGroup::ReversedPe),
            Self::Sad => databake::quote!(icu_properties::props::JoiningGroup::Sad),
            Self::Sadhe => databake::quote!(icu_properties::props::JoiningGroup::Sadhe),
            Self::Seen => databake::quote!(icu_properties::props::JoiningGroup::Seen),
            Self::Semkath => databake::quote!(icu_properties::props::JoiningGroup::Semkath),
            Self::Shin => databake::quote!(icu_properties::props::JoiningGroup::Shin),
            Self::SwashKaf => databake::quote!(icu_properties::props::JoiningGroup::SwashKaf),
            Self::SyriacWaw => databake::quote!(icu_properties::props::JoiningGroup::SyriacWaw),
            Self::Tah => databake::quote!(icu_properties::props::JoiningGroup::Tah),
            Self::Taw => databake::quote!(icu_properties::props::JoiningGroup::Taw),
            Self::TehMarbuta => databake::quote!(icu_properties::props::JoiningGroup::TehMarbuta),
            Self::Teth => databake::quote!(icu_properties::props::JoiningGroup::Teth),
            Self::Waw => databake::quote!(icu_properties::props::JoiningGroup::Waw),
            Self::Yeh => databake::quote!(icu_properties::props::JoiningGroup::Yeh),
            Self::YehBarree => databake::quote!(icu_properties::props::JoiningGroup::YehBarree),
            Self::YehWithTail => databake::quote!(icu_properties::props::JoiningGroup::YehWithTail),
            Self::Yudh => databake::quote!(icu_properties::props::JoiningGroup::Yudh),
            Self::YudhHe => databake::quote!(icu_properties::props::JoiningGroup::YudhHe),
            Self::Zain => databake::quote!(icu_properties::props::JoiningGroup::Zain),
            Self::Fe => databake::quote!(icu_properties::props::JoiningGroup::Fe),
            Self::Khaph => databake::quote!(icu_properties::props::JoiningGroup::Khaph),
            Self::Zhain => databake::quote!(icu_properties::props::JoiningGroup::Zhain),
            Self::BurushaskiYehBarree => databake::quote!(icu_properties::props::JoiningGroup::BurushaskiYehBarree),
            Self::FarsiYeh => databake::quote!(icu_properties::props::JoiningGroup::FarsiYeh),
            Self::Nya => databake::quote!(icu_properties::props::JoiningGroup::Nya),
            Self::RohingyaYeh => databake::quote!(icu_properties::props::JoiningGroup::RohingyaYeh),
            Self::ManichaeanAleph => databake::quote!(icu_properties::props::JoiningGroup::ManichaeanAleph),
            Self::ManichaeanAyin => databake::quote!(icu_properties::props::JoiningGroup::ManichaeanAyin),
            Self::ManichaeanBeth => databake::quote!(icu_properties::props::JoiningGroup::ManichaeanBeth),
            Self::ManichaeanDaleth => databake::quote!(icu_properties::props::JoiningGroup::ManichaeanDaleth),
            Self::ManichaeanDhamedh => databake::quote!(icu_properties::props::JoiningGroup::ManichaeanDhamedh),
            Self::ManichaeanFive => databake::quote!(icu_properties::props::JoiningGroup::ManichaeanFive),
            Self::ManichaeanGimel => databake::quote!(icu_properties::props::JoiningGroup::ManichaeanGimel),
            Self::ManichaeanHeth => databake::quote!(icu_properties::props::JoiningGroup::ManichaeanHeth),
            Self::ManichaeanHundred => databake::quote!(icu_properties::props::JoiningGroup::ManichaeanHundred),
            Self::ManichaeanKaph => databake::quote!(icu_properties::props::JoiningGroup::ManichaeanKaph),
            Self::ManichaeanLamedh => databake::quote!(icu_properties::props::JoiningGroup::ManichaeanLamedh),
            Self::ManichaeanMem => databake::quote!(icu_properties::props::JoiningGroup::ManichaeanMem),
            Self::ManichaeanNun => databake::quote!(icu_properties::props::JoiningGroup::ManichaeanNun),
            Self::ManichaeanOne => databake::quote!(icu_properties::props::JoiningGroup::ManichaeanOne),
            Self::ManichaeanPe => databake::quote!(icu_properties::props::JoiningGroup::ManichaeanPe),
            Self::ManichaeanQoph => databake::quote!(icu_properties::props::JoiningGroup::ManichaeanQoph),
            Self::ManichaeanResh => databake::quote!(icu_properties::props::JoiningGroup::ManichaeanResh),
            Self::ManichaeanSadhe => databake::quote!(icu_properties::props::JoiningGroup::ManichaeanSadhe),
            Self::ManichaeanSamekh => databake::quote!(icu_properties::props::JoiningGroup::ManichaeanSamekh),
            Self::ManichaeanTaw => databake::quote!(icu_properties::props::JoiningGroup::ManichaeanTaw),
            Self::ManichaeanTen => databake::quote!(icu_properties::props::JoiningGroup::ManichaeanTen),
            Self::ManichaeanTeth => databake::quote!(icu_properties::props::JoiningGroup::ManichaeanTeth),
            Self::ManichaeanThamedh => databake::quote!(icu_properties::props::JoiningGroup::ManichaeanThamedh),
            Self::ManichaeanTwenty => databake::quote!(icu_properties::props::JoiningGroup::ManichaeanTwenty),
            Self::ManichaeanWaw => databake::quote!(icu_properties::props::JoiningGroup::ManichaeanWaw),
            Self::ManichaeanYodh => databake::quote!(icu_properties::props::JoiningGroup::ManichaeanYodh),
            Self::ManichaeanZayin => databake::quote!(icu_properties::props::JoiningGroup::ManichaeanZayin),
            Self::StraightWaw => databake::quote!(icu_properties::props::JoiningGroup::StraightWaw),
            Self::AfricanFeh => databake::quote!(icu_properties::props::JoiningGroup::AfricanFeh),
            Self::AfricanNoon => databake::quote!(icu_properties::props::JoiningGroup::AfricanNoon),
            Self::AfricanQaf => databake::quote!(icu_properties::props::JoiningGroup::AfricanQaf),
            Self::MalayalamBha => databake::quote!(icu_properties::props::JoiningGroup::MalayalamBha),
            Self::MalayalamJa => databake::quote!(icu_properties::props::JoiningGroup::MalayalamJa),
            Self::MalayalamLla => databake::quote!(icu_properties::props::JoiningGroup::MalayalamLla),
            Self::MalayalamLlla => databake::quote!(icu_properties::props::JoiningGroup::MalayalamLlla),
            Self::MalayalamNga => databake::quote!(icu_properties::props::JoiningGroup::MalayalamNga),
            Self::MalayalamNna => databake::quote!(icu_properties::props::JoiningGroup::MalayalamNna),
            Self::MalayalamNnna => databake::quote!(icu_properties::props::JoiningGroup::MalayalamNnna),
            Self::MalayalamNya => databake::quote!(icu_properties::props::JoiningGroup::MalayalamNya),
            Self::MalayalamRa => databake::quote!(icu_properties::props::JoiningGroup::MalayalamRa),
            Self::MalayalamSsa => databake::quote!(icu_properties::props::JoiningGroup::MalayalamSsa),
            Self::MalayalamTta => databake::quote!(icu_properties::props::JoiningGroup::MalayalamTta),
            Self::HanifiRohingyaKinnaYa => databake::quote!(icu_properties::props::JoiningGroup::HanifiRohingyaKinnaYa),
            Self::HanifiRohingyaPa => databake::quote!(icu_properties::props::JoiningGroup::HanifiRohingyaPa),
            Self::ThinYeh => databake::quote!(icu_properties::props::JoiningGroup::ThinYeh),
            Self::VerticalTail => databake::quote!(icu_properties::props::JoiningGroup::VerticalTail),
            Self::KashmiriYeh => databake::quote!(icu_properties::props::JoiningGroup::KashmiriYeh),
            Self::ThinNoon => databake::quote!(icu_properties::props::JoiningGroup::ThinNoon),
            Self(v) => databake::quote!(icu_properties::props::JoiningGroup(#v)),
        }
    }
}


impl From<JoiningGroup> for u16  {
    fn from(other: JoiningGroup) -> Self {
        other.0 as u16
    }
}

impl JoiningGroup {
    /// Deprecated
    #[deprecated]
    pub const ALL_VALUES: &'static [Self] = &[
        Self::NoJoiningGroup,
        Self::Ain,
        Self::Alaph,
        Self::Alef,
        Self::Beh,
        Self::Beth,
        Self::Dal,
        Self::DalathRish,
        Self::E,
        Self::Feh,
        Self::FinalSemkath,
        Self::Gaf,
        Self::Gamal,
        Self::Hah,
        Self::TehMarbutaGoal,
        Self::He,
        Self::Heh,
        Self::HehGoal,
        Self::Heth,
        Self::Kaf,
        Self::Kaph,
        Self::KnottedHeh,
        Self::Lam,
        Self::Lamadh,
        Self::Meem,
        Self::Mim,
        Self::Noon,
        Self::Nun,
        Self::Pe,
        Self::Qaf,
        Self::Qaph,
        Self::Reh,
        Self::ReversedPe,
        Self::Sad,
        Self::Sadhe,
        Self::Seen,
        Self::Semkath,
        Self::Shin,
        Self::SwashKaf,
        Self::SyriacWaw,
        Self::Tah,
        Self::Taw,
        Self::TehMarbuta,
        Self::Teth,
        Self::Waw,
        Self::Yeh,
        Self::YehBarree,
        Self::YehWithTail,
        Self::Yudh,
        Self::YudhHe,
        Self::Zain,
        Self::Fe,
        Self::Khaph,
        Self::Zhain,
        Self::BurushaskiYehBarree,
        Self::FarsiYeh,
        Self::Nya,
        Self::RohingyaYeh,
        Self::ManichaeanAleph,
        Self::ManichaeanAyin,
        Self::ManichaeanBeth,
        Self::ManichaeanDaleth,
        Self::ManichaeanDhamedh,
        Self::ManichaeanFive,
        Self::ManichaeanGimel,
        Self::ManichaeanHeth,
        Self::ManichaeanHundred,
        Self::ManichaeanKaph,
        Self::ManichaeanLamedh,
        Self::ManichaeanMem,
        Self::ManichaeanNun,
        Self::ManichaeanOne,
        Self::ManichaeanPe,
        Self::ManichaeanQoph,
        Self::ManichaeanResh,
        Self::ManichaeanSadhe,
        Self::ManichaeanSamekh,
        Self::ManichaeanTaw,
        Self::ManichaeanTen,
        Self::ManichaeanTeth,
        Self::ManichaeanThamedh,
        Self::ManichaeanTwenty,
        Self::ManichaeanWaw,
        Self::ManichaeanYodh,
        Self::ManichaeanZayin,
        Self::StraightWaw,
        Self::AfricanFeh,
        Self::AfricanNoon,
        Self::AfricanQaf,
        Self::MalayalamBha,
        Self::MalayalamJa,
        Self::MalayalamLla,
        Self::MalayalamLlla,
        Self::MalayalamNga,
        Self::MalayalamNna,
        Self::MalayalamNnna,
        Self::MalayalamNya,
        Self::MalayalamRa,
        Self::MalayalamSsa,
        Self::MalayalamTta,
        Self::HanifiRohingyaKinnaYa,
        Self::HanifiRohingyaPa,
        Self::ThinYeh,
        Self::VerticalTail,
        Self::KashmiriYeh,
        Self::ThinNoon,
    ];

    #[cfg(feature = "datagen")]
    #[doc(hidden)]
    pub fn names() -> impl Iterator<Item = (&'static str, Self)> {
        [
            ("No_Joining_Group", Self::NoJoiningGroup),
            ("Ain", Self::Ain),
            ("Alaph", Self::Alaph),
            ("Alef", Self::Alef),
            ("Beh", Self::Beh),
            ("Beth", Self::Beth),
            ("Dal", Self::Dal),
            ("Dalath_Rish", Self::DalathRish),
            ("E", Self::E),
            ("Feh", Self::Feh),
            ("Final_Semkath", Self::FinalSemkath),
            ("Gaf", Self::Gaf),
            ("Gamal", Self::Gamal),
            ("Hah", Self::Hah),
            ("Teh_Marbuta_Goal", Self::TehMarbutaGoal),
            ("He", Self::He),
            ("Heh", Self::Heh),
            ("Heh_Goal", Self::HehGoal),
            ("Heth", Self::Heth),
            ("Kaf", Self::Kaf),
            ("Kaph", Self::Kaph),
            ("Knotted_Heh", Self::KnottedHeh),
            ("Lam", Self::Lam),
            ("Lamadh", Self::Lamadh),
            ("Meem", Self::Meem),
            ("Mim", Self::Mim),
            ("Noon", Self::Noon),
            ("Nun", Self::Nun),
            ("Pe", Self::Pe),
            ("Qaf", Self::Qaf),
            ("Qaph", Self::Qaph),
            ("Reh", Self::Reh),
            ("Reversed_Pe", Self::ReversedPe),
            ("Sad", Self::Sad),
            ("Sadhe", Self::Sadhe),
            ("Seen", Self::Seen),
            ("Semkath", Self::Semkath),
            ("Shin", Self::Shin),
            ("Swash_Kaf", Self::SwashKaf),
            ("Syriac_Waw", Self::SyriacWaw),
            ("Tah", Self::Tah),
            ("Taw", Self::Taw),
            ("Teh_Marbuta", Self::TehMarbuta),
            ("Teth", Self::Teth),
            ("Waw", Self::Waw),
            ("Yeh", Self::Yeh),
            ("Yeh_Barree", Self::YehBarree),
            ("Yeh_With_Tail", Self::YehWithTail),
            ("Yudh", Self::Yudh),
            ("Yudh_He", Self::YudhHe),
            ("Zain", Self::Zain),
            ("Fe", Self::Fe),
            ("Khaph", Self::Khaph),
            ("Zhain", Self::Zhain),
            ("Burushaski_Yeh_Barree", Self::BurushaskiYehBarree),
            ("Farsi_Yeh", Self::FarsiYeh),
            ("Nya", Self::Nya),
            ("Rohingya_Yeh", Self::RohingyaYeh),
            ("Manichaean_Aleph", Self::ManichaeanAleph),
            ("Manichaean_Ayin", Self::ManichaeanAyin),
            ("Manichaean_Beth", Self::ManichaeanBeth),
            ("Manichaean_Daleth", Self::ManichaeanDaleth),
            ("Manichaean_Dhamedh", Self::ManichaeanDhamedh),
            ("Manichaean_Five", Self::ManichaeanFive),
            ("Manichaean_Gimel", Self::ManichaeanGimel),
            ("Manichaean_Heth", Self::ManichaeanHeth),
            ("Manichaean_Hundred", Self::ManichaeanHundred),
            ("Manichaean_Kaph", Self::ManichaeanKaph),
            ("Manichaean_Lamedh", Self::ManichaeanLamedh),
            ("Manichaean_Mem", Self::ManichaeanMem),
            ("Manichaean_Nun", Self::ManichaeanNun),
            ("Manichaean_One", Self::ManichaeanOne),
            ("Manichaean_Pe", Self::ManichaeanPe),
            ("Manichaean_Qoph", Self::ManichaeanQoph),
            ("Manichaean_Resh", Self::ManichaeanResh),
            ("Manichaean_Sadhe", Self::ManichaeanSadhe),
            ("Manichaean_Samekh", Self::ManichaeanSamekh),
            ("Manichaean_Taw", Self::ManichaeanTaw),
            ("Manichaean_Ten", Self::ManichaeanTen),
            ("Manichaean_Teth", Self::ManichaeanTeth),
            ("Manichaean_Thamedh", Self::ManichaeanThamedh),
            ("Manichaean_Twenty", Self::ManichaeanTwenty),
            ("Manichaean_Waw", Self::ManichaeanWaw),
            ("Manichaean_Yodh", Self::ManichaeanYodh),
            ("Manichaean_Zayin", Self::ManichaeanZayin),
            ("Straight_Waw", Self::StraightWaw),
            ("African_Feh", Self::AfricanFeh),
            ("African_Noon", Self::AfricanNoon),
            ("African_Qaf", Self::AfricanQaf),
            ("Malayalam_Bha", Self::MalayalamBha),
            ("Malayalam_Ja", Self::MalayalamJa),
            ("Malayalam_Lla", Self::MalayalamLla),
            ("Malayalam_Llla", Self::MalayalamLlla),
            ("Malayalam_Nga", Self::MalayalamNga),
            ("Malayalam_Nna", Self::MalayalamNna),
            ("Malayalam_Nnna", Self::MalayalamNnna),
            ("Malayalam_Nya", Self::MalayalamNya),
            ("Malayalam_Ra", Self::MalayalamRa),
            ("Malayalam_Ssa", Self::MalayalamSsa),
            ("Malayalam_Tta", Self::MalayalamTta),
            ("Hanifi_Rohingya_Kinna_Ya", Self::HanifiRohingyaKinnaYa),
            ("Hanifi_Rohingya_Pa", Self::HanifiRohingyaPa),
            ("Thin_Yeh", Self::ThinYeh),
            ("Vertical_Tail", Self::VerticalTail),
            ("Kashmiri_Yeh", Self::KashmiriYeh),
            ("Thin_Noon", Self::ThinNoon),
        ].into_iter()
    }
}

impl JoiningType {
    pub const NonJoining: Self = Self(0);
    pub const U: Self = Self::NonJoining;
    pub const JoinCausing: Self = Self(1);
    pub const C: Self = Self::JoinCausing;
    pub const DualJoining: Self = Self(2);
    pub const D: Self = Self::DualJoining;
    pub const LeftJoining: Self = Self(3);
    pub const L: Self = Self::LeftJoining;
    pub const RightJoining: Self = Self(4);
    pub const R: Self = Self::RightJoining;
    pub const Transparent: Self = Self(5);
    pub const T: Self = Self::Transparent;
}

#[cfg(feature = "datagen")]
impl databake::Bake for JoiningType {
    fn bake(&self, env: &databake::CrateEnv) -> databake::TokenStream {
        env.insert("icu_properties");
        match *self {
            Self::NonJoining => databake::quote!(icu_properties::props::JoiningType::NonJoining),
            Self::JoinCausing => databake::quote!(icu_properties::props::JoiningType::JoinCausing),
            Self::DualJoining => databake::quote!(icu_properties::props::JoiningType::DualJoining),
            Self::LeftJoining => databake::quote!(icu_properties::props::JoiningType::LeftJoining),
            Self::RightJoining => databake::quote!(icu_properties::props::JoiningType::RightJoining),
            Self::Transparent => databake::quote!(icu_properties::props::JoiningType::Transparent),
            Self(v) => databake::quote!(icu_properties::props::JoiningType(#v)),
        }
    }
}


impl From<JoiningType> for u16  {
    fn from(other: JoiningType) -> Self {
        other.0 as u16
    }
}

impl JoiningType {
    /// Deprecated
    #[deprecated]
    pub const ALL_VALUES: &'static [Self] = &[
        Self::NonJoining,
        Self::JoinCausing,
        Self::DualJoining,
        Self::LeftJoining,
        Self::RightJoining,
        Self::Transparent,
    ];

    #[cfg(feature = "datagen")]
    #[doc(hidden)]
    pub fn names() -> impl Iterator<Item = (&'static str, Self)> {
        [
            ("U", Self::NonJoining),
            ("C", Self::JoinCausing),
            ("D", Self::DualJoining),
            ("L", Self::LeftJoining),
            ("R", Self::RightJoining),
            ("T", Self::Transparent),
        ].into_iter()
    }
}

impl LineBreak {
    pub const Unknown: Self = Self(0);
    pub const XX: Self = Self::Unknown;
    pub const Ambiguous: Self = Self(1);
    pub const AI: Self = Self::Ambiguous;
    pub const Alphabetic: Self = Self(2);
    pub const AL: Self = Self::Alphabetic;
    pub const BreakBoth: Self = Self(3);
    pub const B2: Self = Self::BreakBoth;
    pub const BreakAfter: Self = Self(4);
    pub const BA: Self = Self::BreakAfter;
    pub const BreakBefore: Self = Self(5);
    pub const BB: Self = Self::BreakBefore;
    pub const MandatoryBreak: Self = Self(6);
    pub const BK: Self = Self::MandatoryBreak;
    pub const ContingentBreak: Self = Self(7);
    pub const CB: Self = Self::ContingentBreak;
    pub const ClosePunctuation: Self = Self(8);
    pub const CL: Self = Self::ClosePunctuation;
    pub const CombiningMark: Self = Self(9);
    pub const CM: Self = Self::CombiningMark;
    pub const CarriageReturn: Self = Self(10);
    pub const CR: Self = Self::CarriageReturn;
    pub const Exclamation: Self = Self(11);
    pub const EX: Self = Self::Exclamation;
    pub const Glue: Self = Self(12);
    pub const GL: Self = Self::Glue;
    pub const Hyphen: Self = Self(13);
    pub const HY: Self = Self::Hyphen;
    pub const Ideographic: Self = Self(14);
    pub const ID: Self = Self::Ideographic;
    pub const Inseparable: Self = Self(15);
    pub const IN: Self = Self::Inseparable;
    pub const Inseperable: Self = Self::Inseparable;
    pub const InfixNumeric: Self = Self(16);
    pub const IS: Self = Self::InfixNumeric;
    pub const LineFeed: Self = Self(17);
    pub const LF: Self = Self::LineFeed;
    pub const Nonstarter: Self = Self(18);
    pub const NS: Self = Self::Nonstarter;
    pub const Numeric: Self = Self(19);
    pub const NU: Self = Self::Numeric;
    pub const OpenPunctuation: Self = Self(20);
    pub const OP: Self = Self::OpenPunctuation;
    pub const PostfixNumeric: Self = Self(21);
    pub const PO: Self = Self::PostfixNumeric;
    pub const PrefixNumeric: Self = Self(22);
    pub const PR: Self = Self::PrefixNumeric;
    pub const Quotation: Self = Self(23);
    pub const QU: Self = Self::Quotation;
    pub const ComplexContext: Self = Self(24);
    pub const SA: Self = Self::ComplexContext;
    pub const Surrogate: Self = Self(25);
    pub const SG: Self = Self::Surrogate;
    pub const Space: Self = Self(26);
    pub const SP: Self = Self::Space;
    pub const BreakSymbols: Self = Self(27);
    pub const SY: Self = Self::BreakSymbols;
    pub const ZWSpace: Self = Self(28);
    pub const ZW: Self = Self::ZWSpace;
    pub const NextLine: Self = Self(29);
    pub const NL: Self = Self::NextLine;
    pub const WordJoiner: Self = Self(30);
    pub const WJ: Self = Self::WordJoiner;
    pub const H2: Self = Self(31);
    pub const H3: Self = Self(32);
    pub const JL: Self = Self(33);
    pub const JT: Self = Self(34);
    pub const JV: Self = Self(35);
    pub const CloseParenthesis: Self = Self(36);
    pub const CP: Self = Self::CloseParenthesis;
    pub const ConditionalJapaneseStarter: Self = Self(37);
    pub const CJ: Self = Self::ConditionalJapaneseStarter;
    pub const HebrewLetter: Self = Self(38);
    pub const HL: Self = Self::HebrewLetter;
    pub const RegionalIndicator: Self = Self(39);
    pub const RI: Self = Self::RegionalIndicator;
    pub const EBase: Self = Self(40);
    pub const EB: Self = Self::EBase;
    pub const EModifier: Self = Self(41);
    pub const EM: Self = Self::EModifier;
    pub const ZWJ: Self = Self(42);
    pub const Aksara: Self = Self(43);
    pub const AK: Self = Self::Aksara;
    pub const AksaraPrebase: Self = Self(44);
    pub const AP: Self = Self::AksaraPrebase;
    pub const AksaraStart: Self = Self(45);
    pub const AS: Self = Self::AksaraStart;
    pub const ViramaFinal: Self = Self(46);
    pub const VF: Self = Self::ViramaFinal;
    pub const Virama: Self = Self(47);
    pub const VI: Self = Self::Virama;
    pub const UnambiguousHyphen: Self = Self(48);
    pub const HH: Self = Self::UnambiguousHyphen;
}

#[cfg(feature = "datagen")]
impl databake::Bake for LineBreak {
    fn bake(&self, env: &databake::CrateEnv) -> databake::TokenStream {
        env.insert("icu_properties");
        match *self {
            Self::Unknown => databake::quote!(icu_properties::props::LineBreak::Unknown),
            Self::Ambiguous => databake::quote!(icu_properties::props::LineBreak::Ambiguous),
            Self::Alphabetic => databake::quote!(icu_properties::props::LineBreak::Alphabetic),
            Self::BreakBoth => databake::quote!(icu_properties::props::LineBreak::BreakBoth),
            Self::BreakAfter => databake::quote!(icu_properties::props::LineBreak::BreakAfter),
            Self::BreakBefore => databake::quote!(icu_properties::props::LineBreak::BreakBefore),
            Self::MandatoryBreak => databake::quote!(icu_properties::props::LineBreak::MandatoryBreak),
            Self::ContingentBreak => databake::quote!(icu_properties::props::LineBreak::ContingentBreak),
            Self::ClosePunctuation => databake::quote!(icu_properties::props::LineBreak::ClosePunctuation),
            Self::CombiningMark => databake::quote!(icu_properties::props::LineBreak::CombiningMark),
            Self::CarriageReturn => databake::quote!(icu_properties::props::LineBreak::CarriageReturn),
            Self::Exclamation => databake::quote!(icu_properties::props::LineBreak::Exclamation),
            Self::Glue => databake::quote!(icu_properties::props::LineBreak::Glue),
            Self::Hyphen => databake::quote!(icu_properties::props::LineBreak::Hyphen),
            Self::Ideographic => databake::quote!(icu_properties::props::LineBreak::Ideographic),
            Self::Inseparable => databake::quote!(icu_properties::props::LineBreak::Inseparable),
            Self::InfixNumeric => databake::quote!(icu_properties::props::LineBreak::InfixNumeric),
            Self::LineFeed => databake::quote!(icu_properties::props::LineBreak::LineFeed),
            Self::Nonstarter => databake::quote!(icu_properties::props::LineBreak::Nonstarter),
            Self::Numeric => databake::quote!(icu_properties::props::LineBreak::Numeric),
            Self::OpenPunctuation => databake::quote!(icu_properties::props::LineBreak::OpenPunctuation),
            Self::PostfixNumeric => databake::quote!(icu_properties::props::LineBreak::PostfixNumeric),
            Self::PrefixNumeric => databake::quote!(icu_properties::props::LineBreak::PrefixNumeric),
            Self::Quotation => databake::quote!(icu_properties::props::LineBreak::Quotation),
            Self::ComplexContext => databake::quote!(icu_properties::props::LineBreak::ComplexContext),
            Self::Surrogate => databake::quote!(icu_properties::props::LineBreak::Surrogate),
            Self::Space => databake::quote!(icu_properties::props::LineBreak::Space),
            Self::BreakSymbols => databake::quote!(icu_properties::props::LineBreak::BreakSymbols),
            Self::ZWSpace => databake::quote!(icu_properties::props::LineBreak::ZWSpace),
            Self::NextLine => databake::quote!(icu_properties::props::LineBreak::NextLine),
            Self::WordJoiner => databake::quote!(icu_properties::props::LineBreak::WordJoiner),
            Self::H2 => databake::quote!(icu_properties::props::LineBreak::H2),
            Self::H3 => databake::quote!(icu_properties::props::LineBreak::H3),
            Self::JL => databake::quote!(icu_properties::props::LineBreak::JL),
            Self::JT => databake::quote!(icu_properties::props::LineBreak::JT),
            Self::JV => databake::quote!(icu_properties::props::LineBreak::JV),
            Self::CloseParenthesis => databake::quote!(icu_properties::props::LineBreak::CloseParenthesis),
            Self::ConditionalJapaneseStarter => databake::quote!(icu_properties::props::LineBreak::ConditionalJapaneseStarter),
            Self::HebrewLetter => databake::quote!(icu_properties::props::LineBreak::HebrewLetter),
            Self::RegionalIndicator => databake::quote!(icu_properties::props::LineBreak::RegionalIndicator),
            Self::EBase => databake::quote!(icu_properties::props::LineBreak::EBase),
            Self::EModifier => databake::quote!(icu_properties::props::LineBreak::EModifier),
            Self::ZWJ => databake::quote!(icu_properties::props::LineBreak::ZWJ),
            Self::Aksara => databake::quote!(icu_properties::props::LineBreak::Aksara),
            Self::AksaraPrebase => databake::quote!(icu_properties::props::LineBreak::AksaraPrebase),
            Self::AksaraStart => databake::quote!(icu_properties::props::LineBreak::AksaraStart),
            Self::ViramaFinal => databake::quote!(icu_properties::props::LineBreak::ViramaFinal),
            Self::Virama => databake::quote!(icu_properties::props::LineBreak::Virama),
            Self::UnambiguousHyphen => databake::quote!(icu_properties::props::LineBreak::UnambiguousHyphen),
            Self(v) => databake::quote!(icu_properties::props::LineBreak(#v)),
        }
    }
}


impl From<LineBreak> for u16  {
    fn from(other: LineBreak) -> Self {
        other.0 as u16
    }
}

impl LineBreak {
    /// Deprecated
    #[deprecated]
    pub const ALL_VALUES: &'static [Self] = &[
        Self::Unknown,
        Self::Ambiguous,
        Self::Alphabetic,
        Self::BreakBoth,
        Self::BreakAfter,
        Self::BreakBefore,
        Self::MandatoryBreak,
        Self::ContingentBreak,
        Self::ClosePunctuation,
        Self::CombiningMark,
        Self::CarriageReturn,
        Self::Exclamation,
        Self::Glue,
        Self::Hyphen,
        Self::Ideographic,
        Self::Inseparable,
        Self::InfixNumeric,
        Self::LineFeed,
        Self::Nonstarter,
        Self::Numeric,
        Self::OpenPunctuation,
        Self::PostfixNumeric,
        Self::PrefixNumeric,
        Self::Quotation,
        Self::ComplexContext,
        Self::Surrogate,
        Self::Space,
        Self::BreakSymbols,
        Self::ZWSpace,
        Self::NextLine,
        Self::WordJoiner,
        Self::H2,
        Self::H3,
        Self::JL,
        Self::JT,
        Self::JV,
        Self::CloseParenthesis,
        Self::ConditionalJapaneseStarter,
        Self::HebrewLetter,
        Self::RegionalIndicator,
        Self::EBase,
        Self::EModifier,
        Self::ZWJ,
        Self::Aksara,
        Self::AksaraPrebase,
        Self::AksaraStart,
        Self::ViramaFinal,
        Self::Virama,
        Self::UnambiguousHyphen,
    ];

    #[cfg(feature = "datagen")]
    #[doc(hidden)]
    pub fn names() -> impl Iterator<Item = (&'static str, Self)> {
        [
            ("XX", Self::Unknown),
            ("AI", Self::Ambiguous),
            ("AL", Self::Alphabetic),
            ("B2", Self::BreakBoth),
            ("BA", Self::BreakAfter),
            ("BB", Self::BreakBefore),
            ("BK", Self::MandatoryBreak),
            ("CB", Self::ContingentBreak),
            ("CL", Self::ClosePunctuation),
            ("CM", Self::CombiningMark),
            ("CR", Self::CarriageReturn),
            ("EX", Self::Exclamation),
            ("GL", Self::Glue),
            ("HY", Self::Hyphen),
            ("ID", Self::Ideographic),
            ("IN", Self::Inseparable),
            ("IS", Self::InfixNumeric),
            ("LF", Self::LineFeed),
            ("NS", Self::Nonstarter),
            ("NU", Self::Numeric),
            ("OP", Self::OpenPunctuation),
            ("PO", Self::PostfixNumeric),
            ("PR", Self::PrefixNumeric),
            ("QU", Self::Quotation),
            ("SA", Self::ComplexContext),
            ("SG", Self::Surrogate),
            ("SP", Self::Space),
            ("SY", Self::BreakSymbols),
            ("ZW", Self::ZWSpace),
            ("NL", Self::NextLine),
            ("WJ", Self::WordJoiner),
            ("H2", Self::H2),
            ("H3", Self::H3),
            ("JL", Self::JL),
            ("JT", Self::JT),
            ("JV", Self::JV),
            ("CP", Self::CloseParenthesis),
            ("CJ", Self::ConditionalJapaneseStarter),
            ("HL", Self::HebrewLetter),
            ("RI", Self::RegionalIndicator),
            ("EB", Self::EBase),
            ("EM", Self::EModifier),
            ("ZWJ", Self::ZWJ),
            ("AK", Self::Aksara),
            ("AP", Self::AksaraPrebase),
            ("AS", Self::AksaraStart),
            ("VF", Self::ViramaFinal),
            ("VI", Self::Virama),
            ("HH", Self::UnambiguousHyphen),
        ].into_iter()
    }
}

impl NumericType {
    pub const None: Self = Self(0);
    pub const Decimal: Self = Self(1);
    pub const De: Self = Self::Decimal;
    pub const Digit: Self = Self(2);
    pub const Di: Self = Self::Digit;
    pub const Numeric: Self = Self(3);
    pub const Nu: Self = Self::Numeric;
}

#[cfg(feature = "datagen")]
impl databake::Bake for NumericType {
    fn bake(&self, env: &databake::CrateEnv) -> databake::TokenStream {
        env.insert("icu_properties");
        match *self {
            Self::None => databake::quote!(icu_properties::props::NumericType::None),
            Self::Decimal => databake::quote!(icu_properties::props::NumericType::Decimal),
            Self::Digit => databake::quote!(icu_properties::props::NumericType::Digit),
            Self::Numeric => databake::quote!(icu_properties::props::NumericType::Numeric),
            Self(v) => databake::quote!(icu_properties::props::NumericType(#v)),
        }
    }
}


impl From<NumericType> for u16  {
    fn from(other: NumericType) -> Self {
        other.0 as u16
    }
}

impl NumericType {
    /// Deprecated
    #[deprecated]
    pub const ALL_VALUES: &'static [Self] = &[
        Self::None,
        Self::Decimal,
        Self::Digit,
        Self::Numeric,
    ];

    #[cfg(feature = "datagen")]
    #[doc(hidden)]
    pub fn names() -> impl Iterator<Item = (&'static str, Self)> {
        [
            ("None", Self::None),
            ("De", Self::Decimal),
            ("Di", Self::Digit),
            ("Nu", Self::Numeric),
        ].into_iter()
    }
}

impl Script {
    pub const Common: Self = Self(0);
    pub const Zyyy: Self = Self::Common;
    pub const Inherited: Self = Self(1);
    pub const Zinh: Self = Self::Inherited;
    pub const Qaai: Self = Self::Inherited;
    pub const Arabic: Self = Self(2);
    pub const Arab: Self = Self::Arabic;
    pub const Armenian: Self = Self(3);
    pub const Armn: Self = Self::Armenian;
    pub const Bengali: Self = Self(4);
    pub const Beng: Self = Self::Bengali;
    pub const Bopomofo: Self = Self(5);
    pub const Bopo: Self = Self::Bopomofo;
    pub const Cherokee: Self = Self(6);
    pub const Cher: Self = Self::Cherokee;
    pub const Coptic: Self = Self(7);
    pub const Copt: Self = Self::Coptic;
    pub const Qaac: Self = Self::Coptic;
    pub const Cyrillic: Self = Self(8);
    pub const Cyrl: Self = Self::Cyrillic;
    pub const Deseret: Self = Self(9);
    pub const Dsrt: Self = Self::Deseret;
    pub const Devanagari: Self = Self(10);
    pub const Deva: Self = Self::Devanagari;
    pub const Ethiopic: Self = Self(11);
    pub const Ethi: Self = Self::Ethiopic;
    pub const Georgian: Self = Self(12);
    pub const Geor: Self = Self::Georgian;
    pub const Gothic: Self = Self(13);
    pub const Goth: Self = Self::Gothic;
    pub const Greek: Self = Self(14);
    pub const Grek: Self = Self::Greek;
    pub const Gujarati: Self = Self(15);
    pub const Gujr: Self = Self::Gujarati;
    pub const Gurmukhi: Self = Self(16);
    pub const Guru: Self = Self::Gurmukhi;
    pub const Han: Self = Self(17);
    pub const Hani: Self = Self::Han;
    pub const Hangul: Self = Self(18);
    pub const Hang: Self = Self::Hangul;
    pub const Hebrew: Self = Self(19);
    pub const Hebr: Self = Self::Hebrew;
    pub const Hiragana: Self = Self(20);
    pub const Hira: Self = Self::Hiragana;
    pub const Kannada: Self = Self(21);
    pub const Knda: Self = Self::Kannada;
    pub const Katakana: Self = Self(22);
    pub const Kana: Self = Self::Katakana;
    pub const Khmer: Self = Self(23);
    pub const Khmr: Self = Self::Khmer;
    pub const Lao: Self = Self(24);
    pub const Laoo: Self = Self::Lao;
    pub const Latin: Self = Self(25);
    pub const Latn: Self = Self::Latin;
    pub const Malayalam: Self = Self(26);
    pub const Mlym: Self = Self::Malayalam;
    pub const Mongolian: Self = Self(27);
    pub const Mong: Self = Self::Mongolian;
    pub const Myanmar: Self = Self(28);
    pub const Mymr: Self = Self::Myanmar;
    pub const Ogham: Self = Self(29);
    pub const Ogam: Self = Self::Ogham;
    pub const OldItalic: Self = Self(30);
    pub const Ital: Self = Self::OldItalic;
    pub const Oriya: Self = Self(31);
    pub const Orya: Self = Self::Oriya;
    pub const Runic: Self = Self(32);
    pub const Runr: Self = Self::Runic;
    pub const Sinhala: Self = Self(33);
    pub const Sinh: Self = Self::Sinhala;
    pub const Syriac: Self = Self(34);
    pub const Syrc: Self = Self::Syriac;
    pub const Tamil: Self = Self(35);
    pub const Taml: Self = Self::Tamil;
    pub const Telugu: Self = Self(36);
    pub const Telu: Self = Self::Telugu;
    pub const Thaana: Self = Self(37);
    pub const Thaa: Self = Self::Thaana;
    pub const Thai: Self = Self(38);
    pub const Tibetan: Self = Self(39);
    pub const Tibt: Self = Self::Tibetan;
    pub const CanadianAboriginal: Self = Self(40);
    pub const Cans: Self = Self::CanadianAboriginal;
    pub const Yi: Self = Self(41);
    pub const Yiii: Self = Self::Yi;
    pub const Tagalog: Self = Self(42);
    pub const Tglg: Self = Self::Tagalog;
    pub const Hanunoo: Self = Self(43);
    pub const Hano: Self = Self::Hanunoo;
    pub const Buhid: Self = Self(44);
    pub const Buhd: Self = Self::Buhid;
    pub const Tagbanwa: Self = Self(45);
    pub const Tagb: Self = Self::Tagbanwa;
    pub const Braille: Self = Self(46);
    pub const Brai: Self = Self::Braille;
    pub const Cypriot: Self = Self(47);
    pub const Cprt: Self = Self::Cypriot;
    pub const Limbu: Self = Self(48);
    pub const Limb: Self = Self::Limbu;
    pub const LinearB: Self = Self(49);
    pub const Linb: Self = Self::LinearB;
    pub const Osmanya: Self = Self(50);
    pub const Osma: Self = Self::Osmanya;
    pub const Shavian: Self = Self(51);
    pub const Shaw: Self = Self::Shavian;
    pub const TaiLe: Self = Self(52);
    pub const Tale: Self = Self::TaiLe;
    pub const Ugaritic: Self = Self(53);
    pub const Ugar: Self = Self::Ugaritic;
    pub const KatakanaOrHiragana: Self = Self(54);
    pub const Hrkt: Self = Self::KatakanaOrHiragana;
    pub const Buginese: Self = Self(55);
    pub const Bugi: Self = Self::Buginese;
    pub const Glagolitic: Self = Self(56);
    pub const Glag: Self = Self::Glagolitic;
    pub const Kharoshthi: Self = Self(57);
    pub const Khar: Self = Self::Kharoshthi;
    pub const SylotiNagri: Self = Self(58);
    pub const Sylo: Self = Self::SylotiNagri;
    pub const NewTaiLue: Self = Self(59);
    pub const Talu: Self = Self::NewTaiLue;
    pub const Tifinagh: Self = Self(60);
    pub const Tfng: Self = Self::Tifinagh;
    pub const OldPersian: Self = Self(61);
    pub const Xpeo: Self = Self::OldPersian;
    pub const Balinese: Self = Self(62);
    pub const Bali: Self = Self::Balinese;
    pub const Batak: Self = Self(63);
    pub const Batk: Self = Self::Batak;
    /// ISO 15924
    pub const BlisSymbols: Self = Self(64);
    /// ISO 15924
    pub const Blis: Self = Self::BlisSymbols;
    pub const Brahmi: Self = Self(65);
    pub const Brah: Self = Self::Brahmi;
    pub const Cham: Self = Self(66);
    /// ISO 15924
    pub const Cirth: Self = Self(67);
    /// ISO 15924
    pub const Cirt: Self = Self::Cirth;
    /// ISO 15924
    pub const OldChurchSlavonicCyrillic: Self = Self(68);
    /// ISO 15924
    pub const Cyrs: Self = Self::OldChurchSlavonicCyrillic;
    /// ISO 15924
    pub const DemoticEgyptian: Self = Self(69);
    /// ISO 15924
    pub const Egyd: Self = Self::DemoticEgyptian;
    /// ISO 15924
    pub const HieraticEgyptian: Self = Self(70);
    /// ISO 15924
    pub const Egyh: Self = Self::HieraticEgyptian;
    pub const EgyptianHieroglyphs: Self = Self(71);
    pub const Egyp: Self = Self::EgyptianHieroglyphs;
    /// ISO 15924
    pub const Khutsuri: Self = Self(72);
    /// ISO 15924
    pub const Geok: Self = Self::Khutsuri;
    /// ISO 15924
    pub const SimplifiedHan: Self = Self(73);
    /// ISO 15924
    pub const Hans: Self = Self::SimplifiedHan;
    /// ISO 15924
    pub const TraditionalHan: Self = Self(74);
    /// ISO 15924
    pub const Hant: Self = Self::TraditionalHan;
    pub const PahawhHmong: Self = Self(75);
    pub const Hmng: Self = Self::PahawhHmong;
    pub const OldHungarian: Self = Self(76);
    pub const Hung: Self = Self::OldHungarian;
    /// ISO 15924
    pub const HarappanIndus: Self = Self(77);
    /// ISO 15924
    pub const Inds: Self = Self::HarappanIndus;
    pub const Javanese: Self = Self(78);
    pub const Java: Self = Self::Javanese;
    pub const KayahLi: Self = Self(79);
    pub const Kali: Self = Self::KayahLi;
    /// ISO 15924
    pub const LatinFraktur: Self = Self(80);
    /// ISO 15924
    pub const Latf: Self = Self::LatinFraktur;
    /// ISO 15924
    pub const LatinGaelic: Self = Self(81);
    /// ISO 15924
    pub const Latg: Self = Self::LatinGaelic;
    pub const Lepcha: Self = Self(82);
    pub const Lepc: Self = Self::Lepcha;
    pub const LinearA: Self = Self(83);
    pub const Lina: Self = Self::LinearA;
    pub const Mandaic: Self = Self(84);
    pub const Mand: Self = Self::Mandaic;
    /// ISO 15924
    pub const MayanHieroglyphs: Self = Self(85);
    /// ISO 15924
    pub const Maya: Self = Self::MayanHieroglyphs;
    pub const MeroiticHieroglyphs: Self = Self(86);
    pub const Mero: Self = Self::MeroiticHieroglyphs;
    pub const Nko: Self = Self(87);
    pub const Nkoo: Self = Self::Nko;
    pub const OldTurkic: Self = Self(88);
    pub const Orkh: Self = Self::OldTurkic;
    pub const OldPermic: Self = Self(89);
    pub const Perm: Self = Self::OldPermic;
    pub const PhagsPa: Self = Self(90);
    pub const Phag: Self = Self::PhagsPa;
    pub const Phoenician: Self = Self(91);
    pub const Phnx: Self = Self::Phoenician;
    pub const Miao: Self = Self(92);
    pub const Plrd: Self = Self::Miao;
    /// ISO 15924
    pub const Rongorongo: Self = Self(93);
    /// ISO 15924
    pub const Roro: Self = Self::Rongorongo;
    /// ISO 15924
    pub const Sarati: Self = Self(94);
    /// ISO 15924
    pub const Sara: Self = Self::Sarati;
    /// ISO 15924
    pub const EstrangeloSyriac: Self = Self(95);
    /// ISO 15924
    pub const Syre: Self = Self::EstrangeloSyriac;
    /// ISO 15924
    pub const WesternSyriac: Self = Self(96);
    /// ISO 15924
    pub const Syrj: Self = Self::WesternSyriac;
    /// ISO 15924
    pub const EasternSyriac: Self = Self(97);
    /// ISO 15924
    pub const Syrn: Self = Self::EasternSyriac;
    /// ISO 15924
    pub const Tengwar: Self = Self(98);
    /// ISO 15924
    pub const Teng: Self = Self::Tengwar;
    pub const Vai: Self = Self(99);
    pub const Vaii: Self = Self::Vai;
    /// ISO 15924
    pub const VisibleSpeech: Self = Self(100);
    /// ISO 15924
    pub const Visp: Self = Self::VisibleSpeech;
    pub const Cuneiform: Self = Self(101);
    pub const Xsux: Self = Self::Cuneiform;
    /// ISO 15924
    pub const UnwrittenLanguages: Self = Self(102);
    /// ISO 15924
    pub const Zxxx: Self = Self::UnwrittenLanguages;
    pub const Unknown: Self = Self(103);
    pub const Zzzz: Self = Self::Unknown;
    pub const Carian: Self = Self(104);
    pub const Cari: Self = Self::Carian;
    /// ISO 15924
    pub const Japanese: Self = Self(105);
    /// ISO 15924
    pub const Jpan: Self = Self::Japanese;
    pub const TaiTham: Self = Self(106);
    pub const Lana: Self = Self::TaiTham;
    pub const Lycian: Self = Self(107);
    pub const Lyci: Self = Self::Lycian;
    pub const Lydian: Self = Self(108);
    pub const Lydi: Self = Self::Lydian;
    pub const OlChiki: Self = Self(109);
    pub const Olck: Self = Self::OlChiki;
    pub const Rejang: Self = Self(110);
    pub const Rjng: Self = Self::Rejang;
    pub const Saurashtra: Self = Self(111);
    pub const Saur: Self = Self::Saurashtra;
    pub const SignWriting: Self = Self(112);
    pub const Sgnw: Self = Self::SignWriting;
    pub const Sundanese: Self = Self(113);
    pub const Sund: Self = Self::Sundanese;
    /// ISO 15924
    pub const Moon: Self = Self(114);
    pub const MeeteiMayek: Self = Self(115);
    pub const Mtei: Self = Self::MeeteiMayek;
    pub const ImperialAramaic: Self = Self(116);
    pub const Armi: Self = Self::ImperialAramaic;
    pub const Avestan: Self = Self(117);
    pub const Avst: Self = Self::Avestan;
    pub const Chakma: Self = Self(118);
    pub const Cakm: Self = Self::Chakma;
    /// ISO 15924
    pub const Korean: Self = Self(119);
    /// ISO 15924
    pub const Kore: Self = Self::Korean;
    pub const Kaithi: Self = Self(120);
    pub const Kthi: Self = Self::Kaithi;
    pub const Manichaean: Self = Self(121);
    pub const Mani: Self = Self::Manichaean;
    pub const InscriptionalPahlavi: Self = Self(122);
    pub const Phli: Self = Self::InscriptionalPahlavi;
    pub const PsalterPahlavi: Self = Self(123);
    pub const Phlp: Self = Self::PsalterPahlavi;
    /// ISO 15924
    pub const BookPahlavi: Self = Self(124);
    /// ISO 15924
    pub const Phlv: Self = Self::BookPahlavi;
    pub const InscriptionalParthian: Self = Self(125);
    pub const Prti: Self = Self::InscriptionalParthian;
    pub const Samaritan: Self = Self(126);
    pub const Samr: Self = Self::Samaritan;
    pub const TaiViet: Self = Self(127);
    pub const Tavt: Self = Self::TaiViet;
    /// ISO 15924
    pub const MathematicalNotation: Self = Self(128);
    /// ISO 15924
    pub const Zmth: Self = Self::MathematicalNotation;
    /// ISO 15924
    pub const Symbols: Self = Self(129);
    /// ISO 15924
    pub const Zsym: Self = Self::Symbols;
    pub const Bamum: Self = Self(130);
    pub const Bamu: Self = Self::Bamum;
    pub const Lisu: Self = Self(131);
    /// ISO 15924
    pub const NakhiGeba: Self = Self(132);
    /// ISO 15924
    pub const Nkgb: Self = Self::NakhiGeba;
    pub const OldSouthArabian: Self = Self(133);
    pub const Sarb: Self = Self::OldSouthArabian;
    pub const BassaVah: Self = Self(134);
    pub const Bass: Self = Self::BassaVah;
    pub const Duployan: Self = Self(135);
    pub const Dupl: Self = Self::Duployan;
    pub const Elbasan: Self = Self(136);
    pub const Elba: Self = Self::Elbasan;
    pub const Grantha: Self = Self(137);
    pub const Gran: Self = Self::Grantha;
    /// ISO 15924
    pub const Kpelle: Self = Self(138);
    /// ISO 15924
    pub const Kpel: Self = Self::Kpelle;
    /// ISO 15924
    pub const Loma: Self = Self(139);
    pub const MendeKikakui: Self = Self(140);
    pub const Mend: Self = Self::MendeKikakui;
    pub const MeroiticCursive: Self = Self(141);
    pub const Merc: Self = Self::MeroiticCursive;
    pub const OldNorthArabian: Self = Self(142);
    pub const Narb: Self = Self::OldNorthArabian;
    pub const Nabataean: Self = Self(143);
    pub const Nbat: Self = Self::Nabataean;
    pub const Palmyrene: Self = Self(144);
    pub const Palm: Self = Self::Palmyrene;
    pub const Khudawadi: Self = Self(145);
    pub const Sind: Self = Self::Khudawadi;
    pub const WarangCiti: Self = Self(146);
    pub const Wara: Self = Self::WarangCiti;
    /// ISO 15924
    pub const Afaka: Self = Self(147);
    /// ISO 15924
    pub const Afak: Self = Self::Afaka;
    /// ISO 15924
    pub const Jurchen: Self = Self(148);
    /// ISO 15924
    pub const Jurc: Self = Self::Jurchen;
    pub const Mro: Self = Self(149);
    pub const Mroo: Self = Self::Mro;
    pub const Nushu: Self = Self(150);
    pub const Nshu: Self = Self::Nushu;
    pub const Sharada: Self = Self(151);
    pub const Shrd: Self = Self::Sharada;
    pub const SoraSompeng: Self = Self(152);
    pub const Sora: Self = Self::SoraSompeng;
    pub const Takri: Self = Self(153);
    pub const Takr: Self = Self::Takri;
    pub const Tangut: Self = Self(154);
    pub const Tang: Self = Self::Tangut;
    /// ISO 15924
    pub const Woleai: Self = Self(155);
    /// ISO 15924
    pub const Wole: Self = Self::Woleai;
    pub const AnatolianHieroglyphs: Self = Self(156);
    pub const Hluw: Self = Self::AnatolianHieroglyphs;
    pub const Khojki: Self = Self(157);
    pub const Khoj: Self = Self::Khojki;
    pub const Tirhuta: Self = Self(158);
    pub const Tirh: Self = Self::Tirhuta;
    pub const CaucasianAlbanian: Self = Self(159);
    pub const Aghb: Self = Self::CaucasianAlbanian;
    pub const Mahajani: Self = Self(160);
    pub const Mahj: Self = Self::Mahajani;
    pub const Ahom: Self = Self(161);
    pub const Hatran: Self = Self(162);
    pub const Hatr: Self = Self::Hatran;
    pub const Modi: Self = Self(163);
    pub const Multani: Self = Self(164);
    pub const Mult: Self = Self::Multani;
    pub const PauCinHau: Self = Self(165);
    pub const Pauc: Self = Self::PauCinHau;
    pub const Siddham: Self = Self(166);
    pub const Sidd: Self = Self::Siddham;
    pub const Adlam: Self = Self(167);
    pub const Adlm: Self = Self::Adlam;
    pub const Bhaiksuki: Self = Self(168);
    pub const Bhks: Self = Self::Bhaiksuki;
    pub const Marchen: Self = Self(169);
    pub const Marc: Self = Self::Marchen;
    pub const Newa: Self = Self(170);
    pub const Osage: Self = Self(171);
    pub const Osge: Self = Self::Osage;
    /// ISO 15924
    pub const HanWithBopomofo: Self = Self(172);
    /// ISO 15924
    pub const Hanb: Self = Self::HanWithBopomofo;
    /// ISO 15924
    pub const Jamo: Self = Self(173);
    /// ISO 15924
    pub const SymbolsEmoji: Self = Self(174);
    /// ISO 15924
    pub const Zsye: Self = Self::SymbolsEmoji;
    pub const MasaramGondi: Self = Self(175);
    pub const Gonm: Self = Self::MasaramGondi;
    pub const Soyombo: Self = Self(176);
    pub const Soyo: Self = Self::Soyombo;
    pub const ZanabazarSquare: Self = Self(177);
    pub const Zanb: Self = Self::ZanabazarSquare;
    pub const Dogra: Self = Self(178);
    pub const Dogr: Self = Self::Dogra;
    pub const GunjalaGondi: Self = Self(179);
    pub const Gong: Self = Self::GunjalaGondi;
    pub const Makasar: Self = Self(180);
    pub const Maka: Self = Self::Makasar;
    pub const Medefaidrin: Self = Self(181);
    pub const Medf: Self = Self::Medefaidrin;
    pub const HanifiRohingya: Self = Self(182);
    pub const Rohg: Self = Self::HanifiRohingya;
    pub const Sogdian: Self = Self(183);
    pub const Sogd: Self = Self::Sogdian;
    pub const OldSogdian: Self = Self(184);
    pub const Sogo: Self = Self::OldSogdian;
    pub const Elymaic: Self = Self(185);
    pub const Elym: Self = Self::Elymaic;
    pub const NyiakengPuachueHmong: Self = Self(186);
    pub const Hmnp: Self = Self::NyiakengPuachueHmong;
    pub const Nandinagari: Self = Self(187);
    pub const Nand: Self = Self::Nandinagari;
    pub const Wancho: Self = Self(188);
    pub const Wcho: Self = Self::Wancho;
    pub const Chorasmian: Self = Self(189);
    pub const Chrs: Self = Self::Chorasmian;
    pub const DivesAkuru: Self = Self(190);
    pub const Diak: Self = Self::DivesAkuru;
    pub const KhitanSmallScript: Self = Self(191);
    pub const Kits: Self = Self::KhitanSmallScript;
    pub const Yezidi: Self = Self(192);
    pub const Yezi: Self = Self::Yezidi;
    pub const CyproMinoan: Self = Self(193);
    pub const Cpmn: Self = Self::CyproMinoan;
    pub const OldUyghur: Self = Self(194);
    pub const Ougr: Self = Self::OldUyghur;
    pub const Tangsa: Self = Self(195);
    pub const Tnsa: Self = Self::Tangsa;
    pub const Toto: Self = Self(196);
    pub const Vithkuqi: Self = Self(197);
    pub const Vith: Self = Self::Vithkuqi;
    pub const Kawi: Self = Self(198);
    pub const NagMundari: Self = Self(199);
    pub const Nagm: Self = Self::NagMundari;
    /// ISO 15924
    pub const ArabicNastaliq: Self = Self(200);
    /// ISO 15924
    pub const Aran: Self = Self::ArabicNastaliq;
    pub const Garay: Self = Self(201);
    pub const Gara: Self = Self::Garay;
    pub const GurungKhema: Self = Self(202);
    pub const Gukh: Self = Self::GurungKhema;
    pub const KiratRai: Self = Self(203);
    pub const Krai: Self = Self::KiratRai;
    pub const OlOnal: Self = Self(204);
    pub const Onao: Self = Self::OlOnal;
    pub const Sunuwar: Self = Self(205);
    pub const Sunu: Self = Self::Sunuwar;
    pub const Todhri: Self = Self(206);
    pub const Todr: Self = Self::Todhri;
    pub const TuluTigalari: Self = Self(207);
    pub const Tutg: Self = Self::TuluTigalari;
    pub const BeriaErfe: Self = Self(208);
    pub const Berf: Self = Self::BeriaErfe;
    pub const Sidetic: Self = Self(209);
    pub const Sidt: Self = Self::Sidetic;
    pub const TaiYo: Self = Self(210);
    pub const Tayo: Self = Self::TaiYo;
    pub const TolongSiki: Self = Self(211);
    pub const Tols: Self = Self::TolongSiki;
    /// ISO 15924
    pub const TraditionalHanWithLatin: Self = Self(212);
    /// ISO 15924
    pub const Hntl: Self = Self::TraditionalHanWithLatin;
}

#[cfg(feature = "datagen")]
impl databake::Bake for Script {
    fn bake(&self, env: &databake::CrateEnv) -> databake::TokenStream {
        env.insert("icu_properties");
        match *self {
            Self::Common => databake::quote!(icu_properties::props::Script::Common),
            Self::Inherited => databake::quote!(icu_properties::props::Script::Inherited),
            Self::Arabic => databake::quote!(icu_properties::props::Script::Arabic),
            Self::Armenian => databake::quote!(icu_properties::props::Script::Armenian),
            Self::Bengali => databake::quote!(icu_properties::props::Script::Bengali),
            Self::Bopomofo => databake::quote!(icu_properties::props::Script::Bopomofo),
            Self::Cherokee => databake::quote!(icu_properties::props::Script::Cherokee),
            Self::Coptic => databake::quote!(icu_properties::props::Script::Coptic),
            Self::Cyrillic => databake::quote!(icu_properties::props::Script::Cyrillic),
            Self::Deseret => databake::quote!(icu_properties::props::Script::Deseret),
            Self::Devanagari => databake::quote!(icu_properties::props::Script::Devanagari),
            Self::Ethiopic => databake::quote!(icu_properties::props::Script::Ethiopic),
            Self::Georgian => databake::quote!(icu_properties::props::Script::Georgian),
            Self::Gothic => databake::quote!(icu_properties::props::Script::Gothic),
            Self::Greek => databake::quote!(icu_properties::props::Script::Greek),
            Self::Gujarati => databake::quote!(icu_properties::props::Script::Gujarati),
            Self::Gurmukhi => databake::quote!(icu_properties::props::Script::Gurmukhi),
            Self::Han => databake::quote!(icu_properties::props::Script::Han),
            Self::Hangul => databake::quote!(icu_properties::props::Script::Hangul),
            Self::Hebrew => databake::quote!(icu_properties::props::Script::Hebrew),
            Self::Hiragana => databake::quote!(icu_properties::props::Script::Hiragana),
            Self::Kannada => databake::quote!(icu_properties::props::Script::Kannada),
            Self::Katakana => databake::quote!(icu_properties::props::Script::Katakana),
            Self::Khmer => databake::quote!(icu_properties::props::Script::Khmer),
            Self::Lao => databake::quote!(icu_properties::props::Script::Lao),
            Self::Latin => databake::quote!(icu_properties::props::Script::Latin),
            Self::Malayalam => databake::quote!(icu_properties::props::Script::Malayalam),
            Self::Mongolian => databake::quote!(icu_properties::props::Script::Mongolian),
            Self::Myanmar => databake::quote!(icu_properties::props::Script::Myanmar),
            Self::Ogham => databake::quote!(icu_properties::props::Script::Ogham),
            Self::OldItalic => databake::quote!(icu_properties::props::Script::OldItalic),
            Self::Oriya => databake::quote!(icu_properties::props::Script::Oriya),
            Self::Runic => databake::quote!(icu_properties::props::Script::Runic),
            Self::Sinhala => databake::quote!(icu_properties::props::Script::Sinhala),
            Self::Syriac => databake::quote!(icu_properties::props::Script::Syriac),
            Self::Tamil => databake::quote!(icu_properties::props::Script::Tamil),
            Self::Telugu => databake::quote!(icu_properties::props::Script::Telugu),
            Self::Thaana => databake::quote!(icu_properties::props::Script::Thaana),
            Self::Thai => databake::quote!(icu_properties::props::Script::Thai),
            Self::Tibetan => databake::quote!(icu_properties::props::Script::Tibetan),
            Self::CanadianAboriginal => databake::quote!(icu_properties::props::Script::CanadianAboriginal),
            Self::Yi => databake::quote!(icu_properties::props::Script::Yi),
            Self::Tagalog => databake::quote!(icu_properties::props::Script::Tagalog),
            Self::Hanunoo => databake::quote!(icu_properties::props::Script::Hanunoo),
            Self::Buhid => databake::quote!(icu_properties::props::Script::Buhid),
            Self::Tagbanwa => databake::quote!(icu_properties::props::Script::Tagbanwa),
            Self::Braille => databake::quote!(icu_properties::props::Script::Braille),
            Self::Cypriot => databake::quote!(icu_properties::props::Script::Cypriot),
            Self::Limbu => databake::quote!(icu_properties::props::Script::Limbu),
            Self::LinearB => databake::quote!(icu_properties::props::Script::LinearB),
            Self::Osmanya => databake::quote!(icu_properties::props::Script::Osmanya),
            Self::Shavian => databake::quote!(icu_properties::props::Script::Shavian),
            Self::TaiLe => databake::quote!(icu_properties::props::Script::TaiLe),
            Self::Ugaritic => databake::quote!(icu_properties::props::Script::Ugaritic),
            Self::KatakanaOrHiragana => databake::quote!(icu_properties::props::Script::KatakanaOrHiragana),
            Self::Buginese => databake::quote!(icu_properties::props::Script::Buginese),
            Self::Glagolitic => databake::quote!(icu_properties::props::Script::Glagolitic),
            Self::Kharoshthi => databake::quote!(icu_properties::props::Script::Kharoshthi),
            Self::SylotiNagri => databake::quote!(icu_properties::props::Script::SylotiNagri),
            Self::NewTaiLue => databake::quote!(icu_properties::props::Script::NewTaiLue),
            Self::Tifinagh => databake::quote!(icu_properties::props::Script::Tifinagh),
            Self::OldPersian => databake::quote!(icu_properties::props::Script::OldPersian),
            Self::Balinese => databake::quote!(icu_properties::props::Script::Balinese),
            Self::Batak => databake::quote!(icu_properties::props::Script::Batak),
            Self::BlisSymbols => databake::quote!(icu_properties::props::Script::BlisSymbols),
            Self::Brahmi => databake::quote!(icu_properties::props::Script::Brahmi),
            Self::Cham => databake::quote!(icu_properties::props::Script::Cham),
            Self::Cirth => databake::quote!(icu_properties::props::Script::Cirth),
            Self::OldChurchSlavonicCyrillic => databake::quote!(icu_properties::props::Script::OldChurchSlavonicCyrillic),
            Self::DemoticEgyptian => databake::quote!(icu_properties::props::Script::DemoticEgyptian),
            Self::HieraticEgyptian => databake::quote!(icu_properties::props::Script::HieraticEgyptian),
            Self::EgyptianHieroglyphs => databake::quote!(icu_properties::props::Script::EgyptianHieroglyphs),
            Self::Khutsuri => databake::quote!(icu_properties::props::Script::Khutsuri),
            Self::SimplifiedHan => databake::quote!(icu_properties::props::Script::SimplifiedHan),
            Self::TraditionalHan => databake::quote!(icu_properties::props::Script::TraditionalHan),
            Self::PahawhHmong => databake::quote!(icu_properties::props::Script::PahawhHmong),
            Self::OldHungarian => databake::quote!(icu_properties::props::Script::OldHungarian),
            Self::HarappanIndus => databake::quote!(icu_properties::props::Script::HarappanIndus),
            Self::Javanese => databake::quote!(icu_properties::props::Script::Javanese),
            Self::KayahLi => databake::quote!(icu_properties::props::Script::KayahLi),
            Self::LatinFraktur => databake::quote!(icu_properties::props::Script::LatinFraktur),
            Self::LatinGaelic => databake::quote!(icu_properties::props::Script::LatinGaelic),
            Self::Lepcha => databake::quote!(icu_properties::props::Script::Lepcha),
            Self::LinearA => databake::quote!(icu_properties::props::Script::LinearA),
            Self::Mandaic => databake::quote!(icu_properties::props::Script::Mandaic),
            Self::MayanHieroglyphs => databake::quote!(icu_properties::props::Script::MayanHieroglyphs),
            Self::MeroiticHieroglyphs => databake::quote!(icu_properties::props::Script::MeroiticHieroglyphs),
            Self::Nko => databake::quote!(icu_properties::props::Script::Nko),
            Self::OldTurkic => databake::quote!(icu_properties::props::Script::OldTurkic),
            Self::OldPermic => databake::quote!(icu_properties::props::Script::OldPermic),
            Self::PhagsPa => databake::quote!(icu_properties::props::Script::PhagsPa),
            Self::Phoenician => databake::quote!(icu_properties::props::Script::Phoenician),
            Self::Miao => databake::quote!(icu_properties::props::Script::Miao),
            Self::Rongorongo => databake::quote!(icu_properties::props::Script::Rongorongo),
            Self::Sarati => databake::quote!(icu_properties::props::Script::Sarati),
            Self::EstrangeloSyriac => databake::quote!(icu_properties::props::Script::EstrangeloSyriac),
            Self::WesternSyriac => databake::quote!(icu_properties::props::Script::WesternSyriac),
            Self::EasternSyriac => databake::quote!(icu_properties::props::Script::EasternSyriac),
            Self::Tengwar => databake::quote!(icu_properties::props::Script::Tengwar),
            Self::Vai => databake::quote!(icu_properties::props::Script::Vai),
            Self::VisibleSpeech => databake::quote!(icu_properties::props::Script::VisibleSpeech),
            Self::Cuneiform => databake::quote!(icu_properties::props::Script::Cuneiform),
            Self::UnwrittenLanguages => databake::quote!(icu_properties::props::Script::UnwrittenLanguages),
            Self::Unknown => databake::quote!(icu_properties::props::Script::Unknown),
            Self::Carian => databake::quote!(icu_properties::props::Script::Carian),
            Self::Japanese => databake::quote!(icu_properties::props::Script::Japanese),
            Self::TaiTham => databake::quote!(icu_properties::props::Script::TaiTham),
            Self::Lycian => databake::quote!(icu_properties::props::Script::Lycian),
            Self::Lydian => databake::quote!(icu_properties::props::Script::Lydian),
            Self::OlChiki => databake::quote!(icu_properties::props::Script::OlChiki),
            Self::Rejang => databake::quote!(icu_properties::props::Script::Rejang),
            Self::Saurashtra => databake::quote!(icu_properties::props::Script::Saurashtra),
            Self::SignWriting => databake::quote!(icu_properties::props::Script::SignWriting),
            Self::Sundanese => databake::quote!(icu_properties::props::Script::Sundanese),
            Self::Moon => databake::quote!(icu_properties::props::Script::Moon),
            Self::MeeteiMayek => databake::quote!(icu_properties::props::Script::MeeteiMayek),
            Self::ImperialAramaic => databake::quote!(icu_properties::props::Script::ImperialAramaic),
            Self::Avestan => databake::quote!(icu_properties::props::Script::Avestan),
            Self::Chakma => databake::quote!(icu_properties::props::Script::Chakma),
            Self::Korean => databake::quote!(icu_properties::props::Script::Korean),
            Self::Kaithi => databake::quote!(icu_properties::props::Script::Kaithi),
            Self::Manichaean => databake::quote!(icu_properties::props::Script::Manichaean),
            Self::InscriptionalPahlavi => databake::quote!(icu_properties::props::Script::InscriptionalPahlavi),
            Self::PsalterPahlavi => databake::quote!(icu_properties::props::Script::PsalterPahlavi),
            Self::BookPahlavi => databake::quote!(icu_properties::props::Script::BookPahlavi),
            Self::InscriptionalParthian => databake::quote!(icu_properties::props::Script::InscriptionalParthian),
            Self::Samaritan => databake::quote!(icu_properties::props::Script::Samaritan),
            Self::TaiViet => databake::quote!(icu_properties::props::Script::TaiViet),
            Self::MathematicalNotation => databake::quote!(icu_properties::props::Script::MathematicalNotation),
            Self::Symbols => databake::quote!(icu_properties::props::Script::Symbols),
            Self::Bamum => databake::quote!(icu_properties::props::Script::Bamum),
            Self::Lisu => databake::quote!(icu_properties::props::Script::Lisu),
            Self::NakhiGeba => databake::quote!(icu_properties::props::Script::NakhiGeba),
            Self::OldSouthArabian => databake::quote!(icu_properties::props::Script::OldSouthArabian),
            Self::BassaVah => databake::quote!(icu_properties::props::Script::BassaVah),
            Self::Duployan => databake::quote!(icu_properties::props::Script::Duployan),
            Self::Elbasan => databake::quote!(icu_properties::props::Script::Elbasan),
            Self::Grantha => databake::quote!(icu_properties::props::Script::Grantha),
            Self::Kpelle => databake::quote!(icu_properties::props::Script::Kpelle),
            Self::Loma => databake::quote!(icu_properties::props::Script::Loma),
            Self::MendeKikakui => databake::quote!(icu_properties::props::Script::MendeKikakui),
            Self::MeroiticCursive => databake::quote!(icu_properties::props::Script::MeroiticCursive),
            Self::OldNorthArabian => databake::quote!(icu_properties::props::Script::OldNorthArabian),
            Self::Nabataean => databake::quote!(icu_properties::props::Script::Nabataean),
            Self::Palmyrene => databake::quote!(icu_properties::props::Script::Palmyrene),
            Self::Khudawadi => databake::quote!(icu_properties::props::Script::Khudawadi),
            Self::WarangCiti => databake::quote!(icu_properties::props::Script::WarangCiti),
            Self::Afaka => databake::quote!(icu_properties::props::Script::Afaka),
            Self::Jurchen => databake::quote!(icu_properties::props::Script::Jurchen),
            Self::Mro => databake::quote!(icu_properties::props::Script::Mro),
            Self::Nushu => databake::quote!(icu_properties::props::Script::Nushu),
            Self::Sharada => databake::quote!(icu_properties::props::Script::Sharada),
            Self::SoraSompeng => databake::quote!(icu_properties::props::Script::SoraSompeng),
            Self::Takri => databake::quote!(icu_properties::props::Script::Takri),
            Self::Tangut => databake::quote!(icu_properties::props::Script::Tangut),
            Self::Woleai => databake::quote!(icu_properties::props::Script::Woleai),
            Self::AnatolianHieroglyphs => databake::quote!(icu_properties::props::Script::AnatolianHieroglyphs),
            Self::Khojki => databake::quote!(icu_properties::props::Script::Khojki),
            Self::Tirhuta => databake::quote!(icu_properties::props::Script::Tirhuta),
            Self::CaucasianAlbanian => databake::quote!(icu_properties::props::Script::CaucasianAlbanian),
            Self::Mahajani => databake::quote!(icu_properties::props::Script::Mahajani),
            Self::Ahom => databake::quote!(icu_properties::props::Script::Ahom),
            Self::Hatran => databake::quote!(icu_properties::props::Script::Hatran),
            Self::Modi => databake::quote!(icu_properties::props::Script::Modi),
            Self::Multani => databake::quote!(icu_properties::props::Script::Multani),
            Self::PauCinHau => databake::quote!(icu_properties::props::Script::PauCinHau),
            Self::Siddham => databake::quote!(icu_properties::props::Script::Siddham),
            Self::Adlam => databake::quote!(icu_properties::props::Script::Adlam),
            Self::Bhaiksuki => databake::quote!(icu_properties::props::Script::Bhaiksuki),
            Self::Marchen => databake::quote!(icu_properties::props::Script::Marchen),
            Self::Newa => databake::quote!(icu_properties::props::Script::Newa),
            Self::Osage => databake::quote!(icu_properties::props::Script::Osage),
            Self::HanWithBopomofo => databake::quote!(icu_properties::props::Script::HanWithBopomofo),
            Self::Jamo => databake::quote!(icu_properties::props::Script::Jamo),
            Self::SymbolsEmoji => databake::quote!(icu_properties::props::Script::SymbolsEmoji),
            Self::MasaramGondi => databake::quote!(icu_properties::props::Script::MasaramGondi),
            Self::Soyombo => databake::quote!(icu_properties::props::Script::Soyombo),
            Self::ZanabazarSquare => databake::quote!(icu_properties::props::Script::ZanabazarSquare),
            Self::Dogra => databake::quote!(icu_properties::props::Script::Dogra),
            Self::GunjalaGondi => databake::quote!(icu_properties::props::Script::GunjalaGondi),
            Self::Makasar => databake::quote!(icu_properties::props::Script::Makasar),
            Self::Medefaidrin => databake::quote!(icu_properties::props::Script::Medefaidrin),
            Self::HanifiRohingya => databake::quote!(icu_properties::props::Script::HanifiRohingya),
            Self::Sogdian => databake::quote!(icu_properties::props::Script::Sogdian),
            Self::OldSogdian => databake::quote!(icu_properties::props::Script::OldSogdian),
            Self::Elymaic => databake::quote!(icu_properties::props::Script::Elymaic),
            Self::NyiakengPuachueHmong => databake::quote!(icu_properties::props::Script::NyiakengPuachueHmong),
            Self::Nandinagari => databake::quote!(icu_properties::props::Script::Nandinagari),
            Self::Wancho => databake::quote!(icu_properties::props::Script::Wancho),
            Self::Chorasmian => databake::quote!(icu_properties::props::Script::Chorasmian),
            Self::DivesAkuru => databake::quote!(icu_properties::props::Script::DivesAkuru),
            Self::KhitanSmallScript => databake::quote!(icu_properties::props::Script::KhitanSmallScript),
            Self::Yezidi => databake::quote!(icu_properties::props::Script::Yezidi),
            Self::CyproMinoan => databake::quote!(icu_properties::props::Script::CyproMinoan),
            Self::OldUyghur => databake::quote!(icu_properties::props::Script::OldUyghur),
            Self::Tangsa => databake::quote!(icu_properties::props::Script::Tangsa),
            Self::Toto => databake::quote!(icu_properties::props::Script::Toto),
            Self::Vithkuqi => databake::quote!(icu_properties::props::Script::Vithkuqi),
            Self::Kawi => databake::quote!(icu_properties::props::Script::Kawi),
            Self::NagMundari => databake::quote!(icu_properties::props::Script::NagMundari),
            Self::ArabicNastaliq => databake::quote!(icu_properties::props::Script::ArabicNastaliq),
            Self::Garay => databake::quote!(icu_properties::props::Script::Garay),
            Self::GurungKhema => databake::quote!(icu_properties::props::Script::GurungKhema),
            Self::KiratRai => databake::quote!(icu_properties::props::Script::KiratRai),
            Self::OlOnal => databake::quote!(icu_properties::props::Script::OlOnal),
            Self::Sunuwar => databake::quote!(icu_properties::props::Script::Sunuwar),
            Self::Todhri => databake::quote!(icu_properties::props::Script::Todhri),
            Self::TuluTigalari => databake::quote!(icu_properties::props::Script::TuluTigalari),
            Self::BeriaErfe => databake::quote!(icu_properties::props::Script::BeriaErfe),
            Self::Sidetic => databake::quote!(icu_properties::props::Script::Sidetic),
            Self::TaiYo => databake::quote!(icu_properties::props::Script::TaiYo),
            Self::TolongSiki => databake::quote!(icu_properties::props::Script::TolongSiki),
            Self::TraditionalHanWithLatin => databake::quote!(icu_properties::props::Script::TraditionalHanWithLatin),
            Self(v) => databake::quote!(icu_properties::props::Script(#v)),
        }
    }
}


impl From<Script> for u16  {
    fn from(other: Script) -> Self {
        other.0
    }
}

impl Script {
    /// Deprecated
    #[deprecated]
    pub const ALL_VALUES: &'static [Self] = &[
        Self::Common,
        Self::Inherited,
        Self::Arabic,
        Self::Armenian,
        Self::Bengali,
        Self::Bopomofo,
        Self::Cherokee,
        Self::Coptic,
        Self::Cyrillic,
        Self::Deseret,
        Self::Devanagari,
        Self::Ethiopic,
        Self::Georgian,
        Self::Gothic,
        Self::Greek,
        Self::Gujarati,
        Self::Gurmukhi,
        Self::Han,
        Self::Hangul,
        Self::Hebrew,
        Self::Hiragana,
        Self::Kannada,
        Self::Katakana,
        Self::Khmer,
        Self::Lao,
        Self::Latin,
        Self::Malayalam,
        Self::Mongolian,
        Self::Myanmar,
        Self::Ogham,
        Self::OldItalic,
        Self::Oriya,
        Self::Runic,
        Self::Sinhala,
        Self::Syriac,
        Self::Tamil,
        Self::Telugu,
        Self::Thaana,
        Self::Thai,
        Self::Tibetan,
        Self::CanadianAboriginal,
        Self::Yi,
        Self::Tagalog,
        Self::Hanunoo,
        Self::Buhid,
        Self::Tagbanwa,
        Self::Braille,
        Self::Cypriot,
        Self::Limbu,
        Self::LinearB,
        Self::Osmanya,
        Self::Shavian,
        Self::TaiLe,
        Self::Ugaritic,
        Self::KatakanaOrHiragana,
        Self::Buginese,
        Self::Glagolitic,
        Self::Kharoshthi,
        Self::SylotiNagri,
        Self::NewTaiLue,
        Self::Tifinagh,
        Self::OldPersian,
        Self::Balinese,
        Self::Batak,
        Self::BlisSymbols,
        Self::Brahmi,
        Self::Cham,
        Self::Cirth,
        Self::OldChurchSlavonicCyrillic,
        Self::DemoticEgyptian,
        Self::HieraticEgyptian,
        Self::EgyptianHieroglyphs,
        Self::Khutsuri,
        Self::SimplifiedHan,
        Self::TraditionalHan,
        Self::PahawhHmong,
        Self::OldHungarian,
        Self::HarappanIndus,
        Self::Javanese,
        Self::KayahLi,
        Self::LatinFraktur,
        Self::LatinGaelic,
        Self::Lepcha,
        Self::LinearA,
        Self::Mandaic,
        Self::MayanHieroglyphs,
        Self::MeroiticHieroglyphs,
        Self::Nko,
        Self::OldTurkic,
        Self::OldPermic,
        Self::PhagsPa,
        Self::Phoenician,
        Self::Miao,
        Self::Rongorongo,
        Self::Sarati,
        Self::EstrangeloSyriac,
        Self::WesternSyriac,
        Self::EasternSyriac,
        Self::Tengwar,
        Self::Vai,
        Self::VisibleSpeech,
        Self::Cuneiform,
        Self::UnwrittenLanguages,
        Self::Unknown,
        Self::Carian,
        Self::Japanese,
        Self::TaiTham,
        Self::Lycian,
        Self::Lydian,
        Self::OlChiki,
        Self::Rejang,
        Self::Saurashtra,
        Self::SignWriting,
        Self::Sundanese,
        Self::Moon,
        Self::MeeteiMayek,
        Self::ImperialAramaic,
        Self::Avestan,
        Self::Chakma,
        Self::Korean,
        Self::Kaithi,
        Self::Manichaean,
        Self::InscriptionalPahlavi,
        Self::PsalterPahlavi,
        Self::BookPahlavi,
        Self::InscriptionalParthian,
        Self::Samaritan,
        Self::TaiViet,
        Self::MathematicalNotation,
        Self::Symbols,
        Self::Bamum,
        Self::Lisu,
        Self::NakhiGeba,
        Self::OldSouthArabian,
        Self::BassaVah,
        Self::Duployan,
        Self::Elbasan,
        Self::Grantha,
        Self::Kpelle,
        Self::Loma,
        Self::MendeKikakui,
        Self::MeroiticCursive,
        Self::OldNorthArabian,
        Self::Nabataean,
        Self::Palmyrene,
        Self::Khudawadi,
        Self::WarangCiti,
        Self::Afaka,
        Self::Jurchen,
        Self::Mro,
        Self::Nushu,
        Self::Sharada,
        Self::SoraSompeng,
        Self::Takri,
        Self::Tangut,
        Self::Woleai,
        Self::AnatolianHieroglyphs,
        Self::Khojki,
        Self::Tirhuta,
        Self::CaucasianAlbanian,
        Self::Mahajani,
        Self::Ahom,
        Self::Hatran,
        Self::Modi,
        Self::Multani,
        Self::PauCinHau,
        Self::Siddham,
        Self::Adlam,
        Self::Bhaiksuki,
        Self::Marchen,
        Self::Newa,
        Self::Osage,
        Self::HanWithBopomofo,
        Self::Jamo,
        Self::SymbolsEmoji,
        Self::MasaramGondi,
        Self::Soyombo,
        Self::ZanabazarSquare,
        Self::Dogra,
        Self::GunjalaGondi,
        Self::Makasar,
        Self::Medefaidrin,
        Self::HanifiRohingya,
        Self::Sogdian,
        Self::OldSogdian,
        Self::Elymaic,
        Self::NyiakengPuachueHmong,
        Self::Nandinagari,
        Self::Wancho,
        Self::Chorasmian,
        Self::DivesAkuru,
        Self::KhitanSmallScript,
        Self::Yezidi,
        Self::CyproMinoan,
        Self::OldUyghur,
        Self::Tangsa,
        Self::Toto,
        Self::Vithkuqi,
        Self::Kawi,
        Self::NagMundari,
        Self::ArabicNastaliq,
        Self::Garay,
        Self::GurungKhema,
        Self::KiratRai,
        Self::OlOnal,
        Self::Sunuwar,
        Self::Todhri,
        Self::TuluTigalari,
        Self::BeriaErfe,
        Self::Sidetic,
        Self::TaiYo,
        Self::TolongSiki,
        Self::TraditionalHanWithLatin,
    ];

    #[cfg(feature = "datagen")]
    #[doc(hidden)]
    pub fn names() -> impl Iterator<Item = (&'static str, Self)> {
        [
            ("Zyyy", Self::Common),
            ("Zinh", Self::Inherited),
            ("Arab", Self::Arabic),
            ("Armn", Self::Armenian),
            ("Beng", Self::Bengali),
            ("Bopo", Self::Bopomofo),
            ("Cher", Self::Cherokee),
            ("Copt", Self::Coptic),
            ("Cyrl", Self::Cyrillic),
            ("Dsrt", Self::Deseret),
            ("Deva", Self::Devanagari),
            ("Ethi", Self::Ethiopic),
            ("Geor", Self::Georgian),
            ("Goth", Self::Gothic),
            ("Grek", Self::Greek),
            ("Gujr", Self::Gujarati),
            ("Guru", Self::Gurmukhi),
            ("Hani", Self::Han),
            ("Hang", Self::Hangul),
            ("Hebr", Self::Hebrew),
            ("Hira", Self::Hiragana),
            ("Knda", Self::Kannada),
            ("Kana", Self::Katakana),
            ("Khmr", Self::Khmer),
            ("Laoo", Self::Lao),
            ("Latn", Self::Latin),
            ("Mlym", Self::Malayalam),
            ("Mong", Self::Mongolian),
            ("Mymr", Self::Myanmar),
            ("Ogam", Self::Ogham),
            ("Ital", Self::OldItalic),
            ("Orya", Self::Oriya),
            ("Runr", Self::Runic),
            ("Sinh", Self::Sinhala),
            ("Syrc", Self::Syriac),
            ("Taml", Self::Tamil),
            ("Telu", Self::Telugu),
            ("Thaa", Self::Thaana),
            ("Thai", Self::Thai),
            ("Tibt", Self::Tibetan),
            ("Cans", Self::CanadianAboriginal),
            ("Yiii", Self::Yi),
            ("Tglg", Self::Tagalog),
            ("Hano", Self::Hanunoo),
            ("Buhd", Self::Buhid),
            ("Tagb", Self::Tagbanwa),
            ("Brai", Self::Braille),
            ("Cprt", Self::Cypriot),
            ("Limb", Self::Limbu),
            ("Linb", Self::LinearB),
            ("Osma", Self::Osmanya),
            ("Shaw", Self::Shavian),
            ("Tale", Self::TaiLe),
            ("Ugar", Self::Ugaritic),
            ("Hrkt", Self::KatakanaOrHiragana),
            ("Bugi", Self::Buginese),
            ("Glag", Self::Glagolitic),
            ("Khar", Self::Kharoshthi),
            ("Sylo", Self::SylotiNagri),
            ("Talu", Self::NewTaiLue),
            ("Tfng", Self::Tifinagh),
            ("Xpeo", Self::OldPersian),
            ("Bali", Self::Balinese),
            ("Batk", Self::Batak),
            ("Blis", Self::BlisSymbols),
            ("Brah", Self::Brahmi),
            ("Cham", Self::Cham),
            ("Cirt", Self::Cirth),
            ("Cyrs", Self::OldChurchSlavonicCyrillic),
            ("Egyd", Self::DemoticEgyptian),
            ("Egyh", Self::HieraticEgyptian),
            ("Egyp", Self::EgyptianHieroglyphs),
            ("Geok", Self::Khutsuri),
            ("Hans", Self::SimplifiedHan),
            ("Hant", Self::TraditionalHan),
            ("Hmng", Self::PahawhHmong),
            ("Hung", Self::OldHungarian),
            ("Inds", Self::HarappanIndus),
            ("Java", Self::Javanese),
            ("Kali", Self::KayahLi),
            ("Latf", Self::LatinFraktur),
            ("Latg", Self::LatinGaelic),
            ("Lepc", Self::Lepcha),
            ("Lina", Self::LinearA),
            ("Mand", Self::Mandaic),
            ("Maya", Self::MayanHieroglyphs),
            ("Mero", Self::MeroiticHieroglyphs),
            ("Nkoo", Self::Nko),
            ("Orkh", Self::OldTurkic),
            ("Perm", Self::OldPermic),
            ("Phag", Self::PhagsPa),
            ("Phnx", Self::Phoenician),
            ("Plrd", Self::Miao),
            ("Roro", Self::Rongorongo),
            ("Sara", Self::Sarati),
            ("Syre", Self::EstrangeloSyriac),
            ("Syrj", Self::WesternSyriac),
            ("Syrn", Self::EasternSyriac),
            ("Teng", Self::Tengwar),
            ("Vaii", Self::Vai),
            ("Visp", Self::VisibleSpeech),
            ("Xsux", Self::Cuneiform),
            ("Zxxx", Self::UnwrittenLanguages),
            ("Zzzz", Self::Unknown),
            ("Cari", Self::Carian),
            ("Jpan", Self::Japanese),
            ("Lana", Self::TaiTham),
            ("Lyci", Self::Lycian),
            ("Lydi", Self::Lydian),
            ("Olck", Self::OlChiki),
            ("Rjng", Self::Rejang),
            ("Saur", Self::Saurashtra),
            ("Sgnw", Self::SignWriting),
            ("Sund", Self::Sundanese),
            ("Moon", Self::Moon),
            ("Mtei", Self::MeeteiMayek),
            ("Armi", Self::ImperialAramaic),
            ("Avst", Self::Avestan),
            ("Cakm", Self::Chakma),
            ("Kore", Self::Korean),
            ("Kthi", Self::Kaithi),
            ("Mani", Self::Manichaean),
            ("Phli", Self::InscriptionalPahlavi),
            ("Phlp", Self::PsalterPahlavi),
            ("Phlv", Self::BookPahlavi),
            ("Prti", Self::InscriptionalParthian),
            ("Samr", Self::Samaritan),
            ("Tavt", Self::TaiViet),
            ("Zmth", Self::MathematicalNotation),
            ("Zsym", Self::Symbols),
            ("Bamu", Self::Bamum),
            ("Lisu", Self::Lisu),
            ("Nkgb", Self::NakhiGeba),
            ("Sarb", Self::OldSouthArabian),
            ("Bass", Self::BassaVah),
            ("Dupl", Self::Duployan),
            ("Elba", Self::Elbasan),
            ("Gran", Self::Grantha),
            ("Kpel", Self::Kpelle),
            ("Loma", Self::Loma),
            ("Mend", Self::MendeKikakui),
            ("Merc", Self::MeroiticCursive),
            ("Narb", Self::OldNorthArabian),
            ("Nbat", Self::Nabataean),
            ("Palm", Self::Palmyrene),
            ("Sind", Self::Khudawadi),
            ("Wara", Self::WarangCiti),
            ("Afak", Self::Afaka),
            ("Jurc", Self::Jurchen),
            ("Mroo", Self::Mro),
            ("Nshu", Self::Nushu),
            ("Shrd", Self::Sharada),
            ("Sora", Self::SoraSompeng),
            ("Takr", Self::Takri),
            ("Tang", Self::Tangut),
            ("Wole", Self::Woleai),
            ("Hluw", Self::AnatolianHieroglyphs),
            ("Khoj", Self::Khojki),
            ("Tirh", Self::Tirhuta),
            ("Aghb", Self::CaucasianAlbanian),
            ("Mahj", Self::Mahajani),
            ("Ahom", Self::Ahom),
            ("Hatr", Self::Hatran),
            ("Modi", Self::Modi),
            ("Mult", Self::Multani),
            ("Pauc", Self::PauCinHau),
            ("Sidd", Self::Siddham),
            ("Adlm", Self::Adlam),
            ("Bhks", Self::Bhaiksuki),
            ("Marc", Self::Marchen),
            ("Newa", Self::Newa),
            ("Osge", Self::Osage),
            ("Hanb", Self::HanWithBopomofo),
            ("Jamo", Self::Jamo),
            ("Zsye", Self::SymbolsEmoji),
            ("Gonm", Self::MasaramGondi),
            ("Soyo", Self::Soyombo),
            ("Zanb", Self::ZanabazarSquare),
            ("Dogr", Self::Dogra),
            ("Gong", Self::GunjalaGondi),
            ("Maka", Self::Makasar),
            ("Medf", Self::Medefaidrin),
            ("Rohg", Self::HanifiRohingya),
            ("Sogd", Self::Sogdian),
            ("Sogo", Self::OldSogdian),
            ("Elym", Self::Elymaic),
            ("Hmnp", Self::NyiakengPuachueHmong),
            ("Nand", Self::Nandinagari),
            ("Wcho", Self::Wancho),
            ("Chrs", Self::Chorasmian),
            ("Diak", Self::DivesAkuru),
            ("Kits", Self::KhitanSmallScript),
            ("Yezi", Self::Yezidi),
            ("Cpmn", Self::CyproMinoan),
            ("Ougr", Self::OldUyghur),
            ("Tnsa", Self::Tangsa),
            ("Toto", Self::Toto),
            ("Vith", Self::Vithkuqi),
            ("Kawi", Self::Kawi),
            ("Nagm", Self::NagMundari),
            ("Aran", Self::ArabicNastaliq),
            ("Gara", Self::Garay),
            ("Gukh", Self::GurungKhema),
            ("Krai", Self::KiratRai),
            ("Onao", Self::OlOnal),
            ("Sunu", Self::Sunuwar),
            ("Todr", Self::Todhri),
            ("Tutg", Self::TuluTigalari),
            ("Berf", Self::BeriaErfe),
            ("Sidt", Self::Sidetic),
            ("Tayo", Self::TaiYo),
            ("Tols", Self::TolongSiki),
            ("Hntl", Self::TraditionalHanWithLatin),
        ].into_iter()
    }
}

impl SentenceBreak {
    pub const Other: Self = Self(0);
    pub const XX: Self = Self::Other;
    pub const ATerm: Self = Self(1);
    pub const AT: Self = Self::ATerm;
    pub const Close: Self = Self(2);
    pub const CL: Self = Self::Close;
    pub const Format: Self = Self(3);
    pub const FO: Self = Self::Format;
    pub const Lower: Self = Self(4);
    pub const LO: Self = Self::Lower;
    pub const Numeric: Self = Self(5);
    pub const NU: Self = Self::Numeric;
    pub const OLetter: Self = Self(6);
    pub const LE: Self = Self::OLetter;
    pub const Sep: Self = Self(7);
    pub const SE: Self = Self::Sep;
    pub const Sp: Self = Self(8);
    pub const SP: Self = Self::Sp;
    pub const STerm: Self = Self(9);
    pub const ST: Self = Self::STerm;
    pub const Upper: Self = Self(10);
    pub const UP: Self = Self::Upper;
    pub const CR: Self = Self(11);
    pub const Extend: Self = Self(12);
    pub const EX: Self = Self::Extend;
    pub const LF: Self = Self(13);
    pub const SContinue: Self = Self(14);
    pub const SC: Self = Self::SContinue;
}

#[cfg(feature = "datagen")]
impl databake::Bake for SentenceBreak {
    fn bake(&self, env: &databake::CrateEnv) -> databake::TokenStream {
        env.insert("icu_properties");
        match *self {
            Self::Other => databake::quote!(icu_properties::props::SentenceBreak::Other),
            Self::ATerm => databake::quote!(icu_properties::props::SentenceBreak::ATerm),
            Self::Close => databake::quote!(icu_properties::props::SentenceBreak::Close),
            Self::Format => databake::quote!(icu_properties::props::SentenceBreak::Format),
            Self::Lower => databake::quote!(icu_properties::props::SentenceBreak::Lower),
            Self::Numeric => databake::quote!(icu_properties::props::SentenceBreak::Numeric),
            Self::OLetter => databake::quote!(icu_properties::props::SentenceBreak::OLetter),
            Self::Sep => databake::quote!(icu_properties::props::SentenceBreak::Sep),
            Self::Sp => databake::quote!(icu_properties::props::SentenceBreak::Sp),
            Self::STerm => databake::quote!(icu_properties::props::SentenceBreak::STerm),
            Self::Upper => databake::quote!(icu_properties::props::SentenceBreak::Upper),
            Self::CR => databake::quote!(icu_properties::props::SentenceBreak::CR),
            Self::Extend => databake::quote!(icu_properties::props::SentenceBreak::Extend),
            Self::LF => databake::quote!(icu_properties::props::SentenceBreak::LF),
            Self::SContinue => databake::quote!(icu_properties::props::SentenceBreak::SContinue),
            Self(v) => databake::quote!(icu_properties::props::SentenceBreak(#v)),
        }
    }
}


impl From<SentenceBreak> for u16  {
    fn from(other: SentenceBreak) -> Self {
        other.0 as u16
    }
}

impl SentenceBreak {
    /// Deprecated
    #[deprecated]
    pub const ALL_VALUES: &'static [Self] = &[
        Self::Other,
        Self::ATerm,
        Self::Close,
        Self::Format,
        Self::Lower,
        Self::Numeric,
        Self::OLetter,
        Self::Sep,
        Self::Sp,
        Self::STerm,
        Self::Upper,
        Self::CR,
        Self::Extend,
        Self::LF,
        Self::SContinue,
    ];

    #[cfg(feature = "datagen")]
    #[doc(hidden)]
    pub fn names() -> impl Iterator<Item = (&'static str, Self)> {
        [
            ("XX", Self::Other),
            ("AT", Self::ATerm),
            ("CL", Self::Close),
            ("FO", Self::Format),
            ("LO", Self::Lower),
            ("NU", Self::Numeric),
            ("LE", Self::OLetter),
            ("SE", Self::Sep),
            ("SP", Self::Sp),
            ("ST", Self::STerm),
            ("UP", Self::Upper),
            ("CR", Self::CR),
            ("EX", Self::Extend),
            ("LF", Self::LF),
            ("SC", Self::SContinue),
        ].into_iter()
    }
}

impl VerticalOrientation {
    pub const Rotated: Self = Self(0);
    pub const R: Self = Self::Rotated;
    pub const TransformedRotated: Self = Self(1);
    pub const Tr: Self = Self::TransformedRotated;
    pub const TransformedUpright: Self = Self(2);
    pub const Tu: Self = Self::TransformedUpright;
    pub const Upright: Self = Self(3);
    pub const U: Self = Self::Upright;
}

#[cfg(feature = "datagen")]
impl databake::Bake for VerticalOrientation {
    fn bake(&self, env: &databake::CrateEnv) -> databake::TokenStream {
        env.insert("icu_properties");
        match *self {
            Self::Rotated => databake::quote!(icu_properties::props::VerticalOrientation::Rotated),
            Self::TransformedRotated => databake::quote!(icu_properties::props::VerticalOrientation::TransformedRotated),
            Self::TransformedUpright => databake::quote!(icu_properties::props::VerticalOrientation::TransformedUpright),
            Self::Upright => databake::quote!(icu_properties::props::VerticalOrientation::Upright),
            Self(v) => databake::quote!(icu_properties::props::VerticalOrientation(#v)),
        }
    }
}


impl From<VerticalOrientation> for u16  {
    fn from(other: VerticalOrientation) -> Self {
        other.0 as u16
    }
}

impl VerticalOrientation {
    /// Deprecated
    #[deprecated]
    pub const ALL_VALUES: &'static [Self] = &[
        Self::Rotated,
        Self::TransformedRotated,
        Self::TransformedUpright,
        Self::Upright,
    ];

    #[cfg(feature = "datagen")]
    #[doc(hidden)]
    pub fn names() -> impl Iterator<Item = (&'static str, Self)> {
        [
            ("R", Self::Rotated),
            ("Tr", Self::TransformedRotated),
            ("Tu", Self::TransformedUpright),
            ("U", Self::Upright),
        ].into_iter()
    }
}

impl WordBreak {
    pub const Other: Self = Self(0);
    pub const XX: Self = Self::Other;
    pub const ALetter: Self = Self(1);
    pub const LE: Self = Self::ALetter;
    pub const Format: Self = Self(2);
    pub const FO: Self = Self::Format;
    pub const Katakana: Self = Self(3);
    pub const KA: Self = Self::Katakana;
    pub const MidLetter: Self = Self(4);
    pub const ML: Self = Self::MidLetter;
    pub const MidNum: Self = Self(5);
    pub const MN: Self = Self::MidNum;
    pub const Numeric: Self = Self(6);
    pub const NU: Self = Self::Numeric;
    pub const ExtendNumLet: Self = Self(7);
    pub const EX: Self = Self::ExtendNumLet;
    pub const CR: Self = Self(8);
    pub const Extend: Self = Self(9);
    pub const LF: Self = Self(10);
    pub const MidNumLet: Self = Self(11);
    pub const MB: Self = Self::MidNumLet;
    pub const Newline: Self = Self(12);
    pub const NL: Self = Self::Newline;
    pub const RegionalIndicator: Self = Self(13);
    pub const RI: Self = Self::RegionalIndicator;
    pub const HebrewLetter: Self = Self(14);
    pub const HL: Self = Self::HebrewLetter;
    pub const SingleQuote: Self = Self(15);
    pub const SQ: Self = Self::SingleQuote;
    pub const DoubleQuote: Self = Self(16);
    pub const DQ: Self = Self::DoubleQuote;
    pub const EBase: Self = Self(17);
    pub const EB: Self = Self::EBase;
    pub const EBaseGAZ: Self = Self(18);
    pub const EBG: Self = Self::EBaseGAZ;
    pub const EModifier: Self = Self(19);
    pub const EM: Self = Self::EModifier;
    pub const GlueAfterZwj: Self = Self(20);
    pub const GAZ: Self = Self::GlueAfterZwj;
    pub const ZWJ: Self = Self(21);
    pub const WSegSpace: Self = Self(22);
}

#[cfg(feature = "datagen")]
impl databake::Bake for WordBreak {
    fn bake(&self, env: &databake::CrateEnv) -> databake::TokenStream {
        env.insert("icu_properties");
        match *self {
            Self::Other => databake::quote!(icu_properties::props::WordBreak::Other),
            Self::ALetter => databake::quote!(icu_properties::props::WordBreak::ALetter),
            Self::Format => databake::quote!(icu_properties::props::WordBreak::Format),
            Self::Katakana => databake::quote!(icu_properties::props::WordBreak::Katakana),
            Self::MidLetter => databake::quote!(icu_properties::props::WordBreak::MidLetter),
            Self::MidNum => databake::quote!(icu_properties::props::WordBreak::MidNum),
            Self::Numeric => databake::quote!(icu_properties::props::WordBreak::Numeric),
            Self::ExtendNumLet => databake::quote!(icu_properties::props::WordBreak::ExtendNumLet),
            Self::CR => databake::quote!(icu_properties::props::WordBreak::CR),
            Self::Extend => databake::quote!(icu_properties::props::WordBreak::Extend),
            Self::LF => databake::quote!(icu_properties::props::WordBreak::LF),
            Self::MidNumLet => databake::quote!(icu_properties::props::WordBreak::MidNumLet),
            Self::Newline => databake::quote!(icu_properties::props::WordBreak::Newline),
            Self::RegionalIndicator => databake::quote!(icu_properties::props::WordBreak::RegionalIndicator),
            Self::HebrewLetter => databake::quote!(icu_properties::props::WordBreak::HebrewLetter),
            Self::SingleQuote => databake::quote!(icu_properties::props::WordBreak::SingleQuote),
            Self::DoubleQuote => databake::quote!(icu_properties::props::WordBreak::DoubleQuote),
            Self::EBase => databake::quote!(icu_properties::props::WordBreak::EBase),
            Self::EBaseGAZ => databake::quote!(icu_properties::props::WordBreak::EBaseGAZ),
            Self::EModifier => databake::quote!(icu_properties::props::WordBreak::EModifier),
            Self::GlueAfterZwj => databake::quote!(icu_properties::props::WordBreak::GlueAfterZwj),
            Self::ZWJ => databake::quote!(icu_properties::props::WordBreak::ZWJ),
            Self::WSegSpace => databake::quote!(icu_properties::props::WordBreak::WSegSpace),
            Self(v) => databake::quote!(icu_properties::props::WordBreak(#v)),
        }
    }
}


impl From<WordBreak> for u16  {
    fn from(other: WordBreak) -> Self {
        other.0 as u16
    }
}

impl WordBreak {
    /// Deprecated
    #[deprecated]
    pub const ALL_VALUES: &'static [Self] = &[
        Self::Other,
        Self::ALetter,
        Self::Format,
        Self::Katakana,
        Self::MidLetter,
        Self::MidNum,
        Self::Numeric,
        Self::ExtendNumLet,
        Self::CR,
        Self::Extend,
        Self::LF,
        Self::MidNumLet,
        Self::Newline,
        Self::RegionalIndicator,
        Self::HebrewLetter,
        Self::SingleQuote,
        Self::DoubleQuote,
        Self::EBase,
        Self::EBaseGAZ,
        Self::EModifier,
        Self::GlueAfterZwj,
        Self::ZWJ,
        Self::WSegSpace,
    ];

    #[cfg(feature = "datagen")]
    #[doc(hidden)]
    pub fn names() -> impl Iterator<Item = (&'static str, Self)> {
        [
            ("XX", Self::Other),
            ("LE", Self::ALetter),
            ("FO", Self::Format),
            ("KA", Self::Katakana),
            ("ML", Self::MidLetter),
            ("MN", Self::MidNum),
            ("NU", Self::Numeric),
            ("EX", Self::ExtendNumLet),
            ("CR", Self::CR),
            ("Extend", Self::Extend),
            ("LF", Self::LF),
            ("MB", Self::MidNumLet),
            ("NL", Self::Newline),
            ("RI", Self::RegionalIndicator),
            ("HL", Self::HebrewLetter),
            ("SQ", Self::SingleQuote),
            ("DQ", Self::DoubleQuote),
            ("EB", Self::EBase),
            ("EBG", Self::EBaseGAZ),
            ("EM", Self::EModifier),
            ("GAZ", Self::GlueAfterZwj),
            ("ZWJ", Self::ZWJ),
            ("WSegSpace", Self::WSegSpace),
        ].into_iter()
    }
}
