Blame


1 e573cb09 2020-09-27 op /* -*- mode: fundamental; indent-tabs-mode: t; -*- */
2 e573cb09 2020-09-27 op %{
3 e573cb09 2020-09-27 op
4 e573cb09 2020-09-27 op /*
5 e573cb09 2020-09-27 op * Copyright (c) 2020 Omar Polo <op@omarpolo.com>
6 e573cb09 2020-09-27 op *
7 e573cb09 2020-09-27 op * Permission to use, copy, modify, and distribute this software for any
8 e573cb09 2020-09-27 op * purpose with or without fee is hereby granted, provided that the above
9 e573cb09 2020-09-27 op * copyright notice and this permission notice appear in all copies.
10 e573cb09 2020-09-27 op *
11 e573cb09 2020-09-27 op * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 e573cb09 2020-09-27 op * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 e573cb09 2020-09-27 op * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 e573cb09 2020-09-27 op * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 e573cb09 2020-09-27 op * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 e573cb09 2020-09-27 op * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 e573cb09 2020-09-27 op * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 e573cb09 2020-09-27 op */
19 e573cb09 2020-09-27 op
20 e573cb09 2020-09-27 op #include <stdio.h>
21 e573cb09 2020-09-27 op
22 e573cb09 2020-09-27 op #include "star-platinum.h"
23 e573cb09 2020-09-27 op
24 e573cb09 2020-09-27 op /*
25 e573cb09 2020-09-27 op * #define YYDEBUG 1
26 e573cb09 2020-09-27 op * int yydebug = 1;
27 e573cb09 2020-09-27 op */
28 e573cb09 2020-09-27 op
29 e573cb09 2020-09-27 op #define SPECIAL(X) ((struct action){.type = (ASPECIAL), .special = (X) })
30 e573cb09 2020-09-27 op #define FAKE_KEY(K) ((struct action){.type = (AFAKE), .send_key = (K) })
31 e0041ee5 2020-10-01 op #define EXEC(S) ((struct action){.type = (AEXEC), .str = (S) })
32 e573cb09 2020-09-27 op
33 e573cb09 2020-09-27 op %}
34 eb90e50e 2020-10-01 op
35 eb90e50e 2020-10-01 op /* for bison: */
36 eb90e50e 2020-10-01 op /* %define parse.error verbose */
37 eb90e50e 2020-10-01 op
38 e573cb09 2020-09-27 op %union {
39 e573cb09 2020-09-27 op struct key key;
40 e573cb09 2020-09-27 op char *str;
41 e573cb09 2020-09-27 op struct action action;
42 e573cb09 2020-09-27 op struct match *match;
43 e573cb09 2020-09-27 op struct rule *rule;
44 e573cb09 2020-09-27 op struct group *group;
45 e573cb09 2020-09-27 op }
46 e573cb09 2020-09-27 op
47 7d3286ca 2020-10-01 op %token TMATCH TCLASS TALL
48 e573cb09 2020-09-27 op %token TON TDO
49 e0041ee5 2020-10-01 op %token TTOGGLE TACTIVATE TDEACTIVATE TIGNORE TEXEC
50 e573cb09 2020-09-27 op %token TERR
51 e573cb09 2020-09-27 op
52 e573cb09 2020-09-27 op %token <key> TKEY
53 e573cb09 2020-09-27 op %token <str> TSTRING
54 e573cb09 2020-09-27 op
55 e573cb09 2020-09-27 op %type <action> action
56 e573cb09 2020-09-27 op %type <match> matches match
57 e573cb09 2020-09-27 op %type <rule> keys key
58 e573cb09 2020-09-27 op %type <group> groups group
59 e573cb09 2020-09-27 op
60 e573cb09 2020-09-27 op %%
61 e573cb09 2020-09-27 op
62 e573cb09 2020-09-27 op groups : /* empty */ { $$ = NULL; }
63 e573cb09 2020-09-27 op | groups group { $2->next = $1; config = $$ = $2; }
64 e573cb09 2020-09-27 op ;
65 e573cb09 2020-09-27 op
66 e573cb09 2020-09-27 op group : matches keys { $$ = new_group($1, $2); }
67 e573cb09 2020-09-27 op ;
68 e573cb09 2020-09-27 op
69 e573cb09 2020-09-27 op matches : /* empty */ { $$ = NULL; }
70 e573cb09 2020-09-27 op | matches '\n' { $$ = $1; }
71 e573cb09 2020-09-27 op | matches match '\n' { $2->next = $1; $$ = $2; }
72 e573cb09 2020-09-27 op ;
73 e573cb09 2020-09-27 op
74 7d3286ca 2020-10-01 op match : TMATCH TALL { $$ = new_match(MANY, NULL); }
75 9f53ba9b 2020-09-29 op | TMATCH TCLASS TSTRING { $$ = new_match(MCLASS, $3); }
76 eb90e50e 2020-10-01 op | error '\n' { yyerror("invalid match directive"); }
77 e573cb09 2020-09-27 op ;
78 e573cb09 2020-09-27 op
79 e573cb09 2020-09-27 op keys : /* empty */ { $$ = NULL; }
80 e573cb09 2020-09-27 op | keys '\n' { $$ = $1; }
81 e573cb09 2020-09-27 op | keys key '\n' { $2->next = $1; $$ = $2; }
82 eb90e50e 2020-10-01 op | error '\n' { yyerror("invalid key definition"); }
83 e573cb09 2020-09-27 op ;
84 e573cb09 2020-09-27 op
85 e573cb09 2020-09-27 op key : TON TKEY TDO action { $$ = new_rule($2, $4); }
86 e573cb09 2020-09-27 op ;
87 e573cb09 2020-09-27 op
88 e573cb09 2020-09-27 op action : TKEY { $$ = FAKE_KEY($1); }
89 e573cb09 2020-09-27 op | TTOGGLE { $$ = SPECIAL(ATOGGLE); }
90 e573cb09 2020-09-27 op | TACTIVATE { $$ = SPECIAL(AACTIVATE); }
91 e573cb09 2020-09-27 op | TDEACTIVATE { $$ = SPECIAL(ADEACTIVATE); }
92 e573cb09 2020-09-27 op | TIGNORE { $$ = SPECIAL(AIGNORE); }
93 e0041ee5 2020-10-01 op | TEXEC TSTRING { $$ = EXEC($2); }
94 e573cb09 2020-09-27 op ;