diff options
author | Dave Davenport <qball@gmpclient.org> | 2017-10-22 12:41:51 +0200 |
---|---|---|
committer | Dave Davenport <qball@gmpclient.org> | 2017-10-22 12:42:33 +0200 |
commit | 847d2e82a045fbafbe42da9013f3623542cd42e4 (patch) | |
tree | cf1c416e68ddb33f5bd9c23dc0c8f16df9282a91 /lexer | |
parent | 814fad81913c16247a377a1e92b311bcb4aa820f (diff) |
[Lexer/Parser] Make the '#' before element optional.
Diffstat (limited to 'lexer')
-rw-r--r-- | lexer/theme-lexer.l | 26 | ||||
-rw-r--r-- | lexer/theme-parser.y | 11 |
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; |