xkb_parser/ast/
xkb_keycodes.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::xkb_keycodes))]
8pub struct XkbKeycodes<'src> {
9    pub name: StringContent<'src>,
10    pub value: Vec<XkbKeycodesItem<'src>>,
11}
12
13#[derive(Derivative, FromPest, Clone, PartialEq)]
14#[derivative(Debug)]
15#[pest_ast(rule(Rule::xkb_keycodes_item))]
16pub enum XkbKeycodesItem<'src> {
17    #[derivative(Debug = "transparent")]
18    Include(Include<'src>),
19    #[derivative(Debug = "transparent")]
20    Override(Override<'src>),
21    #[derivative(Debug = "transparent")]
22    Augment(Augment<'src>),
23
24    #[derivative(Debug = "transparent")]
25    Minimum(Minimum),
26    #[derivative(Debug = "transparent")]
27    Maximum(Maximum),
28    #[derivative(Debug = "transparent")]
29    SymbolMapping(SymbolMapping<'src>),
30    #[derivative(Debug = "transparent")]
31    Alternate(Alternate<'src>),
32    #[derivative(Debug = "transparent")]
33    Indicator(Indicator<'src>),
34    #[derivative(Debug = "transparent")]
35    Alias(Alias<'src>),
36}
37
38#[derive(Derivative, FromPest, Clone, PartialEq)]
39#[derivative(Debug)]
40#[pest_ast(rule(Rule::minimum))]
41pub struct Minimum {
42    #[pest_ast(inner(with(parse_u64)))]
43    pub level: u64,
44}
45
46#[derive(Derivative, FromPest, Clone, PartialEq)]
47#[derivative(Debug)]
48#[pest_ast(rule(Rule::maximum))]
49pub struct Maximum {
50    #[pest_ast(inner(with(parse_u64)))]
51    pub level: u64,
52}
53
54#[derive(Derivative, FromPest, Clone, PartialEq)]
55#[derivative(Debug)]
56#[pest_ast(rule(Rule::symbol_mapping))]
57pub struct SymbolMapping<'src> {
58    symbol: Symbol<'src>,
59    #[pest_ast(inner(with(parse_u64)))]
60    pub key_code: u64,
61}
62
63#[derive(Derivative, FromPest, Clone, PartialEq)]
64#[derivative(Debug)]
65#[pest_ast(rule(Rule::alternate))]
66pub struct Alternate<'src> {
67    symbol: Symbol<'src>,
68    #[pest_ast(inner(with(parse_u64)))]
69    pub key_code: u64,
70}
71
72#[derive(Derivative, FromPest, Clone, PartialEq)]
73#[derivative(Debug)]
74#[pest_ast(rule(Rule::indicator))]
75pub struct Indicator<'src> {
76    pub prefix: Option<IndicatorPrefix<'src>>,
77    #[pest_ast(inner(with(parse_u64)))]
78    pub id: u64,
79    pub name: StringContent<'src>,
80}
81
82#[derive(Derivative, FromPest, Clone, PartialEq)]
83#[derivative(Debug)]
84#[pest_ast(rule(Rule::indicator_prefix))]
85pub struct IndicatorPrefix<'src> {
86    #[pest_ast(outer(with(span_into_str)))]
87    pub content: &'src str,
88}
89
90#[derive(Derivative, FromPest, Clone, PartialEq)]
91#[derivative(Debug)]
92#[pest_ast(rule(Rule::alias))]
93pub struct Alias<'src> {
94    new: Symbol<'src>,
95    original: Symbol<'src>,
96}