diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mbyte.c | 2 | ||||
-rw-r--r-- | src/ops.c | 13 | ||||
-rw-r--r-- | src/testdir/test_normal.vim | 14 | ||||
-rw-r--r-- | src/testdir/test_utf8_comparisons.vim | 35 | ||||
-rw-r--r-- | src/testdir/test_visual.vim | 6 | ||||
-rw-r--r-- | src/version.c | 2 |
6 files changed, 56 insertions, 16 deletions
diff --git a/src/mbyte.c b/src/mbyte.c index 2d18a2796a..0427f0ce3c 100644 --- a/src/mbyte.c +++ b/src/mbyte.c @@ -3454,6 +3454,8 @@ static convertStruct toLower[] = {0x1e900,0x1e921,1,34} }; +// Note: UnicodeData.txt does not define U+1E9E as being the corresponding upper +// case letter for U+00DF (ß), however it is part of the toLower table static convertStruct toUpper[] = { {0x61,0x7a,1,-32}, @@ -1431,18 +1431,19 @@ swapchar(int op_type, pos_T *pos) if (c >= 0x80 && op_type == OP_ROT13) return FALSE; - if (op_type == OP_UPPER && c == 0xdf - && (enc_latin1like || STRCMP(p_enc, "iso-8859-2") == 0)) + // ~ is OP_NOP, g~ is OP_TILDE, gU is OP_UPPER + if ((op_type == OP_UPPER || op_type == OP_NOP || op_type == OP_TILDE) + && c == 0xdf + && (enc_latin1like || STRCMP(p_enc, "iso-8859-2") == 0)) { pos_T sp = curwin->w_cursor; - // Special handling of German sharp s: change to "SS". + // Special handling for lowercase German sharp s (ß): convert to uppercase (ẞ). curwin->w_cursor = *pos; del_char(FALSE); - ins_char('S'); - ins_char('S'); + ins_char(0x1E9E); curwin->w_cursor = sp; - inc(pos); + return TRUE; } if (enc_dbcs != 0 && c >= 0x100) // No lower/uppercase letter diff --git a/src/testdir/test_normal.vim b/src/testdir/test_normal.vim index fb9c3ded53..dc68a158a1 100644 --- a/src/testdir/test_normal.vim +++ b/src/testdir/test_normal.vim @@ -2347,19 +2347,19 @@ func Test_normal30_changecase() norm! 1ggVu call assert_equal('this is a simple test: äüöß', getline('.')) norm! VU - call assert_equal('THIS IS A SIMPLE TEST: ÄÜÖSS', getline('.')) + call assert_equal('THIS IS A SIMPLE TEST: ÄÜÖẞ', getline('.')) norm! guu - call assert_equal('this is a simple test: äüöss', getline('.')) + call assert_equal('this is a simple test: äüöß', getline('.')) norm! gUgU - call assert_equal('THIS IS A SIMPLE TEST: ÄÜÖSS', getline('.')) + call assert_equal('THIS IS A SIMPLE TEST: ÄÜÖẞ', getline('.')) norm! gugu - call assert_equal('this is a simple test: äüöss', getline('.')) + call assert_equal('this is a simple test: äüöß', getline('.')) norm! gUU - call assert_equal('THIS IS A SIMPLE TEST: ÄÜÖSS', getline('.')) + call assert_equal('THIS IS A SIMPLE TEST: ÄÜÖẞ', getline('.')) norm! 010~ - call assert_equal('this is a SIMPLE TEST: ÄÜÖSS', getline('.')) + call assert_equal('this is a SIMPLE TEST: ÄÜÖẞ', getline('.')) norm! V~ - call assert_equal('THIS IS A simple test: äüöss', getline('.')) + call assert_equal('THIS IS A simple test: äüöß', getline('.')) call assert_beeps('norm! c~') %d call assert_beeps('norm! ~') diff --git a/src/testdir/test_utf8_comparisons.vim b/src/testdir/test_utf8_comparisons.vim index 3431226ada..20b5762c9d 100644 --- a/src/testdir/test_utf8_comparisons.vim +++ b/src/testdir/test_utf8_comparisons.vim @@ -93,4 +93,39 @@ func Test_gap() call assert_equal(["ABCD", "", "defg"], getline(1,3)) endfunc +" test that g~, ~ and gU correclty upper-cases ß +func Test_uppercase_sharp_ss() + new + call setline(1, repeat(['ß'], 4)) + + call cursor(1, 1) + norm! ~ + call assert_equal('ẞ', getline(line('.'))) + norm! ~ + call assert_equal('ß', getline(line('.'))) + + call cursor(2, 1) + norm! g~l + call assert_equal('ẞ', getline(line('.'))) + norm! g~l + call assert_equal('ß', getline(line('.'))) + + call cursor(3, 1) + norm! gUl + call assert_equal('ẞ', getline(line('.'))) + norm! vgU + call assert_equal('ẞ', getline(line('.'))) + norm! vgu + call assert_equal('ß', getline(line('.'))) + norm! gul + call assert_equal('ß', getline(line('.'))) + + call cursor(4, 1) + norm! vgU + call assert_equal('ẞ', getline(line('.'))) + norm! vgu + call assert_equal('ß', getline(line('.'))) + bw! +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/testdir/test_visual.vim b/src/testdir/test_visual.vim index f0d8edcf84..066d7ebb25 100644 --- a/src/testdir/test_visual.vim +++ b/src/testdir/test_visual.vim @@ -1020,9 +1020,9 @@ func Test_visual_change_case() exe "normal Oblah di\rdoh dut\<Esc>VkUj\r" " Uppercase part of two lines exe "normal ddppi333\<Esc>k0i222\<Esc>fyllvjfuUk" - call assert_equal(['the YOUTUSSEUU end', '- yOUSSTUSSEXu -', - \ 'THE YOUTUSSEUU END', '111THE YOUTUSSEUU END', 'BLAH DI', 'DOH DUT', - \ '222the yoUTUSSEUU END', '333THE YOUTUßeuu end'], getline(2, '$')) + call assert_equal(['the YOUTUẞEUU end', '- yOUẞTUẞEXu -', + \ 'THE YOUTUẞEUU END', '111THE YOUTUẞEUU END', 'BLAH DI', 'DOH DUT', + \ '222the yoUTUẞEUU END', '333THE YOUTUßeuu end'], getline(2, '$')) bwipe! endfunc diff --git a/src/version.c b/src/version.c index 602a2f96a8..fec82525d5 100644 --- a/src/version.c +++ b/src/version.c @@ -705,6 +705,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 101, +/**/ 100, /**/ 99, |