mirror of
https://github.com/neovim/neovim.git
synced 2025-09-23 03:28:33 +00:00
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.
6bff02eb53
This commit is contained in:
@@ -2460,7 +2460,7 @@ inchar (
|
|||||||
if (typebuf_changed(tb_change_cnt))
|
if (typebuf_changed(tb_change_cnt))
|
||||||
return 0;
|
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!
|
* buf[] must have room to triple the number of bytes!
|
||||||
* Returns the new length.
|
* Returns the new length.
|
||||||
*/
|
*/
|
||||||
int
|
int fix_input_buffer(char_u *buf, int len)
|
||||||
fix_input_buffer (
|
|
||||||
char_u *buf,
|
|
||||||
int len,
|
|
||||||
int script /* TRUE when reading from a script */
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
if (!using_script()) {
|
if (!using_script()) {
|
||||||
// Should not escape K_SPECIAL/CSI reading input from the user because vim
|
// 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 NUL by K_SPECIAL KS_ZERO KE_FILLER
|
||||||
// Replace K_SPECIAL by K_SPECIAL KS_SPECIAL KE_FILLER
|
// Replace K_SPECIAL by K_SPECIAL KS_SPECIAL KE_FILLER
|
||||||
// Replace CSI by K_SPECIAL KS_EXTRA KE_CSI
|
// 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) {
|
for (i = len; --i >= 0; ++p) {
|
||||||
if (p[0] == NUL
|
if (p[0] == NUL
|
||||||
|| (p[0] == K_SPECIAL
|
|| (p[0] == K_SPECIAL
|
||||||
&& !script
|
|
||||||
&& (i < 2 || p[1] != KS_EXTRA))) {
|
&& (i < 2 || p[1] != KS_EXTRA))) {
|
||||||
memmove(p + 3, p + 1, (size_t)i);
|
memmove(p + 3, p + 1, (size_t)i);
|
||||||
p[2] = (char_u)K_THIRD(p[0]);
|
p[2] = (char_u)K_THIRD(p[0]);
|
||||||
|
@@ -2322,7 +2322,7 @@ int get_keystroke(void)
|
|||||||
n = os_inchar(buf + len, maxlen, len == 0 ? -1L : 100L, 0);
|
n = os_inchar(buf + len, maxlen, len == 0 ? -1L : 100L, 0);
|
||||||
if (n > 0) {
|
if (n > 0) {
|
||||||
/* Replace zero and CSI by a special key code. */
|
/* 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;
|
len += n;
|
||||||
waited = 0;
|
waited = 0;
|
||||||
} else if (len > 0)
|
} else if (len > 0)
|
||||||
|
@@ -35,60 +35,3 @@ func Test_strcharpart_utf8()
|
|||||||
call assert_equal('̀', strcharpart('àxb', 1, 1))
|
call assert_equal('̀', strcharpart('àxb', 1, 1))
|
||||||
call assert_equal('x', strcharpart('àxb', 2, 1))
|
call assert_equal('x', strcharpart('àxb', 2, 1))
|
||||||
endfunc
|
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
|
|
||||||
|
@@ -31,6 +31,80 @@ func Test_equivalence_re2()
|
|||||||
set re=0
|
set re=0
|
||||||
endfunc
|
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()
|
func Test_recursive_substitute()
|
||||||
new
|
new
|
||||||
s/^/\=execute("s#^##gn")
|
s/^/\=execute("s#^##gn")
|
||||||
|
@@ -218,7 +218,7 @@ static int included_patches[] = {
|
|||||||
2225,
|
2225,
|
||||||
// 2224,
|
// 2224,
|
||||||
// 2223,
|
// 2223,
|
||||||
// 2222,
|
2222,
|
||||||
// 2221,
|
// 2221,
|
||||||
2220,
|
2220,
|
||||||
2219,
|
2219,
|
||||||
|
Reference in New Issue
Block a user