mirror of
https://github.com/neovim/neovim.git
synced 2025-09-12 06:18:16 +00:00
vim-patch:7.4.241
Problem: The string returned by submatch() does not distinguish between a NL from a line break and a NL that stands for a NUL character. Solution: Add a second argument to return a list. (ZyX) https://code.google.com/p/vim/source/detail?r=a63d0cd691dc925283815d17d62f4e948d723a59
This commit is contained in:

committed by
Thiago de Arruda

parent
d4f8a86700
commit
e772cfcc55
27
src/eval.c
27
src/eval.c
@@ -7029,7 +7029,7 @@ static struct fst {
|
||||
{"strridx", 2, 3, f_strridx},
|
||||
{"strtrans", 1, 1, f_strtrans},
|
||||
{"strwidth", 1, 1, f_strwidth},
|
||||
{"submatch", 1, 1, f_submatch},
|
||||
{"submatch", 1, 2, f_submatch},
|
||||
{"substitute", 4, 4, f_substitute},
|
||||
{"synID", 3, 3, f_synID},
|
||||
{"synIDattr", 2, 3, f_synIDattr},
|
||||
@@ -14441,9 +14441,28 @@ static void f_strtrans(typval_T *argvars, typval_T *rettv)
|
||||
*/
|
||||
static void f_submatch(typval_T *argvars, typval_T *rettv)
|
||||
{
|
||||
rettv->v_type = VAR_STRING;
|
||||
rettv->vval.v_string =
|
||||
reg_submatch((int)get_tv_number_chk(&argvars[0], NULL));
|
||||
int error = FALSE;
|
||||
int no = (int)get_tv_number_chk(&argvars[0], &error);
|
||||
if (error) {
|
||||
return;
|
||||
}
|
||||
|
||||
int retList = 0;
|
||||
|
||||
if (argvars[1].v_type != VAR_UNKNOWN) {
|
||||
retList = get_tv_number_chk(&argvars[1], &error);
|
||||
if (error) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (retList == 0) {
|
||||
rettv->v_type = VAR_STRING;
|
||||
rettv->vval.v_string = reg_submatch(no);
|
||||
} else {
|
||||
rettv->v_type = VAR_LIST;
|
||||
rettv->vval.v_list = reg_submatch_list(no);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user