aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames McCoy <jamessan@jamessan.com>2017-03-10 21:22:42 -0500
committerJames McCoy <jamessan@jamessan.com>2017-03-11 20:32:27 -0500
commiteaf1f9b9dc62b2201fa54374a88029de1b3f94fb (patch)
tree6492d34391179a42505d237cd375a67404c0ac29
parent564e9dc17fd53ab6cb1bc63a55dba2df9538a31f (diff)
downloadrneovim-eaf1f9b9dc62b2201fa54374a88029de1b3f94fb.tar.gz
rneovim-eaf1f9b9dc62b2201fa54374a88029de1b3f94fb.tar.bz2
rneovim-eaf1f9b9dc62b2201fa54374a88029de1b3f94fb.zip
vim-patch:7.4.2222
Problem: Sourcing a script where a character has 0x80 as a second byte does not work. (Filipe L B Correia) Solution: Turn 0x80 into K_SPECIAL KS_SPECIAL KE_FILLER. (Christian Brabandt, closes vim/vim#728) Add a test case. https://github.com/vim/vim/commit/6bff02eb530aa29aafa2cb5627399837be7a5dd5
-rw-r--r--src/nvim/getchar.c11
-rw-r--r--src/nvim/misc1.c2
-rw-r--r--src/nvim/testdir/test_expr_utf8.vim57
-rw-r--r--src/nvim/testdir/test_regexp_utf8.vim74
-rw-r--r--src/nvim/version.c2
5 files changed, 78 insertions, 68 deletions
diff --git a/src/nvim/getchar.c b/src/nvim/getchar.c
index b7c6fd41f2..46c1e89c31 100644
--- a/src/nvim/getchar.c
+++ b/src/nvim/getchar.c
@@ -2460,7 +2460,7 @@ inchar (
if (typebuf_changed(tb_change_cnt))
return 0;
- return fix_input_buffer(buf, len, script_char >= 0);
+ return fix_input_buffer(buf, len);
}
/*
@@ -2468,12 +2468,7 @@ inchar (
* buf[] must have room to triple the number of bytes!
* Returns the new length.
*/
-int
-fix_input_buffer (
- char_u *buf,
- int len,
- int script /* TRUE when reading from a script */
-)
+int fix_input_buffer(char_u *buf, int len)
{
if (!using_script()) {
// Should not escape K_SPECIAL/CSI reading input from the user because vim
@@ -2490,11 +2485,9 @@ fix_input_buffer (
// Replace NUL by K_SPECIAL KS_ZERO KE_FILLER
// Replace K_SPECIAL by K_SPECIAL KS_SPECIAL KE_FILLER
// Replace CSI by K_SPECIAL KS_EXTRA KE_CSI
- // Don't replace K_SPECIAL when reading a script file.
for (i = len; --i >= 0; ++p) {
if (p[0] == NUL
|| (p[0] == K_SPECIAL
- && !script
&& (i < 2 || p[1] != KS_EXTRA))) {
memmove(p + 3, p + 1, (size_t)i);
p[2] = (char_u)K_THIRD(p[0]);
diff --git a/src/nvim/misc1.c b/src/nvim/misc1.c
index d49d1d8a21..09549e86ca 100644
--- a/src/nvim/misc1.c
+++ b/src/nvim/misc1.c
@@ -2322,7 +2322,7 @@ int get_keystroke(void)
n = os_inchar(buf + len, maxlen, len == 0 ? -1L : 100L, 0);
if (n > 0) {
/* Replace zero and CSI by a special key code. */
- n = fix_input_buffer(buf + len, n, FALSE);
+ n = fix_input_buffer(buf + len, n);
len += n;
waited = 0;
} else if (len > 0)
diff --git a/src/nvim/testdir/test_expr_utf8.vim b/src/nvim/testdir/test_expr_utf8.vim
index 097d708329..9ea6d8872b 100644
--- a/src/nvim/testdir/test_expr_utf8.vim
+++ b/src/nvim/testdir/test_expr_utf8.vim
@@ -35,60 +35,3 @@ func Test_strcharpart_utf8()
call assert_equal('̀', strcharpart('àxb', 1, 1))
call assert_equal('x', strcharpart('àxb', 2, 1))
endfunc
-
-func s:classes_test()
- set isprint=@,161-255
- call assert_equal('Motörhead', matchstr('Motörhead', '[[:print:]]\+'))
-
- let alphachars = ''
- let lowerchars = ''
- let upperchars = ''
- let alnumchars = ''
- let printchars = ''
- let punctchars = ''
- let xdigitchars = ''
- let i = 1
- while i <= 255
- let c = nr2char(i)
- if c =~ '[[:alpha:]]'
- let alphachars .= c
- endif
- if c =~ '[[:lower:]]'
- let lowerchars .= c
- endif
- if c =~ '[[:upper:]]'
- let upperchars .= c
- endif
- if c =~ '[[:alnum:]]'
- let alnumchars .= c
- endif
- if c =~ '[[:print:]]'
- let printchars .= c
- endif
- if c =~ '[[:punct:]]'
- let punctchars .= c
- endif
- if c =~ '[[:xdigit:]]'
- let xdigitchars .= c
- endif
- let i += 1
- endwhile
-
- call assert_equal('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', alphachars)
- call assert_equal('abcdefghijklmnopqrstuvwxyzµßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ', lowerchars)
- call assert_equal('ABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ', upperchars)
- call assert_equal('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', alnumchars)
- call assert_equal(' !"#$%&''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ', printchars)
- call assert_equal('!"#$%&''()*+,-./:;<=>?@[\]^_`{|}~', punctchars)
- call assert_equal('0123456789ABCDEFabcdef', xdigitchars)
-endfunc
-
-func Test_classes_re1()
- set re=1
- call s:classes_test()
-endfunc
-
-func Test_classes_re2()
- set re=2
- call s:classes_test()
-endfunc
diff --git a/src/nvim/testdir/test_regexp_utf8.vim b/src/nvim/testdir/test_regexp_utf8.vim
index ecb03a0f8c..ecc7ed3e53 100644
--- a/src/nvim/testdir/test_regexp_utf8.vim
+++ b/src/nvim/testdir/test_regexp_utf8.vim
@@ -31,6 +31,80 @@ func Test_equivalence_re2()
set re=0
endfunc
+func s:classes_test()
+ set isprint=@,161-255
+ call assert_equal('Motörhead', matchstr('Motörhead', '[[:print:]]\+'))
+
+ let alphachars = ''
+ let lowerchars = ''
+ let upperchars = ''
+ let alnumchars = ''
+ let printchars = ''
+ let punctchars = ''
+ let xdigitchars = ''
+ let i = 1
+ while i <= 255
+ let c = nr2char(i)
+ if c =~ '[[:alpha:]]'
+ let alphachars .= c
+ endif
+ if c =~ '[[:lower:]]'
+ let lowerchars .= c
+ endif
+ if c =~ '[[:upper:]]'
+ let upperchars .= c
+ endif
+ if c =~ '[[:alnum:]]'
+ let alnumchars .= c
+ endif
+ if c =~ '[[:print:]]'
+ let printchars .= c
+ endif
+ if c =~ '[[:punct:]]'
+ let punctchars .= c
+ endif
+ if c =~ '[[:xdigit:]]'
+ let xdigitchars .= c
+ endif
+ let i += 1
+ endwhile
+
+ call assert_equal('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', alphachars)
+ call assert_equal('abcdefghijklmnopqrstuvwxyzµßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ', lowerchars)
+ call assert_equal('ABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ', upperchars)
+ call assert_equal('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', alnumchars)
+ call assert_equal(' !"#$%&''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ', printchars)
+ call assert_equal('!"#$%&''()*+,-./:;<=>?@[\]^_`{|}~', punctchars)
+ call assert_equal('0123456789ABCDEFabcdef', xdigitchars)
+endfunc
+
+func Test_classes_re1()
+ set re=1
+ call s:classes_test()
+ set re=0
+endfunc
+
+func Test_classes_re2()
+ set re=2
+ call s:classes_test()
+ set re=0
+endfunc
+
+func Test_source_utf8()
+ " check that sourcing a script with 0x80 as second byte works
+ new
+ call setline(1, [':%s/àx/--à1234--/g', ':%s/Àx/--À1234--/g'])
+ write! Xscript
+ bwipe!
+ new
+ call setline(1, [' àx ', ' Àx '])
+ source! Xscript | echo
+ call assert_equal(' --à1234-- ', getline(1))
+ call assert_equal(' --À1234-- ', getline(2))
+ bwipe!
+ call delete('Xscript')
+endfunc
+
func Test_recursive_substitute()
new
s/^/\=execute("s#^##gn")
diff --git a/src/nvim/version.c b/src/nvim/version.c
index d99971b70d..8e8072bf29 100644
--- a/src/nvim/version.c
+++ b/src/nvim/version.c
@@ -218,7 +218,7 @@ static int included_patches[] = {
2225,
// 2224,
// 2223,
- // 2222,
+ 2222,
// 2221,
2220,
2219,