1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
mod constants {
pub const EGYPTIAN_HIEROGLYPH_VERTICAL_JOINER: char = '';
pub const EGYPTIAN_HIEROGLYPH_HORIZONTAL_JOINER: char = '';
pub const EGYPTIAN_HIEROGLYPH_INSERT_AT_TOP_START: char = '';
pub const EGYPTIAN_HIEROGLYPH_INSERT_AT_BOTTOM_START: char = '';
pub const EGYPTIAN_HIEROGLYPH_INSERT_AT_TOP_END: char = '';
pub const EGYPTIAN_HIEROGLYPH_INSERT_AT_BOTTOM_END: char = '';
pub const EGYPTIAN_HIEROGLYPH_OVERLAY_MIDDLE: char = '';
pub const EGYPTIAN_HIEROGLYPH_BEGIN_SEGMENT: char = '';
pub const EGYPTIAN_HIEROGLYPH_END_SEGMENT: char = '';
}
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum EgyptianHieroglyphFormatControls {
EgyptianHieroglyphVerticalJoiner,
EgyptianHieroglyphHorizontalJoiner,
EgyptianHieroglyphInsertAtTopStart,
EgyptianHieroglyphInsertAtBottomStart,
EgyptianHieroglyphInsertAtTopEnd,
EgyptianHieroglyphInsertAtBottomEnd,
EgyptianHieroglyphOverlayMiddle,
EgyptianHieroglyphBeginSegment,
EgyptianHieroglyphEndSegment,
}
impl Into<char> for EgyptianHieroglyphFormatControls {
fn into(self) -> char {
use constants::*;
match self {
EgyptianHieroglyphFormatControls::EgyptianHieroglyphVerticalJoiner => EGYPTIAN_HIEROGLYPH_VERTICAL_JOINER,
EgyptianHieroglyphFormatControls::EgyptianHieroglyphHorizontalJoiner => EGYPTIAN_HIEROGLYPH_HORIZONTAL_JOINER,
EgyptianHieroglyphFormatControls::EgyptianHieroglyphInsertAtTopStart => EGYPTIAN_HIEROGLYPH_INSERT_AT_TOP_START,
EgyptianHieroglyphFormatControls::EgyptianHieroglyphInsertAtBottomStart => EGYPTIAN_HIEROGLYPH_INSERT_AT_BOTTOM_START,
EgyptianHieroglyphFormatControls::EgyptianHieroglyphInsertAtTopEnd => EGYPTIAN_HIEROGLYPH_INSERT_AT_TOP_END,
EgyptianHieroglyphFormatControls::EgyptianHieroglyphInsertAtBottomEnd => EGYPTIAN_HIEROGLYPH_INSERT_AT_BOTTOM_END,
EgyptianHieroglyphFormatControls::EgyptianHieroglyphOverlayMiddle => EGYPTIAN_HIEROGLYPH_OVERLAY_MIDDLE,
EgyptianHieroglyphFormatControls::EgyptianHieroglyphBeginSegment => EGYPTIAN_HIEROGLYPH_BEGIN_SEGMENT,
EgyptianHieroglyphFormatControls::EgyptianHieroglyphEndSegment => EGYPTIAN_HIEROGLYPH_END_SEGMENT,
}
}
}
impl std::convert::TryFrom<char> for EgyptianHieroglyphFormatControls {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
EGYPTIAN_HIEROGLYPH_VERTICAL_JOINER => Ok(EgyptianHieroglyphFormatControls::EgyptianHieroglyphVerticalJoiner),
EGYPTIAN_HIEROGLYPH_HORIZONTAL_JOINER => Ok(EgyptianHieroglyphFormatControls::EgyptianHieroglyphHorizontalJoiner),
EGYPTIAN_HIEROGLYPH_INSERT_AT_TOP_START => Ok(EgyptianHieroglyphFormatControls::EgyptianHieroglyphInsertAtTopStart),
EGYPTIAN_HIEROGLYPH_INSERT_AT_BOTTOM_START => Ok(EgyptianHieroglyphFormatControls::EgyptianHieroglyphInsertAtBottomStart),
EGYPTIAN_HIEROGLYPH_INSERT_AT_TOP_END => Ok(EgyptianHieroglyphFormatControls::EgyptianHieroglyphInsertAtTopEnd),
EGYPTIAN_HIEROGLYPH_INSERT_AT_BOTTOM_END => Ok(EgyptianHieroglyphFormatControls::EgyptianHieroglyphInsertAtBottomEnd),
EGYPTIAN_HIEROGLYPH_OVERLAY_MIDDLE => Ok(EgyptianHieroglyphFormatControls::EgyptianHieroglyphOverlayMiddle),
EGYPTIAN_HIEROGLYPH_BEGIN_SEGMENT => Ok(EgyptianHieroglyphFormatControls::EgyptianHieroglyphBeginSegment),
EGYPTIAN_HIEROGLYPH_END_SEGMENT => Ok(EgyptianHieroglyphFormatControls::EgyptianHieroglyphEndSegment),
_ => Err(()),
}
}
}
impl Into<u32> for EgyptianHieroglyphFormatControls {
fn into(self) -> u32 {
let c: char = self.into();
let hex = c
.escape_unicode()
.to_string()
.replace("\\u{", "")
.replace("}", "");
u32::from_str_radix(&hex, 16).unwrap()
}
}
impl std::convert::TryFrom<u32> for EgyptianHieroglyphFormatControls {
type Error = ();
fn try_from(u: u32) -> Result<Self, Self::Error> {
if let Ok(c) = char::try_from(u) {
Self::try_from(c)
} else {
Err(())
}
}
}
impl Iterator for EgyptianHieroglyphFormatControls {
type Item = Self;
fn next(&mut self) -> Option<Self> {
let index: u32 = (*self).into();
use std::convert::TryFrom;
Self::try_from(index + 1).ok()
}
}
impl EgyptianHieroglyphFormatControls {
pub fn new() -> Self {
EgyptianHieroglyphFormatControls::EgyptianHieroglyphVerticalJoiner
}
pub fn name(&self) -> &str {
match self {
EgyptianHieroglyphFormatControls::EgyptianHieroglyphVerticalJoiner => "egyptian hieroglyph vertical joiner",
EgyptianHieroglyphFormatControls::EgyptianHieroglyphHorizontalJoiner => "egyptian hieroglyph horizontal joiner",
EgyptianHieroglyphFormatControls::EgyptianHieroglyphInsertAtTopStart => "egyptian hieroglyph insert at top start",
EgyptianHieroglyphFormatControls::EgyptianHieroglyphInsertAtBottomStart => "egyptian hieroglyph insert at bottom start",
EgyptianHieroglyphFormatControls::EgyptianHieroglyphInsertAtTopEnd => "egyptian hieroglyph insert at top end",
EgyptianHieroglyphFormatControls::EgyptianHieroglyphInsertAtBottomEnd => "egyptian hieroglyph insert at bottom end",
EgyptianHieroglyphFormatControls::EgyptianHieroglyphOverlayMiddle => "egyptian hieroglyph overlay middle",
EgyptianHieroglyphFormatControls::EgyptianHieroglyphBeginSegment => "egyptian hieroglyph begin segment",
EgyptianHieroglyphFormatControls::EgyptianHieroglyphEndSegment => "egyptian hieroglyph end segment",
}
}
}