DIGITS [[:digit:]]+
NAME [[:alpha:]_][[:alnum:][:digit:]_]*
-ESC \\.
+ESC \\(.|\n)
SQCHR [^\']
DQCHR {ESC}|[^\\\"]
DQSTR \"{DQCHR}*\"
VARIABLE ${NAME}|$\{{NAME}\}|${DIGITS}|$\{{DIGITS}\}|$\?|$\{\?\}
WORD ({CHAR}|{DQSTR}|{SQSTR}|{ESC}|{VARIABLE})+
-MULTILINE {WORD}?((\"{DQCHR}*)|(\'{SQCHR}*))
+MULTILINE {WORD}?((\"{DQCHR}*)|(\'{SQCHR}*)|(\\\n))
%x SPLIT
%x DQUOTE
"function" { RECORD; return GRUB_PARSER_TOKEN_FUNCTION; }
"menuentry" { RECORD; return GRUB_PARSER_TOKEN_MENUENTRY; }
+{MULTILINE} {
+ if (grub_lexer_unput (yytext, yyscanner))
+ return GRUB_PARSER_TOKEN_BAD;
+ }
+
{NAME} { RECORD; return GRUB_PARSER_TOKEN_NAME; }
{WORD} {
RECORD;
}
yyextra->lexerstate->resplit = 1;
}
-{MULTILINE} {
- if (grub_lexer_unput (yytext, yyscanner))
- return GRUB_PARSER_TOKEN_BAD;
- }
. {
grub_script_yyerror (yyextra, yytext);
return GRUB_PARSER_TOKEN_BAD;
<SPLIT>{
\\. { COPY (yytext + 1, yyleng - 1); }
+ \\\n { /* ignore */ }
\" {
yy_push_state (DQUOTE, yyscanner);
ARG (GRUB_SCRIPT_ARG_TYPE_TEXT);