precis_tools/generators/
exceptions.rs

1use crate::error::Error;
2use crate::generators::CodeGen;
3use std::fs::File;
4use std::io::Write;
5
6/// Generates the [Exceptions](https://datatracker.ietf.org/doc/html/rfc8264#section-9.6)
7/// table required by the PRECIS framework.
8pub struct ExceptionsGen {}
9
10impl ExceptionsGen {
11    /// Creates a new table generator for code points in the Exceptions group
12    pub fn new() -> Self {
13        Self {}
14    }
15}
16
17impl Default for ExceptionsGen {
18    fn default() -> Self {
19        Self::new()
20    }
21}
22
23impl CodeGen for ExceptionsGen {
24    fn generate_code(&mut self, file: &mut File) -> Result<(), Error> {
25        writeln!(
26            file,
27            "static EXCEPTIONS: [(Codepoints, DerivedPropertyValue); 41] = [",
28        )?;
29        writeln!(
30            file,
31            "\t(Codepoints::Single(0x00B7), DerivedPropertyValue::ContextO),"
32        )?;
33
34        writeln!(
35            file,
36            "\t(Codepoints::Single(0x00DF), DerivedPropertyValue::PValid),"
37        )?;
38        writeln!(
39            file,
40            "\t(Codepoints::Single(0x0375), DerivedPropertyValue::ContextO),"
41        )?;
42        writeln!(
43            file,
44            "\t(Codepoints::Single(0x03C2), DerivedPropertyValue::PValid),"
45        )?;
46        writeln!(
47            file,
48            "\t(Codepoints::Single(0x05F3), DerivedPropertyValue::ContextO),"
49        )?;
50        writeln!(
51            file,
52            "\t(Codepoints::Single(0x05F4), DerivedPropertyValue::ContextO),"
53        )?;
54        writeln!(
55            file,
56            "\t(Codepoints::Single(0x0640), DerivedPropertyValue::Disallowed),"
57        )?;
58        writeln!(
59            file,
60            "\t(Codepoints::Single(0x0660), DerivedPropertyValue::ContextO),"
61        )?;
62        writeln!(
63            file,
64            "\t(Codepoints::Single(0x0661), DerivedPropertyValue::ContextO),"
65        )?;
66        writeln!(
67            file,
68            "\t(Codepoints::Single(0x0662), DerivedPropertyValue::ContextO),"
69        )?;
70        writeln!(
71            file,
72            "\t(Codepoints::Single(0x0663), DerivedPropertyValue::ContextO),"
73        )?;
74        writeln!(
75            file,
76            "\t(Codepoints::Single(0x0664), DerivedPropertyValue::ContextO),"
77        )?;
78        writeln!(
79            file,
80            "\t(Codepoints::Single(0x0665), DerivedPropertyValue::ContextO),"
81        )?;
82        writeln!(
83            file,
84            "\t(Codepoints::Single(0x0666), DerivedPropertyValue::ContextO),"
85        )?;
86        writeln!(
87            file,
88            "\t(Codepoints::Single(0x0667), DerivedPropertyValue::ContextO),"
89        )?;
90        writeln!(
91            file,
92            "\t(Codepoints::Single(0x0668), DerivedPropertyValue::ContextO),"
93        )?;
94        writeln!(
95            file,
96            "\t(Codepoints::Single(0x0669), DerivedPropertyValue::ContextO),"
97        )?;
98        writeln!(
99            file,
100            "\t(Codepoints::Single(0x06F0), DerivedPropertyValue::ContextO),"
101        )?;
102        writeln!(
103            file,
104            "\t(Codepoints::Single(0x06F1), DerivedPropertyValue::ContextO),"
105        )?;
106        writeln!(
107            file,
108            "\t(Codepoints::Single(0x06F2), DerivedPropertyValue::ContextO),"
109        )?;
110        writeln!(
111            file,
112            "\t(Codepoints::Single(0x06F3), DerivedPropertyValue::ContextO),"
113        )?;
114        writeln!(
115            file,
116            "\t(Codepoints::Single(0x06F4), DerivedPropertyValue::ContextO),"
117        )?;
118        writeln!(
119            file,
120            "\t(Codepoints::Single(0x06F5), DerivedPropertyValue::ContextO),"
121        )?;
122        writeln!(
123            file,
124            "\t(Codepoints::Single(0x06F6), DerivedPropertyValue::ContextO),"
125        )?;
126        writeln!(
127            file,
128            "\t(Codepoints::Single(0x06F7), DerivedPropertyValue::ContextO),"
129        )?;
130        writeln!(
131            file,
132            "\t(Codepoints::Single(0x06F8), DerivedPropertyValue::ContextO),"
133        )?;
134        writeln!(
135            file,
136            "\t(Codepoints::Single(0x06F9), DerivedPropertyValue::ContextO),"
137        )?;
138        writeln!(
139            file,
140            "\t(Codepoints::Single(0x06FD), DerivedPropertyValue::PValid),"
141        )?;
142        writeln!(
143            file,
144            "\t(Codepoints::Single(0x06FE), DerivedPropertyValue::PValid),"
145        )?;
146        writeln!(
147            file,
148            "\t(Codepoints::Single(0x07FA), DerivedPropertyValue::Disallowed),"
149        )?;
150        writeln!(
151            file,
152            "\t(Codepoints::Single(0x0F0B), DerivedPropertyValue::PValid),"
153        )?;
154        writeln!(
155            file,
156            "\t(Codepoints::Single(0x3007), DerivedPropertyValue::PValid),"
157        )?;
158        writeln!(
159            file,
160            "\t(Codepoints::Single(0x302E), DerivedPropertyValue::Disallowed),"
161        )?;
162        writeln!(
163            file,
164            "\t(Codepoints::Single(0x302F), DerivedPropertyValue::Disallowed),"
165        )?;
166        writeln!(
167            file,
168            "\t(Codepoints::Single(0x3031), DerivedPropertyValue::Disallowed),"
169        )?;
170        writeln!(
171            file,
172            "\t(Codepoints::Single(0x3032), DerivedPropertyValue::Disallowed),"
173        )?;
174        writeln!(
175            file,
176            "\t(Codepoints::Single(0x3033), DerivedPropertyValue::Disallowed),"
177        )?;
178        writeln!(
179            file,
180            "\t(Codepoints::Single(0x3034), DerivedPropertyValue::Disallowed),"
181        )?;
182        writeln!(
183            file,
184            "\t(Codepoints::Single(0x3035), DerivedPropertyValue::Disallowed),"
185        )?;
186        writeln!(
187            file,
188            "\t(Codepoints::Single(0x303B), DerivedPropertyValue::Disallowed),"
189        )?;
190        writeln!(
191            file,
192            "\t(Codepoints::Single(0x30FB), DerivedPropertyValue::ContextO),"
193        )?;
194
195        writeln!(file, "];")?;
196        Ok(writeln!(file)?)
197    }
198}