Bug 665685 — Add a #define for the max length of a Unicode decomposition

Add G_UNICHAR_MAX_DECOMPOSITION_LEN for the maximum length of the
decomposition of a single Unicode character.

Closes: bgo#665685
This commit is contained in:
Philip Withnall 2011-12-06 18:30:43 +00:00
parent 990af4b372
commit 3ac7c35656
3 changed files with 16 additions and 4 deletions

View File

@ -551,6 +551,18 @@ gsize g_unichar_fully_decompose (gunichar ch,
gunichar *result, gunichar *result,
gsize result_len); gsize result_len);
/**
* G_UNICHAR_MAX_COMPAT_DECOMPOSITION_LEN:
*
* The maximum length (in codepoints) of a compatibility or canonical
* decomposition of a single Unicode character.
*
* This is as defined by Unicode 6.1.
*
* Since: 2.31.3
*/
#define G_UNICHAR_MAX_DECOMPOSITION_LEN 18 /* codepoints */
/* Compute canonical ordering of a string in-place. This rearranges /* Compute canonical ordering of a string in-place. This rearranges
decomposed characters in the string according to their combining decomposed characters in the string according to their combining
classes. See the Unicode manual for more information. */ classes. See the Unicode manual for more information. */

View File

@ -700,8 +700,8 @@ g_unichar_compose (gunichar a,
* currently all decompositions are of length at most 4, but * currently all decompositions are of length at most 4, but
* this may change in the future (very unlikely though). * this may change in the future (very unlikely though).
* At any rate, Unicode does guarantee that a buffer of length * At any rate, Unicode does guarantee that a buffer of length
* 18 is always enough for both compatibility and canonical * %G_UNICHAR_MAX_DECOMPOSITION_LEN is always enough for both compatibility and
* decompositions, so that is the size recommended. * canonical decompositions, so that is the size recommended.
* *
* See <ulink url="http://unicode.org/reports/tr15/">UAX#15</ulink> * See <ulink url="http://unicode.org/reports/tr15/">UAX#15</ulink>
* for details. * for details.

View File

@ -855,9 +855,9 @@ real_toupper (const gchar *str,
* which could simplify this considerably. * which could simplify this considerably.
*/ */
gsize decomp_len, i; gsize decomp_len, i;
gunichar decomp[18]; gunichar decomp[G_UNICHAR_MAX_DECOMPOSITION_LEN];
decomp_len = g_unichar_fully_decompose (c, FALSE, decomp, 18); decomp_len = g_unichar_fully_decompose (c, FALSE, decomp, G_N_ELEMENTS (decomp));
for (i=0; i < decomp_len; i++) for (i=0; i < decomp_len; i++)
{ {
if (decomp[i] != 0x307 /* COMBINING DOT ABOVE */) if (decomp[i] != 0x307 /* COMBINING DOT ABOVE */)