diff options
author | Dave Davenport <DaveDavenport@users.noreply.github.com> | 2022-01-25 09:57:59 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-25 09:57:59 +0100 |
commit | 85c6545a43dd8f03697f9537c4b2fe03b409fcd0 (patch) | |
tree | a86c269a0a36b62f25ca196770a65e5111958584 /lexer | |
parent | 6e3feee1799d280e246ea088350a6722f6b2e894 (diff) |
Merge List and Array type into one. (#1572)
* Merge list and array into one.
* [Lexer] Only use string without " in list
* Some cleanups
* Cleanups based on feedback.
Diffstat (limited to 'lexer')
-rw-r--r-- | lexer/theme-lexer.l | 40 | ||||
-rw-r--r-- | lexer/theme-parser.y | 32 |
2 files changed, 23 insertions, 49 deletions
diff --git a/lexer/theme-lexer.l b/lexer/theme-lexer.l index 0b83342c..de2eeb67 100644 --- a/lexer/theme-lexer.l +++ b/lexer/theme-lexer.l @@ -161,7 +161,7 @@ static double rofi_theme_parse_convert_hex ( char high, char low) ASC [\x00-\x7f] ASCN [\x00-\t\v-\x7f] -ASCNP [\x00-\t\v-\x21\x23-\x7f] +ASCNP [\x00-\t\v-\x21\x23-\x7f] U [\x80-\xbf] U2 [\xc2-\xdf] U3 [\xe0-\xef] @@ -176,6 +176,7 @@ UANYNP {ASCNP}|{U2}{U}|{U3}{U}{U}|{U4}{U}{U}{U} WHITESPACE [[:blank:]] WSO [[:blank:]]* WORD [[:alnum:]-]+ +WORD_ELEMENT [[:alpha:]][[:alnum:]-]* WORD_ENV [[:alpha:]_][[:alnum:]_]* MEDIA_NAME [[:alpha:]-]+ COLOR_NAME [[:alpha:]]+ @@ -275,9 +276,6 @@ FORWARD_SLASH \/ LIST_OPEN \[ LIST_CLOSE \] -ARRAY_OPEN \{ -ARRAY_CLOSE \} - VAR_START "var" ENV_START "env" @@ -299,7 +297,6 @@ CONFIGURATION (?i:configuration) %x PROPERTIES_VAR %x PROPERTIES_ENV_VAR %x PROPERTIES_VAR_DEFAULT -%x PROPERTIES_LIST %x PROPERTIES_ARRAY %x NAMESTR %x SECTION @@ -496,18 +493,19 @@ if ( queue == NULL ) { /* Alias color to text-color */ <SECTION>"color" { yylval->sval = g_strdup("text-color"); return T_PROP_NAME;} <SECTION>{WORD} { yylval->sval = g_strdup(yytext); return T_PROP_NAME;} -<NAMESTR>{WORD} { yylval->sval = g_strdup(yytext); return T_NAME_ELEMENT;} +<NAMESTR>{WORD_ELEMENT} { yylval->sval = g_strdup(yytext); return T_NAME_ELEMENT;} /* After Namestr/Classstr we want to go to state str, then to { */ <INITIAL,SECTION>{WHITESPACE}+ ; // ignore all whitespace -<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT,PROPERTIES_LIST,PROPERTIES_ARRAY,PROPERTIES_ENV_VAR,PROPERTIES_VAR,MEDIA_CONTENT>{WHITESPACE}+ ; // ignore all whitespace +<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT,PROPERTIES_ARRAY,PROPERTIES_ENV_VAR,PROPERTIES_VAR,MEDIA_CONTENT>{WHITESPACE}+ ; // ignore all whitespace <SECTION>":" { g_queue_push_head ( queue, GINT_TO_POINTER (YY_START) ); BEGIN(PROPERTIES); return T_PSEP; } <PROPERTIES>";" { BEGIN(GPOINTER_TO_INT ( g_queue_pop_head ( queue ))); return T_PCLOSE;} <PROPERTIES,PROPERTIES_ARRAY,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>(true|false) { yylval->bval= g_strcmp0(yytext, "true") == 0; return T_BOOLEAN;} <PROPERTIES,PROPERTIES_ARRAY,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT,MEDIA_CONTENT>{PNNUMBER}\.{NUMBER}+ { yylval->fval = g_ascii_strtod(yytext, NULL); return T_DOUBLE;} <PROPERTIES,PROPERTIES_ARRAY,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT,MEDIA_CONTENT>{PNNUMBER} { yylval->ival = (int)g_ascii_strtoll(yytext, NULL, 10); return T_INT;} -<PROPERTIES,PROPERTIES_ARRAY,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{STRING} { yytext[yyleng-1] = '\0'; yylval->sval = g_strcompress(&yytext[1]); return T_STRING;} +<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{STRING} { yytext[yyleng-1] = '\0'; yylval->sval = g_strcompress(&yytext[1]); return T_STRING;} +<PROPERTIES_ARRAY>{STRING_LIST} { yytext[yyleng-1] = '\0'; yylval->sval = g_strcompress(&yytext[1]); return T_STRING;} <PROPERTIES,PROPERTIES_ARRAY,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{CHAR} { yytext[yyleng-1] = '\0'; yylval->cval = g_strcompress(&yytext[1])[0]; return T_CHAR;} <PROPERTIES,PROPERTIES_ARRAY,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>@{WORD} { @@ -674,25 +672,16 @@ if ( queue == NULL ) { } <PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{S_T_PARENT_LEFT} { return T_PARENT_LEFT; } <PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{S_T_PARENT_RIGHT} { return T_PARENT_RIGHT; } -<PROPERTIES,PROPERTIES_ARRAY,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT,PROPERTIES_LIST>{COMMA} { return T_COMMA; } +<PROPERTIES,PROPERTIES_ARRAY,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{COMMA} { return T_COMMA; } <PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{LIST_OPEN} { g_queue_push_head ( queue, GINT_TO_POINTER (YY_START) ); - BEGIN(PROPERTIES_LIST); + BEGIN(PROPERTIES_ARRAY); return T_LIST_OPEN; } -<PROPERTIES_LIST>{LIST_CLOSE} { +<PROPERTIES_ARRAY>{LIST_CLOSE} { BEGIN(GPOINTER_TO_INT(g_queue_pop_head ( queue ))); return T_LIST_CLOSE; } -<PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{ARRAY_OPEN} { - g_queue_push_head ( queue, GINT_TO_POINTER (YY_START) ); - BEGIN(PROPERTIES_ARRAY); - return T_ARRAY_OPEN; -} -<PROPERTIES_ARRAY>{ARRAY_CLOSE} { - BEGIN(GPOINTER_TO_INT(g_queue_pop_head ( queue ))); - return T_ARRAY_CLOSE; -} <PROPERTIES,PROPERTIES_ARRAY,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{FORWARD_SLASH} { return T_FORWARD_SLASH; } /* Position */ <PROPERTIES,PROPERTIES_ARRAY,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>{CENTER} { return T_POS_CENTER; } @@ -819,7 +808,7 @@ if ( queue == NULL ) { * If we just encounter a word, we assume it is a Widget name. * This makes include,theme, configuration a reserved keyword. */ -<INITIAL>{WORD} { +<INITIAL>{WORD_ELEMENT} { g_queue_push_head ( queue, GINT_TO_POINTER (YY_START) ); BEGIN(NAMESTR); yylval->sval = g_strdup(yytext); @@ -834,17 +823,12 @@ if ( queue == NULL ) { fprintf(stderr,"section found: |%s|\n", yytext); return T_ERROR_SECTION; } -<PROPERTIES_LIST,PROPERTIES_VAR>{WORD} { +<PROPERTIES_ARRAY,PROPERTIES_VAR>{WORD_ELEMENT} { yylval->sval = g_strdup(yytext); return T_ELEMENT; } -<PROPERTIES_LIST>{STRING_LIST} { - yytext[yyleng-1] = '\0'; - yylval->sval = g_strdup(yytext+1); - return T_ELEMENT; -} -<PROPERTIES_ENV_VAR,PROPERTIES_VAR,PROPERTIES_ARRAY,PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT,PROPERTIES_LIST>. { +<PROPERTIES_ENV_VAR,PROPERTIES_VAR,PROPERTIES_ARRAY,PROPERTIES,PROPERTIES_ENV,PROPERTIES_VAR_DEFAULT>. { yytext[yyleng-1] = '\0'; return T_ERROR_PROPERTY; } diff --git a/lexer/theme-parser.y b/lexer/theme-parser.y index 07588fa0..c33aeee9 100644 --- a/lexer/theme-parser.y +++ b/lexer/theme-parser.y @@ -231,12 +231,10 @@ static ThemeColor hwb_to_rgb ( double h, double w, double b ) %token T_OPTIONAL_COMMA "Optional comma separator (',')" %token T_FORWARD_SLASH "forward slash ('/')" %token T_PERCENT "Percent sign ('%')" + %token T_LIST_OPEN "List open ('[')" %token T_LIST_CLOSE "List close (']')" -%token T_ARRAY_OPEN "Set open ('{')" -%token T_ARRAY_CLOSE "Set close ('}')" - %token T_MODIFIER_ADD "Add ('+')" %token T_MODIFIER_SUBTRACT "Subtract ('-')" %token T_MODIFIER_MULTIPLY "Multiply ('*')" @@ -308,8 +306,6 @@ static ThemeColor hwb_to_rgb ( double h, double w, double b ) %type <ival> t_property_line_style %type <list> t_property_element_list %type <list> t_property_element_list_optional -%type <list> t_property_element_set -%type <list> t_property_element_set_optional %type <ival> t_property_orientation %type <ival> t_property_cursor %type <ival> t_name_prefix_optional @@ -585,10 +581,6 @@ t_property_element $$ = rofi_theme_property_create ( P_LIST ); $$->value.list = $2; } -| T_ARRAY_OPEN t_property_element_set_optional T_ARRAY_CLOSE { - $$ = rofi_theme_property_create ( P_ARRAY ); - $$->value.list = $2; -} | t_property_orientation { $$ = rofi_theme_property_create ( P_ORIENTATION ); $$->value.i = $1; @@ -661,20 +653,18 @@ t_property_element_list_optional ; t_property_element_list -: T_ELEMENT { $$ = g_list_append ( NULL, $1); } +: t_property_element { $$ = g_list_append ( NULL, $1); } +| T_ELEMENT { + Property *p = rofi_theme_property_create ( P_STRING ); + p->value.s = $1; + $$ = g_list_append ( NULL, p); +} | t_property_element_list T_COMMA T_ELEMENT { - $$ = g_list_append ( $1, $3 ); + Property *p = rofi_theme_property_create ( P_STRING ); + p->value.s = $3; + $$ = g_list_append ( $1, p); } -; -/** List of elements */ -t_property_element_set_optional -: %empty { $$ = NULL; } -| t_property_element_set { $$ = $1; } -; - -t_property_element_set -: t_property_element { $$ = g_list_append ( NULL, $1); } -| t_property_element_set T_COMMA t_property_element { +| t_property_element_list T_COMMA t_property_element { $$ = g_list_append ( $1, $3 ); } ; |