Title: [103397] trunk/Source/WebCore
Revision
103397
Author
commit-qu...@webkit.org
Date
2011-12-21 00:19:32 -0800 (Wed, 21 Dec 2011)

Log Message

Add all ICU languages to LocaleToScriptMappingDefault.cpp
https://bugs.webkit.org/show_bug.cgi?id=67274

Patch by Matt Falkenhagen <fal...@chromium.org> on 2011-12-21
Reviewed by Kent Tamura.

This better mimics the behavior of LocaleToScriptMappingICU.cpp. ICU
languages from ICU 3.6 are added. Also, script suffix in locale is
handled, so for example "fa_Latn" is mapped to Latin while "fa" is mapped to
Arabic.

No new tests, there is no visible effect until default per-script fonts
are added to non-ICU ports (alternatively, we could extend DumpRenderTree
to support overridePreference for per-script fonts as in bug 71110).

* platform/text/LocaleToScriptMappingDefault.cpp:
(WebCore::getScriptCode): add script name to script code mapping
(WebCore::localeToScriptCodeForFontSelection): add ICU languages to map

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (103396 => 103397)


--- trunk/Source/WebCore/ChangeLog	2011-12-21 08:11:54 UTC (rev 103396)
+++ trunk/Source/WebCore/ChangeLog	2011-12-21 08:19:32 UTC (rev 103397)
@@ -1,3 +1,23 @@
+2011-12-21  Matt Falkenhagen  <fal...@chromium.org>
+
+        Add all ICU languages to LocaleToScriptMappingDefault.cpp
+        https://bugs.webkit.org/show_bug.cgi?id=67274
+
+        Reviewed by Kent Tamura.
+
+        This better mimics the behavior of LocaleToScriptMappingICU.cpp. ICU
+        languages from ICU 3.6 are added. Also, script suffix in locale is
+        handled, so for example "fa_Latn" is mapped to Latin while "fa" is mapped to
+        Arabic.
+
+        No new tests, there is no visible effect until default per-script fonts
+        are added to non-ICU ports (alternatively, we could extend DumpRenderTree 
+        to support overridePreference for per-script fonts as in bug 71110).
+
+        * platform/text/LocaleToScriptMappingDefault.cpp:
+        (WebCore::getScriptCode): add script name to script code mapping
+        (WebCore::localeToScriptCodeForFontSelection): add ICU languages to map 
+
 2011-12-20  Mary Wu  <mary...@torchmobile.com.cn>
 
         Upstream PageClientBlackBerry.h into WebCore/platform/blackberry

Modified: trunk/Source/WebCore/platform/text/LocaleToScriptMappingDefault.cpp (103396 => 103397)


