Skip to main content

mech_core/
mika.rs

1use crate::*;
2
3// Mika
4// ============================================================================
5
6// Inline Mika lives in the terminal. She greets users when they start Mech, and provides a friendly face to interact with. She can be depicted in a variety of expressions, sizes, colors, and poses. 
7
8#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
9pub struct MikaSection {
10  pub elements: Section,
11}
12
13#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
14pub enum Mika {
15  Mini(MiniMika),
16  Micro(MicroMika),
17}
18
19impl std::fmt::Display for Mika {
20  fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
21    write!(f, "{}", self.to_string())
22  }
23}
24
25impl Mika {
26
27  pub fn to_string(&self) -> String {
28    match self {
29      Mika::Mini(mini) => mini.to_string(),
30      Mika::Micro(micro) => micro.to_string(),
31    }
32  }
33
34  pub fn tokens(&self) -> Vec<Token> {
35    vec![Token::new(TokenKind::Mika(self.clone()), SourceRange::default(), vec![])]
36  }
37}
38
39#[derive(Clone, Copy,Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
40pub struct MiniMika {
41  pub expression: MikaExpression,
42  pub left_arm: Option<MikaArm>,
43  pub right_arm: Option<MikaArm>,
44}
45
46impl MiniMika {
47  pub fn to_string(&self) -> String {
48    let (left_eye, nose, right_eye) = self.expression.symbols();
49    let left_arm = self.left_arm.map_or("", |arm| arm.symbol());
50    let right_arm = self.right_arm.map_or("", |arm| arm.symbol());
51    format!("{}({}{}{}){}", left_arm, left_eye, nose, right_eye, right_arm)
52  }
53}
54
55// Parts
56// ---------------------------------------------------------------------------
57
58#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
59pub enum MikaNose {
60  Normal,      // ⦿
61  Open,        // ◯
62  Back,        // ⊕
63  Stage1,      // ⊙
64  Stage2,      // ⊚
65  Stage3,      // ⦾
66  Blink,       // ⊖
67  Wide,        // ⦵
68  Error,       // ⊗
69  Filled,      // ⏺
70  FlatMouth,   // ⍜
71  Hexagon,     // ⬢
72  Pentagon,    // ⬟
73  Hexagon2,    // ⬣
74  HexagonOpen, // ⎔
75}
76
77impl std::fmt::Display for MikaNose {
78  fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
79    write!(f, "{}", self.symbol())
80  }
81}
82
83impl MikaNose {
84  pub fn symbol(&self) -> &'static str {
85    match self {
86      MikaNose::Normal => "⦿",
87      MikaNose::Open => "◯",
88      MikaNose::Back => "⊕",
89      MikaNose::Stage1 => "∘",
90      MikaNose::Stage2 => "⦾",
91      MikaNose::Stage3 => "⦾",
92      MikaNose::Blink => "⊖",
93      MikaNose::Wide => "⦵",
94      MikaNose::Error => "⊗",
95      MikaNose::Filled => "⏺",
96      MikaNose::FlatMouth => "⍜",
97      MikaNose::Hexagon => "⬢",
98      MikaNose::Pentagon => "⬟",
99      MikaNose::Hexagon2 => "⬣",
100      MikaNose::HexagonOpen => "⎔",
101    }
102  }
103}
104
105
106#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
107pub enum MikaArm {
108  BatWing,           // ᗑ
109  BigGripperLeft,    // Ɔ∞
110  BigGripperRight,   // ∞C
111  CurlLeft,          // ᕦ
112  CurlRight,         // ᕤ
113  Dance,             // ~
114  GestureLeft,       // ›⌣
115  GestureRight,      // ⌣‹
116  GripperLeft,       // ›─
117  GripperRight,      // ─‹
118  Left,              // ╭
119  RaisedLeft,        // ⸌
120  RaisedRight,       // ⸍
121  Right,             // ╮
122  Shield,            // ᗢ
123  ShootLeft,         // ·¬
124  ShootRight,        // ⌐·
125  ShrugLeft,         // -◡
126  ShrugRight,        // ◡-
127  Sword,             // ⸸
128  Point,             // ─
129  PunchLeft,         // ᓂ
130  PunchRight,        // ᓀ
131  PunchLowLeft,      // ᓇ
132  PunchLowRight,     // ᓄ
133  UpLeft,            // ╰
134  UpRight,           // ╯
135}
136
137impl MikaArm {
138  pub fn symbol(&self) -> &'static str {
139    match self {
140      MikaArm::BatWing => "ᗑ",
141      MikaArm::BigGripperLeft => "Ɔ∞",
142      MikaArm::BigGripperRight => "∞C",
143      MikaArm::CurlLeft => "ᕦ",
144      MikaArm::CurlRight => "ᕤ",
145      MikaArm::Dance => "~",
146      MikaArm::GestureLeft => "⌣",
147      MikaArm::GestureRight => "⌣",
148      MikaArm::GripperLeft => "›─",
149      MikaArm::GripperRight => "─‹",
150      MikaArm::Left => "╭",
151      MikaArm::RaisedLeft => "⸌",
152      MikaArm::RaisedRight => "⸍",
153      MikaArm::Right => "╮",
154      MikaArm::Shield => "ᗢ",
155      MikaArm::ShootLeft => "·¬",
156      MikaArm::ShootRight => "⌐·",
157      MikaArm::ShrugLeft => "-◡",
158      MikaArm::ShrugRight => "◡-",
159      MikaArm::Sword => "⸸",
160      MikaArm::Point => "─",
161      MikaArm::PunchLeft => "ᓂ",
162      MikaArm::PunchRight => "ᓀ",
163      MikaArm::PunchLowLeft => "ᓇ",
164      MikaArm::PunchLowRight => "ᓄ",
165      MikaArm::UpLeft => "╰",
166      MikaArm::UpRight => "╯",
167    }
168  }
169
170  pub fn is_left(&self) -> bool {
171    matches!(self, MikaArm::UpLeft | MikaArm::BatWing | MikaArm::BigGripperLeft | MikaArm::CurlLeft | MikaArm::GestureLeft | MikaArm::GripperLeft | MikaArm::Left | MikaArm::ShootLeft | MikaArm::ShrugLeft | MikaArm::Dance)
172  }
173
174  pub fn is_right(&self) -> bool {
175    matches!(self, MikaArm::UpRight | MikaArm::BatWing | MikaArm::BigGripperRight | MikaArm::CurlRight | MikaArm::GestureRight | MikaArm::GripperRight | MikaArm::Right | MikaArm::ShootRight | MikaArm::ShrugRight | MikaArm::Dance)
176  }
177
178}
179
180#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
181pub enum MikaEyeLeft {
182  Content,       // ˆ
183  Confused,      // ಠ 
184  Crying,        // ╥
185  Dazed,         // ⋇
186  Dead,          // ✖
187  EyesSqueezed,  // ≻
188  SuperSqueezed, // ᗒ
189  Glaring,       // ㆆ
190  Happy,         // ◜
191  Normal,        // ˙
192  PeerRight,     // ⚆
193  PeerStraight,  // ☉
194  Pleased,       // ◠
195  Resolved,      // ◡̀
196  RollingEyes,   // ◕
197  Sad,           // ◞
198  Scared,        // Ͼ
199  Shades,        // ⌐▰
200  Sleeping,      // ⹇
201  Smiling,       // ᗣ
202  Squinting,     // ≖
203  Surprised,     // °
204  TearingUp,     // ᗩ
205  Unimpressed,   // ¬
206  Wired,         // ◉
207}
208
209impl Display for MikaEyeLeft {
210  fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
211    write!(f, "{}", self.symbol())
212  }
213}
214
215impl MikaEyeLeft {
216  pub fn symbol(&self) -> &'static str {
217    match self {
218      MikaEyeLeft::Content => "ˆ",
219      MikaEyeLeft::Confused => "ಠ",
220      MikaEyeLeft::Crying => "╥",
221      MikaEyeLeft::Dazed => "⋇",
222      MikaEyeLeft::Dead => "✖",
223      MikaEyeLeft::EyesSqueezed => "≻",
224      MikaEyeLeft::SuperSqueezed => "ᗒ",
225      MikaEyeLeft::Glaring => "ㆆ",
226      MikaEyeLeft::Happy => "◜",
227      MikaEyeLeft::Normal => "˙",
228      MikaEyeLeft::PeerRight => "⚆",
229      MikaEyeLeft::PeerStraight => "☉",
230      MikaEyeLeft::Pleased => "◠",
231      MikaEyeLeft::Resolved => "◡̀",
232      MikaEyeLeft::RollingEyes => "◕",
233      MikaEyeLeft::Sad => "◞",
234      MikaEyeLeft::Scared => "Ͼ",
235      MikaEyeLeft::Shades => "⌐▰",
236      MikaEyeLeft::Sleeping => "⹇",
237      MikaEyeLeft::Smiling => "ᗣ",
238      MikaEyeLeft::Squinting => "≖",
239      MikaEyeLeft::Surprised => "°",
240      MikaEyeLeft::TearingUp => "ᗩ",
241      MikaEyeLeft::Unimpressed => "¬",
242      MikaEyeLeft::Wired => "◉",
243    }
244  }
245}
246
247#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
248pub enum MikaEyeRight {
249  Content,       // ˆ
250  Confused,      // ಠ 
251  Crying,        // ╥
252  Dazed,         // ⋇
253  Dead,          // ✖
254  EyesSqueezed,  // ≺
255  SuperSqueezed, // ᗕ
256  Glaring,       // ㆆ
257  Happy,         // ◝
258  Normal,        // ˙
259  PeerRight,     // ⚆
260  PeerStraight,  // ☉
261  Pleased,       // ◠
262  Resolved,      // ◡́
263  RollingEyes,   // ◕
264  Sad,           // ◟
265  Scared,        // Ͽ
266  Shades,        // ▰
267  Sleeping,      // ⹇
268  Smiling,       // ᗣ
269  Squinting,     // ≖
270  Surprised,     // °
271  TearingUp,     // ᗩ
272  Unimpressed,   // ¬
273  Wired,         // ◉
274}
275
276impl std::fmt::Display for MikaEyeRight {
277  fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
278    write!(f, "{}", self.symbol())
279  }
280}
281
282impl MikaEyeRight {
283  pub fn symbol(&self) -> &'static str {
284    match self {
285      MikaEyeRight::Content => "ˆ",
286      MikaEyeRight::Confused => "ಠ",
287      MikaEyeRight::Crying => "╥",
288      MikaEyeRight::Dazed => "⋇",
289      MikaEyeRight::Dead => "✖",
290      MikaEyeRight::EyesSqueezed => "≺",
291      MikaEyeRight::SuperSqueezed => "ᗕ",
292      MikaEyeRight::Glaring => "ㆆ",
293      MikaEyeRight::Happy => "◝",
294      MikaEyeRight::Normal => "˙",
295      MikaEyeRight::PeerRight => "⚆",
296      MikaEyeRight::PeerStraight => "☉",
297      MikaEyeRight::Pleased => "◠",
298      MikaEyeRight::Resolved => "◡́",
299      MikaEyeRight::RollingEyes => "◕",
300      MikaEyeRight::Sad => "◟",
301      MikaEyeRight::Scared => "Ͽ",
302      MikaEyeRight::Shades => "▰",
303      MikaEyeRight::Sleeping => "⹇",
304      MikaEyeRight::Smiling => "ᗣ",
305      MikaEyeRight::Squinting => "≖",
306      MikaEyeRight::Surprised => "°",
307      MikaEyeRight::TearingUp => "ᗩ",
308      MikaEyeRight::Unimpressed => "¬",
309      MikaEyeRight::Wired => "◉",
310    }
311  }
312}
313
314#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
315pub enum MikaExpression {
316  Content,       // (ˆ◯ˆ)
317  Confused,      // (ಠ◯ಠ) 
318  Crying,        // (╥◯╥)
319  Dazed,         // (⋇◯⋇)
320  Dead,          // (✖◯✖)
321  EyesSqueezed,  // (≻◯≺)
322  SuperSqueezed, // (ᗒ◯ᗕ)
323  Glaring,       // (ㆆ⍜ㆆ)
324  Happy,         // (◜◯◝)
325  Normal,        // (˙◯˙)
326  PeerRight,     // (⚆◯⚆)
327  PeerStraight,  // (☉◯☉)
328  Pleased,       // (◠◯◠)
329  Resolved,      // (◡̀◯◡́)ᕤ
330  RollingEyes,   // (◕◯◕)
331  Sad,           // (◞◯◟)
332  Scared,        // (Ͼ◯Ͽ)
333  Shades,        // (⌐▰◯▰)
334  Sleeping,      // (⹇◯⹇)
335  Smiling,       // (ᗣ◯ᗣ)
336  Squinting,     // (≖◯≖)
337  Surprised,     // (°◯°)
338  TearingUp,     // (ᗩ◯ᗩ)
339  Unimpressed,   // (¬◯¬)
340  Wired,         // (◉◯◉)
341}
342
343impl MikaExpression {
344  pub fn symbols(&self) -> (MikaEyeLeft, MikaNose, MikaEyeRight) {
345    match self {
346      MikaExpression::Content       => (MikaEyeLeft::Content,       MikaNose::Open,       MikaEyeRight::Content),
347      MikaExpression::Confused      => (MikaEyeLeft::Confused,      MikaNose::Open,       MikaEyeRight::Confused),
348      MikaExpression::Crying        => (MikaEyeLeft::Crying,        MikaNose::Open,       MikaEyeRight::Crying),
349      MikaExpression::Dazed         => (MikaEyeLeft::Dazed,         MikaNose::Open,       MikaEyeRight::Dazed),
350      MikaExpression::Dead          => (MikaEyeLeft::Dead,          MikaNose::Open,       MikaEyeRight::Dead),
351      MikaExpression::EyesSqueezed  => (MikaEyeLeft::EyesSqueezed,  MikaNose::Open,       MikaEyeRight::EyesSqueezed),
352      MikaExpression::Glaring       => (MikaEyeLeft::Glaring,       MikaNose::FlatMouth,  MikaEyeRight::Glaring),
353      MikaExpression::Happy         => (MikaEyeLeft::Happy,         MikaNose::Open,       MikaEyeRight::Happy),
354      MikaExpression::Normal        => (MikaEyeLeft::Normal,        MikaNose::Open,       MikaEyeRight::Normal),
355      MikaExpression::PeerRight     => (MikaEyeLeft::PeerRight,     MikaNose::Open,       MikaEyeRight::PeerRight),
356      MikaExpression::PeerStraight  => (MikaEyeLeft::PeerStraight,  MikaNose::Open,       MikaEyeRight::PeerStraight),
357      MikaExpression::Pleased       => (MikaEyeLeft::Pleased,       MikaNose::Open,       MikaEyeRight::Pleased),
358      MikaExpression::Resolved      => (MikaEyeLeft::Resolved,      MikaNose::Open,       MikaEyeRight::Resolved),
359      MikaExpression::RollingEyes   => (MikaEyeLeft::RollingEyes,   MikaNose::Open,       MikaEyeRight::RollingEyes),
360      MikaExpression::Sad           => (MikaEyeLeft::Sad,           MikaNose::Open,       MikaEyeRight::Sad),
361      MikaExpression::Scared        => (MikaEyeLeft::Scared,        MikaNose::Open,       MikaEyeRight::Scared),
362      MikaExpression::Shades        => (MikaEyeLeft::Shades,        MikaNose::Open,       MikaEyeRight::Shades),
363      MikaExpression::Sleeping      => (MikaEyeLeft::Sleeping,      MikaNose::Open,       MikaEyeRight::Sleeping),
364      MikaExpression::Smiling       => (MikaEyeLeft::Smiling,       MikaNose::Open,       MikaEyeRight::Smiling),
365      MikaExpression::Squinting     => (MikaEyeLeft::Squinting,     MikaNose::Open,       MikaEyeRight::Squinting),
366      MikaExpression::SuperSqueezed => (MikaEyeLeft::SuperSqueezed, MikaNose::Open,       MikaEyeRight::SuperSqueezed),
367      MikaExpression::Surprised     => (MikaEyeLeft::Surprised,     MikaNose::Open,       MikaEyeRight::Surprised),
368      MikaExpression::TearingUp     => (MikaEyeLeft::TearingUp,     MikaNose::Open,       MikaEyeRight::TearingUp),
369      MikaExpression::Unimpressed   => (MikaEyeLeft::Unimpressed,   MikaNose::Open,       MikaEyeRight::Unimpressed),
370      MikaExpression::Wired         => (MikaEyeLeft::Wired,         MikaNose::Open,       MikaEyeRight::Wired),
371    }
372  }
373}
374
375// MicroMika
376// ---------------------------------------------------------------------------
377
378#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
379pub struct MicroMika {
380  pub left_arm: MikaArm,
381  pub nose: MikaNose,
382  pub right_arm: MikaArm,
383}
384
385impl MicroMika {
386  pub fn to_string(&self) -> String {
387    format!("{}{}{}", self.left_arm.symbol(), self.nose.symbol(), self.right_arm.symbol())
388  }
389}
390
391#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
392pub enum MicroMikaKind {
393  Bat,            // ᗑ⦿ᗑ
394  BigHug,         // ›⌣⦿⌣‹
395  Cheer,          // ⸌⦿⸍
396  Dance,          // ~⦿~
397  Goal,           // ╰⦿╯
398  GripperLeft,    // ›─⦿╮
399  GripperRight,   // ╭⦿─‹
400  GestureLeft,    // ⌣⦿╮
401  GestureRight,   // ╭⦿⌣
402  Idle,           // ╭⦿╮
403  Knight,         // ⸸⦿ᗢ
404  Matrix,         // ·¬⦿⌐·
405  OneWing,        // ⸸⦿ᗑ
406  PointLeft,      // ╭⦿─
407  PointRight,     // ─⦿╮
408  Punch,          // ᓂ⦿ᓄ
409  ShootLeft,      // ·¬⦿╮
410  ShootRight,     // ╭⦿⌐·
411  Shrug,          // -◡⦿◡-
412  ServeLeft,      // -◡⦿╮
413  ServeRight,     // ╭⦿◡-
414  WaveLeft,       // ╰⦿╮
415  WaveRight,      // ╭⦿╯
416}
417
418impl MicroMikaKind {
419
420  pub fn to_string(&self) -> String {
421    let (left_arm, nose, right_arm) = self.symbols();
422    format!("{}{}{}", left_arm.symbol(), nose.symbol(), right_arm.symbol())
423  }
424
425  pub fn symbols(&self) -> (MikaArm, MikaNose, MikaArm) {
426    match self {
427      MicroMikaKind::Bat            => (MikaArm::BatWing,     MikaNose::Normal,  MikaArm::BatWing),
428      MicroMikaKind::BigHug         => (MikaArm::GestureLeft, MikaNose::Normal,  MikaArm::GestureRight),
429      MicroMikaKind::Cheer          => (MikaArm::RaisedLeft,  MikaNose::Normal,  MikaArm::RaisedRight),
430      MicroMikaKind::Dance          => (MikaArm::Dance,       MikaNose::Normal,  MikaArm::Dance),
431      MicroMikaKind::Goal           => (MikaArm::UpLeft,      MikaNose::Normal,  MikaArm::UpRight),
432      MicroMikaKind::GripperLeft    => (MikaArm::GripperLeft, MikaNose::Normal,  MikaArm::UpRight),
433      MicroMikaKind::GripperRight   => (MikaArm::UpLeft,      MikaNose::Normal,  MikaArm::GripperRight),
434      MicroMikaKind::GestureLeft    => (MikaArm::GestureLeft, MikaNose::Normal,  MikaArm::UpRight),
435      MicroMikaKind::GestureRight   => (MikaArm::UpLeft,      MikaNose::Normal,  MikaArm::GestureRight),
436      MicroMikaKind::Idle           => (MikaArm::Left,        MikaNose::Normal,  MikaArm::Right),
437      MicroMikaKind::Knight         => (MikaArm::Sword,       MikaNose::Normal,  MikaArm::Shield),
438      MicroMikaKind::Matrix         => (MikaArm::ShootLeft,   MikaNose::Normal,  MikaArm::ShootRight),
439      MicroMikaKind::OneWing        => (MikaArm::Sword,       MikaNose::Normal,  MikaArm::BatWing),
440      MicroMikaKind::PointLeft      => (MikaArm::Point,       MikaNose::Normal,  MikaArm::UpRight),
441      MicroMikaKind::PointRight     => (MikaArm::UpLeft,      MikaNose::Normal,  MikaArm::Point),
442      MicroMikaKind::Punch          => (MikaArm::PunchLeft,   MikaNose::Normal,  MikaArm::PunchLowRight),
443      MicroMikaKind::ShootLeft      => (MikaArm::ShootLeft,   MikaNose::Normal,  MikaArm::UpRight),
444      MicroMikaKind::ShootRight     => (MikaArm::UpLeft,      MikaNose::Normal,  MikaArm::ShootRight),
445      MicroMikaKind::Shrug          => (MikaArm::ShrugLeft,   MikaNose::Normal,  MikaArm::ShrugRight),
446      MicroMikaKind::ServeLeft      => (MikaArm::ShrugLeft,   MikaNose::Normal,  MikaArm::UpRight),
447      MicroMikaKind::ServeRight     => (MikaArm::UpLeft,      MikaNose::Normal,  MikaArm::ShrugRight),
448      MicroMikaKind::WaveLeft       => (MikaArm::UpLeft,      MikaNose::Normal,  MikaArm::UpRight),
449      MicroMikaKind::WaveRight      => (MikaArm::UpLeft,      MikaNose::Normal,  MikaArm::UpRight),
450    }
451  }
452}
453
454
455// Animations
456// ---------------------------------------------------------------------------
457
458// Sleep
459static MIRCOMIKA_POWEROFF: &[&str] = &["╭⦿╮","╭⦾╮","╭⊚╮","╭⊙╮","╭◯╮"];
460static MIRCOMIKA_POWERON: &[&str] = &["╭◯╮","╭⊙╮","╭⊚╮","╭⦾╮","╭⦿╮"];
461static MICROMIKA_BLINK: &[&str] = &["╭⦿╮","╭⊖╮","╭⦿╮"];
462static MICROMIKA_PULSE: &[&str] = &["╭⦿╮","╭⦾╮","╭⊚╮","╭⊙╮","╭⊚╮","╭⦾╮","╭⦿╮"];
463static MICROMIKA_WAVE: &[&str] = &["╭⦿╯","╭⦿─",];
464static MICROMIKA_RAISE_ARMS: &[&str] = &["╭⦿╮","─⦿─","╰⦿╯"];
465static MICROMIKA_LOWER_ARMS: &[&str] = &["╰⦿╯","─⦿─","╭⦿╮"];
466static MICROMIKA_FLAPPING: &[&str] = &["─⦿─","╰⦿╯"];
467static MICROMIKA_GRIPPING_RIGHT: &[&str] = &["╭⦿─‹ -> ╭⦿─-"];
468static MICROMIKA_GRIPPING_LEFT: &[&str] = &["›─⦿╮ -> -─⦿╮"];
469
470// Mylo
471// ---------------------------------------------------------------------------
472
473// Mylo is a secondary character, he's under development right now on the basis of these faces. Maybe he's a villain? Maybe he's Mika's siblng? I don't know.
474
475#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
476pub enum MyloExpression {
477  Eyes,       // (ᑕ⎔ᑐ)
478  Focused,    // (ᕮ⎔ᕭ)
479  Alarm,      // (ᕳ⎔ᕲ)
480  Angry,      // (ᘭ⎔ᘪ)
481  Crossed,    // (ᑢ⎔ᑝ)
482}
483
484impl MyloExpression {
485  pub fn symbols(&self) -> (&'static str, &'static str, &'static str) {
486    match self {
487      MyloExpression::Eyes => ("ᑕ", "⎔", "ᑐ"),
488      MyloExpression::Focused => ("ᕮ", "⎔", "ᕭ"),
489      MyloExpression::Alarm => ("ᕳ", "⎔", "ᕲ"),
490      MyloExpression::Angry => ("ᘭ", "⎔", "ᘪ"),
491      MyloExpression::Crossed => ("ᑢ", "⎔", "ᑝ"),
492    }
493  }
494}