summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2017-04-08 19:12:06 +0200
committerBram Moolenaar <Bram@vim.org>2017-04-08 19:12:06 +0200
commit3317d5ebbe8304da82b8088446060afcae0012af (patch)
tree3fae78d230c1d391b9b13cb4c693b28f0e8ad02b
parentd34f9b1155a6b470e1dc766ff98192f440e7eba7 (diff)
downloadvim-git-3317d5ebbe8304da82b8088446060afcae0012af.tar.gz
patch 8.0.0552: toupper and tolower don't work properly for Turkishv8.0.0552
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.
-rw-r--r--src/charset.c6
-rw-r--r--src/testdir/test_normal.vim20
-rw-r--r--src/version.c2
3 files changed, 25 insertions, 3 deletions
diff --git a/src/charset.c b/src/charset.c
index 29c587b52..cdb9e48e4 100644
--- a/src/charset.c
+++ b/src/charset.c
@@ -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);
diff --git a/src/testdir/test_normal.vim b/src/testdir/test_normal.vim
index 8fce6e1f4..149afa918 100644
--- a/src/testdir/test_normal.vim
+++ b/src/testdir/test_normal.vim
@@ -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
diff --git a/src/version.c b/src/version.c
index 2ea57088a..e37178b8a 100644
--- a/src/version.c
+++ b/src/version.c
@@ -765,6 +765,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 552,
+/**/
551,
/**/
550,