--- trunk/Source/WebCore/platform/text/LocaleToScriptMappingDefault.cpp	2011-12-21 08:11:54 UTC (rev 103396)
+++ trunk/Source/WebCore/platform/text/LocaleToScriptMappingDefault.cpp	2011-12-21 08:19:32 UTC (rev 103397)
@@ -37,6 +37,133 @@
 
 namespace WebCore {
 
+static UScriptCode getScriptCode(const String& scriptName)
+{
+    struct ScriptNameCode {
+        const char* name;
+        UScriptCode code;
+    };
+
+    static const ScriptNameCode scriptNameCodeList[] = {
+        { "zyyy", USCRIPT_COMMON },
+        { "qaai", USCRIPT_INHERITED },
+        { "arab", USCRIPT_ARABIC },
+        { "armn", USCRIPT_ARMENIAN },
+        { "beng", USCRIPT_BENGALI },
+        { "bopo", USCRIPT_BOPOMOFO },
+        { "cher", USCRIPT_CHEROKEE },
+        { "copt", USCRIPT_COPTIC },
+        { "cyrl", USCRIPT_CYRILLIC },
+        { "dsrt", USCRIPT_DESERET },
+        { "deva", USCRIPT_DEVANAGARI },
+        { "ethi", USCRIPT_ETHIOPIC },
+        { "geor", USCRIPT_GEORGIAN },
+        { "goth", USCRIPT_GOTHIC },
+        { "grek", USCRIPT_GREEK },
+        { "gujr", USCRIPT_GUJARATI },
+        { "guru", USCRIPT_GURMUKHI },
+        { "hani", USCRIPT_HAN },
+        { "hang", USCRIPT_HANGUL },
+        { "hebr", USCRIPT_HEBREW },
+        { "hira", USCRIPT_HIRAGANA },
+        { "knda", USCRIPT_KANNADA },
+        { "kana", USCRIPT_KATAKANA },
+        { "khmr", USCRIPT_KHMER },
+        { "laoo", USCRIPT_LAO },
+        { "latn", USCRIPT_LATIN },
+        { "mlym", USCRIPT_MALAYALAM },
+        { "mong", USCRIPT_MONGOLIAN },
+        { "mymr", USCRIPT_MYANMAR },
+        { "ogam", USCRIPT_OGHAM },
+        { "ital", USCRIPT_OLD_ITALIC },
+        { "orya", USCRIPT_ORIYA },
+        { "runr", USCRIPT_RUNIC },
+        { "sinh", USCRIPT_SINHALA },
+        { "syrc", USCRIPT_SYRIAC },
+        { "taml", USCRIPT_TAMIL },
+        { "telu", USCRIPT_TELUGU },
+        { "thaa", USCRIPT_THAANA },
+        { "thai", USCRIPT_THAI },
+        { "tibt", USCRIPT_TIBETAN },
+        { "cans", USCRIPT_CANADIAN_ABORIGINAL },
+        { "yiii", USCRIPT_YI },
+        { "tglg", USCRIPT_TAGALOG },
+        { "hano", USCRIPT_HANUNOO },
+        { "buhd", USCRIPT_BUHID },
+        { "tagb", USCRIPT_TAGBANWA },
+        { "brai", USCRIPT_BRAILLE },
+        { "cprt", USCRIPT_CYPRIOT },
+        { "limb", USCRIPT_LIMBU },
+        { "linb", USCRIPT_LINEAR_B },
+        { "osma", USCRIPT_OSMANYA },
+        { "shaw", USCRIPT_SHAVIAN },
+        { "tale", USCRIPT_TAI_LE },
+        { "ugar", USCRIPT_UGARITIC },
+        { "hrkt", USCRIPT_KATAKANA_OR_HIRAGANA },
+        { "bugi", USCRIPT_BUGINESE },
+        { "glag", USCRIPT_GLAGOLITIC },
+        { "khar", USCRIPT_KHAROSHTHI },
+        { "sylo", USCRIPT_SYLOTI_NAGRI },
+        { "talu", USCRIPT_NEW_TAI_LUE },
+        { "tfng", USCRIPT_TIFINAGH },
+        { "xpeo", USCRIPT_OLD_PERSIAN },
+        { "bali", USCRIPT_BALINESE },
+        { "batk", USCRIPT_BATAK },
+        { "blis", USCRIPT_BLISSYMBOLS },
+        { "brah", USCRIPT_BRAHMI },
+        { "cham", USCRIPT_CHAM },
+        { "cirt", USCRIPT_CIRTH },
+        { "cyrs", USCRIPT_OLD_CHURCH_SLAVONIC_CYRILLIC },
+        { "egyd", USCRIPT_DEMOTIC_EGYPTIAN },
+        { "egyh", USCRIPT_HIERATIC_EGYPTIAN },
+        { "egyp", USCRIPT_EGYPTIAN_HIEROGLYPHS },
+        { "geok", USCRIPT_KHUTSURI },
+        { "hans", USCRIPT_SIMPLIFIED_HAN },
+        { "hant", USCRIPT_TRADITIONAL_HAN },
+        { "hmng", USCRIPT_PAHAWH_HMONG },
+        { "hung", USCRIPT_OLD_HUNGARIAN },
+        { "inds", USCRIPT_HARAPPAN_INDUS },
+        { "java", USCRIPT_JAVANESE },
+        { "kali", USCRIPT_KAYAH_LI },
+        { "latf", USCRIPT_LATIN_FRAKTUR },
+        { "latg", USCRIPT_LATIN_GAELIC },
+        { "lepc", USCRIPT_LEPCHA },
+        { "lina", USCRIPT_LINEAR_A },
+        { "mand", USCRIPT_MANDAEAN },
+        { "maya", USCRIPT_MAYAN_HIEROGLYPHS },
+        { "mero", USCRIPT_MEROITIC },
+        { "nkoo", USCRIPT_NKO },
+        { "orkh", USCRIPT_ORKHON },
+        { "perm", USCRIPT_OLD_PERMIC },
+        { "phag", USCRIPT_PHAGS_PA },
+        { "phnx", USCRIPT_PHOENICIAN },
+        { "plrd", USCRIPT_PHONETIC_POLLARD },
+        { "roro", USCRIPT_RONGORONGO },
+        { "sara", USCRIPT_SARATI },
+        { "syre", USCRIPT_ESTRANGELO_SYRIAC },
+        { "syrj", USCRIPT_WESTERN_SYRIAC },
+        { "syrn", USCRIPT_EASTERN_SYRIAC },
+        { "teng", USCRIPT_TENGWAR },
+        { "vaii", USCRIPT_VAI },
+        { "visp", USCRIPT_VISIBLE_SPEECH },
+        { "xsux", USCRIPT_CUNEIFORM },
+        { "zxxx", USCRIPT_UNWRITTEN_LANGUAGES },
+        { "zzzz", USCRIPT_UNKNOWN }
+    };
+
+    typedef HashMap<String, UScriptCode> ScriptNameCodeMap;
+    DEFINE_STATIC_LOCAL(ScriptNameCodeMap, scriptNameCodeMap, ());
+    if (scriptNameCodeMap.isEmpty()) {
+        for (size_t i = 0; i < sizeof(scriptNameCodeList) / sizeof(scriptNameCodeList[0]); ++i)
+            scriptNameCodeMap.set(scriptNameCodeList[i].name, scriptNameCodeList[i].code);
+    }
+
+    HashMap<String, UScriptCode>::iterator it = scriptNameCodeMap.find(scriptName);
+    if (it != scriptNameCodeMap.end())
+        return it->second;
+    return USCRIPT_INVALID_CODE;
+}
+
 UScriptCode localeToScriptCodeForFontSelection(const String& locale)
 {
     struct LocaleScript {
@@ -44,17 +171,205 @@
         UScriptCode script;
     };
 
-    // FIXME: Add all languages from ICU.
     static const LocaleScript localeScriptList[] = {
+        { "aa", USCRIPT_LATIN },
+        { "ab", USCRIPT_CYRILLIC },
+        { "ady", USCRIPT_CYRILLIC },
+        { "af", USCRIPT_LATIN },
+        { "ak", USCRIPT_LATIN },
+        { "am", USCRIPT_ETHIOPIC },
+        { "ar", USCRIPT_ARABIC },
+        { "as", USCRIPT_BENGALI },
+        { "ast", USCRIPT_LATIN },
+        { "av", USCRIPT_CYRILLIC },
+        { "ay", USCRIPT_LATIN },
+        { "az", USCRIPT_LATIN },
+        { "ba", USCRIPT_CYRILLIC },
+        { "be", USCRIPT_CYRILLIC },
+        { "bg", USCRIPT_CYRILLIC },
+        { "bi", USCRIPT_LATIN },
+        { "bn", USCRIPT_BENGALI },
+        { "bo", USCRIPT_TIBETAN },
+        { "bs", USCRIPT_LATIN },
+        { "ca", USCRIPT_LATIN },
+        { "ce", USCRIPT_CYRILLIC },
+        { "ceb", USCRIPT_LATIN },
+        { "ch", USCRIPT_LATIN },
+        { "chk", USCRIPT_LATIN },
+        { "cs", USCRIPT_LATIN },
+        { "cy", USCRIPT_LATIN },
+        { "da", USCRIPT_LATIN },
+        { "de", USCRIPT_LATIN },
+        { "dv", USCRIPT_THAANA },
+        { "dz", USCRIPT_TIBETAN },
+        { "ee", USCRIPT_LATIN },
+        { "efi", USCRIPT_LATIN },
+        { "el", USCRIPT_GREEK },
+        { "en", USCRIPT_LATIN },
+        { "es", USCRIPT_LATIN },
+        { "et", USCRIPT_LATIN },
+        { "eu", USCRIPT_LATIN },
+        { "fa", USCRIPT_ARABIC },
+        { "fi", USCRIPT_LATIN },
+        { "fil", USCRIPT_LATIN },
+        { "fj", USCRIPT_LATIN },
+        { "fo", USCRIPT_LATIN },
+        { "fr", USCRIPT_LATIN },
+        { "fur", USCRIPT_LATIN },
+        { "fy", USCRIPT_LATIN },
+        { "ga", USCRIPT_LATIN },
+        { "gaa", USCRIPT_LATIN },
+        { "gd", USCRIPT_LATIN },
+        { "gil", USCRIPT_LATIN },
+        { "gl", USCRIPT_LATIN },
+        { "gn", USCRIPT_LATIN },
+        { "gsw", USCRIPT_LATIN },
+        { "gu", USCRIPT_GUJARATI },
+        { "ha", USCRIPT_LATIN },
+        { "haw", USCRIPT_LATIN },
+        { "he", USCRIPT_HEBREW },
+        { "hi", USCRIPT_DEVANAGARI },
+        { "hil", USCRIPT_LATIN },
+        { "ho", USCRIPT_LATIN },
+        { "hr", USCRIPT_LATIN },
+        { "ht", USCRIPT_LATIN },
+        { "hu", USCRIPT_LATIN },
+        { "hy", USCRIPT_ARMENIAN },
+        { "id", USCRIPT_LATIN },
+        { "ig", USCRIPT_LATIN },
+        { "ii", USCRIPT_YI },
+        { "ilo", USCRIPT_LATIN },
+        { "inh", USCRIPT_CYRILLIC },
+        { "is", USCRIPT_LATIN },
+        { "it", USCRIPT_LATIN },
+        { "iu", USCRIPT_CANADIAN_ABORIGINAL },
         { "ja", USCRIPT_KATAKANA_OR_HIRAGANA },
+        { "jv", USCRIPT_LATIN },
+        { "ka", USCRIPT_GEORGIAN },
+        { "kaj", USCRIPT_LATIN },
+        { "kam", USCRIPT_LATIN },
+        { "kbd", USCRIPT_CYRILLIC },
+        { "kha", USCRIPT_LATIN },
+        { "kk", USCRIPT_CYRILLIC },
+        { "kl", USCRIPT_LATIN },
+        { "km", USCRIPT_KHMER },
+        { "kn", USCRIPT_KANNADA },
         { "ko", USCRIPT_HANGUL },
+        { "kok", USCRIPT_DEVANAGARI },
+        { "kos", USCRIPT_LATIN },
+        { "kpe", USCRIPT_LATIN },
+        { "krc", USCRIPT_CYRILLIC },
+        { "ks", USCRIPT_ARABIC },
+        { "ku", USCRIPT_ARABIC },
+        { "kum", USCRIPT_CYRILLIC },
+        { "ky", USCRIPT_CYRILLIC },
+        { "la", USCRIPT_LATIN },
+        { "lah", USCRIPT_ARABIC },
+        { "lb", USCRIPT_LATIN },
+        { "lez", USCRIPT_CYRILLIC },
+        { "ln", USCRIPT_LATIN },
+        { "lo", USCRIPT_LAO },
+        { "lt", USCRIPT_LATIN },
+        { "lv", USCRIPT_LATIN },
+        { "mai", USCRIPT_DEVANAGARI },
+        { "mdf", USCRIPT_CYRILLIC },
+        { "mg", USCRIPT_LATIN },
+        { "mh", USCRIPT_LATIN },
+        { "mi", USCRIPT_LATIN },
+        { "mk", USCRIPT_CYRILLIC },
+        { "ml", USCRIPT_MALAYALAM },
+        { "mn", USCRIPT_CYRILLIC },
+        { "mr", USCRIPT_DEVANAGARI },
+        { "ms", USCRIPT_LATIN },
+        { "mt", USCRIPT_LATIN },
+        { "my", USCRIPT_MYANMAR },
+        { "myv", USCRIPT_CYRILLIC },
+        { "na", USCRIPT_LATIN },
+        { "nb", USCRIPT_LATIN },
+        { "ne", USCRIPT_DEVANAGARI },
+        { "niu", USCRIPT_LATIN },
+        { "nl", USCRIPT_LATIN },
+        { "nn", USCRIPT_LATIN },
+        { "nr", USCRIPT_LATIN },
+        { "nso", USCRIPT_LATIN },
+        { "ny", USCRIPT_LATIN },
+        { "oc", USCRIPT_LATIN },
+        { "om", USCRIPT_LATIN },
+        { "or", USCRIPT_ORIYA },
+        { "os", USCRIPT_CYRILLIC },
+        { "pa", USCRIPT_GURMUKHI },
+        { "pag", USCRIPT_LATIN },
+        { "pap", USCRIPT_LATIN },
+        { "pau", USCRIPT_LATIN },
+        { "pl", USCRIPT_LATIN },
+        { "pon", USCRIPT_LATIN },
+        { "ps", USCRIPT_ARABIC },
+        { "pt", USCRIPT_LATIN },
+        { "qu", USCRIPT_LATIN },
+        { "rm", USCRIPT_LATIN },
+        { "rn", USCRIPT_LATIN },
+        { "ro", USCRIPT_LATIN },
         { "ru", USCRIPT_CYRILLIC },
-        { "zh", USCRIPT_HAN },
-        { "zh_cn", USCRIPT_SIMPLIFIED_HAN },
-        { "zh_hans", USCRIPT_SIMPLIFIED_HAN },
-        { "zh_hant", USCRIPT_TRADITIONAL_HAN },
+        { "rw", USCRIPT_LATIN },
+        { "sa", USCRIPT_DEVANAGARI },
+        { "sah", USCRIPT_CYRILLIC },
+        { "sat", USCRIPT_LATIN },
+        { "sd", USCRIPT_ARABIC },
+        { "se", USCRIPT_LATIN },
+        { "sg", USCRIPT_LATIN },
+        { "si", USCRIPT_SINHALA },
+        { "sid", USCRIPT_LATIN },
+        { "sk", USCRIPT_LATIN },
+        { "sl", USCRIPT_LATIN },
+        { "sm", USCRIPT_LATIN },
+        { "so", USCRIPT_LATIN },
+        { "sq", USCRIPT_LATIN },
+        { "sr", USCRIPT_CYRILLIC },
+        { "ss", USCRIPT_LATIN },
+        { "st", USCRIPT_LATIN },
+        { "su", USCRIPT_LATIN },
+        { "sv", USCRIPT_LATIN },
+        { "sw", USCRIPT_LATIN },
+        { "ta", USCRIPT_TAMIL },
+        { "te", USCRIPT_TELUGU },
+        { "tet", USCRIPT_LATIN },
+        { "tg", USCRIPT_CYRILLIC },
+        { "th", USCRIPT_THAI },
+        { "ti", USCRIPT_ETHIOPIC },
+        { "tig", USCRIPT_ETHIOPIC },
+        { "tk", USCRIPT_LATIN },
+        { "tkl", USCRIPT_LATIN },
+        { "tl", USCRIPT_LATIN },
+        { "tn", USCRIPT_LATIN },
+        { "to", USCRIPT_LATIN },
+        { "tpi", USCRIPT_LATIN },
+        { "tr", USCRIPT_LATIN },
+        { "trv", USCRIPT_LATIN },
+        { "ts", USCRIPT_LATIN },
+        { "tt", USCRIPT_CYRILLIC },
+        { "tvl", USCRIPT_LATIN },
+        { "tw", USCRIPT_LATIN },
+        { "ty", USCRIPT_LATIN },
+        { "tyv", USCRIPT_CYRILLIC },
+        { "udm", USCRIPT_CYRILLIC },
+        { "ug", USCRIPT_ARABIC },
+        { "uk", USCRIPT_CYRILLIC },
+        { "und", USCRIPT_LATIN },
+        { "ur", USCRIPT_ARABIC },
+        { "uz", USCRIPT_CYRILLIC },
+        { "ve", USCRIPT_LATIN },
+        { "vi", USCRIPT_LATIN },
+        { "wal", USCRIPT_ETHIOPIC },
+        { "war", USCRIPT_LATIN },
+        { "wo", USCRIPT_LATIN },
+        { "xh", USCRIPT_LATIN },
+        { "yap", USCRIPT_LATIN },
+        { "yo", USCRIPT_LATIN },
+        { "za", USCRIPT_LATIN },
+        { "zh", USCRIPT_SIMPLIFIED_HAN },
         { "zh_hk", USCRIPT_TRADITIONAL_HAN },
-        { "zh_tw", USCRIPT_TRADITIONAL_HAN }
+        { "zh_tw", USCRIPT_TRADITIONAL_HAN },
+        { "zu", USCRIPT_LATIN }
     };
 
     typedef HashMap<String, UScriptCode> LocaleScriptMap;
@@ -72,6 +387,9 @@
         size_t pos = canonicalLocale.reverseFind('_');
         if (pos == notFound)
             break;
+        UScriptCode code = getScriptCode(canonicalLocale.substring(pos + 1));
+        if (code != USCRIPT_INVALID_CODE && code != USCRIPT_UNKNOWN)
+            return code;
         canonicalLocale = canonicalLocale.substring(0, pos);
     }
     return USCRIPT_COMMON;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to