#ifndef UNICODE_DATA_TYPES_H
#define UNICODE_DATA_TYPES_H

/* This file is automatically generated by unicode-ucd-compile.py from:
     ./ucd/CaseFolding.txt
     ./ucd/CompositionExclusions.txt
     ./ucd/DerivedBidiClass.txt
     ./ucd/DerivedCoreProperties.txt
     ./ucd/DerivedJoiningType.txt
     ./ucd/DerivedNormalizationProps.txt
     ./ucd/GraphemeBreakProperty.txt
     ./ucd/IdnaMappingTable.txt
     ./ucd/PropList.txt
     ./ucd/PropertyValueAliases.txt
     ./ucd/Scripts.txt
     ./ucd/SpecialCasing.txt
     ./ucd/UnicodeData.txt
     ./ucd/WordBreakProperty.txt
     ./ucd/emoji-data.txt
 */

#include "unicode-data-static.h"

/* Script */
enum unicode_script {
	/* Unknown */
	UNICODE_SCRIPT_UNKNOWN = 0,
	/* Inherited */
	UNICODE_SCRIPT_INHERITED,
	/* Common */
	UNICODE_SCRIPT_COMMON,
	/* Adlam */
	UNICODE_SCRIPT_ADLAM,
	/* Caucasian_Albanian */
	UNICODE_SCRIPT_CAUCASIAN_ALBANIAN,
	/* Ahom */
	UNICODE_SCRIPT_AHOM,
	/* Arabic */
	UNICODE_SCRIPT_ARABIC,
	/* Imperial_Aramaic */
	UNICODE_SCRIPT_IMPERIAL_ARAMAIC,
	/* Armenian */
	UNICODE_SCRIPT_ARMENIAN,
	/* Avestan */
	UNICODE_SCRIPT_AVESTAN,
	/* Balinese */
	UNICODE_SCRIPT_BALINESE,
	/* Bamum */
	UNICODE_SCRIPT_BAMUM,
	/* Bassa_Vah */
	UNICODE_SCRIPT_BASSA_VAH,
	/* Batak */
	UNICODE_SCRIPT_BATAK,
	/* Bengali */
	UNICODE_SCRIPT_BENGALI,
	/* Beria_Erfe */
	UNICODE_SCRIPT_BERIA_ERFE,
	/* Bhaiksuki */
	UNICODE_SCRIPT_BHAIKSUKI,
	/* Bopomofo */
	UNICODE_SCRIPT_BOPOMOFO,
	/* Brahmi */
	UNICODE_SCRIPT_BRAHMI,
	/* Braille */
	UNICODE_SCRIPT_BRAILLE,
	/* Buginese */
	UNICODE_SCRIPT_BUGINESE,
	/* Buhid */
	UNICODE_SCRIPT_BUHID,
	/* Chakma */
	UNICODE_SCRIPT_CHAKMA,
	/* Canadian_Aboriginal */
	UNICODE_SCRIPT_CANADIAN_ABORIGINAL,
	/* Carian */
	UNICODE_SCRIPT_CARIAN,
	/* Cham */
	UNICODE_SCRIPT_CHAM,
	/* Cherokee */
	UNICODE_SCRIPT_CHEROKEE,
	/* Chorasmian */
	UNICODE_SCRIPT_CHORASMIAN,
	/* Coptic */
	UNICODE_SCRIPT_COPTIC,
	/* Cypro_Minoan */
	UNICODE_SCRIPT_CYPRO_MINOAN,
	/* Cypriot */
	UNICODE_SCRIPT_CYPRIOT,
	/* Cyrillic */
	UNICODE_SCRIPT_CYRILLIC,
	/* Devanagari */
	UNICODE_SCRIPT_DEVANAGARI,
	/* Dives_Akuru */
	UNICODE_SCRIPT_DIVES_AKURU,
	/* Dogra */
	UNICODE_SCRIPT_DOGRA,
	/* Deseret */
	UNICODE_SCRIPT_DESERET,
	/* Duployan */
	UNICODE_SCRIPT_DUPLOYAN,
	/* Egyptian_Hieroglyphs */
	UNICODE_SCRIPT_EGYPTIAN_HIEROGLYPHS,
	/* Elbasan */
	UNICODE_SCRIPT_ELBASAN,
	/* Elymaic */
	UNICODE_SCRIPT_ELYMAIC,
	/* Ethiopic */
	UNICODE_SCRIPT_ETHIOPIC,
	/* Garay */
	UNICODE_SCRIPT_GARAY,
	/* Georgian */
	UNICODE_SCRIPT_GEORGIAN,
	/* Glagolitic */
	UNICODE_SCRIPT_GLAGOLITIC,
	/* Gunjala_Gondi */
	UNICODE_SCRIPT_GUNJALA_GONDI,
	/* Masaram_Gondi */
	UNICODE_SCRIPT_MASARAM_GONDI,
	/* Gothic */
	UNICODE_SCRIPT_GOTHIC,
	/* Grantha */
	UNICODE_SCRIPT_GRANTHA,
	/* Greek */
	UNICODE_SCRIPT_GREEK,
	/* Gujarati */
	UNICODE_SCRIPT_GUJARATI,
	/* Gurung_Khema */
	UNICODE_SCRIPT_GURUNG_KHEMA,
	/* Gurmukhi */
	UNICODE_SCRIPT_GURMUKHI,
	/* Hangul */
	UNICODE_SCRIPT_HANGUL,
	/* Han */
	UNICODE_SCRIPT_HAN,
	/* Hanunoo */
	UNICODE_SCRIPT_HANUNOO,
	/* Hatran */
	UNICODE_SCRIPT_HATRAN,
	/* Hebrew */
	UNICODE_SCRIPT_HEBREW,
	/* Hiragana */
	UNICODE_SCRIPT_HIRAGANA,
	/* Anatolian_Hieroglyphs */
	UNICODE_SCRIPT_ANATOLIAN_HIEROGLYPHS,
	/* Pahawh_Hmong */
	UNICODE_SCRIPT_PAHAWH_HMONG,
	/* Nyiakeng_Puachue_Hmong */
	UNICODE_SCRIPT_NYIAKENG_PUACHUE_HMONG,
	/* Katakana_Or_Hiragana */
	UNICODE_SCRIPT_KATAKANA_OR_HIRAGANA,
	/* Old_Hungarian */
	UNICODE_SCRIPT_OLD_HUNGARIAN,
	/* Old_Italic */
	UNICODE_SCRIPT_OLD_ITALIC,
	/* Javanese */
	UNICODE_SCRIPT_JAVANESE,
	/* Kayah_Li */
	UNICODE_SCRIPT_KAYAH_LI,
	/* Katakana */
	UNICODE_SCRIPT_KATAKANA,
	/* Kawi */
	UNICODE_SCRIPT_KAWI,
	/* Kharoshthi */
	UNICODE_SCRIPT_KHAROSHTHI,
	/* Khmer */
	UNICODE_SCRIPT_KHMER,
	/* Khojki */
	UNICODE_SCRIPT_KHOJKI,
	/* Khitan_Small_Script */
	UNICODE_SCRIPT_KHITAN_SMALL_SCRIPT,
	/* Kannada */
	UNICODE_SCRIPT_KANNADA,
	/* Kirat_Rai */
	UNICODE_SCRIPT_KIRAT_RAI,
	/* Kaithi */
	UNICODE_SCRIPT_KAITHI,
	/* Tai_Tham */
	UNICODE_SCRIPT_TAI_THAM,
	/* Lao */
	UNICODE_SCRIPT_LAO,
	/* Latin */
	UNICODE_SCRIPT_LATIN,
	/* Lepcha */
	UNICODE_SCRIPT_LEPCHA,
	/* Limbu */
	UNICODE_SCRIPT_LIMBU,
	/* Linear_A */
	UNICODE_SCRIPT_LINEAR_A,
	/* Linear_B */
	UNICODE_SCRIPT_LINEAR_B,
	/* Lisu */
	UNICODE_SCRIPT_LISU,
	/* Lycian */
	UNICODE_SCRIPT_LYCIAN,
	/* Lydian */
	UNICODE_SCRIPT_LYDIAN,
	/* Mahajani */
	UNICODE_SCRIPT_MAHAJANI,
	/* Makasar */
	UNICODE_SCRIPT_MAKASAR,
	/* Mandaic */
	UNICODE_SCRIPT_MANDAIC,
	/* Manichaean */
	UNICODE_SCRIPT_MANICHAEAN,
	/* Marchen */
	UNICODE_SCRIPT_MARCHEN,
	/* Medefaidrin */
	UNICODE_SCRIPT_MEDEFAIDRIN,
	/* Mende_Kikakui */
	UNICODE_SCRIPT_MENDE_KIKAKUI,
	/* Meroitic_Cursive */
	UNICODE_SCRIPT_MEROITIC_CURSIVE,
	/* Meroitic_Hieroglyphs */
	UNICODE_SCRIPT_MEROITIC_HIEROGLYPHS,
	/* Malayalam */
	UNICODE_SCRIPT_MALAYALAM,
	/* Modi */
	UNICODE_SCRIPT_MODI,
	/* Mongolian */
	UNICODE_SCRIPT_MONGOLIAN,
	/* Mro */
	UNICODE_SCRIPT_MRO,
	/* Meetei_Mayek */
	UNICODE_SCRIPT_MEETEI_MAYEK,
	/* Multani */
	UNICODE_SCRIPT_MULTANI,
	/* Myanmar */
	UNICODE_SCRIPT_MYANMAR,
	/* Nag_Mundari */
	UNICODE_SCRIPT_NAG_MUNDARI,
	/* Nandinagari */
	UNICODE_SCRIPT_NANDINAGARI,
	/* Old_North_Arabian */
	UNICODE_SCRIPT_OLD_NORTH_ARABIAN,
	/* Nabataean */
	UNICODE_SCRIPT_NABATAEAN,
	/* Newa */
	UNICODE_SCRIPT_NEWA,
	/* Nko */
	UNICODE_SCRIPT_NKO,
	/* Nushu */
	UNICODE_SCRIPT_NUSHU,
	/* Ogham */
	UNICODE_SCRIPT_OGHAM,
	/* Ol_Chiki */
	UNICODE_SCRIPT_OL_CHIKI,
	/* Ol_Onal */
	UNICODE_SCRIPT_OL_ONAL,
	/* Old_Turkic */
	UNICODE_SCRIPT_OLD_TURKIC,
	/* Oriya */
	UNICODE_SCRIPT_ORIYA,
	/* Osage */
	UNICODE_SCRIPT_OSAGE,
	/* Osmanya */
	UNICODE_SCRIPT_OSMANYA,
	/* Old_Uyghur */
	UNICODE_SCRIPT_OLD_UYGHUR,
	/* Palmyrene */
	UNICODE_SCRIPT_PALMYRENE,
	/* Pau_Cin_Hau */
	UNICODE_SCRIPT_PAU_CIN_HAU,
	/* Old_Permic */
	UNICODE_SCRIPT_OLD_PERMIC,
	/* Phags_Pa */
	UNICODE_SCRIPT_PHAGS_PA,
	/* Inscriptional_Pahlavi */
	UNICODE_SCRIPT_INSCRIPTIONAL_PAHLAVI,
	/* Psalter_Pahlavi */
	UNICODE_SCRIPT_PSALTER_PAHLAVI,
	/* Phoenician */
	UNICODE_SCRIPT_PHOENICIAN,
	/* Miao */
	UNICODE_SCRIPT_MIAO,
	/* Inscriptional_Parthian */
	UNICODE_SCRIPT_INSCRIPTIONAL_PARTHIAN,
	/* Rejang */
	UNICODE_SCRIPT_REJANG,
	/* Hanifi_Rohingya */
	UNICODE_SCRIPT_HANIFI_ROHINGYA,
	/* Runic */
	UNICODE_SCRIPT_RUNIC,
	/* Samaritan */
	UNICODE_SCRIPT_SAMARITAN,
	/* Old_South_Arabian */
	UNICODE_SCRIPT_OLD_SOUTH_ARABIAN,
	/* Saurashtra */
	UNICODE_SCRIPT_SAURASHTRA,
	/* SignWriting */
	UNICODE_SCRIPT_SIGNWRITING,
	/* Shavian */
	UNICODE_SCRIPT_SHAVIAN,
	/* Sharada */
	UNICODE_SCRIPT_SHARADA,
	/* Siddham */
	UNICODE_SCRIPT_SIDDHAM,
	/* Sidetic */
	UNICODE_SCRIPT_SIDETIC,
	/* Khudawadi */
	UNICODE_SCRIPT_KHUDAWADI,
	/* Sinhala */
	UNICODE_SCRIPT_SINHALA,
	/* Sogdian */
	UNICODE_SCRIPT_SOGDIAN,
	/* Old_Sogdian */
	UNICODE_SCRIPT_OLD_SOGDIAN,
	/* Sora_Sompeng */
	UNICODE_SCRIPT_SORA_SOMPENG,
	/* Soyombo */
	UNICODE_SCRIPT_SOYOMBO,
	/* Sundanese */
	UNICODE_SCRIPT_SUNDANESE,
	/* Sunuwar */
	UNICODE_SCRIPT_SUNUWAR,
	/* Syloti_Nagri */
	UNICODE_SCRIPT_SYLOTI_NAGRI,
	/* Syriac */
	UNICODE_SCRIPT_SYRIAC,
	/* Tagbanwa */
	UNICODE_SCRIPT_TAGBANWA,
	/* Takri */
	UNICODE_SCRIPT_TAKRI,
	/* Tai_Le */
	UNICODE_SCRIPT_TAI_LE,
	/* New_Tai_Lue */
	UNICODE_SCRIPT_NEW_TAI_LUE,
	/* Tamil */
	UNICODE_SCRIPT_TAMIL,
	/* Tangut */
	UNICODE_SCRIPT_TANGUT,
	/* Tai_Viet */
	UNICODE_SCRIPT_TAI_VIET,
	/* Tai_Yo */
	UNICODE_SCRIPT_TAI_YO,
	/* Telugu */
	UNICODE_SCRIPT_TELUGU,
	/* Tifinagh */
	UNICODE_SCRIPT_TIFINAGH,
	/* Tagalog */
	UNICODE_SCRIPT_TAGALOG,
	/* Thaana */
	UNICODE_SCRIPT_THAANA,
	/* Thai */
	UNICODE_SCRIPT_THAI,
	/* Tibetan */
	UNICODE_SCRIPT_TIBETAN,
	/* Tirhuta */
	UNICODE_SCRIPT_TIRHUTA,
	/* Tangsa */
	UNICODE_SCRIPT_TANGSA,
	/* Todhri */
	UNICODE_SCRIPT_TODHRI,
	/* Tolong_Siki */
	UNICODE_SCRIPT_TOLONG_SIKI,
	/* Toto */
	UNICODE_SCRIPT_TOTO,
	/* Tulu_Tigalari */
	UNICODE_SCRIPT_TULU_TIGALARI,
	/* Ugaritic */
	UNICODE_SCRIPT_UGARITIC,
	/* Vai */
	UNICODE_SCRIPT_VAI,
	/* Vithkuqi */
	UNICODE_SCRIPT_VITHKUQI,
	/* Warang_Citi */
	UNICODE_SCRIPT_WARANG_CITI,
	/* Wancho */
	UNICODE_SCRIPT_WANCHO,
	/* Old_Persian */
	UNICODE_SCRIPT_OLD_PERSIAN,
	/* Cuneiform */
	UNICODE_SCRIPT_CUNEIFORM,
	/* Yezidi */
	UNICODE_SCRIPT_YEZIDI,
	/* Yi */
	UNICODE_SCRIPT_YI,
	/* Zanabazar_Square */
	UNICODE_SCRIPT_ZANABAZAR_SQUARE,
};

