summaryrefslogtreecommitdiffstats
path: root/lexer
diff options
context:
space:
mode:
authorDave Davenport <DaveDavenport@users.noreply.github.com>2022-01-25 09:57:59 +0100
committerGitHub <noreply@github.com>2022-01-25 09:57:59 +0100
commit85c6545a43dd8f03697f9537c4b2fe03b409fcd0 (patch)
treea86c269a0a36b62f25ca196770a65e5111958584 /lexer
parent6e3feee1799d280e246ea088350a6722f6b2e894 (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.l40
-rw-r--r--lexer/theme-parser.y32
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 );
}
;