novel_cli/utils/
unicode.rs

1pub static CONVERT_MAP: phf::Map<char, char> = phf::phf_map! {
2    '"' => '"',
3    '#' => '#',
4    '$' => '$',
5    '%' => '%',
6    '&' => '&',
7    ''' => '\'',
8    '*' => '*',
9    '+' => '+',
10    '.' => '.',
11    '/' => '/',
12    '0' => '0',
13    '1' => '1',
14    '2' => '2',
15    '3' => '3',
16    '4' => '4',
17    '5' => '5',
18    '6' => '6',
19    '7' => '7',
20    '8' => '8',
21    '9' => '9',
22    '<' => '<',
23    '=' => '=',
24    '>' => '>',
25    '@' => '@',
26    'A' => 'A',
27    'B' => 'B',
28    'C' => 'C',
29    'D' => 'D',
30    'E' => 'E',
31    'F' => 'F',
32    'G' => 'G',
33    'H' => 'H',
34    'I' => 'I',
35    'J' => 'J',
36    'K' => 'K',
37    'L' => 'L',
38    'M' => 'M',
39    'N' => 'N',
40    'O' => 'O',
41    'P' => 'P',
42    'Q' => 'Q',
43    'R' => 'R',
44    'S' => 'S',
45    'T' => 'T',
46    'U' => 'U',
47    'V' => 'V',
48    'W' => 'W',
49    'X' => 'X',
50    'Y' => 'Y',
51    'Z' => 'Z',
52    '\' => '\\',
53    '^' => '^',
54    '`' => '`',
55    'a' => 'a',
56    'b' => 'b',
57    'c' => 'c',
58    'd' => 'd',
59    'e' => 'e',
60    'f' => 'f',
61    'g' => 'g',
62    'h' => 'h',
63    'i' => 'i',
64    'j' => 'j',
65    'k' => 'k',
66    'l' => 'l',
67    'm' => 'm',
68    'n' => 'n',
69    'o' => 'o',
70    'p' => 'p',
71    'q' => 'q',
72    'r' => 'r',
73    's' => 's',
74    't' => 't',
75    'u' => 'u',
76    'v' => 'v',
77    'w' => 'w',
78    'x' => 'x',
79    'y' => 'y',
80    'z' => 'z',
81    '{' => '{',
82    '|' => '|',
83    '}' => '}',
84    '。' => '。',
85    '「' => '「',
86    '」' => '」',
87    '、' => '、',
88    '・' => '·',
89    '•' => '·',
90    '─' => '—',
91    '―' => '—',
92    '∶' => ':',
93    '‧' => '·',
94    '・' => '·',
95    '﹑' => '、',
96    '〜' => '~',
97    '︰' => ':',
98    '?' => '?',
99    '!' => '!',
100    ',' => ',',
101    ';' => ';',
102    '(' => '(',
103    ')' => ')',
104};
105
106// https://zh.wiktionary.org/wiki/
107pub static CONVERT_T2S_MAP: phf::Map<char, char> = phf::phf_map! {
108    '妳' => '你',
109    '幺' => '么',
110    '姊' => '姐',
111    '擡' => '抬',
112    '牠' => '它',
113    '緖' => '绪',
114    '揹' => '背',
115    '唿' => '呼',
116    '疎' => '疏',
117    '勐' => '猛',
118    '飮' => '饮',
119};
120
121// https://zh.wikipedia.org/wiki/%E6%A0%87%E7%82%B9%E7%AC%A6%E5%8F%B7
122static CHINESE_PUNCTUATION: phf::Set<char> = phf::phf_set! {
123    '。',
124    '?',
125    '!',
126    ',',
127    '、',
128    ';',
129    ':',
130    '“',
131    '”',
132    '『',
133    '』',
134    '‘',
135    '’',
136    '「',
137    '」',
138    '(',
139    ')',
140    '[',
141    ']',
142    '〔',
143    '〕',
144    '【',
145    '】',
146    // ——
147    '—',
148    // ……
149    '…',
150    '-',
151    '-',
152    '~',
153    '·',
154    '《',
155    '》',
156    '〈',
157    '〉',
158    // ﹏﹏
159    '﹏',
160    // __
161    '_',
162    '.'
163};
164
165#[must_use]
166#[inline]
167pub fn is_chinese_punctuation(c: char) -> bool {
168    CHINESE_PUNCTUATION.contains(&c)
169}
170
171// https://zh.wikipedia.org/wiki/%E6%A0%87%E7%82%B9%E7%AC%A6%E5%8F%B7
172static ENGLISH_PUNCTUATION: phf::Set<char> = phf::phf_set! {
173    '.',
174    '?',
175    '!',
176    ',',
177    ':',
178    '…',
179    ';',
180    '-',
181    '–',
182    '—',
183    '(',
184    ')',
185    '[',
186    ']',
187    '{',
188    '}',
189    '"',
190    '\'',
191    '/',
192};
193
194#[must_use]
195#[inline]
196pub fn is_english_punctuation(c: char) -> bool {
197    ENGLISH_PUNCTUATION.contains(&c)
198}
199
200#[must_use]
201#[inline]
202pub fn is_punctuation(c: char) -> bool {
203    is_chinese_punctuation(c) || is_english_punctuation(c)
204}