mirror of
https://github.com/vim/vim.git
synced 2025-09-28 04:24:06 -04:00
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.
This commit is contained in:
@@ -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
|
* Assume characters above 0x100 are printable (multi-byte), except for
|
||||||
* Unicode.
|
* Unicode.
|
||||||
*/
|
*/
|
||||||
@@ -1717,7 +1717,7 @@ vim_toupper(int c)
|
|||||||
{
|
{
|
||||||
if (c <= '@')
|
if (c <= '@')
|
||||||
return c;
|
return c;
|
||||||
if (c >= 0x80)
|
if (c >= 0x80 || !(cmp_flags & CMP_KEEPASCII))
|
||||||
{
|
{
|
||||||
if (enc_utf8)
|
if (enc_utf8)
|
||||||
return utf_toupper(c);
|
return utf_toupper(c);
|
||||||
@@ -1741,7 +1741,7 @@ vim_tolower(int c)
|
|||||||
{
|
{
|
||||||
if (c <= '@')
|
if (c <= '@')
|
||||||
return c;
|
return c;
|
||||||
if (c >= 0x80)
|
if (c >= 0x80 || !(cmp_flags & CMP_KEEPASCII))
|
||||||
{
|
{
|
||||||
if (enc_utf8)
|
if (enc_utf8)
|
||||||
return utf_tolower(c);
|
return utf_tolower(c);
|
||||||
|
@@ -1603,6 +1603,26 @@ fun! Test_normal30_changecase()
|
|||||||
norm! V~
|
norm! V~
|
||||||
call assert_equal('THIS IS A simple test: äüöss', getline('.'))
|
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
|
" clean up
|
||||||
bw!
|
bw!
|
||||||
endfunc
|
endfunc
|
||||||
|
@@ -764,6 +764,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
552,
|
||||||
/**/
|
/**/
|
||||||
551,
|
551,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user