From: Behdad Esfahbod Date: Fri, 15 Apr 2011 23:16:54 +0000 (-0400) Subject: Move enum types to hb-common.h X-Git-Tag: submit/2.0alpha-wayland/20121130.004132~9^2~361 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=00bec2c969555e76c3f84650a1d3c45308e585ad;p=profile%2Fivi%2Forg.tizen.video-player.git Move enum types to hb-common.h --- diff --git a/src/hb-common.c b/src/hb-common.c index ac62e83..a913415 100644 --- a/src/hb-common.c +++ b/src/hb-common.c @@ -141,4 +141,410 @@ hb_language_to_string (hb_language_t language) } +/* hb_script_t */ + +static const hb_tag_t script_to_iso15924_tag[] = +{ + HB_TAG('Z','y','y','y'), /* HB_SCRIPT_COMMON */ + HB_TAG('Q','a','a','i'), /* HB_SCRIPT_INHERITED */ + HB_TAG('A','r','a','b'), /* HB_SCRIPT_ARABIC */ + HB_TAG('A','r','m','n'), /* HB_SCRIPT_ARMENIAN */ + HB_TAG('B','e','n','g'), /* HB_SCRIPT_BENGALI */ + HB_TAG('B','o','p','o'), /* HB_SCRIPT_BOPOMOFO */ + HB_TAG('C','h','e','r'), /* HB_SCRIPT_CHEROKEE */ + HB_TAG('Q','a','a','c'), /* HB_SCRIPT_COPTIC */ + HB_TAG('C','y','r','l'), /* HB_SCRIPT_CYRILLIC */ + HB_TAG('D','s','r','t'), /* HB_SCRIPT_DESERET */ + HB_TAG('D','e','v','a'), /* HB_SCRIPT_DEVANAGARI */ + HB_TAG('E','t','h','i'), /* HB_SCRIPT_ETHIOPIC */ + HB_TAG('G','e','o','r'), /* HB_SCRIPT_GEORGIAN */ + HB_TAG('G','o','t','h'), /* HB_SCRIPT_GOTHIC */ + HB_TAG('G','r','e','k'), /* HB_SCRIPT_GREEK */ + HB_TAG('G','u','j','r'), /* HB_SCRIPT_GUJARATI */ + HB_TAG('G','u','r','u'), /* HB_SCRIPT_GURMUKHI */ + HB_TAG('H','a','n','i'), /* HB_SCRIPT_HAN */ + HB_TAG('H','a','n','g'), /* HB_SCRIPT_HANGUL */ + HB_TAG('H','e','b','r'), /* HB_SCRIPT_HEBREW */ + HB_TAG('H','i','r','a'), /* HB_SCRIPT_HIRAGANA */ + HB_TAG('K','n','d','a'), /* HB_SCRIPT_KANNADA */ + HB_TAG('K','a','n','a'), /* HB_SCRIPT_KATAKANA */ + HB_TAG('K','h','m','r'), /* HB_SCRIPT_KHMER */ + HB_TAG('L','a','o','o'), /* HB_SCRIPT_LAO */ + HB_TAG('L','a','t','n'), /* HB_SCRIPT_LATIN */ + HB_TAG('M','l','y','m'), /* HB_SCRIPT_MALAYALAM */ + HB_TAG('M','o','n','g'), /* HB_SCRIPT_MONGOLIAN */ + HB_TAG('M','y','m','r'), /* HB_SCRIPT_MYANMAR */ + HB_TAG('O','g','a','m'), /* HB_SCRIPT_OGHAM */ + HB_TAG('I','t','a','l'), /* HB_SCRIPT_OLD_ITALIC */ + HB_TAG('O','r','y','a'), /* HB_SCRIPT_ORIYA */ + HB_TAG('R','u','n','r'), /* HB_SCRIPT_RUNIC */ + HB_TAG('S','i','n','h'), /* HB_SCRIPT_SINHALA */ + HB_TAG('S','y','r','c'), /* HB_SCRIPT_SYRIAC */ + HB_TAG('T','a','m','l'), /* HB_SCRIPT_TAMIL */ + HB_TAG('T','e','l','u'), /* HB_SCRIPT_TELUGU */ + HB_TAG('T','h','a','a'), /* HB_SCRIPT_THAANA */ + HB_TAG('T','h','a','i'), /* HB_SCRIPT_THAI */ + HB_TAG('T','i','b','t'), /* HB_SCRIPT_TIBETAN */ + HB_TAG('C','a','n','s'), /* HB_SCRIPT_CANADIAN_ABORIGINAL */ + HB_TAG('Y','i','i','i'), /* HB_SCRIPT_YI */ + HB_TAG('T','g','l','g'), /* HB_SCRIPT_TAGALOG */ + HB_TAG('H','a','n','o'), /* HB_SCRIPT_HANUNOO */ + HB_TAG('B','u','h','d'), /* HB_SCRIPT_BUHID */ + HB_TAG('T','a','g','b'), /* HB_SCRIPT_TAGBANWA */ + + /* Unicode-4.0 additions */ + HB_TAG('B','r','a','i'), /* HB_SCRIPT_BRAILLE */ + HB_TAG('C','p','r','t'), /* HB_SCRIPT_CYPRIOT */ + HB_TAG('L','i','m','b'), /* HB_SCRIPT_LIMBU */ + HB_TAG('O','s','m','a'), /* HB_SCRIPT_OSMANYA */ + HB_TAG('S','h','a','w'), /* HB_SCRIPT_SHAVIAN */ + HB_TAG('L','i','n','b'), /* HB_SCRIPT_LINEAR_B */ + HB_TAG('T','a','l','e'), /* HB_SCRIPT_TAI_LE */ + HB_TAG('U','g','a','r'), /* HB_SCRIPT_UGARITIC */ + + /* Unicode-4.1 additions */ + HB_TAG('T','a','l','u'), /* HB_SCRIPT_NEW_TAI_LUE */ + HB_TAG('B','u','g','i'), /* HB_SCRIPT_BUGINESE */ + HB_TAG('G','l','a','g'), /* HB_SCRIPT_GLAGOLITIC */ + HB_TAG('T','f','n','g'), /* HB_SCRIPT_TIFINAGH */ + HB_TAG('S','y','l','o'), /* HB_SCRIPT_SYLOTI_NAGRI */ + HB_TAG('X','p','e','o'), /* HB_SCRIPT_OLD_PERSIAN */ + HB_TAG('K','h','a','r'), /* HB_SCRIPT_KHAROSHTHI */ + + /* Unicode-5.0 additions */ + HB_TAG('Z','z','z','z'), /* HB_SCRIPT_UNKNOWN */ + HB_TAG('B','a','l','i'), /* HB_SCRIPT_BALINESE */ + HB_TAG('X','s','u','x'), /* HB_SCRIPT_CUNEIFORM */ + HB_TAG('P','h','n','x'), /* HB_SCRIPT_PHOENICIAN */ + HB_TAG('P','h','a','g'), /* HB_SCRIPT_PHAGS_PA */ + HB_TAG('N','k','o','o'), /* HB_SCRIPT_NKO */ + + /* Unicode-5.1 additions */ + HB_TAG('K','a','l','i'), /* HB_SCRIPT_KAYAH_LI */ + HB_TAG('L','e','p','c'), /* HB_SCRIPT_LEPCHA */ + HB_TAG('R','j','n','g'), /* HB_SCRIPT_REJANG */ + HB_TAG('S','u','n','d'), /* HB_SCRIPT_SUNDANESE */ + HB_TAG('S','a','u','r'), /* HB_SCRIPT_SAURASHTRA */ + HB_TAG('C','h','a','m'), /* HB_SCRIPT_CHAM */ + HB_TAG('O','l','c','k'), /* HB_SCRIPT_OL_CHIKI */ + HB_TAG('V','a','i','i'), /* HB_SCRIPT_VAI */ + HB_TAG('C','a','r','i'), /* HB_SCRIPT_CARIAN */ + HB_TAG('L','y','c','i'), /* HB_SCRIPT_LYCIAN */ + HB_TAG('L','y','d','i'), /* HB_SCRIPT_LYDIAN */ + + /* Unicode-5.2 additions */ + HB_TAG('A','v','s','t'), /* HB_SCRIPT_AVESTAN */ + HB_TAG('B','a','m','u'), /* HB_SCRIPT_BAMUM */ + HB_TAG('E','g','y','p'), /* HB_SCRIPT_EGYPTIAN_HIEROGLYPHS */ + HB_TAG('A','r','m','i'), /* HB_SCRIPT_IMPERIAL_ARAMAIC */ + HB_TAG('P','h','l','i'), /* HB_SCRIPT_INSCRIPTIONAL_PAHLAVI */ + HB_TAG('P','r','t','i'), /* HB_SCRIPT_INSCRIPTIONAL_PARTHIAN */ + HB_TAG('J','a','v','a'), /* HB_SCRIPT_JAVANESE */ + HB_TAG('K','t','h','i'), /* HB_SCRIPT_KAITHI */ + HB_TAG('L','i','s','u'), /* HB_SCRIPT_LISU */ + HB_TAG('M','t','e','i'), /* HB_SCRIPT_MEETEI_MAYEK */ + HB_TAG('S','a','r','b'), /* HB_SCRIPT_OLD_SOUTH_ARABIAN */ + HB_TAG('O','r','k','h'), /* HB_SCRIPT_OLD_TURKIC */ + HB_TAG('S','a','m','r'), /* HB_SCRIPT_SAMARITAN */ + HB_TAG('L','a','n','a'), /* HB_SCRIPT_TAI_THAM */ + HB_TAG('T','a','v','t'), /* HB_SCRIPT_TAI_VIET */ + + /* Unicode-6.0 additions */ + HB_TAG('B','a','t','k'), /* HB_SCRIPT_BATAK */ + HB_TAG('B','r','a','h'), /* HB_SCRIPT_BRAHMI */ + HB_TAG('M','a','n','d') /* HB_SCRIPT_MANDAIC */ +}; + +struct tag_script_pair { + hb_tag_t tag; + hb_script_t script; +}; +static const struct tag_script_pair script_from_iso15924_tag[] = +{ + {HB_TAG('A','r','a','b'), HB_SCRIPT_ARABIC}, + {HB_TAG('A','r','m','i'), HB_SCRIPT_IMPERIAL_ARAMAIC}, + {HB_TAG('A','r','m','n'), HB_SCRIPT_ARMENIAN}, + {HB_TAG('A','v','s','t'), HB_SCRIPT_AVESTAN}, + {HB_TAG('B','a','l','i'), HB_SCRIPT_BALINESE}, + {HB_TAG('B','a','m','u'), HB_SCRIPT_BAMUM}, + {HB_TAG('B','a','t','k'), HB_SCRIPT_BATAK}, + {HB_TAG('B','e','n','g'), HB_SCRIPT_BENGALI}, + {HB_TAG('B','o','p','o'), HB_SCRIPT_BOPOMOFO}, + {HB_TAG('B','r','a','h'), HB_SCRIPT_BRAHMI}, + {HB_TAG('B','r','a','i'), HB_SCRIPT_BRAILLE}, + {HB_TAG('B','u','g','i'), HB_SCRIPT_BUGINESE}, + {HB_TAG('B','u','h','d'), HB_SCRIPT_BUHID}, + {HB_TAG('C','a','n','s'), HB_SCRIPT_CANADIAN_ABORIGINAL}, + {HB_TAG('C','a','r','i'), HB_SCRIPT_CARIAN}, + {HB_TAG('C','h','a','m'), HB_SCRIPT_CHAM}, + {HB_TAG('C','h','e','r'), HB_SCRIPT_CHEROKEE}, + {HB_TAG('C','p','r','t'), HB_SCRIPT_CYPRIOT}, + {HB_TAG('C','y','r','l'), HB_SCRIPT_CYRILLIC}, + {HB_TAG('C','y','r','s'), HB_SCRIPT_CYRILLIC}, + {HB_TAG('D','e','v','a'), HB_SCRIPT_DEVANAGARI}, + {HB_TAG('D','s','r','t'), HB_SCRIPT_DESERET}, + {HB_TAG('E','g','y','p'), HB_SCRIPT_EGYPTIAN_HIEROGLYPHS}, + {HB_TAG('E','t','h','i'), HB_SCRIPT_ETHIOPIC}, + {HB_TAG('G','e','o','a'), HB_SCRIPT_GEORGIAN}, + {HB_TAG('G','e','o','n'), HB_SCRIPT_GEORGIAN}, + {HB_TAG('G','e','o','r'), HB_SCRIPT_GEORGIAN}, + {HB_TAG('G','l','a','g'), HB_SCRIPT_GLAGOLITIC}, + {HB_TAG('G','o','t','h'), HB_SCRIPT_GOTHIC}, + {HB_TAG('G','r','e','k'), HB_SCRIPT_GREEK}, + {HB_TAG('G','u','j','r'), HB_SCRIPT_GUJARATI}, + {HB_TAG('G','u','r','u'), HB_SCRIPT_GURMUKHI}, + {HB_TAG('H','a','n','g'), HB_SCRIPT_HANGUL}, + {HB_TAG('H','a','n','i'), HB_SCRIPT_HAN}, + {HB_TAG('H','a','n','o'), HB_SCRIPT_HANUNOO}, + {HB_TAG('H','e','b','r'), HB_SCRIPT_HEBREW}, + {HB_TAG('H','i','r','a'), HB_SCRIPT_HIRAGANA}, + {HB_TAG('I','t','a','l'), HB_SCRIPT_OLD_ITALIC}, + {HB_TAG('J','a','v','a'), HB_SCRIPT_JAVANESE}, + {HB_TAG('K','a','l','i'), HB_SCRIPT_KAYAH_LI}, + {HB_TAG('K','a','n','a'), HB_SCRIPT_KATAKANA}, + {HB_TAG('K','h','a','r'), HB_SCRIPT_KHAROSHTHI}, + {HB_TAG('K','h','m','r'), HB_SCRIPT_KHMER}, + {HB_TAG('K','n','d','a'), HB_SCRIPT_KANNADA}, + {HB_TAG('K','t','h','i'), HB_SCRIPT_KAITHI}, + {HB_TAG('L','a','n','a'), HB_SCRIPT_TAI_THAM}, + {HB_TAG('L','a','o','o'), HB_SCRIPT_LAO}, + {HB_TAG('L','a','t','f'), HB_SCRIPT_LATIN}, + {HB_TAG('L','a','t','g'), HB_SCRIPT_LATIN}, + {HB_TAG('L','a','t','n'), HB_SCRIPT_LATIN}, + {HB_TAG('L','e','p','c'), HB_SCRIPT_LEPCHA}, + {HB_TAG('L','i','m','b'), HB_SCRIPT_LIMBU}, + {HB_TAG('L','i','n','b'), HB_SCRIPT_LINEAR_B}, + {HB_TAG('L','i','s','u'), HB_SCRIPT_LISU}, + {HB_TAG('L','y','c','i'), HB_SCRIPT_LYCIAN}, + {HB_TAG('L','y','d','i'), HB_SCRIPT_LYDIAN}, + {HB_TAG('M','a','n','d'), HB_SCRIPT_MANDAIC}, + {HB_TAG('M','l','y','m'), HB_SCRIPT_MALAYALAM}, + {HB_TAG('M','o','n','g'), HB_SCRIPT_MONGOLIAN}, + {HB_TAG('M','t','e','i'), HB_SCRIPT_MEETEI_MAYEK}, + {HB_TAG('M','y','m','r'), HB_SCRIPT_MYANMAR}, + {HB_TAG('N','k','o','o'), HB_SCRIPT_NKO}, + {HB_TAG('O','g','a','m'), HB_SCRIPT_OGHAM}, + {HB_TAG('O','l','c','k'), HB_SCRIPT_OL_CHIKI}, + {HB_TAG('O','r','k','h'), HB_SCRIPT_OLD_TURKIC}, + {HB_TAG('O','r','y','a'), HB_SCRIPT_ORIYA}, + {HB_TAG('O','s','m','a'), HB_SCRIPT_OSMANYA}, + {HB_TAG('P','h','a','g'), HB_SCRIPT_PHAGS_PA}, + {HB_TAG('P','h','l','i'), HB_SCRIPT_INSCRIPTIONAL_PAHLAVI}, + {HB_TAG('P','h','n','x'), HB_SCRIPT_PHOENICIAN}, + {HB_TAG('P','r','t','i'), HB_SCRIPT_INSCRIPTIONAL_PARTHIAN}, + {HB_TAG('Q','a','a','c'), HB_SCRIPT_COPTIC}, + {HB_TAG('Q','a','a','i'), HB_SCRIPT_INHERITED}, + {HB_TAG('R','j','n','g'), HB_SCRIPT_REJANG}, + {HB_TAG('R','u','n','r'), HB_SCRIPT_RUNIC}, + {HB_TAG('S','a','m','r'), HB_SCRIPT_SAMARITAN}, + {HB_TAG('S','a','r','b'), HB_SCRIPT_OLD_SOUTH_ARABIAN}, + {HB_TAG('S','a','u','r'), HB_SCRIPT_SAURASHTRA}, + {HB_TAG('S','h','a','w'), HB_SCRIPT_SHAVIAN}, + {HB_TAG('S','i','n','h'), HB_SCRIPT_SINHALA}, + {HB_TAG('S','u','n','d'), HB_SCRIPT_SUNDANESE}, + {HB_TAG('S','y','l','o'), HB_SCRIPT_SYLOTI_NAGRI}, + {HB_TAG('S','y','r','c'), HB_SCRIPT_SYRIAC}, + {HB_TAG('S','y','r','e'), HB_SCRIPT_SYRIAC}, + {HB_TAG('S','y','r','n'), HB_SCRIPT_SYRIAC}, + {HB_TAG('T','a','g','b'), HB_SCRIPT_TAGBANWA}, + {HB_TAG('T','a','l','e'), HB_SCRIPT_TAI_LE}, + {HB_TAG('T','a','l','u'), HB_SCRIPT_NEW_TAI_LUE}, + {HB_TAG('T','a','m','l'), HB_SCRIPT_TAMIL}, + {HB_TAG('T','a','v','t'), HB_SCRIPT_TAI_VIET}, + {HB_TAG('T','e','l','u'), HB_SCRIPT_TELUGU}, + {HB_TAG('T','f','n','g'), HB_SCRIPT_TIFINAGH}, + {HB_TAG('T','g','l','g'), HB_SCRIPT_TAGALOG}, + {HB_TAG('T','h','a','a'), HB_SCRIPT_THAANA}, + {HB_TAG('T','h','a','i'), HB_SCRIPT_THAI}, + {HB_TAG('T','i','b','t'), HB_SCRIPT_TIBETAN}, + {HB_TAG('U','g','a','r'), HB_SCRIPT_UGARITIC}, + {HB_TAG('V','a','i','i'), HB_SCRIPT_VAI}, + {HB_TAG('X','p','e','o'), HB_SCRIPT_OLD_PERSIAN}, + {HB_TAG('X','s','u','x'), HB_SCRIPT_CUNEIFORM}, + {HB_TAG('Y','i','i','i'), HB_SCRIPT_YI}, + {HB_TAG('Z','y','y','y'), HB_SCRIPT_COMMON}, + {HB_TAG('Z','z','z','z'), HB_SCRIPT_UNKNOWN} +}; + +static int +_tag_cmp (hb_tag_t *pa, hb_tag_t *pb) +{ + hb_tag_t a = *pa, b = *pb; + return a < b ? -1 : a == b ? 0 : +1; +} + + +hb_script_t +hb_script_from_iso15924_tag (hb_tag_t tag) +{ + const struct tag_script_pair *pair; + + /* Be lenient, adjust case (one capital letter followed by three small letters) */ + tag = (tag & 0xDFDFDFDF) | 0x00202020; + + pair = (const struct tag_script_pair *) bsearch (&tag, + script_from_iso15924_tag, + ARRAY_LENGTH (script_from_iso15924_tag), + sizeof (script_from_iso15924_tag[0]), + (hb_compare_func_t) _tag_cmp); + + if (pair) + return pair->script; + + /* If it looks right, just use the tag as a script */ + if (((uint32_t) tag & 0xE0E0E0E0) == 0x40606060) + return (hb_script_t) tag; + + /* Otherwise, return unknown */ + return HB_SCRIPT_UNKNOWN; +} + +hb_script_t +hb_script_from_string (const char *s) +{ + return hb_script_from_iso15924_tag (hb_tag_from_string (s)); +} + +hb_tag_t +hb_script_to_iso15924_tag (hb_script_t script) +{ + if (likely ((unsigned int) script < ARRAY_LENGTH (script_to_iso15924_tag))) + return script_to_iso15924_tag[script]; + + /* if script is of the right shape (one capital letter followed by three small letters), + * return as is. */ + if (((uint32_t) script & 0xE0E0E0E0) == 0x40606060) + return (hb_tag_t) script; + + /* Otherwise, we don't know what that is */ + return script_to_iso15924_tag[HB_SCRIPT_UNKNOWN]; +} + + +#define LTR HB_DIRECTION_LTR +#define RTL HB_DIRECTION_RTL +const hb_direction_t horiz_dir[] = +{ + LTR, /* Zyyy */ + LTR, /* Qaai */ + RTL, /* Arab */ + LTR, /* Armn */ + LTR, /* Beng */ + LTR, /* Bopo */ + LTR, /* Cher */ + LTR, /* Qaac */ + LTR, /* Cyrl (Cyrs) */ + LTR, /* Dsrt */ + LTR, /* Deva */ + LTR, /* Ethi */ + LTR, /* Geor (Geon, Geoa) */ + LTR, /* Goth */ + LTR, /* Grek */ + LTR, /* Gujr */ + LTR, /* Guru */ + LTR, /* Hani */ + LTR, /* Hang */ + RTL, /* Hebr */ + LTR, /* Hira */ + LTR, /* Knda */ + LTR, /* Kana */ + LTR, /* Khmr */ + LTR, /* Laoo */ + LTR, /* Latn (Latf, Latg) */ + LTR, /* Mlym */ + LTR, /* Mong */ + LTR, /* Mymr */ + LTR, /* Ogam */ + LTR, /* Ital */ + LTR, /* Orya */ + LTR, /* Runr */ + LTR, /* Sinh */ + RTL, /* Syrc (Syrj, Syrn, Syre) */ + LTR, /* Taml */ + LTR, /* Telu */ + RTL, /* Thaa */ + LTR, /* Thai */ + LTR, /* Tibt */ + LTR, /* Cans */ + LTR, /* Yiii */ + LTR, /* Tglg */ + LTR, /* Hano */ + LTR, /* Buhd */ + LTR, /* Tagb */ + + /* Unicode-4.0 additions */ + LTR, /* Brai */ + RTL, /* Cprt */ + LTR, /* Limb */ + LTR, /* Osma */ + LTR, /* Shaw */ + LTR, /* Linb */ + LTR, /* Tale */ + LTR, /* Ugar */ + + /* Unicode-4.1 additions */ + LTR, /* Talu */ + LTR, /* Bugi */ + LTR, /* Glag */ + LTR, /* Tfng */ + LTR, /* Sylo */ + LTR, /* Xpeo */ + LTR, /* Khar */ + + /* Unicode-5.0 additions */ + LTR, /* Zzzz */ + LTR, /* Bali */ + LTR, /* Xsux */ + RTL, /* Phnx */ + LTR, /* Phag */ + RTL, /* Nkoo */ + + /* Unicode-5.1 additions */ + LTR, /* Kali */ + LTR, /* Lepc */ + LTR, /* Rjng */ + LTR, /* Sund */ + LTR, /* Saur */ + LTR, /* Cham */ + LTR, /* Olck */ + LTR, /* Vaii */ + LTR, /* Cari */ + LTR, /* Lyci */ + LTR, /* Lydi */ + + /* Unicode-5.2 additions */ + RTL, /* Avst */ + LTR, /* Bamu */ + LTR, /* Egyp */ + RTL, /* Armi */ + RTL, /* Phli */ + RTL, /* Prti */ + LTR, /* Java */ + LTR, /* Kthi */ + LTR, /* Lisu */ + LTR, /* Mtei */ + RTL, /* Sarb */ + RTL, /* Orkh */ + RTL, /* Samr */ + LTR, /* Lana */ + LTR, /* Tavt */ + + /* Unicode-6.0 additions */ + LTR, /* Batk */ + LTR, /* Brah */ + RTL /* Mand */ +}; +#undef LTR +#undef RTL + +hb_direction_t +hb_script_get_horizontal_direction (hb_script_t script) +{ + if (unlikely ((unsigned int) script >= ARRAY_LENGTH (horiz_dir))) + return HB_DIRECTION_LTR; + + return horiz_dir[script]; +} + + HB_END_DECLS diff --git a/src/hb-common.h b/src/hb-common.h index 4dadc94..21caa71 100644 --- a/src/hb-common.h +++ b/src/hb-common.h @@ -108,6 +108,176 @@ const char * hb_language_to_string (hb_language_t language); +/* hb_unicode_general_category_t */ + +typedef enum +{ + HB_UNICODE_GENERAL_CATEGORY_CONTROL, /* Cc */ + HB_UNICODE_GENERAL_CATEGORY_FORMAT, /* Cf */ + HB_UNICODE_GENERAL_CATEGORY_UNASSIGNED, /* Cn */ + HB_UNICODE_GENERAL_CATEGORY_PRIVATE_USE, /* Co */ + HB_UNICODE_GENERAL_CATEGORY_SURROGATE, /* Cs */ + HB_UNICODE_GENERAL_CATEGORY_LOWERCASE_LETTER, /* Ll */ + HB_UNICODE_GENERAL_CATEGORY_MODIFIER_LETTER, /* Lm */ + HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER, /* Lo */ + HB_UNICODE_GENERAL_CATEGORY_TITLECASE_LETTER, /* Lt */ + HB_UNICODE_GENERAL_CATEGORY_UPPERCASE_LETTER, /* Lu */ + HB_UNICODE_GENERAL_CATEGORY_COMBINING_MARK, /* Mc */ + HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK, /* Me */ + HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK, /* Mn */ + HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER, /* Nd */ + HB_UNICODE_GENERAL_CATEGORY_LETTER_NUMBER, /* Nl */ + HB_UNICODE_GENERAL_CATEGORY_OTHER_NUMBER, /* No */ + HB_UNICODE_GENERAL_CATEGORY_CONNECT_PUNCTUATION, /* Pc */ + HB_UNICODE_GENERAL_CATEGORY_DASH_PUNCTUATION, /* Pd */ + HB_UNICODE_GENERAL_CATEGORY_CLOSE_PUNCTUATION, /* Pe */ + HB_UNICODE_GENERAL_CATEGORY_FINAL_PUNCTUATION, /* Pf */ + HB_UNICODE_GENERAL_CATEGORY_INITIAL_PUNCTUATION, /* Pi */ + HB_UNICODE_GENERAL_CATEGORY_OTHER_PUNCTUATION, /* Po */ + HB_UNICODE_GENERAL_CATEGORY_OPEN_PUNCTUATION, /* Ps */ + HB_UNICODE_GENERAL_CATEGORY_CURRENCY_SYMBOL, /* Sc */ + HB_UNICODE_GENERAL_CATEGORY_MODIFIER_SYMBOL, /* Sk */ + HB_UNICODE_GENERAL_CATEGORY_MATH_SYMBOL, /* Sm */ + HB_UNICODE_GENERAL_CATEGORY_OTHER_SYMBOL, /* So */ + HB_UNICODE_GENERAL_CATEGORY_LINE_SEPARATOR, /* Zl */ + HB_UNICODE_GENERAL_CATEGORY_PARAGRAPH_SEPARATOR, /* Zp */ + HB_UNICODE_GENERAL_CATEGORY_SPACE_SEPARATOR /* Zs */ +} hb_unicode_general_category_t; + + +/* hb_script_t */ + +typedef enum +{ /* ISO 15924 code */ + HB_SCRIPT_INVALID = -1, + + HB_SCRIPT_COMMON = 0, /* Zyyy */ + HB_SCRIPT_INHERITED, /* Qaai */ + HB_SCRIPT_ARABIC, /* Arab */ + HB_SCRIPT_ARMENIAN, /* Armn */ + HB_SCRIPT_BENGALI, /* Beng */ + HB_SCRIPT_BOPOMOFO, /* Bopo */ + HB_SCRIPT_CHEROKEE, /* Cher */ + HB_SCRIPT_COPTIC, /* Qaac */ + HB_SCRIPT_CYRILLIC, /* Cyrl (Cyrs) */ + HB_SCRIPT_DESERET, /* Dsrt */ + HB_SCRIPT_DEVANAGARI, /* Deva */ + HB_SCRIPT_ETHIOPIC, /* Ethi */ + HB_SCRIPT_GEORGIAN, /* Geor (Geon, Geoa) */ + HB_SCRIPT_GOTHIC, /* Goth */ + HB_SCRIPT_GREEK, /* Grek */ + HB_SCRIPT_GUJARATI, /* Gujr */ + HB_SCRIPT_GURMUKHI, /* Guru */ + HB_SCRIPT_HAN, /* Hani */ + HB_SCRIPT_HANGUL, /* Hang */ + HB_SCRIPT_HEBREW, /* Hebr */ + HB_SCRIPT_HIRAGANA, /* Hira */ + HB_SCRIPT_KANNADA, /* Knda */ + HB_SCRIPT_KATAKANA, /* Kana */ + HB_SCRIPT_KHMER, /* Khmr */ + HB_SCRIPT_LAO, /* Laoo */ + HB_SCRIPT_LATIN, /* Latn (Latf, Latg) */ + HB_SCRIPT_MALAYALAM, /* Mlym */ + HB_SCRIPT_MONGOLIAN, /* Mong */ + HB_SCRIPT_MYANMAR, /* Mymr */ + HB_SCRIPT_OGHAM, /* Ogam */ + HB_SCRIPT_OLD_ITALIC, /* Ital */ + HB_SCRIPT_ORIYA, /* Orya */ + HB_SCRIPT_RUNIC, /* Runr */ + HB_SCRIPT_SINHALA, /* Sinh */ + HB_SCRIPT_SYRIAC, /* Syrc (Syrj, Syrn, Syre) */ + HB_SCRIPT_TAMIL, /* Taml */ + HB_SCRIPT_TELUGU, /* Telu */ + HB_SCRIPT_THAANA, /* Thaa */ + HB_SCRIPT_THAI, /* Thai */ + HB_SCRIPT_TIBETAN, /* Tibt */ + HB_SCRIPT_CANADIAN_ABORIGINAL, /* Cans */ + HB_SCRIPT_YI, /* Yiii */ + HB_SCRIPT_TAGALOG, /* Tglg */ + HB_SCRIPT_HANUNOO, /* Hano */ + HB_SCRIPT_BUHID, /* Buhd */ + HB_SCRIPT_TAGBANWA, /* Tagb */ + + /* Unicode-4.0 additions */ + HB_SCRIPT_BRAILLE, /* Brai */ + HB_SCRIPT_CYPRIOT, /* Cprt */ + HB_SCRIPT_LIMBU, /* Limb */ + HB_SCRIPT_OSMANYA, /* Osma */ + HB_SCRIPT_SHAVIAN, /* Shaw */ + HB_SCRIPT_LINEAR_B, /* Linb */ + HB_SCRIPT_TAI_LE, /* Tale */ + HB_SCRIPT_UGARITIC, /* Ugar */ + + /* Unicode-4.1 additions */ + HB_SCRIPT_NEW_TAI_LUE, /* Talu */ + HB_SCRIPT_BUGINESE, /* Bugi */ + HB_SCRIPT_GLAGOLITIC, /* Glag */ + HB_SCRIPT_TIFINAGH, /* Tfng */ + HB_SCRIPT_SYLOTI_NAGRI, /* Sylo */ + HB_SCRIPT_OLD_PERSIAN, /* Xpeo */ + HB_SCRIPT_KHAROSHTHI, /* Khar */ + + /* Unicode-5.0 additions */ + HB_SCRIPT_UNKNOWN, /* Zzzz */ + HB_SCRIPT_BALINESE, /* Bali */ + HB_SCRIPT_CUNEIFORM, /* Xsux */ + HB_SCRIPT_PHOENICIAN, /* Phnx */ + HB_SCRIPT_PHAGS_PA, /* Phag */ + HB_SCRIPT_NKO, /* Nkoo */ + + /* Unicode-5.1 additions */ + HB_SCRIPT_KAYAH_LI, /* Kali */ + HB_SCRIPT_LEPCHA, /* Lepc */ + HB_SCRIPT_REJANG, /* Rjng */ + HB_SCRIPT_SUNDANESE, /* Sund */ + HB_SCRIPT_SAURASHTRA, /* Saur */ + HB_SCRIPT_CHAM, /* Cham */ + HB_SCRIPT_OL_CHIKI, /* Olck */ + HB_SCRIPT_VAI, /* Vaii */ + HB_SCRIPT_CARIAN, /* Cari */ + HB_SCRIPT_LYCIAN, /* Lyci */ + HB_SCRIPT_LYDIAN, /* Lydi */ + + /* Unicode-5.2 additions */ + HB_SCRIPT_AVESTAN, /* Avst */ + HB_SCRIPT_BAMUM, /* Bamu */ + HB_SCRIPT_EGYPTIAN_HIEROGLYPHS, /* Egyp */ + HB_SCRIPT_IMPERIAL_ARAMAIC, /* Armi */ + HB_SCRIPT_INSCRIPTIONAL_PAHLAVI, /* Phli */ + HB_SCRIPT_INSCRIPTIONAL_PARTHIAN, /* Prti */ + HB_SCRIPT_JAVANESE, /* Java */ + HB_SCRIPT_KAITHI, /* Kthi */ + HB_SCRIPT_LISU, /* Lisu */ + HB_SCRIPT_MEETEI_MAYEK, /* Mtei */ + HB_SCRIPT_OLD_SOUTH_ARABIAN, /* Sarb */ + HB_SCRIPT_OLD_TURKIC, /* Orkh */ + HB_SCRIPT_SAMARITAN, /* Samr */ + HB_SCRIPT_TAI_THAM, /* Lana */ + HB_SCRIPT_TAI_VIET, /* Tavt */ + + /* Unicode-6.0 additions */ + HB_SCRIPT_BATAK, /* Batk */ + HB_SCRIPT_BRAHMI, /* Brah */ + HB_SCRIPT_MANDAIC /* Mand */ +} hb_script_t; + + +/* Script functions */ + +hb_script_t +hb_script_from_iso15924_tag (hb_tag_t tag); + +/* suger for tag_from_string() then script_from_iso15924_tag */ +hb_script_t +hb_script_from_string (const char *s); + +hb_tag_t +hb_script_to_iso15924_tag (hb_script_t script); + +hb_direction_t +hb_script_get_horizontal_direction (hb_script_t script); + + HB_END_DECLS #endif /* HB_COMMON_H */ diff --git a/src/hb-unicode.c b/src/hb-unicode.c index bf18631..9bb3524 100644 --- a/src/hb-unicode.c +++ b/src/hb-unicode.c @@ -234,410 +234,4 @@ hb_unicode_get_eastasian_width (hb_unicode_funcs_t *ufuncs, } -/* hb_script_t */ - -static const hb_tag_t script_to_iso15924_tag[] = -{ - HB_TAG('Z','y','y','y'), /* HB_SCRIPT_COMMON */ - HB_TAG('Q','a','a','i'), /* HB_SCRIPT_INHERITED */ - HB_TAG('A','r','a','b'), /* HB_SCRIPT_ARABIC */ - HB_TAG('A','r','m','n'), /* HB_SCRIPT_ARMENIAN */ - HB_TAG('B','e','n','g'), /* HB_SCRIPT_BENGALI */ - HB_TAG('B','o','p','o'), /* HB_SCRIPT_BOPOMOFO */ - HB_TAG('C','h','e','r'), /* HB_SCRIPT_CHEROKEE */ - HB_TAG('Q','a','a','c'), /* HB_SCRIPT_COPTIC */ - HB_TAG('C','y','r','l'), /* HB_SCRIPT_CYRILLIC */ - HB_TAG('D','s','r','t'), /* HB_SCRIPT_DESERET */ - HB_TAG('D','e','v','a'), /* HB_SCRIPT_DEVANAGARI */ - HB_TAG('E','t','h','i'), /* HB_SCRIPT_ETHIOPIC */ - HB_TAG('G','e','o','r'), /* HB_SCRIPT_GEORGIAN */ - HB_TAG('G','o','t','h'), /* HB_SCRIPT_GOTHIC */ - HB_TAG('G','r','e','k'), /* HB_SCRIPT_GREEK */ - HB_TAG('G','u','j','r'), /* HB_SCRIPT_GUJARATI */ - HB_TAG('G','u','r','u'), /* HB_SCRIPT_GURMUKHI */ - HB_TAG('H','a','n','i'), /* HB_SCRIPT_HAN */ - HB_TAG('H','a','n','g'), /* HB_SCRIPT_HANGUL */ - HB_TAG('H','e','b','r'), /* HB_SCRIPT_HEBREW */ - HB_TAG('H','i','r','a'), /* HB_SCRIPT_HIRAGANA */ - HB_TAG('K','n','d','a'), /* HB_SCRIPT_KANNADA */ - HB_TAG('K','a','n','a'), /* HB_SCRIPT_KATAKANA */ - HB_TAG('K','h','m','r'), /* HB_SCRIPT_KHMER */ - HB_TAG('L','a','o','o'), /* HB_SCRIPT_LAO */ - HB_TAG('L','a','t','n'), /* HB_SCRIPT_LATIN */ - HB_TAG('M','l','y','m'), /* HB_SCRIPT_MALAYALAM */ - HB_TAG('M','o','n','g'), /* HB_SCRIPT_MONGOLIAN */ - HB_TAG('M','y','m','r'), /* HB_SCRIPT_MYANMAR */ - HB_TAG('O','g','a','m'), /* HB_SCRIPT_OGHAM */ - HB_TAG('I','t','a','l'), /* HB_SCRIPT_OLD_ITALIC */ - HB_TAG('O','r','y','a'), /* HB_SCRIPT_ORIYA */ - HB_TAG('R','u','n','r'), /* HB_SCRIPT_RUNIC */ - HB_TAG('S','i','n','h'), /* HB_SCRIPT_SINHALA */ - HB_TAG('S','y','r','c'), /* HB_SCRIPT_SYRIAC */ - HB_TAG('T','a','m','l'), /* HB_SCRIPT_TAMIL */ - HB_TAG('T','e','l','u'), /* HB_SCRIPT_TELUGU */ - HB_TAG('T','h','a','a'), /* HB_SCRIPT_THAANA */ - HB_TAG('T','h','a','i'), /* HB_SCRIPT_THAI */ - HB_TAG('T','i','b','t'), /* HB_SCRIPT_TIBETAN */ - HB_TAG('C','a','n','s'), /* HB_SCRIPT_CANADIAN_ABORIGINAL */ - HB_TAG('Y','i','i','i'), /* HB_SCRIPT_YI */ - HB_TAG('T','g','l','g'), /* HB_SCRIPT_TAGALOG */ - HB_TAG('H','a','n','o'), /* HB_SCRIPT_HANUNOO */ - HB_TAG('B','u','h','d'), /* HB_SCRIPT_BUHID */ - HB_TAG('T','a','g','b'), /* HB_SCRIPT_TAGBANWA */ - - /* Unicode-4.0 additions */ - HB_TAG('B','r','a','i'), /* HB_SCRIPT_BRAILLE */ - HB_TAG('C','p','r','t'), /* HB_SCRIPT_CYPRIOT */ - HB_TAG('L','i','m','b'), /* HB_SCRIPT_LIMBU */ - HB_TAG('O','s','m','a'), /* HB_SCRIPT_OSMANYA */ - HB_TAG('S','h','a','w'), /* HB_SCRIPT_SHAVIAN */ - HB_TAG('L','i','n','b'), /* HB_SCRIPT_LINEAR_B */ - HB_TAG('T','a','l','e'), /* HB_SCRIPT_TAI_LE */ - HB_TAG('U','g','a','r'), /* HB_SCRIPT_UGARITIC */ - - /* Unicode-4.1 additions */ - HB_TAG('T','a','l','u'), /* HB_SCRIPT_NEW_TAI_LUE */ - HB_TAG('B','u','g','i'), /* HB_SCRIPT_BUGINESE */ - HB_TAG('G','l','a','g'), /* HB_SCRIPT_GLAGOLITIC */ - HB_TAG('T','f','n','g'), /* HB_SCRIPT_TIFINAGH */ - HB_TAG('S','y','l','o'), /* HB_SCRIPT_SYLOTI_NAGRI */ - HB_TAG('X','p','e','o'), /* HB_SCRIPT_OLD_PERSIAN */ - HB_TAG('K','h','a','r'), /* HB_SCRIPT_KHAROSHTHI */ - - /* Unicode-5.0 additions */ - HB_TAG('Z','z','z','z'), /* HB_SCRIPT_UNKNOWN */ - HB_TAG('B','a','l','i'), /* HB_SCRIPT_BALINESE */ - HB_TAG('X','s','u','x'), /* HB_SCRIPT_CUNEIFORM */ - HB_TAG('P','h','n','x'), /* HB_SCRIPT_PHOENICIAN */ - HB_TAG('P','h','a','g'), /* HB_SCRIPT_PHAGS_PA */ - HB_TAG('N','k','o','o'), /* HB_SCRIPT_NKO */ - - /* Unicode-5.1 additions */ - HB_TAG('K','a','l','i'), /* HB_SCRIPT_KAYAH_LI */ - HB_TAG('L','e','p','c'), /* HB_SCRIPT_LEPCHA */ - HB_TAG('R','j','n','g'), /* HB_SCRIPT_REJANG */ - HB_TAG('S','u','n','d'), /* HB_SCRIPT_SUNDANESE */ - HB_TAG('S','a','u','r'), /* HB_SCRIPT_SAURASHTRA */ - HB_TAG('C','h','a','m'), /* HB_SCRIPT_CHAM */ - HB_TAG('O','l','c','k'), /* HB_SCRIPT_OL_CHIKI */ - HB_TAG('V','a','i','i'), /* HB_SCRIPT_VAI */ - HB_TAG('C','a','r','i'), /* HB_SCRIPT_CARIAN */ - HB_TAG('L','y','c','i'), /* HB_SCRIPT_LYCIAN */ - HB_TAG('L','y','d','i'), /* HB_SCRIPT_LYDIAN */ - - /* Unicode-5.2 additions */ - HB_TAG('A','v','s','t'), /* HB_SCRIPT_AVESTAN */ - HB_TAG('B','a','m','u'), /* HB_SCRIPT_BAMUM */ - HB_TAG('E','g','y','p'), /* HB_SCRIPT_EGYPTIAN_HIEROGLYPHS */ - HB_TAG('A','r','m','i'), /* HB_SCRIPT_IMPERIAL_ARAMAIC */ - HB_TAG('P','h','l','i'), /* HB_SCRIPT_INSCRIPTIONAL_PAHLAVI */ - HB_TAG('P','r','t','i'), /* HB_SCRIPT_INSCRIPTIONAL_PARTHIAN */ - HB_TAG('J','a','v','a'), /* HB_SCRIPT_JAVANESE */ - HB_TAG('K','t','h','i'), /* HB_SCRIPT_KAITHI */ - HB_TAG('L','i','s','u'), /* HB_SCRIPT_LISU */ - HB_TAG('M','t','e','i'), /* HB_SCRIPT_MEETEI_MAYEK */ - HB_TAG('S','a','r','b'), /* HB_SCRIPT_OLD_SOUTH_ARABIAN */ - HB_TAG('O','r','k','h'), /* HB_SCRIPT_OLD_TURKIC */ - HB_TAG('S','a','m','r'), /* HB_SCRIPT_SAMARITAN */ - HB_TAG('L','a','n','a'), /* HB_SCRIPT_TAI_THAM */ - HB_TAG('T','a','v','t'), /* HB_SCRIPT_TAI_VIET */ - - /* Unicode-6.0 additions */ - HB_TAG('B','a','t','k'), /* HB_SCRIPT_BATAK */ - HB_TAG('B','r','a','h'), /* HB_SCRIPT_BRAHMI */ - HB_TAG('M','a','n','d') /* HB_SCRIPT_MANDAIC */ -}; - -struct tag_script_pair { - hb_tag_t tag; - hb_script_t script; -}; -static const struct tag_script_pair script_from_iso15924_tag[] = -{ - {HB_TAG('A','r','a','b'), HB_SCRIPT_ARABIC}, - {HB_TAG('A','r','m','i'), HB_SCRIPT_IMPERIAL_ARAMAIC}, - {HB_TAG('A','r','m','n'), HB_SCRIPT_ARMENIAN}, - {HB_TAG('A','v','s','t'), HB_SCRIPT_AVESTAN}, - {HB_TAG('B','a','l','i'), HB_SCRIPT_BALINESE}, - {HB_TAG('B','a','m','u'), HB_SCRIPT_BAMUM}, - {HB_TAG('B','a','t','k'), HB_SCRIPT_BATAK}, - {HB_TAG('B','e','n','g'), HB_SCRIPT_BENGALI}, - {HB_TAG('B','o','p','o'), HB_SCRIPT_BOPOMOFO}, - {HB_TAG('B','r','a','h'), HB_SCRIPT_BRAHMI}, - {HB_TAG('B','r','a','i'), HB_SCRIPT_BRAILLE}, - {HB_TAG('B','u','g','i'), HB_SCRIPT_BUGINESE}, - {HB_TAG('B','u','h','d'), HB_SCRIPT_BUHID}, - {HB_TAG('C','a','n','s'), HB_SCRIPT_CANADIAN_ABORIGINAL}, - {HB_TAG('C','a','r','i'), HB_SCRIPT_CARIAN}, - {HB_TAG('C','h','a','m'), HB_SCRIPT_CHAM}, - {HB_TAG('C','h','e','r'), HB_SCRIPT_CHEROKEE}, - {HB_TAG('C','p','r','t'), HB_SCRIPT_CYPRIOT}, - {HB_TAG('C','y','r','l'), HB_SCRIPT_CYRILLIC}, - {HB_TAG('C','y','r','s'), HB_SCRIPT_CYRILLIC}, - {HB_TAG('D','e','v','a'), HB_SCRIPT_DEVANAGARI}, - {HB_TAG('D','s','r','t'), HB_SCRIPT_DESERET}, - {HB_TAG('E','g','y','p'), HB_SCRIPT_EGYPTIAN_HIEROGLYPHS}, - {HB_TAG('E','t','h','i'), HB_SCRIPT_ETHIOPIC}, - {HB_TAG('G','e','o','a'), HB_SCRIPT_GEORGIAN}, - {HB_TAG('G','e','o','n'), HB_SCRIPT_GEORGIAN}, - {HB_TAG('G','e','o','r'), HB_SCRIPT_GEORGIAN}, - {HB_TAG('G','l','a','g'), HB_SCRIPT_GLAGOLITIC}, - {HB_TAG('G','o','t','h'), HB_SCRIPT_GOTHIC}, - {HB_TAG('G','r','e','k'), HB_SCRIPT_GREEK}, - {HB_TAG('G','u','j','r'), HB_SCRIPT_GUJARATI}, - {HB_TAG('G','u','r','u'), HB_SCRIPT_GURMUKHI}, - {HB_TAG('H','a','n','g'), HB_SCRIPT_HANGUL}, - {HB_TAG('H','a','n','i'), HB_SCRIPT_HAN}, - {HB_TAG('H','a','n','o'), HB_SCRIPT_HANUNOO}, - {HB_TAG('H','e','b','r'), HB_SCRIPT_HEBREW}, - {HB_TAG('H','i','r','a'), HB_SCRIPT_HIRAGANA}, - {HB_TAG('I','t','a','l'), HB_SCRIPT_OLD_ITALIC}, - {HB_TAG('J','a','v','a'), HB_SCRIPT_JAVANESE}, - {HB_TAG('K','a','l','i'), HB_SCRIPT_KAYAH_LI}, - {HB_TAG('K','a','n','a'), HB_SCRIPT_KATAKANA}, - {HB_TAG('K','h','a','r'), HB_SCRIPT_KHAROSHTHI}, - {HB_TAG('K','h','m','r'), HB_SCRIPT_KHMER}, - {HB_TAG('K','n','d','a'), HB_SCRIPT_KANNADA}, - {HB_TAG('K','t','h','i'), HB_SCRIPT_KAITHI}, - {HB_TAG('L','a','n','a'), HB_SCRIPT_TAI_THAM}, - {HB_TAG('L','a','o','o'), HB_SCRIPT_LAO}, - {HB_TAG('L','a','t','f'), HB_SCRIPT_LATIN}, - {HB_TAG('L','a','t','g'), HB_SCRIPT_LATIN}, - {HB_TAG('L','a','t','n'), HB_SCRIPT_LATIN}, - {HB_TAG('L','e','p','c'), HB_SCRIPT_LEPCHA}, - {HB_TAG('L','i','m','b'), HB_SCRIPT_LIMBU}, - {HB_TAG('L','i','n','b'), HB_SCRIPT_LINEAR_B}, - {HB_TAG('L','i','s','u'), HB_SCRIPT_LISU}, - {HB_TAG('L','y','c','i'), HB_SCRIPT_LYCIAN}, - {HB_TAG('L','y','d','i'), HB_SCRIPT_LYDIAN}, - {HB_TAG('M','a','n','d'), HB_SCRIPT_MANDAIC}, - {HB_TAG('M','l','y','m'), HB_SCRIPT_MALAYALAM}, - {HB_TAG('M','o','n','g'), HB_SCRIPT_MONGOLIAN}, - {HB_TAG('M','t','e','i'), HB_SCRIPT_MEETEI_MAYEK}, - {HB_TAG('M','y','m','r'), HB_SCRIPT_MYANMAR}, - {HB_TAG('N','k','o','o'), HB_SCRIPT_NKO}, - {HB_TAG('O','g','a','m'), HB_SCRIPT_OGHAM}, - {HB_TAG('O','l','c','k'), HB_SCRIPT_OL_CHIKI}, - {HB_TAG('O','r','k','h'), HB_SCRIPT_OLD_TURKIC}, - {HB_TAG('O','r','y','a'), HB_SCRIPT_ORIYA}, - {HB_TAG('O','s','m','a'), HB_SCRIPT_OSMANYA}, - {HB_TAG('P','h','a','g'), HB_SCRIPT_PHAGS_PA}, - {HB_TAG('P','h','l','i'), HB_SCRIPT_INSCRIPTIONAL_PAHLAVI}, - {HB_TAG('P','h','n','x'), HB_SCRIPT_PHOENICIAN}, - {HB_TAG('P','r','t','i'), HB_SCRIPT_INSCRIPTIONAL_PARTHIAN}, - {HB_TAG('Q','a','a','c'), HB_SCRIPT_COPTIC}, - {HB_TAG('Q','a','a','i'), HB_SCRIPT_INHERITED}, - {HB_TAG('R','j','n','g'), HB_SCRIPT_REJANG}, - {HB_TAG('R','u','n','r'), HB_SCRIPT_RUNIC}, - {HB_TAG('S','a','m','r'), HB_SCRIPT_SAMARITAN}, - {HB_TAG('S','a','r','b'), HB_SCRIPT_OLD_SOUTH_ARABIAN}, - {HB_TAG('S','a','u','r'), HB_SCRIPT_SAURASHTRA}, - {HB_TAG('S','h','a','w'), HB_SCRIPT_SHAVIAN}, - {HB_TAG('S','i','n','h'), HB_SCRIPT_SINHALA}, - {HB_TAG('S','u','n','d'), HB_SCRIPT_SUNDANESE}, - {HB_TAG('S','y','l','o'), HB_SCRIPT_SYLOTI_NAGRI}, - {HB_TAG('S','y','r','c'), HB_SCRIPT_SYRIAC}, - {HB_TAG('S','y','r','e'), HB_SCRIPT_SYRIAC}, - {HB_TAG('S','y','r','n'), HB_SCRIPT_SYRIAC}, - {HB_TAG('T','a','g','b'), HB_SCRIPT_TAGBANWA}, - {HB_TAG('T','a','l','e'), HB_SCRIPT_TAI_LE}, - {HB_TAG('T','a','l','u'), HB_SCRIPT_NEW_TAI_LUE}, - {HB_TAG('T','a','m','l'), HB_SCRIPT_TAMIL}, - {HB_TAG('T','a','v','t'), HB_SCRIPT_TAI_VIET}, - {HB_TAG('T','e','l','u'), HB_SCRIPT_TELUGU}, - {HB_TAG('T','f','n','g'), HB_SCRIPT_TIFINAGH}, - {HB_TAG('T','g','l','g'), HB_SCRIPT_TAGALOG}, - {HB_TAG('T','h','a','a'), HB_SCRIPT_THAANA}, - {HB_TAG('T','h','a','i'), HB_SCRIPT_THAI}, - {HB_TAG('T','i','b','t'), HB_SCRIPT_TIBETAN}, - {HB_TAG('U','g','a','r'), HB_SCRIPT_UGARITIC}, - {HB_TAG('V','a','i','i'), HB_SCRIPT_VAI}, - {HB_TAG('X','p','e','o'), HB_SCRIPT_OLD_PERSIAN}, - {HB_TAG('X','s','u','x'), HB_SCRIPT_CUNEIFORM}, - {HB_TAG('Y','i','i','i'), HB_SCRIPT_YI}, - {HB_TAG('Z','y','y','y'), HB_SCRIPT_COMMON}, - {HB_TAG('Z','z','z','z'), HB_SCRIPT_UNKNOWN} -}; - -static int -_tag_cmp (hb_tag_t *pa, hb_tag_t *pb) -{ - hb_tag_t a = *pa, b = *pb; - return a < b ? -1 : a == b ? 0 : +1; -} - - -hb_script_t -hb_script_from_iso15924_tag (hb_tag_t tag) -{ - const struct tag_script_pair *pair; - - /* Be lenient, adjust case (one capital letter followed by three small letters) */ - tag = (tag & 0xDFDFDFDF) | 0x00202020; - - pair = (const struct tag_script_pair *) bsearch (&tag, - script_from_iso15924_tag, - ARRAY_LENGTH (script_from_iso15924_tag), - sizeof (script_from_iso15924_tag[0]), - (hb_compare_func_t) _tag_cmp); - - if (pair) - return pair->script; - - /* If it looks right, just use the tag as a script */ - if (((uint32_t) tag & 0xE0E0E0E0) == 0x40606060) - return (hb_script_t) tag; - - /* Otherwise, return unknown */ - return HB_SCRIPT_UNKNOWN; -} - -hb_script_t -hb_script_from_string (const char *s) -{ - return hb_script_from_iso15924_tag (hb_tag_from_string (s)); -} - -hb_tag_t -hb_script_to_iso15924_tag (hb_script_t script) -{ - if (likely ((unsigned int) script < ARRAY_LENGTH (script_to_iso15924_tag))) - return script_to_iso15924_tag[script]; - - /* if script is of the right shape (one capital letter followed by three small letters), - * return as is. */ - if (((uint32_t) script & 0xE0E0E0E0) == 0x40606060) - return (hb_tag_t) script; - - /* Otherwise, we don't know what that is */ - return script_to_iso15924_tag[HB_SCRIPT_UNKNOWN]; -} - - -#define LTR HB_DIRECTION_LTR -#define RTL HB_DIRECTION_RTL -const hb_direction_t horiz_dir[] = -{ - LTR, /* Zyyy */ - LTR, /* Qaai */ - RTL, /* Arab */ - LTR, /* Armn */ - LTR, /* Beng */ - LTR, /* Bopo */ - LTR, /* Cher */ - LTR, /* Qaac */ - LTR, /* Cyrl (Cyrs) */ - LTR, /* Dsrt */ - LTR, /* Deva */ - LTR, /* Ethi */ - LTR, /* Geor (Geon, Geoa) */ - LTR, /* Goth */ - LTR, /* Grek */ - LTR, /* Gujr */ - LTR, /* Guru */ - LTR, /* Hani */ - LTR, /* Hang */ - RTL, /* Hebr */ - LTR, /* Hira */ - LTR, /* Knda */ - LTR, /* Kana */ - LTR, /* Khmr */ - LTR, /* Laoo */ - LTR, /* Latn (Latf, Latg) */ - LTR, /* Mlym */ - LTR, /* Mong */ - LTR, /* Mymr */ - LTR, /* Ogam */ - LTR, /* Ital */ - LTR, /* Orya */ - LTR, /* Runr */ - LTR, /* Sinh */ - RTL, /* Syrc (Syrj, Syrn, Syre) */ - LTR, /* Taml */ - LTR, /* Telu */ - RTL, /* Thaa */ - LTR, /* Thai */ - LTR, /* Tibt */ - LTR, /* Cans */ - LTR, /* Yiii */ - LTR, /* Tglg */ - LTR, /* Hano */ - LTR, /* Buhd */ - LTR, /* Tagb */ - - /* Unicode-4.0 additions */ - LTR, /* Brai */ - RTL, /* Cprt */ - LTR, /* Limb */ - LTR, /* Osma */ - LTR, /* Shaw */ - LTR, /* Linb */ - LTR, /* Tale */ - LTR, /* Ugar */ - - /* Unicode-4.1 additions */ - LTR, /* Talu */ - LTR, /* Bugi */ - LTR, /* Glag */ - LTR, /* Tfng */ - LTR, /* Sylo */ - LTR, /* Xpeo */ - LTR, /* Khar */ - - /* Unicode-5.0 additions */ - LTR, /* Zzzz */ - LTR, /* Bali */ - LTR, /* Xsux */ - RTL, /* Phnx */ - LTR, /* Phag */ - RTL, /* Nkoo */ - - /* Unicode-5.1 additions */ - LTR, /* Kali */ - LTR, /* Lepc */ - LTR, /* Rjng */ - LTR, /* Sund */ - LTR, /* Saur */ - LTR, /* Cham */ - LTR, /* Olck */ - LTR, /* Vaii */ - LTR, /* Cari */ - LTR, /* Lyci */ - LTR, /* Lydi */ - - /* Unicode-5.2 additions */ - RTL, /* Avst */ - LTR, /* Bamu */ - LTR, /* Egyp */ - RTL, /* Armi */ - RTL, /* Phli */ - RTL, /* Prti */ - LTR, /* Java */ - LTR, /* Kthi */ - LTR, /* Lisu */ - LTR, /* Mtei */ - RTL, /* Sarb */ - RTL, /* Orkh */ - RTL, /* Samr */ - LTR, /* Lana */ - LTR, /* Tavt */ - - /* Unicode-6.0 additions */ - LTR, /* Batk */ - LTR, /* Brah */ - RTL /* Mand */ -}; -#undef LTR -#undef RTL - -hb_direction_t -hb_script_get_horizontal_direction (hb_script_t script) -{ - if (unlikely ((unsigned int) script >= ARRAY_LENGTH (horiz_dir))) - return HB_DIRECTION_LTR; - - return horiz_dir[script]; -} - - HB_END_DECLS diff --git a/src/hb-unicode.h b/src/hb-unicode.h index 56e3012..fb8fe97 100644 --- a/src/hb-unicode.h +++ b/src/hb-unicode.h @@ -32,157 +32,6 @@ HB_BEGIN_DECLS -/* Unicode General Category property */ -typedef enum -{ - HB_UNICODE_GENERAL_CATEGORY_CONTROL, /* Cc */ - HB_UNICODE_GENERAL_CATEGORY_FORMAT, /* Cf */ - HB_UNICODE_GENERAL_CATEGORY_UNASSIGNED, /* Cn */ - HB_UNICODE_GENERAL_CATEGORY_PRIVATE_USE, /* Co */ - HB_UNICODE_GENERAL_CATEGORY_SURROGATE, /* Cs */ - HB_UNICODE_GENERAL_CATEGORY_LOWERCASE_LETTER, /* Ll */ - HB_UNICODE_GENERAL_CATEGORY_MODIFIER_LETTER, /* Lm */ - HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER, /* Lo */ - HB_UNICODE_GENERAL_CATEGORY_TITLECASE_LETTER, /* Lt */ - HB_UNICODE_GENERAL_CATEGORY_UPPERCASE_LETTER, /* Lu */ - HB_UNICODE_GENERAL_CATEGORY_COMBINING_MARK, /* Mc */ - HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK, /* Me */ - HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK, /* Mn */ - HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER, /* Nd */ - HB_UNICODE_GENERAL_CATEGORY_LETTER_NUMBER, /* Nl */ - HB_UNICODE_GENERAL_CATEGORY_OTHER_NUMBER, /* No */ - HB_UNICODE_GENERAL_CATEGORY_CONNECT_PUNCTUATION, /* Pc */ - HB_UNICODE_GENERAL_CATEGORY_DASH_PUNCTUATION, /* Pd */ - HB_UNICODE_GENERAL_CATEGORY_CLOSE_PUNCTUATION, /* Pe */ - HB_UNICODE_GENERAL_CATEGORY_FINAL_PUNCTUATION, /* Pf */ - HB_UNICODE_GENERAL_CATEGORY_INITIAL_PUNCTUATION, /* Pi */ - HB_UNICODE_GENERAL_CATEGORY_OTHER_PUNCTUATION, /* Po */ - HB_UNICODE_GENERAL_CATEGORY_OPEN_PUNCTUATION, /* Ps */ - HB_UNICODE_GENERAL_CATEGORY_CURRENCY_SYMBOL, /* Sc */ - HB_UNICODE_GENERAL_CATEGORY_MODIFIER_SYMBOL, /* Sk */ - HB_UNICODE_GENERAL_CATEGORY_MATH_SYMBOL, /* Sm */ - HB_UNICODE_GENERAL_CATEGORY_OTHER_SYMBOL, /* So */ - HB_UNICODE_GENERAL_CATEGORY_LINE_SEPARATOR, /* Zl */ - HB_UNICODE_GENERAL_CATEGORY_PARAGRAPH_SEPARATOR, /* Zp */ - HB_UNICODE_GENERAL_CATEGORY_SPACE_SEPARATOR /* Zs */ -} hb_unicode_general_category_t; - -/* Unicode Script property */ -typedef enum -{ /* ISO 15924 code */ - HB_SCRIPT_INVALID = -1, - - HB_SCRIPT_COMMON = 0, /* Zyyy */ - HB_SCRIPT_INHERITED, /* Qaai */ - HB_SCRIPT_ARABIC, /* Arab */ - HB_SCRIPT_ARMENIAN, /* Armn */ - HB_SCRIPT_BENGALI, /* Beng */ - HB_SCRIPT_BOPOMOFO, /* Bopo */ - HB_SCRIPT_CHEROKEE, /* Cher */ - HB_SCRIPT_COPTIC, /* Qaac */ - HB_SCRIPT_CYRILLIC, /* Cyrl (Cyrs) */ - HB_SCRIPT_DESERET, /* Dsrt */ - HB_SCRIPT_DEVANAGARI, /* Deva */ - HB_SCRIPT_ETHIOPIC, /* Ethi */ - HB_SCRIPT_GEORGIAN, /* Geor (Geon, Geoa) */ - HB_SCRIPT_GOTHIC, /* Goth */ - HB_SCRIPT_GREEK, /* Grek */ - HB_SCRIPT_GUJARATI, /* Gujr */ - HB_SCRIPT_GURMUKHI, /* Guru */ - HB_SCRIPT_HAN, /* Hani */ - HB_SCRIPT_HANGUL, /* Hang */ - HB_SCRIPT_HEBREW, /* Hebr */ - HB_SCRIPT_HIRAGANA, /* Hira */ - HB_SCRIPT_KANNADA, /* Knda */ - HB_SCRIPT_KATAKANA, /* Kana */ - HB_SCRIPT_KHMER, /* Khmr */ - HB_SCRIPT_LAO, /* Laoo */ - HB_SCRIPT_LATIN, /* Latn (Latf, Latg) */ - HB_SCRIPT_MALAYALAM, /* Mlym */ - HB_SCRIPT_MONGOLIAN, /* Mong */ - HB_SCRIPT_MYANMAR, /* Mymr */ - HB_SCRIPT_OGHAM, /* Ogam */ - HB_SCRIPT_OLD_ITALIC, /* Ital */ - HB_SCRIPT_ORIYA, /* Orya */ - HB_SCRIPT_RUNIC, /* Runr */ - HB_SCRIPT_SINHALA, /* Sinh */ - HB_SCRIPT_SYRIAC, /* Syrc (Syrj, Syrn, Syre) */ - HB_SCRIPT_TAMIL, /* Taml */ - HB_SCRIPT_TELUGU, /* Telu */ - HB_SCRIPT_THAANA, /* Thaa */ - HB_SCRIPT_THAI, /* Thai */ - HB_SCRIPT_TIBETAN, /* Tibt */ - HB_SCRIPT_CANADIAN_ABORIGINAL, /* Cans */ - HB_SCRIPT_YI, /* Yiii */ - HB_SCRIPT_TAGALOG, /* Tglg */ - HB_SCRIPT_HANUNOO, /* Hano */ - HB_SCRIPT_BUHID, /* Buhd */ - HB_SCRIPT_TAGBANWA, /* Tagb */ - - /* Unicode-4.0 additions */ - HB_SCRIPT_BRAILLE, /* Brai */ - HB_SCRIPT_CYPRIOT, /* Cprt */ - HB_SCRIPT_LIMBU, /* Limb */ - HB_SCRIPT_OSMANYA, /* Osma */ - HB_SCRIPT_SHAVIAN, /* Shaw */ - HB_SCRIPT_LINEAR_B, /* Linb */ - HB_SCRIPT_TAI_LE, /* Tale */ - HB_SCRIPT_UGARITIC, /* Ugar */ - - /* Unicode-4.1 additions */ - HB_SCRIPT_NEW_TAI_LUE, /* Talu */ - HB_SCRIPT_BUGINESE, /* Bugi */ - HB_SCRIPT_GLAGOLITIC, /* Glag */ - HB_SCRIPT_TIFINAGH, /* Tfng */ - HB_SCRIPT_SYLOTI_NAGRI, /* Sylo */ - HB_SCRIPT_OLD_PERSIAN, /* Xpeo */ - HB_SCRIPT_KHAROSHTHI, /* Khar */ - - /* Unicode-5.0 additions */ - HB_SCRIPT_UNKNOWN, /* Zzzz */ - HB_SCRIPT_BALINESE, /* Bali */ - HB_SCRIPT_CUNEIFORM, /* Xsux */ - HB_SCRIPT_PHOENICIAN, /* Phnx */ - HB_SCRIPT_PHAGS_PA, /* Phag */ - HB_SCRIPT_NKO, /* Nkoo */ - - /* Unicode-5.1 additions */ - HB_SCRIPT_KAYAH_LI, /* Kali */ - HB_SCRIPT_LEPCHA, /* Lepc */ - HB_SCRIPT_REJANG, /* Rjng */ - HB_SCRIPT_SUNDANESE, /* Sund */ - HB_SCRIPT_SAURASHTRA, /* Saur */ - HB_SCRIPT_CHAM, /* Cham */ - HB_SCRIPT_OL_CHIKI, /* Olck */ - HB_SCRIPT_VAI, /* Vaii */ - HB_SCRIPT_CARIAN, /* Cari */ - HB_SCRIPT_LYCIAN, /* Lyci */ - HB_SCRIPT_LYDIAN, /* Lydi */ - - /* Unicode-5.2 additions */ - HB_SCRIPT_AVESTAN, /* Avst */ - HB_SCRIPT_BAMUM, /* Bamu */ - HB_SCRIPT_EGYPTIAN_HIEROGLYPHS, /* Egyp */ - HB_SCRIPT_IMPERIAL_ARAMAIC, /* Armi */ - HB_SCRIPT_INSCRIPTIONAL_PAHLAVI, /* Phli */ - HB_SCRIPT_INSCRIPTIONAL_PARTHIAN, /* Prti */ - HB_SCRIPT_JAVANESE, /* Java */ - HB_SCRIPT_KAITHI, /* Kthi */ - HB_SCRIPT_LISU, /* Lisu */ - HB_SCRIPT_MEETEI_MAYEK, /* Mtei */ - HB_SCRIPT_OLD_SOUTH_ARABIAN, /* Sarb */ - HB_SCRIPT_OLD_TURKIC, /* Orkh */ - HB_SCRIPT_SAMARITAN, /* Samr */ - HB_SCRIPT_TAI_THAM, /* Lana */ - HB_SCRIPT_TAI_VIET, /* Tavt */ - - /* Unicode-6.0 additions */ - HB_SCRIPT_BATAK, /* Batk */ - HB_SCRIPT_BRAHMI, /* Brah */ - HB_SCRIPT_MANDAIC /* Mand */ -} hb_script_t; - - /* * hb_unicode_funcs_t */ @@ -290,21 +139,6 @@ hb_unicode_get_eastasian_width (hb_unicode_funcs_t *ufuncs, hb_codepoint_t unicode); -/* Script functions */ - -hb_script_t -hb_script_from_iso15924_tag (hb_tag_t tag); - -/* suger for tag_from_string() then script_from_iso15924_tag */ -hb_script_t -hb_script_from_string (const char *s); - -hb_tag_t -hb_script_to_iso15924_tag (hb_script_t script); - -hb_direction_t -hb_script_get_horizontal_direction (hb_script_t script); - HB_END_DECLS #endif /* HB_UNICODE_H */