[icu] Remove big script switch(), rely on reverse-lookup
authorBehdad Esfahbod <behdad@behdad.org>
Thu, 21 Apr 2011 18:58:23 +0000 (14:58 -0400)
committerBehdad Esfahbod <behdad@behdad.org>
Thu, 21 Apr 2011 18:58:23 +0000 (14:58 -0400)
src/hb-icu.cc

index 2f31a07..5ff3d0f 100644 (file)
@@ -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;
 }