Use LanguageCode and ScriptType types for external APIs

This commit is contained in:
Vincent Wei
2019-03-19 11:48:24 +08:00
parent cbd54e0766
commit 14bfe263a3
5 changed files with 240 additions and 177 deletions
+17 -15
View File
@@ -6228,7 +6228,7 @@ typedef enum {
* See [Unicode Standard Annex #24: Script names](https://www.unicode.org/reports/tr24/).
*/
typedef enum {
SCRIPT_INVALID_CODE = -1,
SCRIPT_INVALID_CODE = 0xFF,
SCRIPT_COMMON = 0, /* Zyyy */
SCRIPT_INHERITED, /* Zinh (Qaai) */
SCRIPT_ARABIC, /* Arab */
@@ -8924,7 +8924,7 @@ MG_EXPORT int GUIAPI UCharFullyDecompose (Uchar32 ch, BOOL compat,
Uchar32 *result, int result_len);
/**
* \fn int GUIAPI UCharGetScriptType (Uchar32 ch)
* \fn ScriptType GUIAPI UCharGetScriptType (Uchar32 ch)
*
* Looks up the script code for a particular character (as defined
* by Unicode Standard Annex #24). No check is made for @ch being a
@@ -8939,10 +8939,10 @@ MG_EXPORT int GUIAPI UCharFullyDecompose (Uchar32 ch, BOOL compat,
*
* Since: 3.4.0
*/
MG_EXPORT int GUIAPI UCharGetScriptType (Uchar32 ch);
MG_EXPORT ScriptType GUIAPI UCharGetScriptType (Uchar32 ch);
/**
* \fn Uint32 ScriptTypeToISO15924 (int script)
* \fn Uint32 ScriptTypeToISO15924 (ScriptType script)
*
* Looks up the ISO 15924 code for @script. ISO 15924 assigns four-letter
* codes to scripts. For example, the code for Arabic is 'Arab'. The
@@ -8963,10 +8963,10 @@ MG_EXPORT int GUIAPI UCharGetScriptType (Uchar32 ch);
*
* Since: 3.4.0
*/
MG_EXPORT Uint32 GUIAPI ScriptTypeToISO15924 (int script);
MG_EXPORT Uint32 GUIAPI ScriptTypeToISO15924 (ScriptType script);
/**
* \fn int ScriptTypeFromISO15924 (Uint32 iso15924)
* \fn ScriptType ScriptTypeFromISO15924 (Uint32 iso15924)
*
* Looks up the Unicode script type for @iso15924. ISO 15924 assigns four-letter
* codes to scripts. For example, the code for Arabic is 'Arab'.
@@ -8986,7 +8986,7 @@ MG_EXPORT Uint32 GUIAPI ScriptTypeToISO15924 (int script);
*
* Since: 3.4.0
*/
MG_EXPORT int GUIAPI ScriptTypeFromISO15924 (Uint32 iso15924);
MG_EXPORT ScriptType GUIAPI ScriptTypeFromISO15924 (Uint32 iso15924);
/**
* \fn int ScriptTypeFromISO15924Code (const char* iso15924)
@@ -9006,7 +9006,7 @@ MG_EXPORT int GUIAPI ScriptTypeFromISO15924 (Uint32 iso15924);
*
* Since: 3.4.0
*/
static inline int GUIAPI ScriptTypeFromISO15924Code (const char* iso15924)
static inline ScriptType GUIAPI ScriptTypeFromISO15924Code (const char* iso15924)
{
return ScriptTypeFromISO15924(MAKEDWORD32(iso15924[3],
iso15924[2], iso15924[1], iso15924[0]));
@@ -11586,7 +11586,7 @@ MG_EXPORT int GUIAPI GetGlyphInfo (LOGFONT* logfont, Glyph32 glyph_value,
*/
typedef enum {
/** Unknown language code */
LANGCODE_unknown = -1,
LANGCODE_unknown = 0xFF,
/** Language code for Afar */
LANGCODE_aa = 0,
/** Language code for Abkhazian */
@@ -11631,6 +11631,8 @@ typedef enum {
LANGCODE_da,
/** Language code for German */
LANGCODE_de,
/** Language code for Divehi */
LANGCODE_dv,
/** Language code for Bhutani */
LANGCODE_dz,
/** Language code for Greek */
@@ -11888,7 +11890,7 @@ typedef enum {
*
* Since: 3.4.0
*/
MG_EXPORT int GUIAPI LanguageCodeFromISO639s1 (Uint16 iso639_1);
MG_EXPORT LanguageCode GUIAPI LanguageCodeFromISO639s1 (Uint16 iso639_1);
/**
* LanguageCodeFromISO639s1Code:
@@ -11902,7 +11904,7 @@ MG_EXPORT int GUIAPI LanguageCodeFromISO639s1 (Uint16 iso639_1);
*
* Since: 3.4.0
*/
static inline int GUIAPI LanguageCodeFromISO639s1Code(const char* iso639_1)
static inline LanguageCode GUIAPI LanguageCodeFromISO639s1Code(const char* iso639_1)
{
return LanguageCodeFromISO639s1(MAKEWORD16(iso639_1[1],
iso639_1[0]));
@@ -11912,11 +11914,11 @@ static inline int GUIAPI LanguageCodeFromISO639s1Code(const char* iso639_1)
MG_EXPORT const char* GUIAPI LanguageCodeToISO639s1(LanguageCode lc);
/** Get the sample language code (ISO639-1) from the specific script type */
MG_EXPORT const char* GUIAPI GetSampleLanguageFromScript(ScriptType st);
MG_EXPORT LanguageCode GUIAPI GetSampleLanguageForScript(ScriptType st);
/** Get language code and script type from ISO639 language name. */
MG_EXPORT ScriptType GUIAPI GetLangScriptFromName(const char* lang_name,
int* lang_code);
/** Get language code and scripts for ISO639 language name. */
MG_EXPORT const ScriptType* GUIAPI GetScriptsForLang(const char* lang_name,
LanguageCode* lang_code, int* nr_scripts);
/** Normalize script type according to language code */
MG_EXPORT ScriptType GUIAPI NormalizeScriptType(LanguageCode cl,
+146 -144
View File
@@ -67,6 +67,7 @@ static const Uint16 iso639_1_codes[] =
PACK('c', 'y'), // Welch
PACK('d', 'a'), // Danish
PACK('d', 'e'), // German
PACK('d', 'v'), // Divehi
PACK('d', 'z'), // Bhutani
PACK('e', 'l'), // Greek
PACK('e', 'n'), // English
@@ -190,7 +191,7 @@ static const Uint16 iso639_1_codes[] =
#undef PACK
};
int GUIAPI LanguageCodeFromISO639s1 (Uint16 iso639_1)
LanguageCode GUIAPI LanguageCodeFromISO639s1 (Uint16 iso639_1)
{
unsigned int lower = 0;
unsigned int upper = TABLESIZE (iso639_1_codes) - 1;
@@ -205,7 +206,7 @@ int GUIAPI LanguageCodeFromISO639s1 (Uint16 iso639_1)
else if (iso639_1 > iso639_1_codes[mid])
lower = mid + 1;
else
return (int)mid;
return (LanguageCode)mid;
mid = (lower + upper) / 2;
} while (lower <= upper);
@@ -237,6 +238,7 @@ static const char* iso639_1_codes_str[] =
"cy", // Welch
"da", // Danish
"de", // German
"dv", // Divehi
"dz", // Bhutani
"el", // Greek
"en", // English
@@ -371,180 +373,180 @@ const char* GUIAPI LanguageCodeToISO639s1 (LanguageCode lc)
return "";
}
static const char sample_language_of_script[][3] = {
"", /* SCRIPT_COMMON */
"", /* SCRIPT_INHERITED */
"ar", /* SCRIPT_ARABIC */
"hy", /* SCRIPT_ARMENIAN */
"bn", /* SCRIPT_BENGALI */
"zh", /* SCRIPT_BOPOMOFO: Used primarily in Taiwan, but not part of the standard zh-tw orthography */
"", /* SCRIPT_CHEROKEE; no ISO639-1 code; ISO639-2 code: chr */
"", /* SCRIPT_COPTIC; no ISO639-1 code; ISO639-2 code: cop */
"ru", /* SCRIPT_CYRILLIC */
"", /* SCRIPT_DESERET: Deseret was used to write English */
"hi", /* SCRIPT_DEVANAGARI */
"am", /* SCRIPT_ETHIOPIC */
"ka", /* SCRIPT_GEORGIAN */
"", /* SCRIPT_GOTHIC */
"el", /* SCRIPT_GREEK */
"gu", /* SCRIPT_GUJARATI */
"pa", /* SCRIPT_GURMUKHI */
"", /* SCRIPT_HAN */
"ko", /* SCRIPT_HANGUL */
"he", /* SCRIPT_HEBREW */
"ja", /* SCRIPT_HIRAGANA */
"kn", /* SCRIPT_KANNADA */
"ja", /* SCRIPT_KATAKANA */
"km", /* SCRIPT_KHMER */
"lo", /* SCRIPT_LAO */
"en", /* SCRIPT_LATIN */
"ml", /* SCRIPT_MALAYALAM */
"mn", /* SCRIPT_MONGOLIAN */
"my", /* SCRIPT_MYANMAR */
"", /* SCRIPT_OGHAM; Ogham was used to write old Irish */
"", /* SCRIPT_OLD_ITALIC */
"or", /* SCRIPT_ORIYA */
"", /* SCRIPT_RUNIC */
"si", /* SCRIPT_SINHALA */
"", /* SCRIPT_SYRIAC; no ISO639-1 code; ISO639-2 code: syr */
"ta", /* SCRIPT_TAMIL */
"te", /* SCRIPT_TELUGU */
"dv", /* SCRIPT_THAANA */
"th", /* SCRIPT_THAI */
"bo", /* SCRIPT_TIBETAN */
"iu", /* SCRIPT_CANADIAN_ABORIGINAL */
"", /* SCRIPT_YI */
"tl", /* SCRIPT_TAGALOG */
static const LanguageCode sample_language_of_script[] = {
LANGCODE_unknown, /* SCRIPT_COMMON */
LANGCODE_unknown, /* SCRIPT_INHERITED */
LANGCODE_ar, /* SCRIPT_ARABIC */
LANGCODE_hy, /* SCRIPT_ARMENIAN */
LANGCODE_bn, /* SCRIPT_BENGALI */
LANGCODE_zh, /* SCRIPT_BOPOMOFO: Used primarily in Taiwan, but not part of the standard zh-tw orthography */
LANGCODE_unknown, /* SCRIPT_CHEROKEE; no ISO639-1 code; ISO639-2 code: chr */
LANGCODE_unknown, /* SCRIPT_COPTIC; no ISO639-1 code; ISO639-2 code: cop */
LANGCODE_ru, /* SCRIPT_CYRILLIC */
LANGCODE_unknown, /* SCRIPT_DESERET: Deseret was used to write English */
LANGCODE_hi, /* SCRIPT_DEVANAGARI */
LANGCODE_am, /* SCRIPT_ETHIOPIC */
LANGCODE_ka, /* SCRIPT_GEORGIAN */
LANGCODE_unknown, /* SCRIPT_GOTHIC */
LANGCODE_el, /* SCRIPT_GREEK */
LANGCODE_gu, /* SCRIPT_GUJARATI */
LANGCODE_pa, /* SCRIPT_GURMUKHI */
LANGCODE_unknown, /* SCRIPT_HAN */
LANGCODE_ko, /* SCRIPT_HANGUL */
LANGCODE_he, /* SCRIPT_HEBREW */
LANGCODE_ja, /* SCRIPT_HIRAGANA */
LANGCODE_kn, /* SCRIPT_KANNADA */
LANGCODE_ja, /* SCRIPT_KATAKANA */
LANGCODE_km, /* SCRIPT_KHMER */
LANGCODE_lo, /* SCRIPT_LAO */
LANGCODE_en, /* SCRIPT_LATIN */
LANGCODE_ml, /* SCRIPT_MALAYALAM */
LANGCODE_mn, /* SCRIPT_MONGOLIAN */
LANGCODE_my, /* SCRIPT_MYANMAR */
LANGCODE_unknown, /* SCRIPT_OGHAM; Ogham was used to write old Irish */
LANGCODE_unknown, /* SCRIPT_OLD_ITALIC */
LANGCODE_or, /* SCRIPT_ORIYA */
LANGCODE_unknown, /* SCRIPT_RUNIC */
LANGCODE_si, /* SCRIPT_SINHALA */
LANGCODE_unknown, /* SCRIPT_SYRIAC; no ISO639-1 code; ISO639-2 code: syr */
LANGCODE_ta, /* SCRIPT_TAMIL */
LANGCODE_te, /* SCRIPT_TELUGU */
LANGCODE_dv, /* SCRIPT_THAANA */
LANGCODE_th, /* SCRIPT_THAI */
LANGCODE_bo, /* SCRIPT_TIBETAN */
LANGCODE_iu, /* SCRIPT_CANADIAN_ABORIGINAL */
LANGCODE_unknown, /* SCRIPT_YI */
LANGCODE_tl, /* SCRIPT_TAGALOG */
/* Phillipino languages/scripts */
"", /* SCRIPT_HANUNOO; no ISO639-1 code and ISO639-2 code; hnn? */
"", /* SCRIPT_BUHID; no ISO639-1 code and ISO639-2 code; bku? */
"", /* SCRIPT_TAGBANWA; no ISO639-1 code and ISO639-2 code; tbw? */
LANGCODE_unknown, /* SCRIPT_HANUNOO; no ISO639-1 code and ISO639-2 code; hnn? */
LANGCODE_unknown, /* SCRIPT_BUHID; no ISO639-1 code and ISO639-2 code; bku? */
LANGCODE_unknown, /* SCRIPT_TAGBANWA; no ISO639-1 code and ISO639-2 code; tbw? */
"", /* SCRIPT_BRAILLE */
"", /* SCRIPT_CYPRIOT */
"", /* SCRIPT_LIMBU */
"", /* SCRIPT_OSMANYA; Used for Somali (so) in the past */
"", /* SCRIPT_SHAVIAN; The Shavian alphabet was designed for English */
"", /* SCRIPT_LINEAR_B */
"", /* SCRIPT_TAI_LE */
"", /* SCRIPT_UGARITIC; no ISO639-1 code; ISO639-2 code: uga */
LANGCODE_unknown, /* SCRIPT_BRAILLE */
LANGCODE_unknown, /* SCRIPT_CYPRIOT */
LANGCODE_unknown, /* SCRIPT_LIMBU */
LANGCODE_unknown, /* SCRIPT_OSMANYA; Used for Somali (so) in the past */
LANGCODE_unknown, /* SCRIPT_SHAVIAN; The Shavian alphabet was designed for English */
LANGCODE_unknown, /* SCRIPT_LINEAR_B */
LANGCODE_unknown, /* SCRIPT_TAI_LE */
LANGCODE_unknown, /* SCRIPT_UGARITIC; no ISO639-1 code; ISO639-2 code: uga */
"", /* SCRIPT_NEW_TAI_LUE */
"", /* SCRIPT_BUGINESE; no ISO639-1 code; ISO639-2 code: bug */
"", /* SCRIPT_GLAGOLITIC: The original script for Old Church Slavonic (chu), later written with Cyrillic */
"", /* SCRIPT_TIFINAGH: Used for for Berber (ber), but Arabic script is more common */
"", /* SCRIPT_SYLOTI_NAGRI; no ISO639-1 code and ISO639-2 code; syl? */
"", /* SCRIPT_OLD_PERSIAN; no ISO639-1 code; ISO639-2 code: peo */
"", /* SCRIPT_KHAROSHTHI */
LANGCODE_unknown, /* SCRIPT_NEW_TAI_LUE */
LANGCODE_unknown, /* SCRIPT_BUGINESE; no ISO639-1 code; ISO639-2 code: bug */
LANGCODE_unknown, /* SCRIPT_GLAGOLITIC: The original script for Old Church Slavonic (chu), later written with Cyrillic */
LANGCODE_unknown, /* SCRIPT_TIFINAGH: Used for for Berber (ber), but Arabic script is more common */
LANGCODE_unknown, /* SCRIPT_SYLOTI_NAGRI; no ISO639-1 code and ISO639-2 code; syl? */
LANGCODE_unknown, /* SCRIPT_OLD_PERSIAN; no ISO639-1 code; ISO639-2 code: peo */
LANGCODE_unknown, /* SCRIPT_KHAROSHTHI */
"", /* SCRIPT_UNKNOWN */
"", /* SCRIPT_BALINESE */
"", /* SCRIPT_CUNEIFORM */
"", /* SCRIPT_PHOENICIAN */
"", /* SCRIPT_PHAGS_PA */
"", /* SCRIPT_NKO; no ISO639-1 code; ISO639-2 code: nqo */
LANGCODE_unknown, /* SCRIPT_UNKNOWN */
LANGCODE_unknown, /* SCRIPT_BALINESE */
LANGCODE_unknown, /* SCRIPT_CUNEIFORM */
LANGCODE_unknown, /* SCRIPT_PHOENICIAN */
LANGCODE_unknown, /* SCRIPT_PHAGS_PA */
LANGCODE_unknown, /* SCRIPT_NKO; no ISO639-1 code; ISO639-2 code: nqo */
/* Unicode-5.1 additions */
"", /* SCRIPT_KAYAH_LI */
"", /* SCRIPT_LEPCHA */
"", /* SCRIPT_REJANG */
"", /* SCRIPT_SUNDANESE */
"", /* SCRIPT_SAURASHTRA */
"", /* SCRIPT_CHAM */
"", /* SCRIPT_OL_CHIKI */
"", /* SCRIPT_VAI */
"", /* SCRIPT_CARIAN */
"", /* SCRIPT_LYCIAN */
"", /* SCRIPT_LYDIAN */
LANGCODE_unknown, /* SCRIPT_KAYAH_LI */
LANGCODE_unknown, /* SCRIPT_LEPCHA */
LANGCODE_unknown, /* SCRIPT_REJANG */
LANGCODE_unknown, /* SCRIPT_SUNDANESE */
LANGCODE_unknown, /* SCRIPT_SAURASHTRA */
LANGCODE_unknown, /* SCRIPT_CHAM */
LANGCODE_unknown, /* SCRIPT_OL_CHIKI */
LANGCODE_unknown, /* SCRIPT_VAI */
LANGCODE_unknown, /* SCRIPT_CARIAN */
LANGCODE_unknown, /* SCRIPT_LYCIAN */
LANGCODE_unknown, /* SCRIPT_LYDIAN */
/* Unicode-6.0 additions */
"", /* SCRIPT_BATAK */
"", /* SCRIPT_BRAHMI */
"", /* SCRIPT_MANDAIC */
LANGCODE_unknown, /* SCRIPT_BATAK */
LANGCODE_unknown, /* SCRIPT_BRAHMI */
LANGCODE_unknown, /* SCRIPT_MANDAIC */
/* Unicode-6.1 additions */
"", /* SCRIPT_CHAKMA */
"", /* SCRIPT_MEROITIC_CURSIVE */
"", /* SCRIPT_MEROITIC_HIEROGLYPHS */
"", /* SCRIPT_MIAO */
"", /* SCRIPT_SHARADA */
"", /* SCRIPT_SORA_SOMPENG */
"", /* SCRIPT_TAKRI */
LANGCODE_unknown, /* SCRIPT_CHAKMA */
LANGCODE_unknown, /* SCRIPT_MEROITIC_CURSIVE */
LANGCODE_unknown, /* SCRIPT_MEROITIC_HIEROGLYPHS */
LANGCODE_unknown, /* SCRIPT_MIAO */
LANGCODE_unknown, /* SCRIPT_SHARADA */
LANGCODE_unknown, /* SCRIPT_SORA_SOMPENG */
LANGCODE_unknown, /* SCRIPT_TAKRI */
/* Unicode 7.0 additions */
"", /* SCRIPT_BASSA_VAH, Bass */
"", /* SCRIPT_CAUCASIAN_ALBANIAN, Aghb */
"", /* SCRIPT_DUPLOYAN, Dupl */
"", /* SCRIPT_ELBASAN, Elba */
"", /* SCRIPT_GRANTHA, Gran */
"", /* SCRIPT_KHOJKI, Khoj */
"", /* SCRIPT_KHUDAWADI, Sind */
"", /* SCRIPT_LINEAR_A, Lina */
"", /* SCRIPT_MAHAJANI, Mahj */
"", /* SCRIPT_MANICHAEAN, Manu */
"", /* SCRIPT_MENDE_KIKAKUI, Mend */
"", /* SCRIPT_MODI, Modi */
"", /* SCRIPT_MRO, Mroo */
"", /* SCRIPT_NABATAEAN, Nbat */
"", /* SCRIPT_OLD_NORTH_ARABIAN, Narb */
"", /* SCRIPT_OLD_PERMIC, Perm */
"", /* SCRIPT_PAHAWH_HMONG, Hmng */
"", /* SCRIPT_PALMYRENE, Palm */
"", /* SCRIPT_PAU_CIN_HAU, Pauc */
"", /* SCRIPT_PSALTER_PAHLAVI, Phlp */
"", /* SCRIPT_SIDDHAM, Sidd */
"", /* SCRIPT_TIRHUTA, Tirh */
"", /* SCRIPT_WARANG_CITI, Wara */
LANGCODE_unknown, /* SCRIPT_BASSA_VAH, Bass */
LANGCODE_unknown, /* SCRIPT_CAUCASIAN_ALBANIAN, Aghb */
LANGCODE_unknown, /* SCRIPT_DUPLOYAN, Dupl */
LANGCODE_unknown, /* SCRIPT_ELBASAN, Elba */
LANGCODE_unknown, /* SCRIPT_GRANTHA, Gran */
LANGCODE_unknown, /* SCRIPT_KHOJKI, Khoj */
LANGCODE_unknown, /* SCRIPT_KHUDAWADI, Sind */
LANGCODE_unknown, /* SCRIPT_LINEAR_A, Lina */
LANGCODE_unknown, /* SCRIPT_MAHAJANI, Mahj */
LANGCODE_unknown, /* SCRIPT_MANICHAEAN, Manu */
LANGCODE_unknown, /* SCRIPT_MENDE_KIKAKUI, Mend */
LANGCODE_unknown, /* SCRIPT_MODI, Modi */
LANGCODE_unknown, /* SCRIPT_MRO, Mroo */
LANGCODE_unknown, /* SCRIPT_NABATAEAN, Nbat */
LANGCODE_unknown, /* SCRIPT_OLD_NORTH_ARABIAN, Narb */
LANGCODE_unknown, /* SCRIPT_OLD_PERMIC, Perm */
LANGCODE_unknown, /* SCRIPT_PAHAWH_HMONG, Hmng */
LANGCODE_unknown, /* SCRIPT_PALMYRENE, Palm */
LANGCODE_unknown, /* SCRIPT_PAU_CIN_HAU, Pauc */
LANGCODE_unknown, /* SCRIPT_PSALTER_PAHLAVI, Phlp */
LANGCODE_unknown, /* SCRIPT_SIDDHAM, Sidd */
LANGCODE_unknown, /* SCRIPT_TIRHUTA, Tirh */
LANGCODE_unknown, /* SCRIPT_WARANG_CITI, Wara */
/* Unicode 8.0 additions */
"", /* SCRIPT_AHOM, Ahom */
"", /* SCRIPT_ANATOLIAN_HIEROGLYPHS, Hluw */
"", /* SCRIPT_HATRAN, Hatr */
"", /* SCRIPT_MULTANI, Mult */
"", /* SCRIPT_OLD_HUNGARIAN, Hung */
"", /* SCRIPT_SIGNWRITING, Sgnw */
LANGCODE_unknown, /* SCRIPT_AHOM, Ahom */
LANGCODE_unknown, /* SCRIPT_ANATOLIAN_HIEROGLYPHS, Hluw */
LANGCODE_unknown, /* SCRIPT_HATRAN, Hatr */
LANGCODE_unknown, /* SCRIPT_MULTANI, Mult */
LANGCODE_unknown, /* SCRIPT_OLD_HUNGARIAN, Hung */
LANGCODE_unknown, /* SCRIPT_SIGNWRITING, Sgnw */
/* Unicode 9.0 additions */
"", /* SCRIPT_ADLAM, Adlm */
"", /* SCRIPT_BHAIKSUKI, Bhks */
"", /* SCRIPT_MARCHEN, Marc */
"", /* SCRIPT_NEWA, Newa */
"", /* SCRIPT_OSAGE, Osge */
"", /* SCRIPT_TANGUT, Tang */
LANGCODE_unknown, /* SCRIPT_ADLAM, Adlm */
LANGCODE_unknown, /* SCRIPT_BHAIKSUKI, Bhks */
LANGCODE_unknown, /* SCRIPT_MARCHEN, Marc */
LANGCODE_unknown, /* SCRIPT_NEWA, Newa */
LANGCODE_unknown, /* SCRIPT_OSAGE, Osge */
LANGCODE_unknown, /* SCRIPT_TANGUT, Tang */
/* Unicode 10.0 additions */
"", /* SCRIPT_MASARAM_GONDI, Gonm */
"", /* SCRIPT_NUSHU, Nshu */
"", /* SCRIPT_SOYOMBO, Soyo */
"", /* SCRIPT_ZANABAZAR_SQUARE, Zanb */
LANGCODE_unknown, /* SCRIPT_MASARAM_GONDI, Gonm */
LANGCODE_unknown, /* SCRIPT_NUSHU, Nshu */
LANGCODE_unknown, /* SCRIPT_SOYOMBO, Soyo */
LANGCODE_unknown, /* SCRIPT_ZANABAZAR_SQUARE, Zanb */
/* Unicode 11.0 additions */
"", /* SCRIPT_DOGRA, Dogr */
"", /* SCRIPT_GUNJALA_GONDI, Gong */
"", /* SCRIPT_HANIFI_ROHINGYA, Rohg */
"", /* SCRIPT_MAKASAR, Maka */
"", /* SCRIPT_MEDEFAIDRIN, Medf */
"", /* SCRIPT_OLD_SOGDIAN, Sogo */
"", /* SCRIPT_SOGDIAN, Sogd */
LANGCODE_unknown, /* SCRIPT_DOGRA, Dogr */
LANGCODE_unknown, /* SCRIPT_GUNJALA_GONDI, Gong */
LANGCODE_unknown, /* SCRIPT_HANIFI_ROHINGYA, Rohg */
LANGCODE_unknown, /* SCRIPT_MAKASAR, Maka */
LANGCODE_unknown, /* SCRIPT_MEDEFAIDRIN, Medf */
LANGCODE_unknown, /* SCRIPT_OLD_SOGDIAN, Sogo */
LANGCODE_unknown, /* SCRIPT_SOGDIAN, Sogd */
/* Unicode 12.0 additions */
"", /* SCRIPT_ELYMAIC, Elymaic */
"", /* SCRIPT_NANDINAGARI, Nandinagari */
"", /* SCRIPT_NYIAKENG_PUACHUE_HMONG, Nyiakeng Puachue Hmong */
"", /* SCRIPT_WANCHO, Wancho */
LANGCODE_unknown, /* SCRIPT_ELYMAIC, Elymaic */
LANGCODE_unknown, /* SCRIPT_NANDINAGARI, Nandinagari */
LANGCODE_unknown, /* SCRIPT_NYIAKENG_PUACHUE_HMONG, Nyiakeng Puachue Hmong */
LANGCODE_unknown, /* SCRIPT_WANCHO, Wancho */
};
const char* GetSampleLanguageFromScript(ScriptType st)
LanguageCode GetSampleLanguageForScript(ScriptType st)
{
switch (st) {
case SCRIPT_INVALID_CODE:
return "";
return LANGCODE_unknown;
default:
return sample_language_of_script[st];
}
return "";
return LANGCODE_unknown;
}
#endif /* _MGCHARSET_UNICODE */
+50 -12
View File
@@ -69,12 +69,12 @@ static inline int unichar_get_script_bsearch (Uchar32 ch)
return SCRIPT_UNKNOWN;
}
int GUIAPI UCharGetScriptType (Uchar32 ch)
ScriptType GUIAPI UCharGetScriptType (Uchar32 ch)
{
if (ch < EASY_SCRIPTS_RANGE)
return unicode_script_easy_table[ch];
return (ScriptType)unicode_script_easy_table[ch];
else
return unichar_get_script_bsearch (ch);
return (ScriptType)unichar_get_script_bsearch (ch);
}
/* http://unicode.org/iso15924/ */
@@ -264,18 +264,18 @@ static const Uint32 iso15924_tags[] =
#undef PACK
};
Uint32 GUIAPI ScriptTypeToISO15924 (int script)
Uint32 GUIAPI ScriptTypeToISO15924 (ScriptType script)
{
if (script == SCRIPT_INVALID_CODE)
return 0;
if (script < 0 || script >= (int) TABLESIZE (iso15924_tags))
if (script < 0 || script >= (ScriptType) TABLESIZE (iso15924_tags))
return 0x5A7A7A7A;
return iso15924_tags[script];
}
int GUIAPI ScriptTypeFromISO15924 (Uint32 iso15924)
ScriptType GUIAPI ScriptTypeFromISO15924 (Uint32 iso15924)
{
unsigned int i;
@@ -284,7 +284,7 @@ int GUIAPI ScriptTypeFromISO15924 (Uint32 iso15924)
for (i = 0; i < TABLESIZE (iso15924_tags); i++)
if (iso15924_tags[i] == iso15924)
return (int) i;
return (ScriptType) i;
return SCRIPT_UNKNOWN;
}
@@ -298,9 +298,10 @@ static int comp_lang(const void *k1, const void *k2)
return strcmp(sl1->lang, sl2->lang);
}
ScriptType GUIAPI GetLangScriptFromName(const char* lang_name,
int* lang_code)
const ScriptType* GUIAPI GetScriptsForLang(const char* lang_name,
LanguageCode* lang_code, int* nr_scripts)
{
const ScriptType* scripts;
const ScriptTypeForLang* matched;
matched = bsearch(lang_name, _script_for_lang,
@@ -310,13 +311,50 @@ ScriptType GUIAPI GetLangScriptFromName(const char* lang_name,
if (matched) {
if (lang_code)
*lang_code = LanguageCodeFromISO639s1Code(matched->lang);
return matched->scripts[0];
scripts = matched->scripts;
if (nr_scripts) {
int i;
for (i = 0; i < TABLESIZE(_script_for_lang->scripts); i++) {
if (_script_for_lang->scripts[i] == 0)
break;
}
*nr_scripts = i;
}
return scripts;
}
if (lang_code)
*lang_code = LANGCODE_unknown;
return SCRIPT_INVALID_CODE;
return NULL;
}
BOOL __mg_language_includes_script(LanguageCode lc, ScriptType script)
{
const ScriptType *scripts;
int num_scripts, j;
/* copied from the one in pango-script.c */
#define REAL_SCRIPT(script) \
((script) > SCRIPT_INHERITED && (script) != SCRIPT_UNKNOWN)
if (!REAL_SCRIPT (script))
return TRUE;
#undef REAL_SCRIPT
scripts = GetScriptsForLang (LanguageCodeToISO639s1(lc), &lc, &num_scripts);
if (!scripts)
return TRUE;
for (j = 0; j < num_scripts; j++)
if (scripts[j] == script)
return TRUE;
return FALSE;
}
/*
@@ -386,7 +424,7 @@ typedef struct {
{LTR, NONE, S, FALSE}
const ScriptTypeProperties script_properties[] =
{/* ISO 15924 code */
{
{LTR, NONE, S, FALSE}, /* Zyyy */
{LTR, NONE, S, FALSE}, /* Qaai */
{RTL, NONE, S, FALSE}, /* Arab */
+2
View File
@@ -132,6 +132,8 @@ EmojiIterator* __mg_emoji_iterator_init (EmojiIterator *iter,
BOOL __mg_emoji_iterator_next (EmojiIterator *iter);
void __mg_emoji_iterator_fini (EmojiIterator *iter);
BOOL __mg_language_includes_script(LanguageCode lc, ScriptType script);
#ifdef __cplusplus
}
#endif /* __cplusplus */
+25 -6
View File
@@ -83,6 +83,9 @@ typedef struct _GLYPHRUNSTATE {
int emb_end_offset;
BidiLevel emb_level;
LanguageCode lang;
ScriptType script;
GlyphOrient orient;
GlyphOrientPolicy orient_policy;
GlyphOrient ort_rsv;
@@ -121,6 +124,25 @@ static void update_end (GLYPHRUNSTATE *state)
state->run_end = state->emoji_iter.end;
}
static LanguageCode compute_derived_language (LanguageCode lang,
ScriptType script)
{
LanguageCode derived_lang;
/* Make sure the language tag is consistent with the derived
* script. There is no point in marking up a section of
* Arabic text with the "en" language tag.
*/
if ((lang != LANGCODE_unknown) &&
__mg_language_includes_script(lang, script))
derived_lang = lang;
else {
derived_lang = GetSampleLanguageForScript(script);
}
return derived_lang;
}
static void state_update_for_new_run (GLYPHRUNSTATE *state)
{
if (state->changed & (SCRIPT_CHANGED | WIDTH_CHANGED)) {
@@ -135,15 +157,16 @@ static void state_update_for_new_run (GLYPHRUNSTATE *state)
orient, orient_policy);
}
#if 0
if (state->changed & (SCRIPT_CHANGED | LANG_CHANGED))
{
LanguageCode old_derived_lang = state->derived_lang;
state->derived_lang = compute_derived_language (state->lang, state->script);
state->derived_lang = compute_derived_language (state->lang,
state->script);
if (old_derived_lang != state->derived_lang)
state->changed |= DERIVED_LANG_CHANGED;
}
#if 0
if ((state->changed & DERIVED_LANG_CHANGED) || !state->lang_engine) {
state->lang_engine = _pango_get_language_engine ();
}
@@ -171,10 +194,6 @@ static void state_process_run (GLYPHRUNSTATE *state)
* We assume that all fonts have the ASCII space, and for other space
* characters if they don't, HarfBuzz will compatibility-decompose them
* to ASCII space...
* See bugs #355987 and #701652.
*
* We don't want to change fonts just for variation selectors.
* See bug #781123.
*/
type = UCharGetCategory (wc);
if ((type == UCHAR_CATEGORY_CONTROL ||