1
0
forked from aniani/vim

patch 8.2.0578: heredoc for interfaces does not support "trim"

Problem:    Heredoc for interfaces does not support "trim".
Solution:   Update the script heredoc support to be same as the :let command.
            (Yegappan Lakshmanan, closes #5916)
This commit is contained in:
Bram Moolenaar
2020-04-14 20:15:49 +02:00
parent 7a1637f4c0
commit 6c2b7b8055
22 changed files with 2093 additions and 1926 deletions

View File

@@ -4408,44 +4408,37 @@ open_cmdwin(void)
* Returns a pointer to allocated memory with {script} or NULL.
*/
char_u *
script_get(exarg_T *eap, char_u *cmd)
script_get(exarg_T *eap UNUSED, char_u *cmd UNUSED)
{
char_u *theline;
char *end_pattern = NULL;
char dot[] = ".";
#ifdef FEAT_EVAL
list_T *l;
listitem_T *li;
char_u *s;
garray_T ga;
if (cmd[0] != '<' || cmd[1] != '<' || eap->getline == NULL)
return NULL;
cmd += 2;
l = heredoc_get(eap, cmd, TRUE);
if (l == NULL)
return NULL;
ga_init2(&ga, 1, 0x400);
if (cmd[2] != NUL)
end_pattern = (char *)skipwhite(cmd + 2);
else
end_pattern = dot;
for (;;)
FOR_ALL_LIST_ITEMS(l, li)
{
theline = eap->getline(
#ifdef FEAT_EVAL
eap->cstack->cs_looplevel > 0 ? -1 :
#endif
NUL, eap->cookie, 0, TRUE);
if (theline == NULL || STRCMP(end_pattern, theline) == 0)
{
vim_free(theline);
break;
}
ga_concat(&ga, theline);
s = tv_get_string(&li->li_tv);
ga_concat(&ga, s);
ga_append(&ga, '\n');
vim_free(theline);
}
ga_append(&ga, NUL);
list_free(l);
return (char_u *)ga.ga_data;
#else
return NULL;
#endif
}
#if defined(FEAT_EVAL) || defined(PROTO)