xkb_parser/ast/
xkb_keycodes.rs1use 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}