From caee0a0fdac257ea8e4394e26f453007a3e87db5 Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Thu, 20 Oct 2011 22:38:46 +0100 Subject: [PATCH] cfgparse: eliminate absolute states, use yy_push_state/yy_pop_state This fixes a problem with workspace assignments. I tested i3 -C with three user configs (Thanks SardemFF7, julien, xeen) and did not notice any problems. --- src/cfgparse.l | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/cfgparse.l b/src/cfgparse.l index 2278a81e..88e6ad2c 100644 --- a/src/cfgparse.l +++ b/src/cfgparse.l @@ -136,7 +136,7 @@ EOL (\r?\n) return STR; } [^\n]+ { yy_pop_state(); yylval.string = sstrdup(yytext); return STR; } -[a-zA-Z0-9_-]+ { yylval.string = sstrdup(yytext); return OUTPUT; } +[a-zA-Z0-9_-]+ { yy_pop_state(); yylval.string = sstrdup(yytext); return OUTPUT; } ^[ \t]*#[^\n]* { return TOKCOMMENT; } [0-9a-fA-F]+ { yylval.string = sstrdup(yytext); return HEX; } [ \t]*→[ \t]* { BEGIN(WANT_STRING); } @@ -147,8 +147,8 @@ mode { return TOKMODE; } bind { yy_push_state(WANT_STRING); yy_push_state(EAT_WHITESPACE); yy_push_state(EAT_WHITESPACE); return TOKBINDCODE; } bindcode { yy_push_state(WANT_STRING); yy_push_state(EAT_WHITESPACE); yy_push_state(EAT_WHITESPACE); return TOKBINDCODE; } bindsym { yy_push_state(BINDSYM_COND); yy_push_state(EAT_WHITESPACE); return TOKBINDSYM; } -floating_modifier { BEGIN(INITIAL); return TOKFLOATING_MODIFIER; } -workspace { BEGIN(INITIAL); return TOKWORKSPACE; } +floating_modifier { return TOKFLOATING_MODIFIER; } +workspace { return TOKWORKSPACE; } output { yy_push_state(OUTPUT_COND); yy_push_state(EAT_WHITESPACE); return TOKOUTPUT; } terminal { WS_STRING; return TOKTERMINAL; } font { WS_STRING; return TOKFONT; } @@ -234,7 +234,6 @@ title { yy_push_state(WANT_QSTRING); return TOK_TITLE; /* if ASSIGN_COND then */ if (yy_start_stack_ptr > 0) yy_pop_state(); - else BEGIN(INITIAL); /* yylval will be the string, but without quotes */ char *copy = sstrdup(yytext+1); copy[strlen(copy)-1] = '\0';