Permalink
Browse files

patch 8.0.0552: toupper and tolower don't work properly for Turkish

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.
  • Loading branch information...
brammool committed Apr 8, 2017
1 parent d34f9b1 commit 3317d5ebbe8304da82b8088446060afcae0012af
Showing with 25 additions and 3 deletions.
  1. +3 −3 src/charset.c
  2. +20 −0 src/testdir/test_normal.vim
  3. +2 −0 src/version.c
View
@@ -960,7 +960,7 @@ vim_isfilec_or_wc(int c)
}
/*
* 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.
*/
@@ -1717,7 +1717,7 @@ vim_toupper(int c)
{
if (c <= '@')
return c;
if (c >= 0x80)
if (c >= 0x80 || !(cmp_flags & CMP_KEEPASCII))
{
if (enc_utf8)
return utf_toupper(c);
@@ -1741,7 +1741,7 @@ vim_tolower(int c)
{
if (c <= '@')
return c;
if (c >= 0x80)
if (c >= 0x80 || !(cmp_flags & CMP_KEEPASCII))
{
if (enc_utf8)
return utf_tolower(c);
@@ -1603,6 +1603,26 @@ fun! Test_normal30_changecase()
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
View
@@ -764,6 +764,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
552,
/**/
551,
/**/

0 comments on commit 3317d5e

Please sign in to comment.