1const fn create_windows_1252_table() -> [char; 256] {
2 let mut table = [0 as char; 256];
3 let mut i = 0usize;
4 while i < 256 {
5 let c = match i {
6 128 => '\u{20ac}',
7 129 => '\u{81}',
8 130 => '\u{201a}',
9 131 => '\u{0192}',
10 132 => '\u{201e}',
11 133 => '\u{2026}',
12 134 => '\u{2020}',
13 135 => '\u{2021}',
14 136 => '\u{02c6}',
15 137 => '\u{2030}',
16 138 => '\u{0160}',
17 139 => '\u{2039}',
18 140 => '\u{0152}',
19 141 => '\u{8d}',
20 142 => '\u{017d}',
21 143 => '\u{8f}',
22 144 => '\u{90}',
23 145 => '\u{2018}',
24 146 => '\u{2019}',
25 147 => '\u{201c}',
26 148 => '\u{201d}',
27 149 => '\u{2022}',
28 150 => '\u{2013}',
29 151 => '\u{2014}',
30 152 => '\u{02dc}',
31 153 => '\u{2122}',
32 154 => '\u{0161}',
33 155 => '\u{203a}',
34 156 => '\u{0153}',
35 157 => '\u{9d}',
36 158 => '\u{017e}',
37 159 => '\u{0178}',
38 i => i as u8 as char,
39 };
40 table[i] = c;
41 i += 1;
42 }
43 table
44}
45
46pub(crate) static WINDOWS_1252: [char; 256] = create_windows_1252_table();
47
48#[inline]
49pub(crate) fn is_boundary(b: u8) -> bool {
50 boundary(b) != 0
51}
52
53#[inline]
54pub(crate) fn boundary(b: u8) -> u8 {
55 CHARACTER_CLASS[usize::from(b)]
56}
57
58const fn create_character_class_table() -> [u8; 256] {
59 let mut table = [0u8; 256];
60 table[b'\t' as usize] = 1;
61 table[b'\n' as usize] = 1;
62 table[b'\x0b' as usize] = 1; table[b'\x0c' as usize] = 1; table[b'\r' as usize] = 1;
65 table[b' ' as usize] = 1;
66 table[b'!' as usize] = 1;
67 table[b'#' as usize] = 1;
68 table[b';' as usize] = 1;
69 table[b'<' as usize] = 1;
70 table[b'=' as usize] = 1;
71 table[b'>' as usize] = 1;
72 table[b'[' as usize] = 1;
73 table[b']' as usize] = 1;
74 table[b'}' as usize] = 1;
75 table[b'{' as usize] = 1;
76 table
77}
78
79pub(crate) static CHARACTER_CLASS: [u8; 256] = create_character_class_table();