]> git.sur5r.net Git - i3/i3/commitdiff
Implement option -p to test if the lexer/parser can parse your configfile (specify...
authorMichael Stapelberg <michael@stapelberg.de>
Sun, 13 Sep 2009 12:54:27 +0000 (14:54 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Sun, 13 Sep 2009 12:54:27 +0000 (14:54 +0200)
src/cfgparse.l
src/cfgparse.y
src/mainx.c

index af26c6ae56edd65f52ccf3a1d25322c0ed370fbc..c11028a6ef25448133c3afc3a7d8feda6f97bbeb 100644 (file)
@@ -3,35 +3,29 @@
 #include "cfgparse.tab.h"
 #include <xcb/xcb.h>
 
-enum {
-        BIND_NONE = 0,
-        BIND_SHIFT = XCB_MOD_MASK_SHIFT,        /* (1 << 0) */
-        BIND_CONTROL = XCB_MOD_MASK_CONTROL,    /* (1 << 2) */
-        BIND_MOD1 = XCB_MOD_MASK_1,             /* (1 << 3) */
-        BIND_MOD2 = XCB_MOD_MASK_2,             /* (1 << 4) */
-        BIND_MOD3 = XCB_MOD_MASK_3,             /* (1 << 5) */
-        BIND_MOD4 = XCB_MOD_MASK_4,             /* (1 << 6) */
-        BIND_MOD5 = XCB_MOD_MASK_5,             /* (1 << 7) */
-        BIND_MODE_SWITCH = (1 << 8)
-};
+#include "data.h"
 
 %}
 
-%Start BIND_COND BIND_AWS_COND BIND_A2WS_COND ASSIGN_COND
+%Start BIND_COND BIND_AWS_COND BIND_A2WS_COND ASSIGN_COND COLOR_COND
 
 %%
+<BIND_A2WS_COND>[^\n]+ { BEGIN(INITIAL); yylval.string = strdup(yytext); return STR; }
+#[^\n]*                        return TOKCOMMENT;
 [0-9]+                  yylval.number = atoi(yytext); return NUMBER;
-[0-9a-fA-F]+           { yylval.string = strdup(yytext); return HEX; }
+<COLOR_COND>[0-9a-fA-F]+               { yylval.string = strdup(yytext); return HEX; }
 bind                    { BEGIN(BIND_COND); return TOKBIND; }
 bindsym                 { BEGIN(BIND_COND); return TOKBINDSYM; }
 floating_modifier      return TOKFLOATING_MODIFIER;
 workspace              return TOKWORKSPACE;
 screen                 return TOKSCREEN;
+terminal               { BEGIN(BIND_AWS_COND); return TOKTERMINAL; }
+font                   { BEGIN(BIND_AWS_COND); return TOKFONT; }
 assign                 { BEGIN(ASSIGN_COND); return TOKASSIGN; }
 set                    { BEGIN(BIND_COND); return TOKSET; }
 ipc-socket             { BEGIN(BIND_AWS_COND); return TOKIPCSOCKET; }
 exec                   { BEGIN(BIND_AWS_COND); return TOKEXEC; }
-client.focused         { /* TODO: lval pointer */ return TOKCOLOR; }
+client.focused         { BEGIN(COLOR_COND); /* TODO: lval pointer */ return TOKCOLOR; }
 Mod1                   yylval.number = BIND_MOD1; return MODIFIER;
 Mod2                   yylval.number = BIND_MOD2; return MODIFIER;
 Mod3                   yylval.number = BIND_MOD3; return MODIFIER;
@@ -44,8 +38,7 @@ shift                 return TOKSHIFT;
 <BIND_COND>[ \t]+       { BEGIN(BIND_AWS_COND); return WHITESPACE; }
 <BIND_AWS_COND>[ \t]+   { BEGIN(BIND_A2WS_COND); return WHITESPACE; }
 [ \t]+                  return WHITESPACE;
-<BIND_A2WS_COND>[^\n]+ { BEGIN(INITIAL); yylval.string = strdup(yytext); return STRING; }
-<ASSIGN_COND>[^ \t]+   { BEGIN(INITIAL); yylval.string = strdup(yytext); return STRING_NG; }
+<ASSIGN_COND>[^ \t]+   { BEGIN(INITIAL); yylval.string = strdup(yytext); return STR_NG; }
 [a-zA-Z]+              yylval.string = strdup(yytext); return WORD;
 [a-zA-Z0-9_-]+         yylval.string = strdup(yytext); return VARNAME;
 \"[^\"]+\"             {
index 2cf408a7984e63e292dbe3695b17aa0ba1f162ba..4e09e2b1d42963ca7ec7d1d0f24f43c710041f2d 100644 (file)
@@ -3,31 +3,34 @@
 #include <string.h>
 #include <xcb/xcb.h>
 
-enum {
-        BIND_NONE = 0,
-        BIND_SHIFT = XCB_MOD_MASK_SHIFT,        /* (1 << 0) */
-        BIND_CONTROL = XCB_MOD_MASK_CONTROL,    /* (1 << 2) */
-        BIND_MOD1 = XCB_MOD_MASK_1,             /* (1 << 3) */
-        BIND_MOD2 = XCB_MOD_MASK_2,             /* (1 << 4) */
-        BIND_MOD3 = XCB_MOD_MASK_3,             /* (1 << 5) */
-        BIND_MOD4 = XCB_MOD_MASK_4,             /* (1 << 6) */
-        BIND_MOD5 = XCB_MOD_MASK_5,             /* (1 << 7) */
-        BIND_MODE_SWITCH = (1 << 8)
-};
+#include "data.h"
 
+extern int yylex(void);
+extern FILE *yyin;
 
 int yydebug = 1;
 
-void yyerror(const char *str)
-{
+void yyerror(const char *str) {
         fprintf(stderr,"error: %s\n",str);
 }
 
-int yywrap()
-{
+int yywrap() {
         return 1;
 }
 
+void parse_file(const char *f) {
+       printf("opening %s\n", f);
+        if ((yyin = fopen(f, "r")) == NULL) {
+               perror("fopen");
+               exit(1);
+       }
+       if (yyparse() != 0) {
+               fprintf(stderr, "Could not parse configfile\n");
+               exit(1);
+       }
+       fclose(yyin);
+}
+
 #if 0
 main()
 {
@@ -45,11 +48,14 @@ main()
 
 %token <number>NUMBER
 %token <string>WORD
-%token <string>STRING
-%token <string>STRING_NG
+%token <string>STR
+%token <string>STR_NG
 %token <string>VARNAME
 %token <string>HEX
 %token TOKBIND
+%token TOKTERMINAL
+%token TOKCOMMENT
+%token TOKFONT
 %token TOKBINDSYM
 %token MODIFIER
 %token TOKCONTROL
@@ -83,10 +89,17 @@ line:
        | ipcsocket
        | exec
        | color
+       | terminal
+       | font
+       | comment
         ;
 
+comment:
+       TOKCOMMENT
+       ;
+
 command:
-       STRING
+       STR
        ;
 
 bind:
@@ -135,7 +148,7 @@ assign:
 
 window_class:
        QUOTEDSTRING
-       | STRING_NG
+       | STR_NG
        ;
 
 optional_arrow:
@@ -144,7 +157,7 @@ optional_arrow:
        ;
 
 set:
-       TOKSET WHITESPACE variable WHITESPACE STRING
+       TOKSET WHITESPACE variable WHITESPACE STR
        {
                printf("set %s to %s\n", $<string>3, $<string>5);
        }
@@ -156,19 +169,34 @@ variable:
        ;
 
 ipcsocket:
-       TOKIPCSOCKET WHITESPACE STRING
+       TOKIPCSOCKET WHITESPACE STR
        {
                printf("ipc %s\n", $<string>3);
        }
        ;
 
 exec:
-       TOKEXEC WHITESPACE STRING
+       TOKEXEC WHITESPACE STR
        {
                printf("exec %s\n", $<string>3);
        }
        ;
 
+terminal:
+       TOKTERMINAL WHITESPACE STR
+       {
+               printf("terminal %s\n", $<string>3);
+       }
+       ;
+
+font:
+       TOKFONT WHITESPACE STR
+       {
+               printf("font %s\n", $<string>3);
+       }
+       ;
+
+
 color:
        TOKCOLOR WHITESPACE '#' HEX
        {
index db3d184aa1a88d6e10d2d28af5fb7e291a0f9408..cb385c89badad71286fe37aedc23b155a6fdcae6 100644 (file)
@@ -165,7 +165,7 @@ int main(int argc, char *argv[], char *env[]) {
 
         start_argv = argv;
 
-        while ((opt = getopt_long(argc, argv, "c:vah", long_options, &option_index)) != -1) {
+        while ((opt = getopt_long(argc, argv, "c:vahp", long_options, &option_index)) != -1) {
                 switch (opt) {
                         case 'a':
                                 LOG("Autostart disabled using -a\n");
@@ -177,6 +177,12 @@ int main(int argc, char *argv[], char *env[]) {
                         case 'v':
                                 printf("i3 version " I3_VERSION " © 2009 Michael Stapelberg and contributors\n");
                                 exit(EXIT_SUCCESS);
+                        case 'p':
+                                {
+                                        printf("parsing\n");
+                                        parse_file(override_configpath);
+                                        exit(0);
+                                }
                         default:
                                 fprintf(stderr, "Usage: %s [-c configfile] [-a] [-v]\n", argv[0]);
                                 fprintf(stderr, "\n");