mirror of
https://github.com/neovim/neovim.git
synced 2025-09-15 07:48:18 +00:00
vim-patch:8.0.0794: checking translations fails with multiple NL
Problem: The script to check translations fails if there is more than one
NL in one line.
Solution: Count the number of NL characters. Make count() accept a string.
9966b21a57
This commit is contained in:
@@ -7592,9 +7592,38 @@ static void f_copy(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
static void f_count(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
{
|
||||
long n = 0;
|
||||
int ic = FALSE;
|
||||
int ic = 0;
|
||||
bool error = false;
|
||||
|
||||
if (argvars[0].v_type == VAR_LIST) {
|
||||
if (argvars[2].v_type != VAR_UNKNOWN) {
|
||||
ic = tv_get_number_chk(&argvars[2], &error);
|
||||
}
|
||||
|
||||
if (argvars[0].v_type == VAR_STRING) {
|
||||
const char_u *expr = (char_u *)tv_get_string_chk(&argvars[1]);
|
||||
const char_u *p = argvars[0].vval.v_string;
|
||||
|
||||
if (!error && expr != NULL && p != NULL) {
|
||||
if (ic) {
|
||||
const size_t len = STRLEN(expr);
|
||||
|
||||
while (*p != NUL) {
|
||||
if (mb_strnicmp(p, expr, len) == 0) {
|
||||
n++;
|
||||
p += len;
|
||||
} else {
|
||||
MB_PTR_ADV(p);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
char_u *next;
|
||||
while ((next = (char_u *)strstr((char *)p, (char *)expr)) != NULL) {
|
||||
n++;
|
||||
p = next + STRLEN(expr);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (argvars[0].v_type == VAR_LIST) {
|
||||
listitem_T *li;
|
||||
list_T *l;
|
||||
long idx;
|
||||
@@ -7602,9 +7631,6 @@ static void f_count(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
if ((l = argvars[0].vval.v_list) != NULL) {
|
||||
li = tv_list_first(l);
|
||||
if (argvars[2].v_type != VAR_UNKNOWN) {
|
||||
bool error = false;
|
||||
|
||||
ic = tv_get_number_chk(&argvars[2], &error);
|
||||
if (argvars[3].v_type != VAR_UNKNOWN) {
|
||||
idx = tv_get_number_chk(&argvars[3], &error);
|
||||
if (!error) {
|
||||
@@ -7630,10 +7656,7 @@ static void f_count(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
hashitem_T *hi;
|
||||
|
||||
if ((d = argvars[0].vval.v_dict) != NULL) {
|
||||
bool error = false;
|
||||
|
||||
if (argvars[2].v_type != VAR_UNKNOWN) {
|
||||
ic = tv_get_number_chk(&argvars[2], &error);
|
||||
if (argvars[3].v_type != VAR_UNKNOWN) {
|
||||
EMSG(_(e_invarg));
|
||||
}
|
||||
@@ -7649,8 +7672,9 @@ static void f_count(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
}
|
||||
}
|
||||
}
|
||||
} else
|
||||
} else {
|
||||
EMSG2(_(e_listdictarg), "count()");
|
||||
}
|
||||
rettv->vval.v_number = n;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user