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 e573cb09 2020-09-27 op
32 e573cb09 2020-09-27 op %}
33 e573cb09 2020-09-27 op
34 e573cb09 2020-09-27 op %union {
35 e573cb09 2020-09-27 op struct key key;
36 e573cb09 2020-09-27 op char *str;
37 e573cb09 2020-09-27 op struct action action;
38 e573cb09 2020-09-27 op struct match *match;
39 e573cb09 2020-09-27 op struct rule *rule;
40 e573cb09 2020-09-27 op struct group *group;
41 e573cb09 2020-09-27 op }
42 e573cb09 2020-09-27 op
43 e573cb09 2020-09-27 op %token TMATCH TCLASS
44 e573cb09 2020-09-27 op %token TON TDO
45 e573cb09 2020-09-27 op %token TTOGGLE TACTIVATE TDEACTIVATE TIGNORE
46 e573cb09 2020-09-27 op %token TERR
47 e573cb09 2020-09-27 op
48 e573cb09 2020-09-27 op %token <key> TKEY
49 e573cb09 2020-09-27 op %token <str> TSTRING
50 e573cb09 2020-09-27 op
51 e573cb09 2020-09-27 op %type <action> action
52 e573cb09 2020-09-27 op %type <match> matches match
53 e573cb09 2020-09-27 op %type <rule> keys key
54 e573cb09 2020-09-27 op %type <group> groups group
55 e573cb09 2020-09-27 op
56 e573cb09 2020-09-27 op %%
57 e573cb09 2020-09-27 op
58 e573cb09 2020-09-27 op groups : /* empty */ { $$ = NULL; }
59 e573cb09 2020-09-27 op | groups group { $2->next = $1; config = $$ = $2; }
60 e573cb09 2020-09-27 op | error '\n'
61 e573cb09 2020-09-27 op ;
62 e573cb09 2020-09-27 op
63 e573cb09 2020-09-27 op group : matches keys { $$ = new_group($1, $2); }
64 e573cb09 2020-09-27 op ;
65 e573cb09 2020-09-27 op
66 e573cb09 2020-09-27 op matches : /* empty */ { $$ = NULL; }
67 e573cb09 2020-09-27 op | matches '\n' { $$ = $1; }
68 e573cb09 2020-09-27 op | matches match '\n' { $2->next = $1; $$ = $2; }
69 e573cb09 2020-09-27 op ;
70 e573cb09 2020-09-27 op
71 9f53ba9b 2020-09-29 op match : TMATCH '*' { $$ = new_match(MANY, NULL); }
72 9f53ba9b 2020-09-29 op | TMATCH TCLASS TSTRING { $$ = new_match(MCLASS, $3); }
73 e573cb09 2020-09-27 op ;
74 e573cb09 2020-09-27 op
75 e573cb09 2020-09-27 op keys : /* empty */ { $$ = NULL; }
76 e573cb09 2020-09-27 op | keys '\n' { $$ = $1; }
77 e573cb09 2020-09-27 op | keys key '\n' { $2->next = $1; $$ = $2; }
78 e573cb09 2020-09-27 op ;
79 e573cb09 2020-09-27 op
80 e573cb09 2020-09-27 op key : TON TKEY TDO action { $$ = new_rule($2, $4); }
81 e573cb09 2020-09-27 op ;
82 e573cb09 2020-09-27 op
83 e573cb09 2020-09-27 op action : TKEY { $$ = FAKE_KEY($1); }
84 e573cb09 2020-09-27 op | TTOGGLE { $$ = SPECIAL(ATOGGLE); }
85 e573cb09 2020-09-27 op | TACTIVATE { $$ = SPECIAL(AACTIVATE); }
86 e573cb09 2020-09-27 op | TDEACTIVATE { $$ = SPECIAL(ADEACTIVATE); }
87 e573cb09 2020-09-27 op | TIGNORE { $$ = SPECIAL(AIGNORE); }
88 e573cb09 2020-09-27 op ;