]> git.ipfire.org Git - pakfire.git/commitdiff
parser: Add a hack for "template NAME" lines
authorMichael Tremer <michael.tremer@ipfire.org>
Thu, 25 Feb 2021 16:36:18 +0000 (16:36 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 25 Feb 2021 16:36:18 +0000 (16:36 +0000)
These will now be parsed as empty subparsers which are being turned into
a regular declaration.

Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/parser/grammar.y
src/libpakfire/parser/scanner.l

index e6fb886d25834b414ff1c9a820ccdda7942bed88..6dacdc7c8d54fcd5fa2baf2d01cf0ca6ae6bce86 100644 (file)
@@ -200,7 +200,7 @@ declaration                                 : key T_ASSIGN value T_EOL
                                                                int r = pakfire_parser_new_declaration(&$$, $1, $4);
                                                                if (r)
                                                                        ABORT;
-                                                       }                                                       
+                                                       }
                                                        ;
 
 empty                                          : T_EOL
@@ -240,6 +240,26 @@ subparser                                  : subparser_name T_EOL subgrammar T_END T_EOL
 
                                                                $$ = pakfire_parser_ref($3);
                                                        }
+                                                       | subparser_name T_EOL
+                                                       {
+                                                               char* key;
+                                                               char* value;
+
+                                                               // Create a new parser
+                                                               $$ = pakfire_parser_create(pakfire, NULL, NULL);
+                                                               if (!$$)
+                                                                       ABORT;
+
+                                                               pakfire_partition_string($1, ":", &key, &value);
+
+                                                               if (key && value)
+                                                                       pakfire_parser_set($$, key, value);
+
+                                                               if (key)
+                                                                       free(key);
+                                                               if (value)
+                                                                       free(value);
+                                                       }
                                                        ;
 
 subparser_name                         : T_SUBPARSER
@@ -249,6 +269,7 @@ subparser_name                              : T_SUBPARSER
                                                                if (r < 0)
                                                                        ABORT;
                                                        }
+                                                       ;
 
 if_stmt                                                : T_IF T_STRING T_EQUALS T_STRING T_EOL subgrammar else_stmt T_END T_EOL
                                                        {
index 36b9020ff27e83408240e8905bbf98c47aaa4362..5312f830f5f8bdf7e2da6487e58653ecb3f6f2c3 100644 (file)
@@ -158,7 +158,7 @@ scriptlet                           script(let)?
                                                        return T_SUBPARSER;
                                                }
 
-{named_subparsers}             {
+{named_subparsers}             {
                                                        yy_push_state(READLINE);
 
                                                        yylval.string = strdup(yytext);