mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-27 06:26:15 +01:00
Bug 648271 - Add g_unicode_script_to_iso15924()
Add g_unicode_script_to_iso15924() and tests.
This commit is contained in:
parent
d8d67d1596
commit
7e03b28870
@ -2720,6 +2720,7 @@ g_unicode_canonical_decomposition
|
|||||||
g_unichar_get_mirror_char
|
g_unichar_get_mirror_char
|
||||||
GUnicodeScript
|
GUnicodeScript
|
||||||
g_unichar_get_script
|
g_unichar_get_script
|
||||||
|
g_unicode_script_to_iso15924
|
||||||
|
|
||||||
<SUBSECTION>
|
<SUBSECTION>
|
||||||
g_utf8_next_char
|
g_utf8_next_char
|
||||||
|
@ -1229,6 +1229,7 @@ g_unichar_xdigit_value
|
|||||||
g_unichar_type
|
g_unichar_type
|
||||||
g_unicode_canonical_decomposition
|
g_unicode_canonical_decomposition
|
||||||
g_unicode_canonical_ordering
|
g_unicode_canonical_ordering
|
||||||
|
g_unicode_script_to_iso15924
|
||||||
g_utf8_casefold
|
g_utf8_casefold
|
||||||
g_utf8_collate
|
g_utf8_collate
|
||||||
g_utf8_collate_key
|
g_utf8_collate_key
|
||||||
|
@ -475,6 +475,8 @@ typedef enum
|
|||||||
G_UNICODE_SCRIPT_MANDAIC /* Mand */
|
G_UNICODE_SCRIPT_MANDAIC /* Mand */
|
||||||
} GUnicodeScript;
|
} GUnicodeScript;
|
||||||
|
|
||||||
|
guint32 g_unicode_script_to_iso15924 (GUnicodeScript script);
|
||||||
|
|
||||||
/* Returns TRUE if current locale uses UTF-8 charset. If CHARSET is
|
/* Returns TRUE if current locale uses UTF-8 charset. If CHARSET is
|
||||||
* not null, sets *CHARSET to the name of the current locale's
|
* not null, sets *CHARSET to the name of the current locale's
|
||||||
* charset. This value is statically allocated, and should be copied
|
* charset. This value is statically allocated, and should be copied
|
||||||
|
146
glib/guniprop.c
146
glib/guniprop.c
@ -873,7 +873,7 @@ real_toupper (const gchar *str,
|
|||||||
last_was_i = FALSE;
|
last_was_i = FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (locale_type == LOCALE_TURKIC && c == 'i')
|
if (locale_type == LOCALE_TURKIC && c == 'i')
|
||||||
{
|
{
|
||||||
/* i => LATIN CAPITAL LETTER I WITH DOT ABOVE */
|
/* i => LATIN CAPITAL LETTER I WITH DOT ABOVE */
|
||||||
@ -1316,3 +1316,147 @@ g_unichar_get_script (gunichar ch)
|
|||||||
else
|
else
|
||||||
return g_unichar_get_script_bsearch (ch);
|
return g_unichar_get_script_bsearch (ch);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* http://unicode.org/iso15924/ */
|
||||||
|
static const guint32 iso15924_tags[] =
|
||||||
|
{
|
||||||
|
#define PACK(a,b,c,d) ((guint32)((((guint8)(a))<<24)|(((guint8)(b))<<16)|(((guint8)(c))<<8)|((guint8)(d))))
|
||||||
|
|
||||||
|
PACK ('Z','y','y','y'), /* G_UNICODE_SCRIPT_COMMON */
|
||||||
|
PACK ('Z','i','n','h'), /* G_UNICODE_SCRIPT_INHERITED */
|
||||||
|
PACK ('A','r','a','b'), /* G_UNICODE_SCRIPT_ARABIC */
|
||||||
|
PACK ('A','r','m','n'), /* G_UNICODE_SCRIPT_ARMENIAN */
|
||||||
|
PACK ('B','e','n','g'), /* G_UNICODE_SCRIPT_BENGALI */
|
||||||
|
PACK ('B','o','p','o'), /* G_UNICODE_SCRIPT_BOPOMOFO */
|
||||||
|
PACK ('C','h','e','r'), /* G_UNICODE_SCRIPT_CHEROKEE */
|
||||||
|
PACK ('C','o','p','t'), /* G_UNICODE_SCRIPT_COPTIC */
|
||||||
|
PACK ('C','y','r','l'), /* G_UNICODE_SCRIPT_CYRILLIC */
|
||||||
|
PACK ('D','s','r','t'), /* G_UNICODE_SCRIPT_DESERET */
|
||||||
|
PACK ('D','e','v','a'), /* G_UNICODE_SCRIPT_DEVANAGARI */
|
||||||
|
PACK ('E','t','h','i'), /* G_UNICODE_SCRIPT_ETHIOPIC */
|
||||||
|
PACK ('G','e','o','r'), /* G_UNICODE_SCRIPT_GEORGIAN */
|
||||||
|
PACK ('G','o','t','h'), /* G_UNICODE_SCRIPT_GOTHIC */
|
||||||
|
PACK ('G','r','e','k'), /* G_UNICODE_SCRIPT_GREEK */
|
||||||
|
PACK ('G','u','j','r'), /* G_UNICODE_SCRIPT_GUJARATI */
|
||||||
|
PACK ('G','u','r','u'), /* G_UNICODE_SCRIPT_GURMUKHI */
|
||||||
|
PACK ('H','a','n','i'), /* G_UNICODE_SCRIPT_HAN */
|
||||||
|
PACK ('H','a','n','g'), /* G_UNICODE_SCRIPT_HANGUL */
|
||||||
|
PACK ('H','e','b','r'), /* G_UNICODE_SCRIPT_HEBREW */
|
||||||
|
PACK ('H','i','r','a'), /* G_UNICODE_SCRIPT_HIRAGANA */
|
||||||
|
PACK ('K','n','d','a'), /* G_UNICODE_SCRIPT_KANNADA */
|
||||||
|
PACK ('K','a','n','a'), /* G_UNICODE_SCRIPT_KATAKANA */
|
||||||
|
PACK ('K','h','m','r'), /* G_UNICODE_SCRIPT_KHMER */
|
||||||
|
PACK ('L','a','o','o'), /* G_UNICODE_SCRIPT_LAO */
|
||||||
|
PACK ('L','a','t','n'), /* G_UNICODE_SCRIPT_LATIN */
|
||||||
|
PACK ('M','l','y','m'), /* G_UNICODE_SCRIPT_MALAYALAM */
|
||||||
|
PACK ('M','o','n','g'), /* G_UNICODE_SCRIPT_MONGOLIAN */
|
||||||
|
PACK ('M','y','m','r'), /* G_UNICODE_SCRIPT_MYANMAR */
|
||||||
|
PACK ('O','g','a','m'), /* G_UNICODE_SCRIPT_OGHAM */
|
||||||
|
PACK ('I','t','a','l'), /* G_UNICODE_SCRIPT_OLD_ITALIC */
|
||||||
|
PACK ('O','r','y','a'), /* G_UNICODE_SCRIPT_ORIYA */
|
||||||
|
PACK ('R','u','n','r'), /* G_UNICODE_SCRIPT_RUNIC */
|
||||||
|
PACK ('S','i','n','h'), /* G_UNICODE_SCRIPT_SINHALA */
|
||||||
|
PACK ('S','y','r','c'), /* G_UNICODE_SCRIPT_SYRIAC */
|
||||||
|
PACK ('T','a','m','l'), /* G_UNICODE_SCRIPT_TAMIL */
|
||||||
|
PACK ('T','e','l','u'), /* G_UNICODE_SCRIPT_TELUGU */
|
||||||
|
PACK ('T','h','a','a'), /* G_UNICODE_SCRIPT_THAANA */
|
||||||
|
PACK ('T','h','a','i'), /* G_UNICODE_SCRIPT_THAI */
|
||||||
|
PACK ('T','i','b','t'), /* G_UNICODE_SCRIPT_TIBETAN */
|
||||||
|
PACK ('C','a','n','s'), /* G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL */
|
||||||
|
PACK ('Y','i','i','i'), /* G_UNICODE_SCRIPT_YI */
|
||||||
|
PACK ('T','g','l','g'), /* G_UNICODE_SCRIPT_TAGALOG */
|
||||||
|
PACK ('H','a','n','o'), /* G_UNICODE_SCRIPT_HANUNOO */
|
||||||
|
PACK ('B','u','h','d'), /* G_UNICODE_SCRIPT_BUHID */
|
||||||
|
PACK ('T','a','g','b'), /* G_UNICODE_SCRIPT_TAGBANWA */
|
||||||
|
|
||||||
|
/* Unicode-4.0 additions */
|
||||||
|
PACK ('B','r','a','i'), /* G_UNICODE_SCRIPT_BRAILLE */
|
||||||
|
PACK ('C','p','r','t'), /* G_UNICODE_SCRIPT_CYPRIOT */
|
||||||
|
PACK ('L','i','m','b'), /* G_UNICODE_SCRIPT_LIMBU */
|
||||||
|
PACK ('O','s','m','a'), /* G_UNICODE_SCRIPT_OSMANYA */
|
||||||
|
PACK ('S','h','a','w'), /* G_UNICODE_SCRIPT_SHAVIAN */
|
||||||
|
PACK ('L','i','n','b'), /* G_UNICODE_SCRIPT_LINEAR_B */
|
||||||
|
PACK ('T','a','l','e'), /* G_UNICODE_SCRIPT_TAI_LE */
|
||||||
|
PACK ('U','g','a','r'), /* G_UNICODE_SCRIPT_UGARITIC */
|
||||||
|
|
||||||
|
/* Unicode-4.1 additions */
|
||||||
|
PACK ('T','a','l','u'), /* G_UNICODE_SCRIPT_NEW_TAI_LUE */
|
||||||
|
PACK ('B','u','g','i'), /* G_UNICODE_SCRIPT_BUGINESE */
|
||||||
|
PACK ('G','l','a','g'), /* G_UNICODE_SCRIPT_GLAGOLITIC */
|
||||||
|
PACK ('T','f','n','g'), /* G_UNICODE_SCRIPT_TIFINAGH */
|
||||||
|
PACK ('S','y','l','o'), /* G_UNICODE_SCRIPT_SYLOTI_NAGRI */
|
||||||
|
PACK ('X','p','e','o'), /* G_UNICODE_SCRIPT_OLD_PERSIAN */
|
||||||
|
PACK ('K','h','a','r'), /* G_UNICODE_SCRIPT_KHAROSHTHI */
|
||||||
|
|
||||||
|
/* Unicode-5.0 additions */
|
||||||
|
PACK ('Z','z','z','z'), /* G_UNICODE_SCRIPT_UNKNOWN */
|
||||||
|
PACK ('B','a','l','i'), /* G_UNICODE_SCRIPT_BALINESE */
|
||||||
|
PACK ('X','s','u','x'), /* G_UNICODE_SCRIPT_CUNEIFORM */
|
||||||
|
PACK ('P','h','n','x'), /* G_UNICODE_SCRIPT_PHOENICIAN */
|
||||||
|
PACK ('P','h','a','g'), /* G_UNICODE_SCRIPT_PHAGS_PA */
|
||||||
|
PACK ('N','k','o','o'), /* G_UNICODE_SCRIPT_NKO */
|
||||||
|
|
||||||
|
/* Unicode-5.1 additions */
|
||||||
|
PACK ('K','a','l','i'), /* G_UNICODE_SCRIPT_KAYAH_LI */
|
||||||
|
PACK ('L','e','p','c'), /* G_UNICODE_SCRIPT_LEPCHA */
|
||||||
|
PACK ('R','j','n','g'), /* G_UNICODE_SCRIPT_REJANG */
|
||||||
|
PACK ('S','u','n','d'), /* G_UNICODE_SCRIPT_SUNDANESE */
|
||||||
|
PACK ('S','a','u','r'), /* G_UNICODE_SCRIPT_SAURASHTRA */
|
||||||
|
PACK ('C','h','a','m'), /* G_UNICODE_SCRIPT_CHAM */
|
||||||
|
PACK ('O','l','c','k'), /* G_UNICODE_SCRIPT_OL_CHIKI */
|
||||||
|
PACK ('V','a','i','i'), /* G_UNICODE_SCRIPT_VAI */
|
||||||
|
PACK ('C','a','r','i'), /* G_UNICODE_SCRIPT_CARIAN */
|
||||||
|
PACK ('L','y','c','i'), /* G_UNICODE_SCRIPT_LYCIAN */
|
||||||
|
PACK ('L','y','d','i'), /* G_UNICODE_SCRIPT_LYDIAN */
|
||||||
|
|
||||||
|
/* Unicode-5.2 additions */
|
||||||
|
PACK ('A','v','s','t'), /* G_UNICODE_SCRIPT_AVESTAN */
|
||||||
|
PACK ('B','a','m','u'), /* G_UNICODE_SCRIPT_BAMUM */
|
||||||
|
PACK ('E','g','y','p'), /* G_UNICODE_SCRIPT_EGYPTIAN_HIEROGLYPHS */
|
||||||
|
PACK ('A','r','m','i'), /* G_UNICODE_SCRIPT_IMPERIAL_ARAMAIC */
|
||||||
|
PACK ('P','h','l','i'), /* G_UNICODE_SCRIPT_INSCRIPTIONAL_PAHLAVI */
|
||||||
|
PACK ('P','r','t','i'), /* G_UNICODE_SCRIPT_INSCRIPTIONAL_PARTHIAN */
|
||||||
|
PACK ('J','a','v','a'), /* G_UNICODE_SCRIPT_JAVANESE */
|
||||||
|
PACK ('K','t','h','i'), /* G_UNICODE_SCRIPT_KAITHI */
|
||||||
|
PACK ('L','i','s','u'), /* G_UNICODE_SCRIPT_LISU */
|
||||||
|
PACK ('M','t','e','i'), /* G_UNICODE_SCRIPT_MEETEI_MAYEK */
|
||||||
|
PACK ('S','a','r','b'), /* G_UNICODE_SCRIPT_OLD_SOUTH_ARABIAN */
|
||||||
|
PACK ('O','r','k','h'), /* G_UNICODE_SCRIPT_OLD_TURKIC */
|
||||||
|
PACK ('S','a','m','r'), /* G_UNICODE_SCRIPT_SAMARITAN */
|
||||||
|
PACK ('L','a','n','a'), /* G_UNICODE_SCRIPT_TAI_THAM */
|
||||||
|
PACK ('T','a','v','t'), /* G_UNICODE_SCRIPT_TAI_VIET */
|
||||||
|
|
||||||
|
/* Unicode-6.0 additions */
|
||||||
|
PACK ('B','a','t','k'), /* G_UNICODE_SCRIPT_BATAK */
|
||||||
|
PACK ('B','r','a','h'), /* G_UNICODE_SCRIPT_BRAHMI */
|
||||||
|
PACK ('M','a','n','d'), /* G_UNICODE_SCRIPT_MANDAIC */
|
||||||
|
|
||||||
|
#undef PACK
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* g_unicode_script_to_iso15924:
|
||||||
|
* @script: a Unicode 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
|
||||||
|
* four letter codes are encoded as a @guint32 by this function in a
|
||||||
|
* big-endian fashion. That is, the code returned for Arabic is
|
||||||
|
* 0x41726162 (0x41 is ASCII code for 'A', 0x72 is ASCII code for 'r', etc).
|
||||||
|
*
|
||||||
|
* See <ulink url="http://unicode.org/iso15924/codelists.html">Codes for the
|
||||||
|
* representation of names of scripts</ulink> for details.
|
||||||
|
*
|
||||||
|
* Return value: the ISO 15924 code for @script, encoded as an integer.
|
||||||
|
*
|
||||||
|
* Since: 2.30
|
||||||
|
*/
|
||||||
|
guint32
|
||||||
|
g_unicode_script_to_iso15924 (GUnicodeScript script)
|
||||||
|
{
|
||||||
|
if (G_UNLIKELY (script < 0 || script >= (int) G_N_ELEMENTS (iso15924_tags)))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return iso15924_tags[script];
|
||||||
|
}
|
||||||
|
@ -602,6 +602,13 @@ test_fully_decompose_len (void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_script_to_iso15924 (void)
|
||||||
|
{
|
||||||
|
g_assert_cmphex (0, ==, g_unicode_script_to_iso15924 (G_UNICODE_SCRIPT_INVALID_CODE));
|
||||||
|
g_assert_cmphex (0x41726162, ==, g_unicode_script_to_iso15924 (G_UNICODE_SCRIPT_ARABIC));
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main (int argc,
|
main (int argc,
|
||||||
char *argv[])
|
char *argv[])
|
||||||
@ -623,6 +630,7 @@ main (int argc,
|
|||||||
g_test_add_func ("/unicode/canonical-decomposition", test_canonical_decomposition);
|
g_test_add_func ("/unicode/canonical-decomposition", test_canonical_decomposition);
|
||||||
g_test_add_func ("/unicode/decompose-tail", test_decompose_tail);
|
g_test_add_func ("/unicode/decompose-tail", test_decompose_tail);
|
||||||
g_test_add_func ("/unicode/fully-decompose-len", test_fully_decompose_len);
|
g_test_add_func ("/unicode/fully-decompose-len", test_fully_decompose_len);
|
||||||
|
g_test_add_func ("/unicode/script-to-iso15924", test_script_to_iso15924);
|
||||||
|
|
||||||
return g_test_run();
|
return g_test_run();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user