/**
 * This file is part of the "libunicode" project
 *   Copyright (c) 2020-2021 Christian Parpart <christian@parpart.family>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
#pragma once

namespace unicode {

enum class Plane {
    Basic_Multilingual_Plane = 0,
    Supplementary_Ideographic_Plane = 1,
    Supplementary_Multilingual_Plane = 2,
    Supplementary_Private_Use_Area_Plane = 3,
    Supplementary_Special_purpose_Plane = 4,
    Tertiary_Ideographic_Plane = 5,
    Unassigned = 6,
};

enum class Age {
    Unassigned = 0,
    V10_0 = 1,
    V11_0 = 2,
    V12_0 = 3,
    V12_1 = 4,
    V13_0 = 5,
    V14_0 = 6,
    V1_1 = 7,
    V2_0 = 8,
    V2_1 = 9,
    V3_0 = 10,
    V3_1 = 11,
    V3_2 = 12,
    V4_0 = 13,
    V4_1 = 14,
    V5_0 = 15,
    V5_1 = 16,
    V5_2 = 17,
    V6_0 = 18,
    V6_1 = 19,
    V6_2 = 20,
    V6_3 = 21,
    V7_0 = 22,
    V8_0 = 23,
    V9_0 = 24,
};

enum class Bidi_Class {
    Arabic_Letter = 0,
    Arabic_Number = 1,
    Boundary_Neutral = 2,
    Common_Separator = 3,
    European_Number = 4,
    European_Separator = 5,
    European_Terminator = 6,
    First_Strong_Isolate = 7,
    Left_To_Right = 8,
    Left_To_Right_Embedding = 9,
    Left_To_Right_Isolate = 10,
    Left_To_Right_Override = 11,
    Nonspacing_Mark = 12,
    Other_Neutral = 13,
    Paragraph_Separator = 14,
    Pop_Directional_Format = 15,
    Pop_Directional_Isolate = 16,
    Right_To_Left = 17,
    Right_To_Left_Embedding = 18,
    Right_To_Left_Isolate = 19,
    Right_To_Left_Override = 20,
    Segment_Separator = 21,
    White_Space = 22,
};

enum class Bidi_Paired_Bracket_Type {
    Close = 0,
    None = 1,
    Open = 2,
};

enum class Canonical_Combining_Class {
    A = 0,
    AL = 1,
    AR = 2,
    ATA = 3,
    ATAR = 4,
    ATB = 5,
    ATBL = 6,
    B = 7,
    BL = 8,
    BR = 9,
    CCC10 = 10,
    CCC103 = 11,
    CCC107 = 12,
    CCC11 = 13,
    CCC118 = 14,
    CCC12 = 15,
    CCC122 = 16,
    CCC129 = 17,
    CCC13 = 18,
    CCC130 = 19,
    CCC132 = 20,
    CCC133 = 21,
    CCC14 = 22,
    CCC15 = 23,
    CCC16 = 24,
    CCC17 = 25,
    CCC18 = 26,
    CCC19 = 27,
    CCC20 = 28,
    CCC21 = 29,
    CCC22 = 30,
    CCC23 = 31,
    CCC24 = 32,
    CCC25 = 33,
    CCC26 = 34,
    CCC27 = 35,
    CCC28 = 36,
    CCC29 = 37,
    CCC30 = 38,
    CCC31 = 39,
    CCC32 = 40,
    CCC33 = 41,
    CCC34 = 42,
    CCC35 = 43,
    CCC36 = 44,
    CCC84 = 45,
    CCC91 = 46,
    DA = 47,
    DB = 48,
    HANR = 49,
    IS = 50,
    KV = 51,
    L = 52,
    NK = 53,
    NR = 54,
    OV = 55,
    R = 56,
    VR = 57,
};

enum class Decomposition_Type {
    Canonical = 0,
    Circle = 1,
    Compat = 2,
    Final = 3,
    Font = 4,
    Fraction = 5,
    Initial = 6,
    Isolated = 7,
    Medial = 8,
    Narrow = 9,
    Nobreak = 10,
    None = 11,
    Small = 12,
    Square = 13,
    Sub = 14,
    Super = 15,
    Vertical = 16,
    Wide = 17,
};

enum class East_Asian_Width {
    Ambiguous = 0,
    Fullwidth = 1,
    Halfwidth = 2,
    Narrow = 3,
    Neutral = 4,
    Wide = 5,
};

enum class Hangul_Syllable_Type {
    LVT_Syllable = 0,
    LV_Syllable = 1,
    Leading_Jamo = 2,
    Not_Applicable = 3,
    Trailing_Jamo = 4,
    Vowel_Jamo = 5,
};

enum class Indic_Positional_Category {
    Bottom = 0,
    Bottom_And_Left = 1,
    Bottom_And_Right = 2,
    Left = 3,
    Left_And_Right = 4,
    NA = 5,
    Overstruck = 6,
    Right = 7,
    Top = 8,
    Top_And_Bottom = 9,
    Top_And_Bottom_And_Left = 10,
    Top_And_Bottom_And_Right = 11,
    Top_And_Left = 12,
    Top_And_Left_And_Right = 13,
    Top_And_Right = 14,
    Visual_Order_Left = 15,
};

enum class Indic_Syllabic_Category {
    Avagraha = 0,
    Bindu = 1,
    Brahmi_Joining_Number = 2,
    Cantillation_Mark = 3,
    Consonant = 4,
    Consonant_Dead = 5,
    Consonant_Final = 6,
    Consonant_Head_Letter = 7,
    Consonant_Initial_Postfixed = 8,
    Consonant_Killer = 9,
    Consonant_Medial = 10,
    Consonant_Placeholder = 11,
    Consonant_Preceding_Repha = 12,
    Consonant_Prefixed = 13,
    Consonant_Subjoined = 14,
    Consonant_Succeeding_Repha = 15,
    Consonant_With_Stacker = 16,
    Gemination_Mark = 17,
    Invisible_Stacker = 18,
    Joiner = 19,
    Modifying_Letter = 20,
    Non_Joiner = 21,
    Nukta = 22,
    Number = 23,
    Number_Joiner = 24,
    Other = 25,
    Pure_Killer = 26,
    Register_Shifter = 27,
    Syllable_Modifier = 28,
    Tone_Letter = 29,
    Tone_Mark = 30,
    Virama = 31,
    Visarga = 32,
    Vowel = 33,
    Vowel_Dependent = 34,
    Vowel_Independent = 35,
};

enum class Jamo_Short_Name {
    A = 0,
    AE = 1,
    B = 2,
    BB = 3,
    BS = 4,
    C = 5,
    D = 6,
    DD = 7,
    E = 8,
    EO = 9,
    EU = 10,
    G = 11,
    GG = 12,
    GS = 13,
    H = 14,
    I = 15,
    J = 16,
    JJ = 17,
    K = 18,
    L = 19,
    LB = 20,
    LG = 21,
    LH = 22,
    LM = 23,
    LP = 24,
    LS = 25,
    LT = 26,
    M = 27,
    N = 28,
    NG = 29,
    NH = 30,
    NJ = 31,
    O = 32,
    OE = 33,
    P = 34,
    R = 35,
    S = 36,
    SS = 37,
    T = 38,
    U = 39,
    WA = 40,
    WAE = 41,
    WE = 42,
    WEO = 43,
    WI = 44,
    YA = 45,
    YAE = 46,
    YE = 47,
    YEO = 48,
    YI = 49,
    YO = 50,
    YU = 51,
};

enum class Joining_Group {
    African_Feh = 0,
    African_Noon = 1,
    African_Qaf = 2,
    Ain = 3,
    Alaph = 4,
    Alef = 5,
    Beh = 6,
    Beth = 7,
    Burushaski_Yeh_Barree = 8,
    Dal = 9,
    Dalath_Rish = 10,
    E = 11,
    Farsi_Yeh = 12,
    Fe = 13,
    Feh = 14,
    Final_Semkath = 15,
    Gaf = 16,
    Gamal = 17,
    Hah = 18,
    Hamza_On_Heh_Goal = 19,
    Hanifi_Rohingya_Kinna_Ya = 20,
    Hanifi_Rohingya_Pa = 21,
    He = 22,
    Heh = 23,
    Heh_Goal = 24,
    Heth = 25,
    Kaf = 26,
    Kaph = 27,
    Khaph = 28,
    Knotted_Heh = 29,
    Lam = 30,
    Lamadh = 31,
    Malayalam_Bha = 32,
    Malayalam_Ja = 33,
    Malayalam_Lla = 34,
    Malayalam_Llla = 35,
    Malayalam_Nga = 36,
    Malayalam_Nna = 37,
    Malayalam_Nnna = 38,
    Malayalam_Nya = 39,
    Malayalam_Ra = 40,
    Malayalam_Ssa = 41,
    Malayalam_Tta = 42,
    Manichaean_Aleph = 43,
    Manichaean_Ayin = 44,
    Manichaean_Beth = 45,
    Manichaean_Daleth = 46,
    Manichaean_Dhamedh = 47,
    Manichaean_Five = 48,
    Manichaean_Gimel = 49,
    Manichaean_Heth = 50,
    Manichaean_Hundred = 51,
    Manichaean_Kaph = 52,
    Manichaean_Lamedh = 53,
    Manichaean_Mem = 54,
    Manichaean_Nun = 55,
    Manichaean_One = 56,
    Manichaean_Pe = 57,
    Manichaean_Qoph = 58,
    Manichaean_Resh = 59,
    Manichaean_Sadhe = 60,
    Manichaean_Samekh = 61,
    Manichaean_Taw = 62,
    Manichaean_Ten = 63,
    Manichaean_Teth = 64,
    Manichaean_Thamedh = 65,
    Manichaean_Twenty = 66,
    Manichaean_Waw = 67,
    Manichaean_Yodh = 68,
    Manichaean_Zayin = 69,
    Meem = 70,
    Mim = 71,
    No_Joining_Group = 72,
    Noon = 73,
    Nun = 74,
    Nya = 75,
    Pe = 76,
    Qaf = 77,
    Qaph = 78,
    Reh = 79,
    Reversed_Pe = 80,
    Rohingya_Yeh = 81,
    Sad = 82,
    Sadhe = 83,
    Seen = 84,
    Semkath = 85,
    Shin = 86,
    Straight_Waw = 87,
    Swash_Kaf = 88,
    Syriac_Waw = 89,
    Tah = 90,
    Taw = 91,
    Teh_Marbuta = 92,
    Teth = 93,
    Thin_Yeh = 94,
    Vertical_Tail = 95,
    Waw = 96,
    Yeh = 97,
    Yeh_Barree = 98,
    Yeh_With_Tail = 99,
    Yudh = 100,
    Yudh_He = 101,
    Zain = 102,
    Zhain = 103,
};

enum class Joining_Type {
    Dual_Joining = 0,
    Join_Causing = 1,
    Left_Joining = 2,
    Non_Joining = 3,
    Right_Joining = 4,
    Transparent = 5,
};

enum class Line_Break {
    Alphabetic = 0,
    Ambiguous = 1,
    Break_After = 2,
    Break_Before = 3,
    Break_Both = 4,
    Break_Symbols = 5,
    Carriage_Return = 6,
    Close_Parenthesis = 7,
    Close_Punctuation = 8,
    Combining_Mark = 9,
    Complex_Context = 10,
    Conditional_Japanese_Starter = 11,
    Contingent_Break = 12,
    E_Base = 13,
    E_Modifier = 14,
    Exclamation = 15,
    Glue = 16,
    H2 = 17,
    H3 = 18,
    Hebrew_Letter = 19,
    Hyphen = 20,
    Ideographic = 21,
    Infix_Numeric = 22,
    Inseparable = 23,
    JL = 24,
    JT = 25,
    JV = 26,
    Line_Feed = 27,
    Mandatory_Break = 28,
    Next_Line = 29,
    Nonstarter = 30,
    Numeric = 31,
    Open_Punctuation = 32,
    Postfix_Numeric = 33,
    Prefix_Numeric = 34,
    Quotation = 35,
    Regional_Indicator = 36,
    Space = 37,
    Surrogate = 38,
    Unknown = 39,
    Word_Joiner = 40,
    ZWJ = 41,
    ZWSpace = 42,
};

enum class NFC_Quick_Check {
    Maybe = 0,
    No = 1,
    Yes = 2,
};

enum class NFKC_Quick_Check {
    Maybe = 0,
    No = 1,
    Yes = 2,
};

enum class Numeric_Type {
    Decimal = 0,
    Digit = 1,
    None = 2,
    Numeric = 3,
};

enum class Sentence_Break {
    ATerm = 0,
    CR = 1,
    Close = 2,
    Extend = 3,
    Format = 4,
    LF = 5,
    Lower = 6,
    Numeric = 7,
    OLetter = 8,
    Other = 9,
    SContinue = 10,
    STerm = 11,
    Sep = 12,
    Sp = 13,
    Upper = 14,
};

enum class Vertical_Orientation {
    Rotated = 0,
    Transformed_Rotated = 1,
    Transformed_Upright = 2,
    Upright = 3,
};

enum class Word_Break {
    ALetter = 0,
    CR = 1,
    Double_Quote = 2,
    E_Base = 3,
    E_Base_GAZ = 4,
    E_Modifier = 5,
    Extend = 6,
    ExtendNumLet = 7,
    Format = 8,
    Glue_After_Zwj = 9,
    Hebrew_Letter = 10,
    Katakana = 11,
    LF = 12,
    MidLetter = 13,
    MidNum = 14,
    MidNumLet = 15,
    Newline = 16,
    Numeric = 17,
    Other = 18,
    Regional_Indicator = 19,
    Single_Quote = 20,
    WSegSpace = 21,
    ZWJ = 22,
};

enum class Core_Property {
    Alphabetic = 0,
    Case_Ignorable = 1,
    Cased = 2,
    Changes_When_Casefolded = 3,
    Changes_When_Casemapped = 4,
    Changes_When_Lowercased = 5,
    Changes_When_Titlecased = 6,
    Changes_When_Uppercased = 7,
    Default_Ignorable_Code_Point = 8,
    Grapheme_Base = 9,
    Grapheme_Extend = 10,
    Grapheme_Link = 11,
    ID_Continue = 12,
    ID_Start = 13,
    Lowercase = 14,
    Math = 15,
    Uppercase = 16,
    XID_Continue = 17,
    XID_Start = 18,
};

enum class General_Category {
    Unspecified = 0,
    Close_Punctuation = 1,
    Connector_Punctuation = 2,
    Control = 3,
    Currency_Symbol = 4,
    Dash_Punctuation = 5,
    Decimal_Number = 6,
    Enclosing_Mark = 7,
    Final_Punctuation = 8,
    Format = 9,
    Initial_Punctuation = 10,
    Letter_Number = 11,
    Line_Separator = 12,
    Lowercase_Letter = 13,
    Math_Symbol = 14,
    Modifier_Letter = 15,
    Modifier_Symbol = 16,
    Nonspacing_Mark = 17,
    Open_Punctuation = 18,
    Other_Letter = 19,
    Other_Number = 20,
    Other_Punctuation = 21,
    Other_Symbol = 22,
    Paragraph_Separator = 23,
    Private_Use = 24,
    Space_Separator = 25,
    Spacing_Mark = 26,
    Surrogate = 27,
    Titlecase_Letter = 28,
    Unassigned = 29,
    Uppercase_Letter = 30,
};

enum class Script {
    Invalid = -1,
    Unknown = 0,
    Common = 1,
    Adlam = 2,
    Ahom = 3,
    Anatolian_Hieroglyphs = 4,
    Arabic = 5,
    Armenian = 6,
    Avestan = 7,
    Balinese = 8,
    Bamum = 9,
    Bassa_Vah = 10,
    Batak = 11,
    Bengali = 12,
    Bhaiksuki = 13,
    Bopomofo = 14,
    Brahmi = 15,
    Braille = 16,
    Buginese = 17,
    Buhid = 18,
    Canadian_Aboriginal = 19,
    Carian = 20,
    Caucasian_Albanian = 21,
    Chakma = 22,
    Cham = 23,
    Cherokee = 24,
    Chorasmian = 25,
    Coptic = 26,
    Cuneiform = 27,
    Cypriot = 28,
    Cypro_Minoan = 29,
    Cyrillic = 30,
    Deseret = 31,
    Devanagari = 32,
    Dives_Akuru = 33,
    Dogra = 34,
    Duployan = 35,
    Egyptian_Hieroglyphs = 36,
    Elbasan = 37,
    Elymaic = 38,
    Ethiopic = 39,
    Georgian = 40,
    Glagolitic = 41,
    Gothic = 42,
    Grantha = 43,
    Greek = 44,
    Gujarati = 45,
    Gunjala_Gondi = 46,
    Gurmukhi = 47,
    Han = 48,
    Hangul = 49,
    Hanifi_Rohingya = 50,
    Hanunoo = 51,
    Hatran = 52,
    Hebrew = 53,
    Hiragana = 54,
    Imperial_Aramaic = 55,
    Inherited = 56,
    Inscriptional_Pahlavi = 57,
    Inscriptional_Parthian = 58,
    Javanese = 59,
    Kaithi = 60,
    Kannada = 61,
    Katakana = 62,
    Kayah_Li = 63,
    Kharoshthi = 64,
    Khitan_Small_Script = 65,
    Khmer = 66,
    Khojki = 67,
    Khudawadi = 68,
    Lao = 69,
    Latin = 70,
    Lepcha = 71,
    Limbu = 72,
    Linear_A = 73,
    Linear_B = 74,
    Lisu = 75,
    Lycian = 76,
    Lydian = 77,
    Mahajani = 78,
    Makasar = 79,
    Malayalam = 80,
    Mandaic = 81,
    Manichaean = 82,
    Marchen = 83,
    Masaram_Gondi = 84,
    Medefaidrin = 85,
    Meetei_Mayek = 86,
    Mende_Kikakui = 87,
    Meroitic_Cursive = 88,
    Meroitic_Hieroglyphs = 89,
    Miao = 90,
    Modi = 91,
    Mongolian = 92,
    Mro = 93,
    Multani = 94,
    Myanmar = 95,
    Nabataean = 96,
    Nandinagari = 97,
    New_Tai_Lue = 98,
    Newa = 99,
    Nko = 100,
    Nushu = 101,
    Nyiakeng_Puachue_Hmong = 102,
    Ogham = 103,
    Ol_Chiki = 104,
    Old_Hungarian = 105,
    Old_Italic = 106,
    Old_North_Arabian = 107,
    Old_Permic = 108,
    Old_Persian = 109,
    Old_Sogdian = 110,
    Old_South_Arabian = 111,
    Old_Turkic = 112,
    Old_Uyghur = 113,
    Oriya = 114,
    Osage = 115,
    Osmanya = 116,
    Pahawh_Hmong = 117,
    Palmyrene = 118,
    Pau_Cin_Hau = 119,
    Phags_Pa = 120,
    Phoenician = 121,
    Psalter_Pahlavi = 122,
    Rejang = 123,
    Runic = 124,
    Samaritan = 125,
    Saurashtra = 126,
    Sharada = 127,
    Shavian = 128,
    Siddham = 129,
    SignWriting = 130,
    Sinhala = 131,
    Sogdian = 132,
    Sora_Sompeng = 133,
    Soyombo = 134,
    Sundanese = 135,
    Syloti_Nagri = 136,
    Syriac = 137,
    Tagalog = 138,
    Tagbanwa = 139,
    Tai_Le = 140,
    Tai_Tham = 141,
    Tai_Viet = 142,
    Takri = 143,
    Tamil = 144,
    Tangsa = 145,
    Tangut = 146,
    Telugu = 147,
    Thaana = 148,
    Thai = 149,
    Tibetan = 150,
    Tifinagh = 151,
    Tirhuta = 152,
    Toto = 153,
    Ugaritic = 154,
    Vai = 155,
    Vithkuqi = 156,
    Wancho = 157,
    Warang_Citi = 158,
    Yezidi = 159,
    Yi = 160,
    Zanabazar_Square = 161,
};

enum class Block {
    Unspecified = 0,
    Adlam = 1,
    Aegean_Numbers = 2,
    Ahom = 3,
    Alchemical_Symbols = 4,
    Alphabetic_Presentation_Forms = 5,
    Anatolian_Hieroglyphs = 6,
    Ancient_Greek_Musical_Notation = 7,
    Ancient_Greek_Numbers = 8,
    Ancient_Symbols = 9,
    Arabic = 10,
    Arabic_Extended_A = 11,
    Arabic_Extended_B = 12,
    Arabic_Mathematical_Alphabetic_Symbols = 13,
    Arabic_Presentation_Forms_A = 14,
    Arabic_Presentation_Forms_B = 15,
    Arabic_Supplement = 16,
    Armenian = 17,
    Arrows = 18,
    Avestan = 19,
    Balinese = 20,
    Bamum = 21,
    Bamum_Supplement = 22,
    Basic_Latin = 23,
    Bassa_Vah = 24,
    Batak = 25,
    Bengali = 26,
    Bhaiksuki = 27,
    Block_Elements = 28,
    Bopomofo = 29,
    Bopomofo_Extended = 30,
    Box_Drawing = 31,
    Brahmi = 32,
    Braille_Patterns = 33,
    Buginese = 34,
    Buhid = 35,
    Byzantine_Musical_Symbols = 36,
    CJK_Compatibility = 37,
    CJK_Compatibility_Forms = 38,
    CJK_Compatibility_Ideographs = 39,
    CJK_Compatibility_Ideographs_Supplement = 40,
    CJK_Radicals_Supplement = 41,
    CJK_Strokes = 42,
    CJK_Symbols_and_Punctuation = 43,
    CJK_Unified_Ideographs = 44,
    CJK_Unified_Ideographs_Extension_A = 45,
    CJK_Unified_Ideographs_Extension_B = 46,
    CJK_Unified_Ideographs_Extension_C = 47,
    CJK_Unified_Ideographs_Extension_D = 48,
    CJK_Unified_Ideographs_Extension_E = 49,
    CJK_Unified_Ideographs_Extension_F = 50,
    CJK_Unified_Ideographs_Extension_G = 51,
    Carian = 52,
    Caucasian_Albanian = 53,
    Chakma = 54,
    Cham = 55,
    Cherokee = 56,
    Cherokee_Supplement = 57,
    Chess_Symbols = 58,
    Chorasmian = 59,
    Combining_Diacritical_Marks = 60,
    Combining_Diacritical_Marks_Extended = 61,
    Combining_Diacritical_Marks_Supplement = 62,
    Combining_Diacritical_Marks_for_Symbols = 63,
    Combining_Half_Marks = 64,
    Common_Indic_Number_Forms = 65,
    Control_Pictures = 66,
    Coptic = 67,
    Coptic_Epact_Numbers = 68,
    Counting_Rod_Numerals = 69,
    Cuneiform = 70,
    Cuneiform_Numbers_and_Punctuation = 71,
    Currency_Symbols = 72,
    Cypriot_Syllabary = 73,
    Cypro_Minoan = 74,
    Cyrillic = 75,
    Cyrillic_Extended_A = 76,
    Cyrillic_Extended_B = 77,
    Cyrillic_Extended_C = 78,
    Cyrillic_Supplement = 79,
    Deseret = 80,
    Devanagari = 81,
    Devanagari_Extended = 82,
    Dingbats = 83,
    Dives_Akuru = 84,
    Dogra = 85,
    Domino_Tiles = 86,
    Duployan = 87,
    Early_Dynastic_Cuneiform = 88,
    Egyptian_Hieroglyph_Format_Controls = 89,
    Egyptian_Hieroglyphs = 90,
    Elbasan = 91,
    Elymaic = 92,
    Emoticons = 93,
    Enclosed_Alphanumeric_Supplement = 94,
    Enclosed_Alphanumerics = 95,
    Enclosed_CJK_Letters_and_Months = 96,
    Enclosed_Ideographic_Supplement = 97,
    Ethiopic = 98,
    Ethiopic_Extended = 99,
    Ethiopic_Extended_A = 100,
    Ethiopic_Extended_B = 101,
    Ethiopic_Supplement = 102,
    General_Punctuation = 103,
    Geometric_Shapes = 104,
    Geometric_Shapes_Extended = 105,
    Georgian = 106,
    Georgian_Extended = 107,
    Georgian_Supplement = 108,
    Glagolitic = 109,
    Glagolitic_Supplement = 110,
    Gothic = 111,
    Grantha = 112,
    Greek_Extended = 113,
    Greek_and_Coptic = 114,
    Gujarati = 115,
    Gunjala_Gondi = 116,
    Gurmukhi = 117,
    Halfwidth_and_Fullwidth_Forms = 118,
    Hangul_Compatibility_Jamo = 119,
    Hangul_Jamo = 120,
    Hangul_Jamo_Extended_A = 121,
    Hangul_Jamo_Extended_B = 122,
    Hangul_Syllables = 123,
    Hanifi_Rohingya = 124,
    Hanunoo = 125,
    Hatran = 126,
    Hebrew = 127,
    High_Private_Use_Surrogates = 128,
    High_Surrogates = 129,
    Hiragana = 130,
    IPA_Extensions = 131,
    Ideographic_Description_Characters = 132,
    Ideographic_Symbols_and_Punctuation = 133,
    Imperial_Aramaic = 134,
    Indic_Siyaq_Numbers = 135,
    Inscriptional_Pahlavi = 136,
    Inscriptional_Parthian = 137,
    Javanese = 138,
    Kaithi = 139,
    Kana_Extended_A = 140,
    Kana_Extended_B = 141,
    Kana_Supplement = 142,
    Kanbun = 143,
    Kangxi_Radicals = 144,
    Kannada = 145,
    Katakana = 146,
    Katakana_Phonetic_Extensions = 147,
    Kayah_Li = 148,
    Kharoshthi = 149,
    Khitan_Small_Script = 150,
    Khmer = 151,
    Khmer_Symbols = 152,
    Khojki = 153,
    Khudawadi = 154,
    Lao = 155,
    Latin_Extended_Additional = 156,
    Latin_Extended_A = 157,
    Latin_Extended_B = 158,
    Latin_Extended_C = 159,
    Latin_Extended_D = 160,
    Latin_Extended_E = 161,
    Latin_Extended_F = 162,
    Latin_Extended_G = 163,
    Latin_1_Supplement = 164,
    Lepcha = 165,
    Letterlike_Symbols = 166,
    Limbu = 167,
    Linear_A = 168,
    Linear_B_Ideograms = 169,
    Linear_B_Syllabary = 170,
    Lisu = 171,
    Lisu_Supplement = 172,
    Low_Surrogates = 173,
    Lycian = 174,
    Lydian = 175,
    Mahajani = 176,
    Mahjong_Tiles = 177,
    Makasar = 178,
    Malayalam = 179,
    Mandaic = 180,
    Manichaean = 181,
    Marchen = 182,
    Masaram_Gondi = 183,
    Mathematical_Alphanumeric_Symbols = 184,
    Mathematical_Operators = 185,
    Mayan_Numerals = 186,
    Medefaidrin = 187,
    Meetei_Mayek = 188,
    Meetei_Mayek_Extensions = 189,
    Mende_Kikakui = 190,
    Meroitic_Cursive = 191,
    Meroitic_Hieroglyphs = 192,
    Miao = 193,
    Miscellaneous_Mathematical_Symbols_A = 194,
    Miscellaneous_Mathematical_Symbols_B = 195,
    Miscellaneous_Symbols = 196,
    Miscellaneous_Symbols_and_Arrows = 197,
    Miscellaneous_Symbols_and_Pictographs = 198,
    Miscellaneous_Technical = 199,
    Modi = 200,
    Modifier_Tone_Letters = 201,
    Mongolian = 202,
    Mongolian_Supplement = 203,
    Mro = 204,
    Multani = 205,
    Musical_Symbols = 206,
    Myanmar = 207,
    Myanmar_Extended_A = 208,
    Myanmar_Extended_B = 209,
    NKo = 210,
    Nabataean = 211,
    Nandinagari = 212,
    New_Tai_Lue = 213,
    Newa = 214,
    Number_Forms = 215,
    Nushu = 216,
    Nyiakeng_Puachue_Hmong = 217,
    Ogham = 218,
    Ol_Chiki = 219,
    Old_Hungarian = 220,
    Old_Italic = 221,
    Old_North_Arabian = 222,
    Old_Permic = 223,
    Old_Persian = 224,
    Old_Sogdian = 225,
    Old_South_Arabian = 226,
    Old_Turkic = 227,
    Old_Uyghur = 228,
    Optical_Character_Recognition = 229,
    Oriya = 230,
    Ornamental_Dingbats = 231,
    Osage = 232,
    Osmanya = 233,
    Ottoman_Siyaq_Numbers = 234,
    Pahawh_Hmong = 235,
    Palmyrene = 236,
    Pau_Cin_Hau = 237,
    Phags_pa = 238,
    Phaistos_Disc = 239,
    Phoenician = 240,
    Phonetic_Extensions = 241,
    Phonetic_Extensions_Supplement = 242,
    Playing_Cards = 243,
    Private_Use_Area = 244,
    Psalter_Pahlavi = 245,
    Rejang = 246,
    Rumi_Numeral_Symbols = 247,
    Runic = 248,
    Samaritan = 249,
    Saurashtra = 250,
    Sharada = 251,
    Shavian = 252,
    Shorthand_Format_Controls = 253,
    Siddham = 254,
    Sinhala = 255,
    Sinhala_Archaic_Numbers = 256,
    Small_Form_Variants = 257,
    Small_Kana_Extension = 258,
    Sogdian = 259,
    Sora_Sompeng = 260,
    Soyombo = 261,
    Spacing_Modifier_Letters = 262,
    Specials = 263,
    Sundanese = 264,
    Sundanese_Supplement = 265,
    Superscripts_and_Subscripts = 266,
    Supplemental_Arrows_A = 267,
    Supplemental_Arrows_B = 268,
    Supplemental_Arrows_C = 269,
    Supplemental_Mathematical_Operators = 270,
    Supplemental_Punctuation = 271,
    Supplemental_Symbols_and_Pictographs = 272,
    Supplementary_Private_Use_Area_A = 273,
    Supplementary_Private_Use_Area_B = 274,
    Sutton_SignWriting = 275,
    Syloti_Nagri = 276,
    Symbols_and_Pictographs_Extended_A = 277,
    Symbols_for_Legacy_Computing = 278,
    Syriac = 279,
    Syriac_Supplement = 280,
    Tagalog = 281,
    Tagbanwa = 282,
    Tags = 283,
    Tai_Le = 284,
    Tai_Tham = 285,
    Tai_Viet = 286,
    Tai_Xuan_Jing_Symbols = 287,
    Takri = 288,
    Tamil = 289,
    Tamil_Supplement = 290,
    Tangsa = 291,
    Tangut = 292,
    Tangut_Components = 293,
    Tangut_Supplement = 294,
    Telugu = 295,
    Thaana = 296,
    Thai = 297,
    Tibetan = 298,
    Tifinagh = 299,
    Tirhuta = 300,
    Toto = 301,
    Transport_and_Map_Symbols = 302,
    Ugaritic = 303,
    Unified_Canadian_Aboriginal_Syllabics = 304,
    Unified_Canadian_Aboriginal_Syllabics_Extended = 305,
    Unified_Canadian_Aboriginal_Syllabics_Extended_A = 306,
    Vai = 307,
    Variation_Selectors = 308,
    Variation_Selectors_Supplement = 309,
    Vedic_Extensions = 310,
    Vertical_Forms = 311,
    Vithkuqi = 312,
    Wancho = 313,
    Warang_Citi = 314,
    Yezidi = 315,
    Yi_Radicals = 316,
    Yi_Syllables = 317,
    Yijing_Hexagram_Symbols = 318,
    Zanabazar_Square = 319,
    Znamenny_Musical_Notation = 320,
};

enum class Grapheme_Cluster_Break {
    CR = 0,
    Control = 1,
    Extend = 2,
    L = 3,
    LF = 4,
    LV = 5,
    LVT = 6,
    Prepend = 7,
    Regional_Indicator = 8,
    SpacingMark = 9,
    T = 10,
    V = 11,
    ZWJ = 12,
};

enum class EastAsianWidth {
    Ambiguous = 0,
    FullWidth = 1,
    HalfWidth = 2,
    Neutral = 3,
    Narrow = 4,
    Wide = 5,
    Unspecified = 6,
};

} // end namespace
