]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.0.0552: toupper and tolower don't work properly for Turkish v8.0.0552
authorBram Moolenaar <Bram@vim.org>
Sat, 8 Apr 2017 17:12:06 +0000 (19:12 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 8 Apr 2017 17:12:06 +0000 (19:12 +0200)
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.

src/charset.c
src/testdir/test_normal.vim
src/version.c

index 29c587b5211839d31d30d9d17bc1849d40eaee2c..cdb9e48e4e118d48efebcb9a2615b97ac6867953 100644 (file)
@@ -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);
index 8fce6e1f4d21030fcd93e3326a21ffd1d50b9cd1..149afa918a3d08c94bf1ed98cc65d9f572ba53f5 100644 (file)
@@ -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
index 2ea57088ac326a814b1b995dd8513ea254b48b97..e37178b8a115413d37a5f2e6db0e5f4502f0f937 100644 (file)
@@ -764,6 +764,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    552,
 /**/
     551,
 /**/