From 4d559cddbb3b3a5c12c5167eba69598618a9f283 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Thu, 21 Apr 2011 14:58:23 -0400 Subject: [PATCH] [icu] Remove big script switch(), rely on reverse-lookup --- src/hb-icu.cc | 137 ++++---------------------------------------------- 1 file changed, 9 insertions(+), 128 deletions(-) diff --git a/src/hb-icu.cc b/src/hb-icu.cc index 2f31a070..5ff3d0f9 100644 --- a/src/hb-icu.cc +++ b/src/hb-icu.cc @@ -40,140 +40,21 @@ HB_BEGIN_DECLS hb_script_t hb_icu_script_to_script (UScriptCode script) { + if (unlikely (script == USCRIPT_INVALID_CODE)) + return HB_SCRIPT_INVALID; + return hb_script_from_string (uscript_getShortName (script)); } UScriptCode hb_icu_script_from_script (hb_script_t script) { - switch ((int) script) - { -#define CHECK_ICU_VERSION(major, minor) \ - U_ICU_VERSION_MAJOR_NUM > (major) || (U_ICU_VERSION_MAJOR_NUM == (major) && U_ICU_VERSION_MINOR_NUM >= (minor)) -#define MATCH_SCRIPT(C) case HB_SCRIPT_##C: return USCRIPT_##C -#define MATCH_SCRIPT2(C1, C2) case HB_SCRIPT_##C2: return USCRIPT_##C1 - - MATCH_SCRIPT2(INVALID_CODE, INVALID); - - MATCH_SCRIPT (COMMON); - MATCH_SCRIPT (INHERITED); - MATCH_SCRIPT (ARABIC); - MATCH_SCRIPT (ARMENIAN); - MATCH_SCRIPT (BENGALI); - MATCH_SCRIPT (BOPOMOFO); - MATCH_SCRIPT (CHEROKEE); - MATCH_SCRIPT (COPTIC); - MATCH_SCRIPT (CYRILLIC); - MATCH_SCRIPT (DESERET); - MATCH_SCRIPT (DEVANAGARI); - MATCH_SCRIPT (ETHIOPIC); - MATCH_SCRIPT (GEORGIAN); - MATCH_SCRIPT (GOTHIC); - MATCH_SCRIPT (GREEK); - MATCH_SCRIPT (GUJARATI); - MATCH_SCRIPT (GURMUKHI); - MATCH_SCRIPT (HAN); - MATCH_SCRIPT (HANGUL); - MATCH_SCRIPT (HEBREW); - MATCH_SCRIPT (HIRAGANA); - MATCH_SCRIPT (KANNADA); - MATCH_SCRIPT (KATAKANA); - MATCH_SCRIPT (KHMER); - MATCH_SCRIPT (LAO); - MATCH_SCRIPT (LATIN); - MATCH_SCRIPT (MALAYALAM); - MATCH_SCRIPT (MONGOLIAN); - MATCH_SCRIPT (MYANMAR); - MATCH_SCRIPT (OGHAM); - MATCH_SCRIPT (OLD_ITALIC); - MATCH_SCRIPT (ORIYA); - MATCH_SCRIPT (RUNIC); - MATCH_SCRIPT (SINHALA); - MATCH_SCRIPT (SYRIAC); - MATCH_SCRIPT (TAMIL); - MATCH_SCRIPT (TELUGU); - MATCH_SCRIPT (THAANA); - MATCH_SCRIPT (THAI); - MATCH_SCRIPT (TIBETAN); - MATCH_SCRIPT (CANADIAN_ABORIGINAL); - MATCH_SCRIPT (YI); - MATCH_SCRIPT (TAGALOG); - MATCH_SCRIPT (HANUNOO); - MATCH_SCRIPT (BUHID); - MATCH_SCRIPT (TAGBANWA); - - /* Unicode-4.0 additions */ - MATCH_SCRIPT (BRAILLE); - MATCH_SCRIPT (CYPRIOT); - MATCH_SCRIPT (LIMBU); - MATCH_SCRIPT (OSMANYA); - MATCH_SCRIPT (SHAVIAN); - MATCH_SCRIPT (LINEAR_B); - MATCH_SCRIPT (TAI_LE); - MATCH_SCRIPT (UGARITIC); - - /* Unicode-4.1 additions */ - MATCH_SCRIPT (NEW_TAI_LUE); - MATCH_SCRIPT (BUGINESE); - MATCH_SCRIPT (GLAGOLITIC); - MATCH_SCRIPT (TIFINAGH); - MATCH_SCRIPT (SYLOTI_NAGRI); - MATCH_SCRIPT (OLD_PERSIAN); - MATCH_SCRIPT (KHAROSHTHI); - - /* Unicode-5.0 additions */ - MATCH_SCRIPT (UNKNOWN); - MATCH_SCRIPT (BALINESE); - MATCH_SCRIPT (CUNEIFORM); - MATCH_SCRIPT (PHOENICIAN); - MATCH_SCRIPT (PHAGS_PA); - MATCH_SCRIPT (NKO); - - /* Unicode-5.1 additions */ - MATCH_SCRIPT (KAYAH_LI); - MATCH_SCRIPT (LEPCHA); - MATCH_SCRIPT (REJANG); - MATCH_SCRIPT (SUNDANESE); - MATCH_SCRIPT (SAURASHTRA); - MATCH_SCRIPT (CHAM); - MATCH_SCRIPT (OL_CHIKI); - MATCH_SCRIPT (VAI); - MATCH_SCRIPT (CARIAN); - MATCH_SCRIPT (LYCIAN); - MATCH_SCRIPT (LYDIAN); - - /* Unicode-5.2 additions */ - MATCH_SCRIPT (AVESTAN); -#if CHECK_ICU_VERSION (4, 4) - MATCH_SCRIPT (BAMUM); -#endif - MATCH_SCRIPT (EGYPTIAN_HIEROGLYPHS); - MATCH_SCRIPT (IMPERIAL_ARAMAIC); - MATCH_SCRIPT (INSCRIPTIONAL_PAHLAVI); - MATCH_SCRIPT (INSCRIPTIONAL_PARTHIAN); - MATCH_SCRIPT (JAVANESE); - MATCH_SCRIPT (KAITHI); - MATCH_SCRIPT2(LANNA, TAI_THAM); -#if CHECK_ICU_VERSION (4, 4) - MATCH_SCRIPT (LISU); -#endif - MATCH_SCRIPT2(MEITEI_MAYEK, MEETEI_MAYEK); -#if CHECK_ICU_VERSION (4, 4) - MATCH_SCRIPT (OLD_SOUTH_ARABIAN); -#endif - MATCH_SCRIPT2(ORKHON, OLD_TURKIC); - MATCH_SCRIPT (SAMARITAN); - MATCH_SCRIPT (TAI_VIET); - - /* Unicode-6.0 additions */ - MATCH_SCRIPT (BATAK); - MATCH_SCRIPT (BRAHMI); - MATCH_SCRIPT2(MANDAEAN, MANDAIC); - -#undef CHECK_ICU_VERSION -#undef MATCH_SCRIPT -#undef MATCH_SCRIPT2 - } + if (unlikely (script == HB_SCRIPT_INVALID)) + return USCRIPT_INVALID_CODE; + + for (unsigned int i = 0; i < USCRIPT_CODE_LIMIT; i++) + if (unlikely (hb_icu_script_to_script ((UScriptCode) i) == script)) + return (UScriptCode) i; return USCRIPT_UNKNOWN; } -- GitLab