unicode_types/generated/
combining_half_marks.rs

1
2/// An enum to represent all characters in the CombiningHalfMarks block.
3#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
4pub enum CombiningHalfMarks {
5    /// \u{fe20}: '︠'
6    CombiningLigatureLeftHalf,
7    /// \u{fe21}: '︡'
8    CombiningLigatureRightHalf,
9    /// \u{fe22}: '︢'
10    CombiningDoubleTildeLeftHalf,
11    /// \u{fe23}: '︣'
12    CombiningDoubleTildeRightHalf,
13    /// \u{fe24}: '︤'
14    CombiningMacronLeftHalf,
15    /// \u{fe25}: '︥'
16    CombiningMacronRightHalf,
17    /// \u{fe26}: '︦'
18    CombiningConjoiningMacron,
19    /// \u{fe27}: '︧'
20    CombiningLigatureLeftHalfBelow,
21    /// \u{fe28}: '︨'
22    CombiningLigatureRightHalfBelow,
23    /// \u{fe29}: '︩'
24    CombiningTildeLeftHalfBelow,
25    /// \u{fe2a}: '︪'
26    CombiningTildeRightHalfBelow,
27    /// \u{fe2b}: '︫'
28    CombiningMacronLeftHalfBelow,
29    /// \u{fe2c}: '︬'
30    CombiningMacronRightHalfBelow,
31    /// \u{fe2d}: '︭'
32    CombiningConjoiningMacronBelow,
33    /// \u{fe2e}: '︮'
34    CombiningCyrillicTitloLeftHalf,
35}
36
37impl Into<char> for CombiningHalfMarks {
38    fn into(self) -> char {
39        match self {
40            CombiningHalfMarks::CombiningLigatureLeftHalf => '︠',
41            CombiningHalfMarks::CombiningLigatureRightHalf => '︡',
42            CombiningHalfMarks::CombiningDoubleTildeLeftHalf => '︢',
43            CombiningHalfMarks::CombiningDoubleTildeRightHalf => '︣',
44            CombiningHalfMarks::CombiningMacronLeftHalf => '︤',
45            CombiningHalfMarks::CombiningMacronRightHalf => '︥',
46            CombiningHalfMarks::CombiningConjoiningMacron => '︦',
47            CombiningHalfMarks::CombiningLigatureLeftHalfBelow => '︧',
48            CombiningHalfMarks::CombiningLigatureRightHalfBelow => '︨',
49            CombiningHalfMarks::CombiningTildeLeftHalfBelow => '︩',
50            CombiningHalfMarks::CombiningTildeRightHalfBelow => '︪',
51            CombiningHalfMarks::CombiningMacronLeftHalfBelow => '︫',
52            CombiningHalfMarks::CombiningMacronRightHalfBelow => '︬',
53            CombiningHalfMarks::CombiningConjoiningMacronBelow => '︭',
54            CombiningHalfMarks::CombiningCyrillicTitloLeftHalf => '︮',
55        }
56    }
57}
58
59impl std::convert::TryFrom<char> for CombiningHalfMarks {
60    type Error = ();
61    fn try_from(c: char) -> Result<Self, Self::Error> {
62        match c {
63            '︠' => Ok(CombiningHalfMarks::CombiningLigatureLeftHalf),
64            '︡' => Ok(CombiningHalfMarks::CombiningLigatureRightHalf),
65            '︢' => Ok(CombiningHalfMarks::CombiningDoubleTildeLeftHalf),
66            '︣' => Ok(CombiningHalfMarks::CombiningDoubleTildeRightHalf),
67            '︤' => Ok(CombiningHalfMarks::CombiningMacronLeftHalf),
68            '︥' => Ok(CombiningHalfMarks::CombiningMacronRightHalf),
69            '︦' => Ok(CombiningHalfMarks::CombiningConjoiningMacron),
70            '︧' => Ok(CombiningHalfMarks::CombiningLigatureLeftHalfBelow),
71            '︨' => Ok(CombiningHalfMarks::CombiningLigatureRightHalfBelow),
72            '︩' => Ok(CombiningHalfMarks::CombiningTildeLeftHalfBelow),
73            '︪' => Ok(CombiningHalfMarks::CombiningTildeRightHalfBelow),
74            '︫' => Ok(CombiningHalfMarks::CombiningMacronLeftHalfBelow),
75            '︬' => Ok(CombiningHalfMarks::CombiningMacronRightHalfBelow),
76            '︭' => Ok(CombiningHalfMarks::CombiningConjoiningMacronBelow),
77            '︮' => Ok(CombiningHalfMarks::CombiningCyrillicTitloLeftHalf),
78            _ => Err(()),
79        }
80    }
81}
82
83impl Into<u32> for CombiningHalfMarks {
84    fn into(self) -> u32 {
85        let c: char = self.into();
86        let hex = c
87            .escape_unicode()
88            .to_string()
89            .replace("\\u{", "")
90            .replace("}", "");
91        u32::from_str_radix(&hex, 16).unwrap()
92    }
93}
94
95impl std::convert::TryFrom<u32> for CombiningHalfMarks {
96    type Error = ();
97    fn try_from(u: u32) -> Result<Self, Self::Error> {
98        if let Ok(c) = char::try_from(u) {
99            Self::try_from(c)
100        } else {
101            Err(())
102        }
103    }
104}
105
106impl Iterator for CombiningHalfMarks {
107    type Item = Self;
108    fn next(&mut self) -> Option<Self> {
109        let index: u32 = (*self).into();
110        use std::convert::TryFrom;
111        Self::try_from(index + 1).ok()
112    }
113}
114
115impl CombiningHalfMarks {
116    /// The character with the lowest index in this unicode block
117    pub fn new() -> Self {
118        CombiningHalfMarks::CombiningLigatureLeftHalf
119    }
120
121    /// The character's name, in sentence case
122    pub fn name(&self) -> String {
123        let s = std::format!("CombiningHalfMarks{:#?}", self);
124        string_morph::to_sentence_case(&s)
125    }
126}