mirror of
https://github.com/VincentWei/MiniGUI.git
synced 2026-09-24 17:44:19 +08:00
Use LanguageCode and ScriptType types for external APIs
This commit is contained in:
+17
-15
@@ -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
@@ -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
@@ -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 */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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 ||
|
||||
|
||||
Reference in New Issue
Block a user