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:
@@ -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)
|
||||
|
Reference in New Issue
Block a user