Problem: Toupper and tolower don't work properly for Turkish when 'casemap'
is empty. (Bjorn Linse)
Solution: Check the 'casemap' options when deciding how to upper/lower case.
}
/*
- * return TRUE if 'c' is a printable character
+ * Return TRUE if 'c' is a printable character.
* Assume characters above 0x100 are printable (multi-byte), except for
* Unicode.
*/
{
if (c <= '@')
return c;
- if (c >= 0x80)
+ if (c >= 0x80 || !(cmp_flags & CMP_KEEPASCII))
{
if (enc_utf8)
return utf_toupper(c);
{
if (c <= '@')
return c;
- if (c >= 0x80)
+ if (c >= 0x80 || !(cmp_flags & CMP_KEEPASCII))
{
if (enc_utf8)
return utf_tolower(c);
norm! V~
call assert_equal('THIS IS A simple test: äüöss', getline('.'))
+ " Turkish ASCII turns to multi-byte.
+ try
+ lang tr_TR.UTF-8
+ set casemap=
+ call setline(1, 'iI')
+ 1normal gUU
+ call assert_equal("\u0130I", getline(1))
+ call assert_equal("\u0130I", toupper("iI"))
+
+ call setline(1, 'iI')
+ 1normal guu
+ call assert_equal("i\u0131", getline(1))
+ call assert_equal("i\u0131", tolower("iI"))
+
+ lang en_US.UTF-8
+ catch /E197:/
+ " can't use Turkish locale
+ throw 'Skipped: Turkish locale not available'
+ endtry
+
" clean up
bw!
endfunc
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 552,
/**/
551,
/**/