]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
logical linebreaks support
authorBVK Chaitanya <bvk.groups@gmail.com>
Sat, 12 Jun 2010 06:53:49 +0000 (12:23 +0530)
committerBVK Chaitanya <bvk.groups@gmail.com>
Sat, 12 Jun 2010 06:53:49 +0000 (12:23 +0530)
script/yylex.l
tests/grub_script_echo1.in

index 2e770c49ff08b1122b72de758662007de4152b46..c580b1ed32edb73e249ac591ddaf9c6a73f7d5e0 100644 (file)
@@ -121,7 +121,7 @@ CHAR            [^{}|&$;<> \t\n\'\"\\]
 DIGITS          [[:digit:]]+
 NAME            [[:alpha:]_][[:alnum:][:digit:]_]*
 
-ESC             \\.
+ESC             \\(.|\n)
 SQCHR           [^\']
 DQCHR           {ESC}|[^\\\"]
 DQSTR           \"{DQCHR}*\"
@@ -129,7 +129,7 @@ SQSTR           \'{SQCHR}*\'
 VARIABLE        ${NAME}|$\{{NAME}\}|${DIGITS}|$\{{DIGITS}\}|$\?|$\{\?\}
 WORD            ({CHAR}|{DQSTR}|{SQSTR}|{ESC}|{VARIABLE})+
 
-MULTILINE       {WORD}?((\"{DQCHR}*)|(\'{SQCHR}*))
+MULTILINE       {WORD}?((\"{DQCHR}*)|(\'{SQCHR}*)|(\\\n))
 
 %x              SPLIT
 %x              DQUOTE
@@ -177,6 +177,11 @@ MULTILINE       {WORD}?((\"{DQCHR}*)|(\'{SQCHR}*))
 "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;
@@ -188,10 +193,6 @@ MULTILINE       {WORD}?((\"{DQCHR}*)|(\'{SQCHR}*))
                    }
                  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;
@@ -201,6 +202,7 @@ MULTILINE       {WORD}?((\"{DQCHR}*)|(\'{SQCHR}*))
 
 <SPLIT>{
   \\.           { COPY (yytext + 1, yyleng - 1); }
+  \\\n          { /* ignore */ }
   \"            {
                   yy_push_state (DQUOTE, yyscanner);
                   ARG (GRUB_SCRIPT_ARG_TYPE_TEXT);
index 13b7364f418f02ef594b227c2754ebd4c6ccdfa6..2a90fc65f714c1a4b55949febb0058f373280da3 100644 (file)
@@ -60,6 +60,14 @@ echo one'two
 echo one'two
 \'three
 
+# echo "one\
+# two"
+# echo 'one\
+# two'
+# echo foo\
+# bar
+# \
+# echo foo
 # echo "one
 #
 # two"