Skip to main content

mongol_norm/generated/
enums.rs

1// @generated by python/scripts/gen_rust_tables.py -- DO NOT EDIT.
2// Source: python/mongol_norm/data/MNG.json (sha256 5e99d2f2b0abe022)
3
4use std::fmt;
5use std::str::FromStr;
6
7use crate::Error;
8
9/// A written unit: an opaque glyph-form identifier produced by shaping (see `docs/data-format.md`). The structural tokens `Mvs`, `Nirugu` and `Zwj` are members too: they appear verbatim in [`Shaper::shape`](crate::Shaper::shape) output, exactly as the Python implementation emits them.
10#[non_exhaustive]
11#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
12#[rustfmt::skip]
13pub enum WrittenUnit {
14    /// Written unit `A`.
15    A,
16    /// Written unit `Aa`.
17    Aa,
18    /// Written unit `B`.
19    B,
20    /// Written unit `B2`.
21    B2,
22    /// Written unit `C`.
23    C,
24    /// Written unit `Ch`.
25    Ch,
26    /// Written unit `Cr`.
27    Cr,
28    /// Written unit `D`.
29    D,
30    /// Written unit `Dd`.
31    Dd,
32    /// Written unit `F`.
33    F,
34    /// Written unit `G`.
35    G,
36    /// Written unit `Gx`.
37    Gx,
38    /// Written unit `H`.
39    H,
40    /// Written unit `Hr`.
41    Hr,
42    /// Written unit `Hx`.
43    Hx,
44    /// Written unit `I`.
45    I,
46    /// Written unit `Ix`.
47    Ix,
48    /// Written unit `J`.
49    J,
50    /// Written unit `K`.
51    K,
52    /// Written unit `K2`.
53    K2,
54    /// Written unit `L`.
55    L,
56    /// Written unit `M`.
57    M,
58    /// Structural token: Mongolian vowel separator U+180E (NNBSP U+202F is folded into it).
59    Mvs,
60    /// Written unit `N`.
61    N,
62    /// Structural token: nirugu U+180A, the visible stem extender.
63    Nirugu,
64    /// Written unit `O`.
65    O,
66    /// Written unit `P`.
67    P,
68    /// Written unit `R`.
69    R,
70    /// Written unit `Rh`.
71    Rh,
72    /// Written unit `S`.
73    S,
74    /// Written unit `Sh`.
75    Sh,
76    /// Written unit `Sz`.
77    Sz,
78    /// Written unit `T`.
79    T,
80    /// Written unit `U`.
81    U,
82    /// Written unit `Ue`.
83    Ue,
84    /// Written unit `Ux`.
85    Ux,
86    /// Written unit `W`.
87    W,
88    /// Written unit `Y`.
89    Y,
90    /// Written unit `Z`.
91    Z,
92    /// Written unit `Zr`.
93    Zr,
94    /// Structural token: zero width joiner U+200D.
95    Zwj,
96}
97
98#[rustfmt::skip]
99impl WrittenUnit {
100    /// Every variant, in declaration (sorted contract-name) order.
101    pub const ALL: [WrittenUnit; 41] = [
102        WrittenUnit::A,
103        WrittenUnit::Aa,
104        WrittenUnit::B,
105        WrittenUnit::B2,
106        WrittenUnit::C,
107        WrittenUnit::Ch,
108        WrittenUnit::Cr,
109        WrittenUnit::D,
110        WrittenUnit::Dd,
111        WrittenUnit::F,
112        WrittenUnit::G,
113        WrittenUnit::Gx,
114        WrittenUnit::H,
115        WrittenUnit::Hr,
116        WrittenUnit::Hx,
117        WrittenUnit::I,
118        WrittenUnit::Ix,
119        WrittenUnit::J,
120        WrittenUnit::K,
121        WrittenUnit::K2,
122        WrittenUnit::L,
123        WrittenUnit::M,
124        WrittenUnit::Mvs,
125        WrittenUnit::N,
126        WrittenUnit::Nirugu,
127        WrittenUnit::O,
128        WrittenUnit::P,
129        WrittenUnit::R,
130        WrittenUnit::Rh,
131        WrittenUnit::S,
132        WrittenUnit::Sh,
133        WrittenUnit::Sz,
134        WrittenUnit::T,
135        WrittenUnit::U,
136        WrittenUnit::Ue,
137        WrittenUnit::Ux,
138        WrittenUnit::W,
139        WrittenUnit::Y,
140        WrittenUnit::Z,
141        WrittenUnit::Zr,
142        WrittenUnit::Zwj,
143    ];
144
145    /// The contract name used by the Python API, the CLI and the data files.
146    pub const fn as_str(self) -> &'static str {
147        match self {
148            WrittenUnit::A => "A",
149            WrittenUnit::Aa => "Aa",
150            WrittenUnit::B => "B",
151            WrittenUnit::B2 => "B2",
152            WrittenUnit::C => "C",
153            WrittenUnit::Ch => "Ch",
154            WrittenUnit::Cr => "Cr",
155            WrittenUnit::D => "D",
156            WrittenUnit::Dd => "Dd",
157            WrittenUnit::F => "F",
158            WrittenUnit::G => "G",
159            WrittenUnit::Gx => "Gx",
160            WrittenUnit::H => "H",
161            WrittenUnit::Hr => "Hr",
162            WrittenUnit::Hx => "Hx",
163            WrittenUnit::I => "I",
164            WrittenUnit::Ix => "Ix",
165            WrittenUnit::J => "J",
166            WrittenUnit::K => "K",
167            WrittenUnit::K2 => "K2",
168            WrittenUnit::L => "L",
169            WrittenUnit::M => "M",
170            WrittenUnit::Mvs => "Mvs",
171            WrittenUnit::N => "N",
172            WrittenUnit::Nirugu => "Nirugu",
173            WrittenUnit::O => "O",
174            WrittenUnit::P => "P",
175            WrittenUnit::R => "R",
176            WrittenUnit::Rh => "Rh",
177            WrittenUnit::S => "S",
178            WrittenUnit::Sh => "Sh",
179            WrittenUnit::Sz => "Sz",
180            WrittenUnit::T => "T",
181            WrittenUnit::U => "U",
182            WrittenUnit::Ue => "Ue",
183            WrittenUnit::Ux => "Ux",
184            WrittenUnit::W => "W",
185            WrittenUnit::Y => "Y",
186            WrittenUnit::Z => "Z",
187            WrittenUnit::Zr => "Zr",
188            WrittenUnit::Zwj => "Zwj",
189        }
190    }
191
192    /// `true` for the structural tokens `Mvs`, `Nirugu` and `Zwj`.
193    pub const fn is_structural(self) -> bool {
194        matches!(self, WrittenUnit::Mvs | WrittenUnit::Nirugu | WrittenUnit::Zwj)
195    }
196}
197
198#[rustfmt::skip]
199impl FromStr for WrittenUnit {
200    type Err = Error;
201
202    fn from_str(name: &str) -> Result<WrittenUnit, Error> {
203        match name {
204            "A" => Ok(WrittenUnit::A),
205            "Aa" => Ok(WrittenUnit::Aa),
206            "B" => Ok(WrittenUnit::B),
207            "B2" => Ok(WrittenUnit::B2),
208            "C" => Ok(WrittenUnit::C),
209            "Ch" => Ok(WrittenUnit::Ch),
210            "Cr" => Ok(WrittenUnit::Cr),
211            "D" => Ok(WrittenUnit::D),
212            "Dd" => Ok(WrittenUnit::Dd),
213            "F" => Ok(WrittenUnit::F),
214            "G" => Ok(WrittenUnit::G),
215            "Gx" => Ok(WrittenUnit::Gx),
216            "H" => Ok(WrittenUnit::H),
217            "Hr" => Ok(WrittenUnit::Hr),
218            "Hx" => Ok(WrittenUnit::Hx),
219            "I" => Ok(WrittenUnit::I),
220            "Ix" => Ok(WrittenUnit::Ix),
221            "J" => Ok(WrittenUnit::J),
222            "K" => Ok(WrittenUnit::K),
223            "K2" => Ok(WrittenUnit::K2),
224            "L" => Ok(WrittenUnit::L),
225            "M" => Ok(WrittenUnit::M),
226            "Mvs" => Ok(WrittenUnit::Mvs),
227            "N" => Ok(WrittenUnit::N),
228            "Nirugu" => Ok(WrittenUnit::Nirugu),
229            "O" => Ok(WrittenUnit::O),
230            "P" => Ok(WrittenUnit::P),
231            "R" => Ok(WrittenUnit::R),
232            "Rh" => Ok(WrittenUnit::Rh),
233            "S" => Ok(WrittenUnit::S),
234            "Sh" => Ok(WrittenUnit::Sh),
235            "Sz" => Ok(WrittenUnit::Sz),
236            "T" => Ok(WrittenUnit::T),
237            "U" => Ok(WrittenUnit::U),
238            "Ue" => Ok(WrittenUnit::Ue),
239            "Ux" => Ok(WrittenUnit::Ux),
240            "W" => Ok(WrittenUnit::W),
241            "Y" => Ok(WrittenUnit::Y),
242            "Z" => Ok(WrittenUnit::Z),
243            "Zr" => Ok(WrittenUnit::Zr),
244            "Zwj" => Ok(WrittenUnit::Zwj),
245            _ => Err(Error::UnknownName { kind: "written unit", name: name.to_owned() }),
246        }
247    }
248}
249
250#[rustfmt::skip]
251impl fmt::Display for WrittenUnit {
252    fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
253        formatter.write_str(self.as_str())
254    }
255}
256
257/// A shaping condition assigned by the rule pipeline; `as_str()` is the data-file name (`chachlag_onset`, ...).
258#[non_exhaustive]
259#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
260#[rustfmt::skip]
261pub enum Condition {
262    /// Shaping condition `chachlag`.
263    Chachlag,
264    /// Shaping condition `chachlag_onset`.
265    ChachlagOnset,
266    /// Shaping condition `chachlag_onset_gb`.
267    ChachlagOnsetGb,
268    /// Shaping condition `devsger`.
269    Devsger,
270    /// Shaping condition `dotless`.
271    Dotless,
272    /// Shaping condition `feminine`.
273    Feminine,
274    /// Shaping condition `marked`.
275    Marked,
276    /// Shaping condition `masculine_devsger`.
277    MasculineDevsger,
278    /// Shaping condition `masculine_onset`.
279    MasculineOnset,
280    /// Shaping condition `onset`.
281    Onset,
282    /// Shaping condition `particle`.
283    Particle,
284    /// Shaping condition `post_bowed`.
285    PostBowed,
286    /// Shaping condition `vowel_devsger`.
287    VowelDevsger,
288}
289
290#[rustfmt::skip]
291impl Condition {
292    /// Every variant, in declaration (sorted contract-name) order.
293    pub const ALL: [Condition; 13] = [
294        Condition::Chachlag,
295        Condition::ChachlagOnset,
296        Condition::ChachlagOnsetGb,
297        Condition::Devsger,
298        Condition::Dotless,
299        Condition::Feminine,
300        Condition::Marked,
301        Condition::MasculineDevsger,
302        Condition::MasculineOnset,
303        Condition::Onset,
304        Condition::Particle,
305        Condition::PostBowed,
306        Condition::VowelDevsger,
307    ];
308
309    /// The contract name used by the Python API, the CLI and the data files.
310    pub const fn as_str(self) -> &'static str {
311        match self {
312            Condition::Chachlag => "chachlag",
313            Condition::ChachlagOnset => "chachlag_onset",
314            Condition::ChachlagOnsetGb => "chachlag_onset_gb",
315            Condition::Devsger => "devsger",
316            Condition::Dotless => "dotless",
317            Condition::Feminine => "feminine",
318            Condition::Marked => "marked",
319            Condition::MasculineDevsger => "masculine_devsger",
320            Condition::MasculineOnset => "masculine_onset",
321            Condition::Onset => "onset",
322            Condition::Particle => "particle",
323            Condition::PostBowed => "post_bowed",
324            Condition::VowelDevsger => "vowel_devsger",
325        }
326    }
327}
328
329#[rustfmt::skip]
330impl FromStr for Condition {
331    type Err = Error;
332
333    fn from_str(name: &str) -> Result<Condition, Error> {
334        match name {
335            "chachlag" => Ok(Condition::Chachlag),
336            "chachlag_onset" => Ok(Condition::ChachlagOnset),
337            "chachlag_onset_gb" => Ok(Condition::ChachlagOnsetGb),
338            "devsger" => Ok(Condition::Devsger),
339            "dotless" => Ok(Condition::Dotless),
340            "feminine" => Ok(Condition::Feminine),
341            "marked" => Ok(Condition::Marked),
342            "masculine_devsger" => Ok(Condition::MasculineDevsger),
343            "masculine_onset" => Ok(Condition::MasculineOnset),
344            "onset" => Ok(Condition::Onset),
345            "particle" => Ok(Condition::Particle),
346            "post_bowed" => Ok(Condition::PostBowed),
347            "vowel_devsger" => Ok(Condition::VowelDevsger),
348            _ => Err(Error::UnknownName { kind: "condition", name: name.to_owned() }),
349        }
350    }
351}
352
353#[rustfmt::skip]
354impl fmt::Display for Condition {
355    fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
356        formatter.write_str(self.as_str())
357    }
358}
359
360/// A letter alias (phonemic short name, locale-relative); `as_str()` is the data-file name (`a`, `oe`, `k2`, ...).
361#[non_exhaustive]
362#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
363#[rustfmt::skip]
364pub enum Alias {
365    /// Letter alias `a`.
366    A,
367    /// Letter alias `b`.
368    B,
369    /// Letter alias `c`.
370    C,
371    /// Letter alias `ch`.
372    Ch,
373    /// Letter alias `cr`.
374    Cr,
375    /// Letter alias `d`.
376    D,
377    /// Letter alias `e`.
378    E,
379    /// Letter alias `ee`.
380    Ee,
381    /// Letter alias `f`.
382    F,
383    /// Letter alias `g`.
384    G,
385    /// Letter alias `h`.
386    H,
387    /// Letter alias `hh`.
388    Hh,
389    /// Letter alias `i`.
390    I,
391    /// Letter alias `j`.
392    J,
393    /// Letter alias `k`.
394    K,
395    /// Letter alias `k2`.
396    K2,
397    /// Letter alias `l`.
398    L,
399    /// Letter alias `lh`.
400    Lh,
401    /// Letter alias `m`.
402    M,
403    /// Letter alias `n`.
404    N,
405    /// Letter alias `ng`.
406    Ng,
407    /// Letter alias `o`.
408    O,
409    /// Letter alias `oe`.
410    Oe,
411    /// Letter alias `p`.
412    P,
413    /// Letter alias `r`.
414    R,
415    /// Letter alias `rh`.
416    Rh,
417    /// Letter alias `s`.
418    S,
419    /// Letter alias `sh`.
420    Sh,
421    /// Letter alias `t`.
422    T,
423    /// Letter alias `u`.
424    U,
425    /// Letter alias `ue`.
426    Ue,
427    /// Letter alias `w`.
428    W,
429    /// Letter alias `y`.
430    Y,
431    /// Letter alias `z`.
432    Z,
433    /// Letter alias `zr`.
434    Zr,
435}
436
437#[rustfmt::skip]
438impl Alias {
439    /// Every variant, in declaration (sorted contract-name) order.
440    pub const ALL: [Alias; 35] = [
441        Alias::A,
442        Alias::B,
443        Alias::C,
444        Alias::Ch,
445        Alias::Cr,
446        Alias::D,
447        Alias::E,
448        Alias::Ee,
449        Alias::F,
450        Alias::G,
451        Alias::H,
452        Alias::Hh,
453        Alias::I,
454        Alias::J,
455        Alias::K,
456        Alias::K2,
457        Alias::L,
458        Alias::Lh,
459        Alias::M,
460        Alias::N,
461        Alias::Ng,
462        Alias::O,
463        Alias::Oe,
464        Alias::P,
465        Alias::R,
466        Alias::Rh,
467        Alias::S,
468        Alias::Sh,
469        Alias::T,
470        Alias::U,
471        Alias::Ue,
472        Alias::W,
473        Alias::Y,
474        Alias::Z,
475        Alias::Zr,
476    ];
477
478    /// The contract name used by the Python API, the CLI and the data files.
479    pub const fn as_str(self) -> &'static str {
480        match self {
481            Alias::A => "a",
482            Alias::B => "b",
483            Alias::C => "c",
484            Alias::Ch => "ch",
485            Alias::Cr => "cr",
486            Alias::D => "d",
487            Alias::E => "e",
488            Alias::Ee => "ee",
489            Alias::F => "f",
490            Alias::G => "g",
491            Alias::H => "h",
492            Alias::Hh => "hh",
493            Alias::I => "i",
494            Alias::J => "j",
495            Alias::K => "k",
496            Alias::K2 => "k2",
497            Alias::L => "l",
498            Alias::Lh => "lh",
499            Alias::M => "m",
500            Alias::N => "n",
501            Alias::Ng => "ng",
502            Alias::O => "o",
503            Alias::Oe => "oe",
504            Alias::P => "p",
505            Alias::R => "r",
506            Alias::Rh => "rh",
507            Alias::S => "s",
508            Alias::Sh => "sh",
509            Alias::T => "t",
510            Alias::U => "u",
511            Alias::Ue => "ue",
512            Alias::W => "w",
513            Alias::Y => "y",
514            Alias::Z => "z",
515            Alias::Zr => "zr",
516        }
517    }
518}
519
520#[rustfmt::skip]
521impl FromStr for Alias {
522    type Err = Error;
523
524    fn from_str(name: &str) -> Result<Alias, Error> {
525        match name {
526            "a" => Ok(Alias::A),
527            "b" => Ok(Alias::B),
528            "c" => Ok(Alias::C),
529            "ch" => Ok(Alias::Ch),
530            "cr" => Ok(Alias::Cr),
531            "d" => Ok(Alias::D),
532            "e" => Ok(Alias::E),
533            "ee" => Ok(Alias::Ee),
534            "f" => Ok(Alias::F),
535            "g" => Ok(Alias::G),
536            "h" => Ok(Alias::H),
537            "hh" => Ok(Alias::Hh),
538            "i" => Ok(Alias::I),
539            "j" => Ok(Alias::J),
540            "k" => Ok(Alias::K),
541            "k2" => Ok(Alias::K2),
542            "l" => Ok(Alias::L),
543            "lh" => Ok(Alias::Lh),
544            "m" => Ok(Alias::M),
545            "n" => Ok(Alias::N),
546            "ng" => Ok(Alias::Ng),
547            "o" => Ok(Alias::O),
548            "oe" => Ok(Alias::Oe),
549            "p" => Ok(Alias::P),
550            "r" => Ok(Alias::R),
551            "rh" => Ok(Alias::Rh),
552            "s" => Ok(Alias::S),
553            "sh" => Ok(Alias::Sh),
554            "t" => Ok(Alias::T),
555            "u" => Ok(Alias::U),
556            "ue" => Ok(Alias::Ue),
557            "w" => Ok(Alias::W),
558            "y" => Ok(Alias::Y),
559            "z" => Ok(Alias::Z),
560            "zr" => Ok(Alias::Zr),
561            _ => Err(Error::UnknownName { kind: "alias", name: name.to_owned() }),
562        }
563    }
564}
565
566#[rustfmt::skip]
567impl fmt::Display for Alias {
568    fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
569        formatter.write_str(self.as_str())
570    }
571}