xmlparser/
xmlchar.rs
1pub trait XmlCharExt {
3 fn is_xml_name_start(&self) -> bool;
6
7 fn is_xml_name(&self) -> bool;
10
11 fn is_xml_char(&self) -> bool;
14}
15
16impl XmlCharExt for char {
17 #[inline]
18 fn is_xml_name_start(&self) -> bool {
19 if *self as u32 <= 128 {
21 return match *self as u8 {
22 b'A'...b'Z'
23 | b'a'...b'z'
24 | b':'
25 | b'_' => true,
26 _ => false,
27 };
28 }
29
30 match *self as u32 {
31 0x0000C0...0x0000D6
32 | 0x0000D8...0x0000F6
33 | 0x0000F8...0x0002FF
34 | 0x000370...0x00037D
35 | 0x00037F...0x001FFF
36 | 0x00200C...0x00200D
37 | 0x002070...0x00218F
38 | 0x002C00...0x002FEF
39 | 0x003001...0x00D7FF
40 | 0x00F900...0x00FDCF
41 | 0x00FDF0...0x00FFFD
42 | 0x010000...0x0EFFFF => true,
43 _ => false,
44 }
45 }
46
47 #[inline]
48 fn is_xml_name(&self) -> bool {
49 if *self as u32 <= 128 {
51 return (*self as u8).is_xml_name();
52 }
53
54 match *self as u32 {
55 0x0000B7
56 | 0x0000C0...0x0000D6
57 | 0x0000D8...0x0000F6
58 | 0x0000F8...0x0002FF
59 | 0x000300...0x00036F
60 | 0x000370...0x00037D
61 | 0x00037F...0x001FFF
62 | 0x00200C...0x00200D
63 | 0x00203F...0x002040
64 | 0x002070...0x00218F
65 | 0x002C00...0x002FEF
66 | 0x003001...0x00D7FF
67 | 0x00F900...0x00FDCF
68 | 0x00FDF0...0x00FFFD
69 | 0x010000...0x0EFFFF => true,
70 _ => false,
71 }
72 }
73
74 #[inline]
75 fn is_xml_char(&self) -> bool {
76 match *self as u32 {
77 0x000009
78 | 0x00000A
79 | 0x00000D
80 | 0x000020...0x00D7FF
81 | 0x00E000...0x00FFFD
82 | 0x010000...0x10FFFF => true,
83 _ => false,
84 }
85 }
86}
87
88
89pub trait XmlByteExt {
91 fn is_xml_digit(&self) -> bool;
95
96 fn is_xml_hex_digit(&self) -> bool;
100
101 fn is_xml_space(&self) -> bool;
105
106 fn is_xml_letter(&self) -> bool;
110
111 fn is_xml_name(&self) -> bool;
114}
115
116impl XmlByteExt for u8 {
117 #[inline]
118 fn is_xml_digit(&self) -> bool {
119 matches!(*self, b'0'...b'9')
120 }
121
122 #[inline]
123 fn is_xml_hex_digit(&self) -> bool {
124 matches!(*self, b'0'...b'9' | b'A'...b'F' | b'a'...b'f')
125 }
126
127 #[inline]
128 fn is_xml_space(&self) -> bool {
129 matches!(*self, b' ' | b'\t' | b'\n' | b'\r')
130 }
131
132 #[inline]
133 fn is_xml_letter(&self) -> bool {
134 matches!(*self, b'A'...b'Z' | b'a'...b'z')
135 }
136
137 #[inline]
138 fn is_xml_name(&self) -> bool {
139 matches!(*self, b'A'...b'Z' | b'a'...b'z'| b'0'...b'9'| b':' | b'_' | b'-' | b'.')
140 }
141}