summaryrefslogtreecommitdiffstats
path: root/lexer
diff options
context:
space:
mode:
authorDave Davenport <qball@gmpclient.org>2017-10-22 12:41:51 +0200
committerDave Davenport <qball@gmpclient.org>2017-10-22 12:42:33 +0200
commit847d2e82a045fbafbe42da9013f3623542cd42e4 (patch)
treecf1c416e68ddb33f5bd9c23dc0c8f16df9282a91 /lexer
parent814fad81913c16247a377a1e92b311bcb4aa820f (diff)
[Lexer/Parser] Make the '#' before element optional.
Diffstat (limited to 'lexer')
-rw-r--r--lexer/theme-lexer.l26
-rw-r--r--lexer/theme-parser.y11
2 files changed, 31 insertions, 6 deletions
diff --git a/lexer/theme-lexer.l b/lexer/theme-lexer.l
index a576e266..b906b59c 100644
--- a/lexer/theme-lexer.l
+++ b/lexer/theme-lexer.l
@@ -359,15 +359,16 @@ if ( queue == NULL ){
*/
- /**
- * Handle defaults: * { ... }
- */
<INITIAL>{CONFIGURATION} {
g_queue_push_head ( queue, GINT_TO_POINTER (YY_START) );
BEGIN(DEFAULTS);
return T_CONFIGURATION;
}
+
+ /**
+ * Handle defaults: * { ... }
+ */
<INITIAL>{ASTERIX} {
g_queue_push_head ( queue, GINT_TO_POINTER (YY_START) );
BEGIN(DEFAULTS);
@@ -385,8 +386,12 @@ if ( queue == NULL ){
return T_ERROR_DEFAULTS;
}
-<INITIAL>"#" { g_queue_push_head ( queue, GINT_TO_POINTER (YY_START) ); BEGIN(NAMESTR);return T_NAME_PREFIX;}
- /* Go into parsing an section*/
+<INITIAL>"#" {
+ g_queue_push_head ( queue, GINT_TO_POINTER (YY_START) );
+ BEGIN(NAMESTR);
+ return T_NAME_PREFIX;
+}
+ /* Go into parsing an section*/
<NAMESTR>"\{" {
g_queue_push_head ( queue, GINT_TO_POINTER (YY_START) );
BEGIN(SECTION);
@@ -557,6 +562,17 @@ if ( queue == NULL ){
yylloc->last_column = 1;
yylloc->last_line ++;
};
+
+ /**
+ * If we just encounter a word, we assume it is a Widget name.
+ * This makes include,theme, configuration a reserved keyword.
+ */
+<INITIAL>{WORD} {
+ g_queue_push_head ( queue, GINT_TO_POINTER (YY_START) );
+ BEGIN(NAMESTR);
+ yylval->sval = g_strdup(yytext);
+ return T_NAME_ELEMENT;
+}
<INITIAL>. {
return T_ERROR;
}
diff --git a/lexer/theme-parser.y b/lexer/theme-parser.y
index b97bae22..de2acf6f 100644
--- a/lexer/theme-parser.y
+++ b/lexer/theme-parser.y
@@ -248,6 +248,7 @@ static ThemeColor hwb_to_rgb ( double h, double w, double b)
%type <list> t_property_element_list
%type <list> t_property_element_list_optional
%type <ival> t_property_orientation
+%type <ival> t_name_prefix_optional
%start t_entry_list
%%
@@ -265,8 +266,16 @@ t_entry_list:
}
;
+/**
+ * Small dummy object to make the prefix optional.
+ */
+t_name_prefix_optional
+: T_NAME_PREFIX {}
+| %empty {}
+;
+
t_entry:
-T_NAME_PREFIX t_entry_name_path_selectors T_BOPEN t_property_list_optional T_BCLOSE
+t_name_prefix_optional t_entry_name_path_selectors T_BOPEN t_property_list_optional T_BCLOSE
{
for ( GList *liter = g_list_first ( $2); liter; liter = g_list_next ( liter ) ) {
ThemeWidget *widget = rofi_theme;