diff options
author | Bram Moolenaar <Bram@vim.org> | 2017-04-08 19:12:06 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2017-04-08 19:12:06 +0200 |
commit | 3317d5ebbe8304da82b8088446060afcae0012af (patch) | |
tree | 3fae78d230c1d391b9b13cb4c693b28f0e8ad02b | |
parent | d34f9b1155a6b470e1dc766ff98192f440e7eba7 (diff) | |
download | vim-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.c | 6 | ||||
-rw-r--r-- | src/testdir/test_normal.vim | 20 | ||||
-rw-r--r-- | src/version.c | 2 |
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, |