/* Canonical_Combining_Class */
enum unicode_ccc {
	/* Not_Reordered */
	UNICODE_CCC_NR = 0,
	/* Overlay */
	UNICODE_CCC_OV = 1,
	/* Han_Reading */
	UNICODE_CCC_HANR = 6,
	/* Nukta */
	UNICODE_CCC_NK = 7,
	/* Kana_Voicing */
	UNICODE_CCC_KV = 8,
	/* Virama */
	UNICODE_CCC_VR = 9,
	/* CCC10 */
	UNICODE_CCC_CCC10 = 10,
	/* CCC11 */
	UNICODE_CCC_CCC11 = 11,
	/* CCC12 */
	UNICODE_CCC_CCC12 = 12,
	/* CCC13 */
	UNICODE_CCC_CCC13 = 13,
	/* CCC14 */
	UNICODE_CCC_CCC14 = 14,
	/* CCC15 */
	UNICODE_CCC_CCC15 = 15,
	/* CCC16 */
	UNICODE_CCC_CCC16 = 16,
	/* CCC17 */
	UNICODE_CCC_CCC17 = 17,
	/* CCC18 */
	UNICODE_CCC_CCC18 = 18,
	/* CCC19 */
	UNICODE_CCC_CCC19 = 19,
	/* CCC20 */
	UNICODE_CCC_CCC20 = 20,
	/* CCC21 */
	UNICODE_CCC_CCC21 = 21,
	/* CCC22 */
	UNICODE_CCC_CCC22 = 22,
	/* CCC23 */
	UNICODE_CCC_CCC23 = 23,
	/* CCC24 */
	UNICODE_CCC_CCC24 = 24,
	/* CCC25 */
	UNICODE_CCC_CCC25 = 25,
	/* CCC26 */
	UNICODE_CCC_CCC26 = 26,
	/* CCC27 */
	UNICODE_CCC_CCC27 = 27,
	/* CCC28 */
	UNICODE_CCC_CCC28 = 28,
	/* CCC29 */
	UNICODE_CCC_CCC29 = 29,
	/* CCC30 */
	UNICODE_CCC_CCC30 = 30,
	/* CCC31 */
	UNICODE_CCC_CCC31 = 31,
	/* CCC32 */
	UNICODE_CCC_CCC32 = 32,
	/* CCC33 */
	UNICODE_CCC_CCC33 = 33,
	/* CCC34 */
	UNICODE_CCC_CCC34 = 34,
	/* CCC35 */
	UNICODE_CCC_CCC35 = 35,
	/* CCC36 */
	UNICODE_CCC_CCC36 = 36,
	/* CCC84 */
	UNICODE_CCC_CCC84 = 84,
	/* CCC91 */
	UNICODE_CCC_CCC91 = 91,
	/* CCC103 */
	UNICODE_CCC_CCC103 = 103,
	/* CCC107 */
	UNICODE_CCC_CCC107 = 107,
	/* CCC118 */
	UNICODE_CCC_CCC118 = 118,
	/* CCC122 */
	UNICODE_CCC_CCC122 = 122,
	/* CCC129 */
	UNICODE_CCC_CCC129 = 129,
	/* CCC130 */
	UNICODE_CCC_CCC130 = 130,
	/* CCC132 */
	UNICODE_CCC_CCC132 = 132,
	/* CCC133 */
	UNICODE_CCC_CCC133 = 133,
	/* Attached_Below_Left */
	UNICODE_CCC_ATBL = 200,
	/* Attached_Below */
	UNICODE_CCC_ATB = 202,
	/* Attached_Above */
	UNICODE_CCC_ATA = 214,
	/* Attached_Above_Right */
	UNICODE_CCC_ATAR = 216,
	/* Below_Left */
	UNICODE_CCC_BL = 218,
	/* Below */
	UNICODE_CCC_B = 220,
	/* Below_Right */
	UNICODE_CCC_BR = 222,
	/* Left */
	UNICODE_CCC_L = 224,
	/* Right */
	UNICODE_CCC_R = 226,
	/* Above_Left */
	UNICODE_CCC_AL = 228,
	/* Above */
	UNICODE_CCC_A = 230,
	/* Above_Right */
	UNICODE_CCC_AR = 232,
	/* Double_Below */
	UNICODE_CCC_DB = 233,
	/* Double_Above */
	UNICODE_CCC_DA = 234,
	/* Iota_Subscript */
	UNICODE_CCC_IS = 240,
};

