summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Withnall <philip@tecnocode.co.uk>2011-12-06 18:30:43 +0000
committerPhilip Withnall <philip@tecnocode.co.uk>2011-12-06 19:09:01 +0000
commit3ac7c35656649b1d1fcf2ccaa670b854809d4cd8 (patch)
treef979dac16df248a2a05a4be1669b915614d94b12
parent990af4b3725faba230abc6c2e68c112da6f13b41 (diff)
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
-rw-r--r--glib/gunicode.h12
-rw-r--r--glib/gunidecomp.c4
-rw-r--r--glib/guniprop.c4
3 files changed, 16 insertions, 4 deletions
diff --git a/glib/gunicode.h b/glib/gunicode.h
index 213b38f91..f89c07c19 100644
--- a/glib/gunicode.h
+++ b/glib/gunicode.h
@@ -551,6 +551,18 @@ gsize g_unichar_fully_decompose (gunichar ch,
gunichar *result,
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
decomposed characters in the string according to their combining
classes. See the Unicode manual for more information. */
diff --git a/glib/gunidecomp.c b/glib/gunidecomp.c
index 6cbc2df3a..090b42d25 100644
--- a/glib/gunidecomp.c
+++ b/glib/gunidecomp.c
@@ -700,8 +700,8 @@ g_unichar_compose (gunichar a,
* currently all decompositions are of length at most 4, but
* this may change in the future (very unlikely though).
* At any rate, Unicode does guarantee that a buffer of length
- * 18 is always enough for both compatibility and canonical
- * decompositions, so that is the size recommended.
+ * %G_UNICHAR_MAX_DECOMPOSITION_LEN is always enough for both compatibility and
+ * canonical decompositions, so that is the size recommended.
*
* See <ulink url="http://unicode.org/reports/tr15/">UAX#15</ulink>
* for details.
diff --git a/glib/guniprop.c b/glib/guniprop.c
index 8b139ae9a..5b818e3d4 100644
--- a/glib/guniprop.c
+++ b/glib/guniprop.c
@@ -855,9 +855,9 @@ real_toupper (const gchar *str,
* which could simplify this considerably.
*/
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++)
{
if (decomp[i] != 0x307 /* COMBINING DOT ABOVE */)