mirror of
https://github.com/tmux/tmux.git
synced 2025-04-18 10:18:47 +00:00
Allow strings to span multiple lines - newlines and any leading
whitespace are removed, as well as any following comments that couldn't be part of a format. This allows long formats or other strings to be annotated and indented.
This commit is contained in:
parent
b3782d2dc8
commit
d3c5202f50
41
cmd-parse.y
41
cmd-parse.y
@ -1494,24 +1494,33 @@ yylex_token(int ch)
|
||||
buf = xmalloc(1);
|
||||
|
||||
for (;;) {
|
||||
/*
|
||||
* EOF or \n are always the end of the token. If inside quotes
|
||||
* they are an error.
|
||||
*/
|
||||
if (ch == EOF || ch == '\n') {
|
||||
if (state != NONE)
|
||||
goto error;
|
||||
/* EOF or \n are always the end of the token. */
|
||||
if (ch == EOF || (state == NONE && ch == '\n'))
|
||||
break;
|
||||
}
|
||||
|
||||
/* Whitespace or ; ends a token unless inside quotes. */
|
||||
/* Whitespace or ; or } ends a token unless inside quotes. */
|
||||
if ((ch == ' ' || ch == '\t' || ch == ';' || ch == '}') &&
|
||||
state == NONE)
|
||||
break;
|
||||
|
||||
/*
|
||||
* \ ~ and $ are expanded except in single quotes.
|
||||
*/
|
||||
/* Spaces and comments inside quotes after \n are removed. */
|
||||
if (ch == '\n' && state != NONE) {
|
||||
while ((ch = yylex_getc()) == ' ' || ch == '\t')
|
||||
/* nothing */;
|
||||
if (ch != '#')
|
||||
continue;
|
||||
ch = yylex_getc();
|
||||
if (strchr(",#{}:", ch) != NULL) {
|
||||
yylex_ungetc(ch);
|
||||
ch = '#';
|
||||
} else {
|
||||
while ((ch = yylex_getc()) != '\n' && ch != EOF)
|
||||
/* nothing */;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
/* \ ~ and $ are expanded except in single quotes. */
|
||||
if (ch == '\\' && state != SINGLE_QUOTES) {
|
||||
if (!yylex_token_escape(&buf, &len))
|
||||
goto error;
|
||||
@ -1530,9 +1539,7 @@ yylex_token(int ch)
|
||||
if (ch == '}' && state == NONE)
|
||||
goto error; /* unmatched (matched ones were handled) */
|
||||
|
||||
/*
|
||||
* ' and " starts or end quotes (and is consumed).
|
||||
*/
|
||||
/* ' and " starts or end quotes (and is consumed). */
|
||||
if (ch == '\'') {
|
||||
if (state == NONE) {
|
||||
state = SINGLE_QUOTES;
|
||||
@ -1554,9 +1561,7 @@ yylex_token(int ch)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Otherwise add the character to the buffer.
|
||||
*/
|
||||
/* Otherwise add the character to the buffer. */
|
||||
yylex_append1(&buf, &len, ch);
|
||||
|
||||
skip:
|
||||
|
Loading…
Reference in New Issue
Block a user