/* Joining_Type */
enum unicode_joining_type {
	/* Non_Joining */
	UNICODE_JOINING_TYPE_U = 0,
	/* Join_Causing */
	UNICODE_JOINING_TYPE_C,
	/* Dual_Joining */
	UNICODE_JOINING_TYPE_D,
	/* Left_Joining */
	UNICODE_JOINING_TYPE_L,
	/* Right_Joining */
	UNICODE_JOINING_TYPE_R,
	/* Transparent */
	UNICODE_JOINING_TYPE_T,
};

/* Decomposition_Type */
enum unicode_decomposition_type {
	/* Canonical */
	UNICODE_DECOMPOSITION_TYPE_CANONICAL = 0,
	/* <Compat> */
	UNICODE_DECOMPOSITION_TYPE_COMPAT,
	/* <Circle> */
	UNICODE_DECOMPOSITION_TYPE_CIRCLE,
	/* <Final> */
	UNICODE_DECOMPOSITION_TYPE_FINAL,
	/* <Font> */
	UNICODE_DECOMPOSITION_TYPE_FONT,
	/* <Fraction> */
	UNICODE_DECOMPOSITION_TYPE_FRACTION,
	/* <Initial> */
	UNICODE_DECOMPOSITION_TYPE_INITIAL,
	/* <Isolated> */
	UNICODE_DECOMPOSITION_TYPE_ISOLATED,
	/* <Medial> */
	UNICODE_DECOMPOSITION_TYPE_MEDIAL,
	/* <Narrow> */
	UNICODE_DECOMPOSITION_TYPE_NARROW,
	/* <Nobreak> */
	UNICODE_DECOMPOSITION_TYPE_NOBREAK,
	/* <None> */
	UNICODE_DECOMPOSITION_TYPE_NONE,
	/* <Small> */
	UNICODE_DECOMPOSITION_TYPE_SMALL,
	/* <Square> */
	UNICODE_DECOMPOSITION_TYPE_SQUARE,
	/* <Sub> */
	UNICODE_DECOMPOSITION_TYPE_SUB,
	/* <Super> */
	UNICODE_DECOMPOSITION_TYPE_SUPER,
	/* <Vertical> */
	UNICODE_DECOMPOSITION_TYPE_VERTICAL,
	/* <Wide> */
	UNICODE_DECOMPOSITION_TYPE_WIDE,
};

/* Script */
enum unicode_script unicode_script_from_string(const char *str);
/* Joining_Type */
enum unicode_joining_type unicode_joining_type_from_string(const char *str);
/* Decomposition_Type */
enum unicode_decomposition_type
unicode_decomposition_type_from_string(const char *str);

#endif
