xkb_parser/ast/
common.rs

1use crate::{ast::*, xkb::Rule};
2use derivative::Derivative;
3use pest_ast::FromPest;
4
5#[derive(Derivative, FromPest, Clone, PartialEq)]
6#[derivative(Debug)]
7#[pest_ast(rule(Rule::definition))]
8pub struct Definition<'src> {
9    pub modifiers: BlockModifiers<'src>,
10    pub directive: Directive<'src>,
11}
12
13#[derive(Derivative, FromPest, Clone, PartialEq)]
14#[derivative(Debug)]
15#[pest_ast(rule(Rule::block_modifiers))]
16pub struct BlockModifiers<'src> {
17    pub values: Vec<BlockModifier<'src>>,
18}
19
20#[derive(Derivative, FromPest, Clone, PartialEq)]
21#[derivative(Debug)]
22#[pest_ast(rule(Rule::block_modifier))]
23pub struct BlockModifier<'src> {
24    #[pest_ast(outer(with(span_into_str)))]
25    pub content: &'src str,
26}
27
28#[derive(Derivative, FromPest, Clone, PartialEq)]
29#[derivative(Debug)]
30#[pest_ast(rule(Rule::directive))]
31pub enum Directive<'src> {
32    #[derivative(Debug = "transparent")]
33    XkbSymbols(XkbSymbols<'src>),
34    #[derivative(Debug = "transparent")]
35    XkbKeycodes(XkbKeycodes<'src>),
36    #[derivative(Debug = "transparent")]
37    XkbTypes(XkbTypes<'src>),
38    #[derivative(Debug = "transparent")]
39    XkbCompatibility(XkbCompatibility<'src>),
40    #[derivative(Debug = "transparent")]
41    XkbGeometry(XkbGeometry<'src>),
42}
43
44#[derive(Derivative, FromPest, Clone, PartialEq)]
45#[derivative(Debug)]
46#[pest_ast(rule(Rule::include))]
47pub struct Include<'src> {
48    pub name: StringContent<'src>,
49}
50
51#[derive(Derivative, FromPest, Clone, PartialEq)]
52#[derivative(Debug)]
53#[pest_ast(rule(Rule::override_))]
54pub struct Override<'src> {
55    pub name: StringContent<'src>,
56}
57
58#[derive(Derivative, FromPest, Clone, PartialEq)]
59#[derivative(Debug)]
60#[pest_ast(rule(Rule::augment))]
61pub struct Augment<'src> {
62    pub name: StringContent<'src>,
63}
64
65#[derive(Derivative, FromPest, Clone, PartialEq)]
66#[derivative(Debug)]
67#[pest_ast(rule(Rule::virtual_modifiers))]
68pub struct VirtualModifiers<'src> {
69    pub name: Vec<KeyCombo<'src>>,
70}
71
72#[derive(Derivative, FromPest, Clone, PartialEq)]
73#[derivative(Debug)]
74#[pest_ast(rule(Rule::action))]
75pub struct Action<'src> {
76    pub name: Ident<'src>,
77    pub params: Vec<ActionParam<'src>>,
78}
79
80#[derive(Derivative, FromPest, Clone, PartialEq)]
81#[derivative(Debug)]
82#[pest_ast(rule(Rule::action_param))]
83pub enum ActionParam<'src> {
84    #[derivative(Debug = "transparent")]
85    ParamAssignment(ParamAssignment<'src>),
86    #[derivative(Debug = "transparent")]
87    ParamExpression(ParamExpression<'src>),
88}
89
90#[derive(Derivative, FromPest, Clone, PartialEq)]
91#[derivative(Debug)]
92#[pest_ast(rule(Rule::param_assignment))]
93pub struct ParamAssignment<'src> {
94    pub ident: Ident<'src>,
95    pub expr: ParamExpression<'src>,
96}
97
98#[derive(Derivative, FromPest, Clone, PartialEq)]
99#[derivative(Debug)]
100#[pest_ast(rule(Rule::param_expression))]
101pub struct ParamExpression<'src> {
102    #[pest_ast(inner(with(span_into_str)))]
103    pub content: &'src str,
104}