+2006-08-05 Matthias Clasen <mclasen@redhat.com>
+
+ * glib/guniprop.c (g_unichar_toupper, g_unichar_tolower)
+ (real_toupper, real_tolower): If a character can't be converted,
+ don't replace it with a NUL byte, but leave it unchanged.
+ (#348491, Nikolai Weibull)
+
+ * tests/unicode-caseconv.c: Adapt to this change.
+
+ * tests/unicode-caseconv.c (main): Add a comment to point out
+ a quirk in the test data that we are working around here.
+
2006-07-31 Behdad Esfahbod <behdad@gnome.org>
* glib/guniprop.c (g_unichar_isxdigit): Make it only accept those
+2006-08-05 Matthias Clasen <mclasen@redhat.com>
+
+ * glib/guniprop.c (g_unichar_toupper, g_unichar_tolower)
+ (real_toupper, real_tolower): If a character can't be converted,
+ don't replace it with a NUL byte, but leave it unchanged.
+ (#348491, Nikolai Weibull)
+
+ * tests/unicode-caseconv.c: Adapt to this change.
+
+ * tests/unicode-caseconv.c (main): Add a comment to point out
+ a quirk in the test data that we are working around here.
+
2006-07-31 Behdad Esfahbod <behdad@gnome.org>
* glib/guniprop.c (g_unichar_isxdigit): Make it only accept those
return g_utf8_get_char (p);
}
else
- return val ? val : c;
+ {
+ /* Some lowercase letters, e.g., U+000AA, FEMININE ORDINAL INDICATOR,
+ * do not have an uppercase equivalent, in which case val will be
+ * zero. */
+ return val ? val : c;
+ }
}
else if (t == G_UNICODE_TITLECASE_LETTER)
{
return g_utf8_get_char (p);
}
else
- return val ? val : c;
+ {
+ /* Not all uppercase letters are guaranteed to have a lowercase
+ * equivalent. If this is the case, val will be zero. */
+ return val ? val : c;
+ }
}
else if (t == G_UNICODE_TITLECASE_LETTER)
{
}
}
- len += g_unichar_to_utf8 (val, out_buffer ? out_buffer + len : NULL);
+ /* Some lowercase letters, e.g., U+000AA, FEMININE ORDINAL INDICATOR,
+ * do not have an uppercase equivalent, in which case val will be
+ * zero. */
+ len += g_unichar_to_utf8 (val ? val : c, out_buffer ? out_buffer + len : NULL);
}
}
else
}
}
- len += g_unichar_to_utf8 (val, out_buffer ? out_buffer + len : NULL);
+ /* Not all uppercase letters are guaranteed to have a lowercase
+ * equivalent. If this is the case, val will be zero. */
+ len += g_unichar_to_utf8 (val ? val : c, out_buffer ? out_buffer + len : NULL);
}
}
else
char *filename;
const char *locale;
const char *test;
+ const char *expected;
char *convert;
char *current_locale = setlocale (LC_CTYPE, NULL);
gint result = 0;
test = strings[1];
+ /* gen-casemap-txt.pl uses an empty string when a single character
+ * doesn't have an equivalent in a particular case; since that behavior
+ * is nonsense for multicharacter strings, it would make more sense
+ * to put the expected result .. the original character unchanged. But
+ * for now, we just work around it here and take the empty string to mean
+ * "same as original"
+ */
+
convert = g_utf8_strup (test, -1);
- if (strcmp (convert, strings[4]) != 0)
+ expected = strings[4][0] ? strings[4] : test;
+ if (strcmp (convert, expected) != 0)
{
fprintf (stderr, "Failure: toupper(%s) == %s, should have been %s\n",
- test, convert, strings[4]);
+ test, convert, expected);
result = 1;
}
g_free (convert);
convert = g_utf8_strdown (test, -1);
- if (strcmp (convert, strings[2]) != 0)
+ expected = strings[2][0] ? strings[2] : test;
+ if (strcmp (convert, expected) != 0)
{
fprintf (stderr, "Failure: tolower(%s) == %s, should have been %s\n",
- test, convert, strings[2]);
+ test, convert, expected);
result = 1;
}
g_free (convert);