sxd_xpath_visitor/
token.rs1use std::string;
2
3use crate::node_test;
4use crate::OwnedPrefixedName;
5
6#[derive(Debug, Copy, Clone, PartialEq)]
7pub enum AxisName {
8 Ancestor,
9 AncestorOrSelf,
10 Attribute,
11 Child,
12 Descendant,
13 DescendantOrSelf,
14 Following,
15 FollowingSibling,
16 Namespace,
17 Parent,
18 Preceding,
19 PrecedingSibling,
20 SelfAxis,
21}
22
23#[derive(Debug, Clone, PartialEq)]
24pub enum NodeTestName {
25 Comment,
26 Text,
27 ProcessingInstruction(Option<string::String>),
28 Node,
29}
30
31#[derive(Debug, Clone, PartialEq)]
32pub enum Token {
33 And,
34 AtSign,
35 Comma,
36 CurrentNode,
37 Divide,
38 DoubleSlash,
39 Equal,
40 GreaterThan,
41 GreaterThanOrEqual,
42 LeftBracket,
43 LeftParen,
44 LessThan,
45 LessThanOrEqual,
46 Literal(string::String),
47 MinusSign,
48 Multiply,
49 NotEqual,
50 Number(f64),
51 Or,
52 ParentNode,
53 Pipe,
54 PlusSign,
55 Remainder,
56 RightBracket,
57 RightParen,
58 Slash,
59
60 Axis(AxisName),
62 Function(OwnedPrefixedName),
63 NameTest(node_test::NameTest),
64 NodeTest(NodeTestName),
65 Variable(OwnedPrefixedName),
66}
67
68impl Token {
69 pub fn precedes_node_test(&self) -> bool {
70 match *self {
71 Token::AtSign | Token::Axis(..) => true,
72 _ => false,
73 }
74 }
75
76 pub fn precedes_expression(&self) -> bool {
77 match *self {
78 Token::LeftParen | Token::LeftBracket => true,
79 _ => false,
80 }
81 }
82
83 pub fn is_operator(&self) -> bool {
84 match *self {
85 Token::Slash
86 | Token::DoubleSlash
87 | Token::PlusSign
88 | Token::MinusSign
89 | Token::Pipe
90 | Token::Equal
91 | Token::NotEqual
92 | Token::LessThan
93 | Token::LessThanOrEqual
94 | Token::GreaterThan
95 | Token::GreaterThanOrEqual
96 | Token::And
97 | Token::Or
98 | Token::Remainder
99 | Token::Divide
100 | Token::Multiply => true,
101 _ => false,
102 }
103 }
104}