diff --git a/.gitignore b/.gitignore index b583fd26d..9877c815b 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,8 @@ /wezterm*.tar.xz /pkg /target/ +/termwiz/codegen/target +/termwiz/codegen/Cargo.lock /gh_pages/ /docs/SUMMARY.md /docs/install/*.md diff --git a/Cargo.lock b/Cargo.lock index 559da4262..f6d77ea7b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -868,7 +868,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2fb3bd93ef32553e3d5b9f8020028f41ac64ff8a230033d5d548b8222d21fbe" dependencies = [ - "phf", + "phf 0.8.0", ] [[package]] @@ -2817,10 +2817,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" dependencies = [ "phf_macros", - "phf_shared", + "phf_shared 0.8.0", "proc-macro-hack", ] +[[package]] +name = "phf" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" +dependencies = [ + "phf_shared 0.10.0", +] + [[package]] name = "phf_codegen" version = "0.8.0" @@ -2828,7 +2837,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" dependencies = [ "phf_generator", - "phf_shared", + "phf_shared 0.8.0", ] [[package]] @@ -2837,7 +2846,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" dependencies = [ - "phf_shared", + "phf_shared 0.8.0", "rand 0.7.3", ] @@ -2848,7 +2857,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" dependencies = [ "phf_generator", - "phf_shared", + "phf_shared 0.8.0", "proc-macro-hack", "proc-macro2", "quote", @@ -2864,6 +2873,15 @@ dependencies = [ "siphasher", ] +[[package]] +name = "phf_shared" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher", +] + [[package]] name = "pin-project" version = "1.0.10" @@ -3980,7 +3998,7 @@ dependencies = [ "dirs", "fnv", "nom 5.1.2", - "phf", + "phf 0.8.0", "phf_codegen", ] @@ -4032,6 +4050,7 @@ dependencies = [ "ordered-float", "pest", "pest_derive", + "phf 0.10.1", "pretty_assertions", "regex", "semver 0.11.0", diff --git a/Cargo.toml b/Cargo.toml index 90660a680..d98c5b2b7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,6 +9,9 @@ members = [ "wezterm-ssh" ] resolver = "2" +exclude = [ + "termwiz/codegen" +] [profile.release] opt-level = 3 diff --git a/termwiz/Cargo.toml b/termwiz/Cargo.toml index eae82cdee..e09d9983c 100644 --- a/termwiz/Cargo.toml +++ b/termwiz/Cargo.toml @@ -28,6 +28,7 @@ num-traits = "0.2" ordered-float = "2.10" pest = "2.1" pest_derive = "2.1" +phf = "0.10" regex = "1" semver = "0.11" serde = {version="1.0", features = ["rc", "derive"], optional=true} diff --git a/termwiz/codegen/Cargo.toml b/termwiz/codegen/Cargo.toml new file mode 100644 index 000000000..2132a04a8 --- /dev/null +++ b/termwiz/codegen/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "codegen" +version = "0.1.0" +edition = "2021" + +[dependencies] +phf_codegen = "0.10" diff --git a/termwiz/codegen/src/main.rs b/termwiz/codegen/src/main.rs new file mode 100644 index 000000000..b26eccfa8 --- /dev/null +++ b/termwiz/codegen/src/main.rs @@ -0,0 +1,50 @@ +const VARIATION_SEQUENCES: &str = include_str!("../../data/emoji-variation-sequences.txt"); + +/// Parses emoji-variation-sequences.txt, which is part of the UCD download +/// for a given version of the Unicode spec. +/// It defines which sequences can have explicit presentation selectors. +fn main() { + let mut map = phf_codegen::Map::new(); + + 'next_line: for line in VARIATION_SEQUENCES.lines() { + if let Some(lhs) = line.split('#').next() { + if let Some(seq) = lhs.split(';').next() { + let mut s = String::new(); + let mut last = None; + for hex in seq.split_whitespace() { + match u32::from_str_radix(hex, 16) { + Ok(n) => { + let c = char::from_u32(n).unwrap(); + s.push(c); + last.replace(c); + } + Err(_) => { + continue 'next_line; + } + } + } + + if let Some(last) = last { + map.entry( + s, + match last { + '\u{FE0F}' => "Presentation::Emoji", + '\u{FE0E}' => "Presentation::Text", + _ => unreachable!(), + }, + ); + } + } + } + } + + println!("//! This file was generated by running:"); + println!("//! cd ../codegen ; cargo run > ../emoji_variation.rs"); + println!(); + println!("use crate::emoji::Presentation;"); + println!(); + println!( + "pub static VARIATION_MAP: phf::Map<&'static str, Presentation> = \n{};\n", + map.build(), + ); +} diff --git a/termwiz/src/emoji.rs b/termwiz/src/emoji.rs index 5de155321..b52ac5707 100644 --- a/termwiz/src/emoji.rs +++ b/termwiz/src/emoji.rs @@ -1,4 +1,4 @@ -use std::collections::HashMap; +use crate::emoji_variation::VARIATION_MAP; #[derive(Copy, Clone, Debug, Eq, PartialEq)] pub enum Presentation { @@ -34,49 +34,3 @@ impl Presentation { } } } - -const VARIATION_SEQUENCES: &str = include_str!("../data/emoji-variation-sequences.txt"); -lazy_static::lazy_static! { - static ref VARIATION_MAP: HashMap = build_variation_sequences(); -} - -/// Parses emoji-variation-sequences.txt, which is part of the UCD download -/// for a given version of the Unicode spec. -/// It defines which sequences can have explicit presentation selectors. -fn build_variation_sequences() -> HashMap { - let mut res = HashMap::new(); - - 'next_line: for line in VARIATION_SEQUENCES.lines() { - if let Some(lhs) = line.split('#').next() { - if let Some(seq) = lhs.split(';').next() { - let mut s = String::new(); - let mut last = None; - for hex in seq.split_whitespace() { - match u32::from_str_radix(hex, 16) { - Ok(n) => { - let c = char::from_u32(n).unwrap(); - s.push(c); - last.replace(c); - } - Err(_) => { - continue 'next_line; - } - } - } - - if let Some(last) = last { - res.insert( - s, - match last { - '\u{FE0F}' => Presentation::Emoji, - '\u{FE0E}' => Presentation::Text, - _ => unreachable!(), - }, - ); - } - } - } - } - - res -} diff --git a/termwiz/src/emoji_variation.rs b/termwiz/src/emoji_variation.rs new file mode 100644 index 000000000..4a52dd0bc --- /dev/null +++ b/termwiz/src/emoji_variation.rs @@ -0,0 +1,862 @@ +//! This file was generated by running: +//! cd ../codegen ; cargo run > ../emoji_variation.rs + +use crate::emoji::Presentation; + +pub static VARIATION_MAP: phf::Map<&'static str, Presentation> = ::phf::Map { + key: 12913932095322966823, + disps: &[ + (0, 226), + (1, 0), + (0, 488), + (2, 141), + (0, 1), + (0, 79), + (0, 45), + (0, 0), + (0, 88), + (0, 7), + (0, 69), + (0, 20), + (0, 12), + (0, 19), + (0, 14), + (0, 662), + (0, 9), + (0, 339), + (0, 197), + (0, 0), + (0, 4), + (0, 82), + (0, 82), + (0, 669), + (0, 208), + (0, 78), + (0, 146), + (0, 44), + (0, 264), + (0, 82), + (2, 210), + (0, 1), + (2, 281), + (0, 4), + (0, 112), + (0, 0), + (0, 1), + (0, 122), + (0, 139), + (1, 4), + (0, 6), + (0, 0), + (0, 36), + (4, 351), + (0, 95), + (3, 610), + (1, 523), + (0, 124), + (0, 5), + (2, 515), + (1, 252), + (0, 14), + (0, 15), + (4, 416), + (0, 42), + (0, 10), + (1, 204), + (0, 3), + (0, 92), + (0, 35), + (0, 425), + (0, 29), + (0, 4), + (0, 13), + (0, 342), + (0, 1), + (0, 0), + (0, 492), + (0, 7), + (0, 4), + (0, 10), + (0, 0), + (0, 22), + (0, 235), + (0, 105), + (1, 566), + (1, 257), + (0, 397), + (0, 57), + (0, 191), + (0, 101), + (0, 31), + (1, 427), + (0, 187), + (0, 228), + (1, 3), + (0, 249), + (0, 68), + (0, 422), + (0, 0), + (2, 136), + (1, 49), + (1, 573), + (0, 463), + (0, 4), + (2, 184), + (0, 1), + (0, 1), + (0, 10), + (8, 73), + (0, 312), + (0, 41), + (0, 522), + (3, 205), + (0, 707), + (0, 518), + (0, 113), + (10, 569), + (3, 634), + (0, 16), + (0, 18), + (0, 71), + (0, 126), + (1, 181), + (25, 615), + (0, 249), + (0, 138), + (0, 5), + (7, 292), + (0, 152), + (6, 310), + (0, 262), + (1, 0), + (0, 13), + (0, 54), + (0, 5), + (0, 0), + (0, 21), + (0, 26), + (4, 314), + (0, 48), + (0, 123), + (0, 13), + (0, 0), + (0, 0), + (0, 2), + (0, 19), + (6, 243), + (12, 409), + (3, 82), + (0, 601), + (0, 2), + ], + entries: &[ + ("โ™ˆ\u{fe0e}", Presentation::Text), + ("โŒš\u{fe0f}", Presentation::Emoji), + ("๐Ÿ“ค\u{fe0f}", Presentation::Emoji), + ("โœณ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ‘\u{fe0e}", Presentation::Text), + ("๐Ÿ“Ÿ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•ง\u{fe0f}", Presentation::Emoji), + ("๐Ÿ”’\u{fe0f}", Presentation::Emoji), + ("โค\u{fe0f}", Presentation::Emoji), + ("๐Ÿ›ฉ\u{fe0f}", Presentation::Emoji), + ("โญ\u{fe0e}", Presentation::Text), + ("โ›ฑ\u{fe0e}", Presentation::Text), + ("โ˜”\u{fe0f}", Presentation::Emoji), + ("๐Ÿ–\u{fe0e}", Presentation::Text), + ("โ˜ฆ\u{fe0f}", Presentation::Emoji), + ("1\u{fe0e}", Presentation::Text), + ("๐Ÿ“ช\u{fe0e}", Presentation::Text), + ("โ™ป\u{fe0f}", Presentation::Emoji), + ("โ›น\u{fe0e}", Presentation::Text), + ("โ“\u{fe0e}", Presentation::Text), + ("๐ŸŒซ\u{fe0e}", Presentation::Text), + ("๐Ÿ•ต\u{fe0e}", Presentation::Text), + ("ใŠ™\u{fe0e}", Presentation::Text), + ("๐Ÿˆท\u{fe0f}", Presentation::Emoji), + ("โšœ\u{fe0e}", Presentation::Text), + ("โ“\u{fe0f}", Presentation::Emoji), + ("โ›ธ\u{fe0e}", Presentation::Text), + ("โฌ…\u{fe0f}", Presentation::Emoji), + ("๐Ÿ–จ\u{fe0f}", Presentation::Emoji), + ("โšฝ\u{fe0e}", Presentation::Text), + ("๐Ÿšญ\u{fe0f}", Presentation::Emoji), + ("โ„\u{fe0f}", Presentation::Emoji), + ("โ—ป\u{fe0e}", Presentation::Text), + ("โฃ\u{fe0e}", Presentation::Text), + ("๐Ÿˆš\u{fe0f}", Presentation::Emoji), + ("โŒš\u{fe0e}", Presentation::Text), + ("๐Ÿ…ฐ\u{fe0e}", Presentation::Text), + ("โ›ฉ\u{fe0e}", Presentation::Text), + ("โ›‘\u{fe0f}", Presentation::Emoji), + ("๐Ÿš‡\u{fe0e}", Presentation::Text), + ("โ›“\u{fe0f}", Presentation::Emoji), + ("๐ŸŒ•\u{fe0e}", Presentation::Text), + ("โฑ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ…พ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ••\u{fe0f}", Presentation::Emoji), + ("โฌ†\u{fe0f}", Presentation::Emoji), + ("โ›„\u{fe0f}", Presentation::Emoji), + ("๐ŸŽ\u{fe0f}", Presentation::Emoji), + ("๐ŸŒ\u{fe0e}", Presentation::Text), + ("๐Ÿ–‹\u{fe0e}", Presentation::Text), + ("โ›ช\u{fe0e}", Presentation::Text), + ("๐Ÿ“บ\u{fe0e}", Presentation::Text), + ("๐ŸŽŸ\u{fe0f}", Presentation::Emoji), + ("๐Ÿˆฏ\u{fe0e}", Presentation::Text), + ("โ›ฝ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ‘ช\u{fe0f}", Presentation::Emoji), + ("โ˜Ž\u{fe0e}", Presentation::Text), + ("๐Ÿ—จ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•\u{fe0e}", Presentation::Text), + ("๐Ÿ•\u{fe0f}", Presentation::Emoji), + ("๐Ÿ–‹\u{fe0f}", Presentation::Emoji), + ("๐Ÿ‘“\u{fe0f}", Presentation::Emoji), + ("โšฑ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•ฃ\u{fe0f}", Presentation::Emoji), + ("ยฎ\u{fe0e}", Presentation::Text), + ("โบ\u{fe0e}", Presentation::Text), + ("๐Ÿ…พ\u{fe0e}", Presentation::Text), + ("๐Ÿ‘‡\u{fe0e}", Presentation::Text), + ("๐Ÿ‘Ž\u{fe0e}", Presentation::Text), + ("๐Ÿ…ฑ\u{fe0e}", Presentation::Text), + ("๐Ÿšน\u{fe0e}", Presentation::Text), + ("โน\u{fe0e}", Presentation::Text), + ("๐Ÿฆ\u{fe0e}", Presentation::Text), + ("โœ\u{fe0e}", Presentation::Text), + ("โ™‘\u{fe0f}", Presentation::Emoji), + ("๐Ÿ \u{fe0e}", Presentation::Text), + ("๐Ÿญ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•น\u{fe0e}", Presentation::Text), + ("โœˆ\u{fe0f}", Presentation::Emoji), + ("8\u{fe0f}", Presentation::Emoji), + ("โšง\u{fe0e}", Presentation::Text), + ("โœ\u{fe0f}", Presentation::Emoji), + ("ยฎ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ—ƒ\u{fe0e}", Presentation::Text), + ("โฏ\u{fe0e}", Presentation::Text), + ("๐Ÿˆท\u{fe0e}", Presentation::Text), + ("โšซ\u{fe0f}", Presentation::Emoji), + ("๐ŸŽญ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ™\u{fe0f}", Presentation::Emoji), + ("๐Ÿ—‚\u{fe0f}", Presentation::Emoji), + ("โ›”\u{fe0e}", Presentation::Text), + ("๐Ÿ—ž\u{fe0e}", Presentation::Text), + ("โœ‰\u{fe0f}", Presentation::Emoji), + ("โš—\u{fe0e}", Presentation::Text), + ("๐Ÿ’ฃ\u{fe0e}", Presentation::Text), + ("๐Ÿณ\u{fe0e}", Presentation::Text), + ("๐Ÿ‹\u{fe0f}", Presentation::Emoji), + ("๐Ÿ’ป\u{fe0e}", Presentation::Text), + ("๐Ÿ“ฆ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ“ซ\u{fe0f}", Presentation::Emoji), + ("โญ\u{fe0e}", Presentation::Text), + ("๐Ÿ“ท\u{fe0e}", Presentation::Text), + ("โ˜ข\u{fe0f}", Presentation::Emoji), + ("โณ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ‘†\u{fe0f}", Presentation::Emoji), + ("โ›\u{fe0f}", Presentation::Emoji), + ("๐ŸŒ\u{fe0f}", Presentation::Emoji), + ("๐ŸŒค\u{fe0f}", Presentation::Emoji), + ("โ™‘\u{fe0e}", Presentation::Text), + ("โน\u{fe0f}", Presentation::Emoji), + ("โ™\u{fe0e}", Presentation::Text), + ("๐Ÿ•“\u{fe0e}", Presentation::Text), + ("โšซ\u{fe0e}", Presentation::Text), + ("๐Ÿ•‰\u{fe0e}", Presentation::Text), + ("โ™“\u{fe0f}", Presentation::Emoji), + ("๐Ÿ‘ฝ\u{fe0f}", Presentation::Emoji), + ("โ˜บ\u{fe0e}", Presentation::Text), + ("๐ŸŒ\u{fe0f}", Presentation::Emoji), + ("โžก\u{fe0e}", Presentation::Text), + ("โœ\u{fe0e}", Presentation::Text), + ("๐Ÿ—ƒ\u{fe0f}", Presentation::Emoji), + ("โœ”\u{fe0f}", Presentation::Emoji), + ("๐ŸŒก\u{fe0e}", Presentation::Text), + ("โ˜„\u{fe0e}", Presentation::Text), + ("โช\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•ฃ\u{fe0e}", Presentation::Text), + ("โ†˜\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•ต\u{fe0f}", Presentation::Emoji), + ("๐Ÿ—ณ\u{fe0e}", Presentation::Text), + ("๐Ÿž\u{fe0e}", Presentation::Text), + ("โ€ผ\u{fe0e}", Presentation::Text), + ("๐Ÿ„\u{fe0e}", Presentation::Text), + ("โ›“\u{fe0e}", Presentation::Text), + ("โ™ฅ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ‘\u{fe0e}", Presentation::Text), + ("๐ŸŽ›\u{fe0f}", Presentation::Emoji), + ("๐Ÿ—‘\u{fe0f}", Presentation::Emoji), + ("๐Ÿ–ฑ\u{fe0f}", Presentation::Emoji), + ("๐ŸŽฌ\u{fe0f}", Presentation::Emoji), + ("โ™“\u{fe0e}", Presentation::Text), + ("โฑ\u{fe0e}", Presentation::Text), + ("โ˜‚\u{fe0e}", Presentation::Text), + ("๐ŸŽฌ\u{fe0e}", Presentation::Text), + ("โ›ต\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•\u{fe0e}", Presentation::Text), + ("๐Ÿ—ฏ\u{fe0e}", Presentation::Text), + ("2\u{fe0f}", Presentation::Emoji), + ("๐Ÿ‘‡\u{fe0f}", Presentation::Emoji), + ("โ˜˜\u{fe0e}", Presentation::Text), + ("๐ŸŒฆ\u{fe0e}", Presentation::Text), + ("๐ŸŸ\u{fe0e}", Presentation::Text), + ("๐Ÿ•™\u{fe0e}", Presentation::Text), + ("6\u{fe0f}", Presentation::Emoji), + ("โ˜•\u{fe0f}", Presentation::Emoji), + ("๐Ÿ›‹\u{fe0f}", Presentation::Emoji), + ("๐ŸŽ–\u{fe0f}", Presentation::Emoji), + ("โ˜ฎ\u{fe0e}", Presentation::Text), + ("๐Ÿ—ž\u{fe0f}", Presentation::Emoji), + ("โ˜\u{fe0e}", Presentation::Text), + ("๐Ÿ–ฒ\u{fe0e}", Presentation::Text), + ("โš“\u{fe0e}", Presentation::Text), + ("โ—€\u{fe0e}", Presentation::Text), + ("๐Ÿ•ฏ\u{fe0e}", Presentation::Text), + ("๐Ÿ›ณ\u{fe0f}", Presentation::Emoji), + ("ใ€ฝ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ†\u{fe0e}", Presentation::Text), + ("โ›”\u{fe0f}", Presentation::Emoji), + ("๐ŸŠ\u{fe0e}", Presentation::Text), + ("๐ŸŒฌ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ—ฃ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ–ผ\u{fe0f}", Presentation::Emoji), + ("๐ŸŽ“\u{fe0e}", Presentation::Text), + ("ยฉ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•‘\u{fe0e}", Presentation::Text), + ("โ„ข\u{fe0f}", Presentation::Emoji), + ("โญ•\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•Ÿ\u{fe0e}", Presentation::Text), + ("๐Ÿšฒ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ›\u{fe0e}", Presentation::Text), + ("โฌ†\u{fe0e}", Presentation::Text), + ("โš–\u{fe0f}", Presentation::Emoji), + ("โ„\u{fe0e}", Presentation::Text), + ("โ—ป\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•Š\u{fe0e}", Presentation::Text), + ("ใŠ—\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•ข\u{fe0f}", Presentation::Emoji), + ("โ™Ÿ\u{fe0e}", Presentation::Text), + ("โ™’\u{fe0f}", Presentation::Emoji), + ("โ˜\u{fe0e}", Presentation::Text), + ("๐ŸŽง\u{fe0e}", Presentation::Text), + ("๐ŸŽš\u{fe0f}", Presentation::Emoji), + ("๐Ÿณ\u{fe0f}", Presentation::Emoji), + ("โš–\u{fe0e}", Presentation::Text), + ("๐Ÿ—ฏ\u{fe0f}", Presentation::Emoji), + ("โšก\u{fe0f}", Presentation::Emoji), + ("๐Ÿ”\u{fe0e}", Presentation::Text), + ("๐Ÿ–Œ\u{fe0e}", Presentation::Text), + ("๐Ÿ•˜\u{fe0f}", Presentation::Emoji), + ("๐ŸŒฆ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ“ฅ\u{fe0f}", Presentation::Emoji), + ("โ›ต\u{fe0e}", Presentation::Text), + ("โ›ท\u{fe0e}", Presentation::Text), + ("๐Ÿšบ\u{fe0e}", Presentation::Text), + ("๐Ÿ”ˆ\u{fe0f}", Presentation::Emoji), + ("โ†ช\u{fe0f}", Presentation::Emoji), + ("๐ŸŽ—\u{fe0f}", Presentation::Emoji), + ("โ—พ\u{fe0f}", Presentation::Emoji), + ("โ™\u{fe0e}", Presentation::Text), + ("โšฐ\u{fe0f}", Presentation::Emoji), + ("โญ•\u{fe0e}", Presentation::Text), + ("โฉ\u{fe0e}", Presentation::Text), + ("โ†—\u{fe0f}", Presentation::Emoji), + ("๐Ÿ–ฑ\u{fe0e}", Presentation::Text), + ("โ˜•\u{fe0e}", Presentation::Text), + ("๐Ÿฟ\u{fe0e}", Presentation::Text), + ("โ™ \u{fe0e}", Presentation::Text), + ("๐Ÿš\u{fe0f}", Presentation::Emoji), + ("๐Ÿ›ค\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•—\u{fe0e}", Presentation::Text), + ("๐Ÿ›\u{fe0e}", Presentation::Text), + ("โœ’\u{fe0f}", Presentation::Emoji), + ("โ™‰\u{fe0e}", Presentation::Text), + ("๐Ÿ•’\u{fe0f}", Presentation::Emoji), + ("8\u{fe0e}", Presentation::Text), + ("โ†–\u{fe0e}", Presentation::Text), + ("๐Ÿ“š\u{fe0e}", Presentation::Text), + ("๐Ÿ‹\u{fe0e}", Presentation::Text), + ("๐Ÿ›ค\u{fe0e}", Presentation::Text), + ("๐Ÿ•ก\u{fe0e}", Presentation::Text), + ("๐Ÿฝ\u{fe0f}", Presentation::Emoji), + ("โœ–\u{fe0e}", Presentation::Text), + ("๐Ÿ–‡\u{fe0e}", Presentation::Text), + ("๐Ÿ—’\u{fe0f}", Presentation::Emoji), + ("โŒ›\u{fe0e}", Presentation::Text), + ("๐ŸŸ\u{fe0f}", Presentation::Emoji), + ("โญ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ\u{fe0f}", Presentation::Emoji), + ("โ–ถ\u{fe0f}", Presentation::Emoji), + ("โ—ผ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•ค\u{fe0e}", Presentation::Text), + ("โ—\u{fe0e}", Presentation::Text), + ("๐Ÿš\u{fe0e}", Presentation::Text), + ("๐Ÿ˜\u{fe0f}", Presentation::Emoji), + ("โ†ฉ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ›ฃ\u{fe0e}", Presentation::Text), + ("๐ŸŽ™\u{fe0e}", Presentation::Text), + ("๐Ÿ•’\u{fe0e}", Presentation::Text), + ("๐Ÿ›ก\u{fe0e}", Presentation::Text), + ("๐ŸŽญ\u{fe0e}", Presentation::Text), + ("๐ŸŒœ\u{fe0f}", Presentation::Emoji), + ("โ—ฝ\u{fe0f}", Presentation::Emoji), + ("โ›ณ\u{fe0f}", Presentation::Emoji), + ("๐ŸŽ\u{fe0e}", Presentation::Text), + ("โ˜Ž\u{fe0f}", Presentation::Emoji), + ("๐Ÿธ\u{fe0e}", Presentation::Text), + ("โ˜ \u{fe0e}", Presentation::Text), + ("๐Ÿ—ก\u{fe0e}", Presentation::Text), + ("โ™จ\u{fe0f}", Presentation::Emoji), + ("โ†–\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•ด\u{fe0e}", Presentation::Text), + ("๐Ÿšผ\u{fe0e}", Presentation::Text), + ("๐Ÿ—\u{fe0e}", Presentation::Text), + ("๐Ÿ”\u{fe0e}", Presentation::Text), + ("โ™ฆ\u{fe0e}", Presentation::Text), + ("โ™\u{fe0f}", Presentation::Emoji), + ("โ†˜\u{fe0e}", Presentation::Text), + ("๐Ÿ•\u{fe0e}", Presentation::Text), + ("๐Ÿ—œ\u{fe0e}", Presentation::Text), + ("๐Ÿ•‘\u{fe0f}", Presentation::Emoji), + ("๐Ÿ”“\u{fe0e}", Presentation::Text), + ("๐ŸŒช\u{fe0e}", Presentation::Text), + ("โณ\u{fe0e}", Presentation::Text), + ("โš’\u{fe0f}", Presentation::Emoji), + ("๐ŸŒจ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ“ท\u{fe0f}", Presentation::Emoji), + ("โ˜ช\u{fe0e}", Presentation::Text), + ("๐Ÿฆ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ‚\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•š\u{fe0e}", Presentation::Text), + ("7\u{fe0f}", Presentation::Emoji), + ("โ†•\u{fe0f}", Presentation::Emoji), + ("โ™‚\u{fe0f}", Presentation::Emoji), + ("โš”\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•\u{fe0f}", Presentation::Emoji), + ("โ™ป\u{fe0e}", Presentation::Text), + ("๐Ÿ›ข\u{fe0e}", Presentation::Text), + ("๐Ÿ•ถ\u{fe0e}", Presentation::Text), + ("โ›ฐ\u{fe0e}", Presentation::Text), + ("โ˜ฏ\u{fe0f}", Presentation::Emoji), + ("โ›ช\u{fe0f}", Presentation::Emoji), + ("โ˜ช\u{fe0f}", Presentation::Emoji), + ("โ˜„\u{fe0f}", Presentation::Emoji), + ("โ–ช\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•ฅ\u{fe0e}", Presentation::Text), + ("๐Ÿ”\u{fe0f}", Presentation::Emoji), + ("๐Ÿ…ฐ\u{fe0f}", Presentation::Emoji), + ("โ›ฒ\u{fe0f}", Presentation::Emoji), + ("โ˜ฆ\u{fe0e}", Presentation::Text), + ("โคต\u{fe0e}", Presentation::Text), + ("๐Ÿ“บ\u{fe0f}", Presentation::Emoji), + ("โ˜ \u{fe0f}", Presentation::Emoji), + ("๐Ÿ‚\u{fe0e}", Presentation::Text), + ("๐Ÿ›ฉ\u{fe0e}", Presentation::Text), + ("โ„น\u{fe0e}", Presentation::Text), + ("๐Ÿ“น\u{fe0f}", Presentation::Emoji), + ("๐Ÿ’ฟ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•“\u{fe0f}", Presentation::Emoji), + ("โ˜ƒ\u{fe0e}", Presentation::Text), + ("5\u{fe0e}", Presentation::Text), + ("๐Ÿฟ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•›\u{fe0f}", Presentation::Emoji), + ("๐Ÿ„\u{fe0f}", Presentation::Emoji), + ("๐Ÿ–Œ\u{fe0f}", Presentation::Emoji), + ("โœŒ\u{fe0e}", Presentation::Text), + ("๐Ÿ••\u{fe0e}", Presentation::Text), + ("๐Ÿฝ\u{fe0e}", Presentation::Text), + ("โ›ˆ\u{fe0e}", Presentation::Text), + ("โšพ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ›\u{fe0e}", Presentation::Text), + ("๐Ÿท\u{fe0e}", Presentation::Text), + ("๐Ÿ–ฅ\u{fe0e}", Presentation::Text), + ("๐Ÿ“š\u{fe0f}", Presentation::Emoji), + ("๐Ÿ—บ\u{fe0e}", Presentation::Text), + ("๐Ÿ“ฌ\u{fe0e}", Presentation::Text), + ("โ˜ฎ\u{fe0f}", Presentation::Emoji), + ("7\u{fe0e}", Presentation::Text), + ("๐Ÿ“ป\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•\u{fe0f}", Presentation::Emoji), + ("๐ŸŒช\u{fe0f}", Presentation::Emoji), + ("โฌ‡\u{fe0f}", Presentation::Emoji), + ("โ›ฉ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ‘‚\u{fe0e}", Presentation::Text), + ("๐Ÿ—ณ\u{fe0f}", Presentation::Emoji), + ("โŒ›\u{fe0f}", Presentation::Emoji), + ("1\u{fe0f}", Presentation::Emoji), + ("โ‡\u{fe0e}", Presentation::Text), + ("โฎ\u{fe0e}", Presentation::Text), + ("๐Ÿ—“\u{fe0e}", Presentation::Text), + ("๐Ÿ•ง\u{fe0e}", Presentation::Text), + ("๐Ÿ“น\u{fe0e}", Presentation::Text), + ("๐Ÿ•ฏ\u{fe0f}", Presentation::Emoji), + ("๐ŸŽš\u{fe0e}", Presentation::Text), + ("โ™ˆ\u{fe0f}", Presentation::Emoji), + ("โš \u{fe0e}", Presentation::Text), + ("โ™ฅ\u{fe0e}", Presentation::Text), + ("โฌ›\u{fe0e}", Presentation::Text), + ("๐Ÿšฒ\u{fe0e}", Presentation::Text), + ("๐Ÿš\u{fe0f}", Presentation::Emoji), + ("โ‰\u{fe0e}", Presentation::Text), + ("๐Ÿ›\u{fe0f}", Presentation::Emoji), + ("0\u{fe0e}", Presentation::Text), + ("๐Ÿ• \u{fe0f}", Presentation::Emoji), + ("โ›ด\u{fe0f}", Presentation::Emoji), + ("โ›บ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ›ฅ\u{fe0f}", Presentation::Emoji), + ("โ™พ\u{fe0f}", Presentation::Emoji), + ("๐ŸŒฅ\u{fe0f}", Presentation::Emoji), + ("โœด\u{fe0f}", Presentation::Emoji), + ("โฌœ\u{fe0f}", Presentation::Emoji), + ("โ›…\u{fe0f}", Presentation::Emoji), + ("๐Ÿ˜\u{fe0e}", Presentation::Text), + ("๐Ÿœ\u{fe0e}", Presentation::Text), + ("โ†”\u{fe0e}", Presentation::Text), + ("๐Ÿ–Š\u{fe0e}", Presentation::Text), + ("๐ŸŽŸ\u{fe0e}", Presentation::Text), + ("๐Ÿ•Ÿ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ“ค\u{fe0e}", Presentation::Text), + ("โœ’\u{fe0e}", Presentation::Text), + ("โœ‰\u{fe0e}", Presentation::Text), + ("๐Ÿ–\u{fe0e}", Presentation::Text), + ("โ›„\u{fe0e}", Presentation::Text), + ("โ™ฃ\u{fe0e}", Presentation::Text), + ("#\u{fe0e}", Presentation::Text), + ("โ›ฑ\u{fe0f}", Presentation::Emoji), + ("โšœ\u{fe0f}", Presentation::Emoji), + ("โœ–\u{fe0f}", Presentation::Emoji), + ("๐Ÿ“‹\u{fe0f}", Presentation::Emoji), + ("๐Ÿ“Ÿ\u{fe0e}", Presentation::Text), + ("โ›ฝ\u{fe0e}", Presentation::Text), + ("โ›ˆ\u{fe0f}", Presentation::Emoji), + ("โ“‚\u{fe0e}", Presentation::Text), + ("โ˜‘\u{fe0e}", Presentation::Text), + ("โ™Œ\u{fe0e}", Presentation::Text), + ("๐Ÿ—\u{fe0e}", Presentation::Text), + ("๐Ÿ—ก\u{fe0f}", Presentation::Emoji), + ("๐Ÿš‘\u{fe0e}", Presentation::Text), + ("๐Ÿš”\u{fe0f}", Presentation::Emoji), + ("๐Ÿ—œ\u{fe0f}", Presentation::Emoji), + ("๐Ÿต\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•Š\u{fe0f}", Presentation::Emoji), + ("โ\u{fe0e}", Presentation::Text), + ("โ˜ธ\u{fe0e}", Presentation::Text), + ("๐Ÿ”’\u{fe0e}", Presentation::Text), + ("๐Ÿˆš\u{fe0e}", Presentation::Text), + ("๐Ÿ”\u{fe0f}", Presentation::Emoji), + ("๐Ÿ›ฐ\u{fe0e}", Presentation::Text), + ("*\u{fe0f}", Presentation::Emoji), + ("โš•\u{fe0f}", Presentation::Emoji), + ("โ—พ\u{fe0e}", Presentation::Text), + ("โš›\u{fe0e}", Presentation::Text), + ("๐Ÿต\u{fe0e}", Presentation::Text), + ("๐Ÿ›ณ\u{fe0e}", Presentation::Text), + ("๐Ÿ•™\u{fe0f}", Presentation::Emoji), + ("โ—ฝ\u{fe0e}", Presentation::Text), + ("โ‰\u{fe0f}", Presentation::Emoji), + ("โŒจ\u{fe0f}", Presentation::Emoji), + ("โ™จ\u{fe0e}", Presentation::Text), + ("๐Ÿ…ฑ\u{fe0f}", Presentation::Emoji), + ("ใ€ฐ\u{fe0e}", Presentation::Text), + ("โบ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ’ณ\u{fe0e}", Presentation::Text), + ("๐Ÿ“ญ\u{fe0e}", Presentation::Text), + ("โ\u{fe0f}", Presentation::Emoji), + ("โช\u{fe0e}", Presentation::Text), + ("4\u{fe0e}", Presentation::Text), + ("๐Ÿ–\u{fe0f}", Presentation::Emoji), + ("๐Ÿ“‹\u{fe0e}", Presentation::Text), + ("โœŒ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•ท\u{fe0e}", Presentation::Text), + ("โ›ด\u{fe0e}", Presentation::Text), + ("โ™€\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•”\u{fe0e}", Presentation::Text), + ("๐Ÿ•—\u{fe0f}", Presentation::Emoji), + ("๐Ÿ‘‰\u{fe0e}", Presentation::Text), + ("๐Ÿ’ฟ\u{fe0e}", Presentation::Text), + ("๐Ÿ—บ\u{fe0f}", Presentation::Emoji), + ("๐ŸŒจ\u{fe0e}", Presentation::Text), + ("๐Ÿ•š\u{fe0f}", Presentation::Emoji), + ("๐Ÿ–\u{fe0f}", Presentation::Emoji), + ("โ™’\u{fe0e}", Presentation::Text), + ("โ™Ž\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•ž\u{fe0e}", Presentation::Text), + ("๐Ÿ–ฅ\u{fe0f}", Presentation::Emoji), + ("๐Ÿˆ\u{fe0f}", Presentation::Emoji), + ("5\u{fe0f}", Presentation::Emoji), + ("๐Ÿ–‡\u{fe0f}", Presentation::Emoji), + ("โš’\u{fe0e}", Presentation::Text), + ("โš•\u{fe0e}", Presentation::Text), + ("โœ\u{fe0e}", Presentation::Text), + ("๐Ÿ…ฟ\u{fe0e}", Presentation::Text), + ("โ–ช\u{fe0e}", Presentation::Text), + ("๐Ÿ‘†\u{fe0e}", Presentation::Text), + ("๐Ÿ›ฐ\u{fe0f}", Presentation::Emoji), + ("โ˜‚\u{fe0f}", Presentation::Emoji), + ("โฉ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ \u{fe0f}", Presentation::Emoji), + ("๐Ÿ’ฐ\u{fe0e}", Presentation::Text), + ("๐Ÿ•ณ\u{fe0e}", Presentation::Text), + ("๐Ÿ•ธ\u{fe0e}", Presentation::Text), + ("๐Ÿ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•ถ\u{fe0f}", Presentation::Emoji), + ("๐Ÿš”\u{fe0e}", Presentation::Text), + ("๐Ÿˆ\u{fe0e}", Presentation::Text), + ("๐Ÿ‘‰\u{fe0f}", Presentation::Emoji), + ("๐ŸŒก\u{fe0f}", Presentation::Emoji), + ("โ™ \u{fe0f}", Presentation::Emoji), + ("๐Ÿ•ธ\u{fe0f}", Presentation::Emoji), + ("๐Ÿšผ\u{fe0f}", Presentation::Emoji), + ("โ†™\u{fe0f}", Presentation::Emoji), + ("๐Ÿ–จ\u{fe0e}", Presentation::Text), + ("โ˜”\u{fe0e}", Presentation::Text), + ("โ˜‘\u{fe0f}", Presentation::Emoji), + ("๐Ÿ†\u{fe0f}", Presentation::Emoji), + ("๐Ÿ’ฃ\u{fe0f}", Presentation::Emoji), + ("โ™‰\u{fe0f}", Presentation::Emoji), + ("โ™\u{fe0e}", Presentation::Text), + ("โ›บ\u{fe0e}", Presentation::Text), + ("โฃ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ—ฃ\u{fe0e}", Presentation::Text), + ("๐ŸŽฎ\u{fe0e}", Presentation::Text), + ("๐Ÿ’ณ\u{fe0f}", Presentation::Emoji), + ("โš—\u{fe0f}", Presentation::Emoji), + ("โ›ธ\u{fe0f}", Presentation::Emoji), + ("โ™‹\u{fe0f}", Presentation::Emoji), + ("โ™Š\u{fe0e}", Presentation::Text), + ("โ™ฟ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ›ข\u{fe0f}", Presentation::Emoji), + ("โ˜€\u{fe0e}", Presentation::Text), + ("โœก\u{fe0e}", Presentation::Text), + ("โ˜ฃ\u{fe0e}", Presentation::Text), + ("โ›\u{fe0e}", Presentation::Text), + ("๐Ÿ•ฅ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ›\u{fe0f}", Presentation::Emoji), + ("โœ\u{fe0f}", Presentation::Emoji), + ("โฌ›\u{fe0f}", Presentation::Emoji), + ("โคด\u{fe0e}", Presentation::Text), + ("๐Ÿ—„\u{fe0e}", Presentation::Text), + ("๐Ÿ•–\u{fe0e}", Presentation::Text), + ("๐Ÿ•–\u{fe0f}", Presentation::Emoji), + ("๐Ÿ›ฃ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ‘ฝ\u{fe0e}", Presentation::Text), + ("๐Ÿš˜\u{fe0e}", Presentation::Text), + ("โ†•\u{fe0e}", Presentation::Text), + ("โ›ท\u{fe0f}", Presentation::Emoji), + ("โ™\u{fe0f}", Presentation::Emoji), + ("โš™\u{fe0f}", Presentation::Emoji), + ("๐Ÿ› \u{fe0f}", Presentation::Emoji), + ("โ™\u{fe0f}", Presentation::Emoji), + ("๐ŸŽ“\u{fe0f}", Presentation::Emoji), + ("๐Ÿ‘Ž\u{fe0f}", Presentation::Emoji), + ("โคต\u{fe0f}", Presentation::Emoji), + ("๐Ÿ“ฝ\u{fe0e}", Presentation::Text), + ("โš™\u{fe0e}", Presentation::Text), + ("๐Ÿ”ˆ\u{fe0e}", Presentation::Text), + ("๐Ÿ•\u{fe0f}", Presentation::Emoji), + ("โ™‹\u{fe0e}", Presentation::Text), + ("๐Ÿ\u{fe0e}", Presentation::Text), + ("โ„น\u{fe0f}", Presentation::Emoji), + ("4\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•œ\u{fe0e}", Presentation::Text), + ("๐Ÿ•ฆ\u{fe0e}", Presentation::Text), + ("โ†ช\u{fe0e}", Presentation::Text), + ("๐Ÿš˜\u{fe0f}", Presentation::Emoji), + ("โœก\u{fe0f}", Presentation::Emoji), + ("๐Ÿ‘ช\u{fe0e}", Presentation::Text), + ("โ™Ÿ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ‘ˆ\u{fe0e}", Presentation::Text), + ("6\u{fe0e}", Presentation::Text), + ("๐Ÿ•‰\u{fe0f}", Presentation::Emoji), + ("๐ŸŽ—\u{fe0e}", Presentation::Text), + ("โฌ…\u{fe0e}", Presentation::Text), + ("๐Ÿ•ด\u{fe0f}", Presentation::Emoji), + ("โ˜น\u{fe0f}", Presentation::Emoji), + ("๐Ÿ“ฆ\u{fe0e}", Presentation::Text), + ("โ†—\u{fe0e}", Presentation::Text), + ("๐Ÿ–Š\u{fe0f}", Presentation::Emoji), + ("๐ŸŒŽ\u{fe0e}", Presentation::Text), + ("๐Ÿ• \u{fe0e}", Presentation::Text), + ("๐Ÿ˜\u{fe0f}", Presentation::Emoji), + ("9\u{fe0e}", Presentation::Text), + ("๐Ÿ—\u{fe0f}", Presentation::Emoji), + ("โ†ฉ\u{fe0e}", Presentation::Text), + ("๐Ÿ›Ž\u{fe0e}", Presentation::Text), + ("โ—€\u{fe0f}", Presentation::Emoji), + ("๐Ÿ›ฅ\u{fe0e}", Presentation::Text), + ("โ™Œ\u{fe0f}", Presentation::Emoji), + ("โ™พ\u{fe0e}", Presentation::Text), + ("๐Ÿ–ฒ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•˜\u{fe0e}", Presentation::Text), + ("โšฐ\u{fe0e}", Presentation::Text), + ("โ™ฃ\u{fe0f}", Presentation::Emoji), + ("โœ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ\u{fe0e}", Presentation::Text), + ("๐Ÿ“ฌ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ—จ\u{fe0e}", Presentation::Text), + ("๐Ÿ“ช\u{fe0f}", Presentation::Emoji), + ("โš \u{fe0f}", Presentation::Emoji), + ("โ›ฐ\u{fe0f}", Presentation::Emoji), + ("โ›ณ\u{fe0e}", Presentation::Text), + ("โ™ฟ\u{fe0e}", Presentation::Text), + ("โ‡\u{fe0f}", Presentation::Emoji), + ("๐Ÿ‘‚\u{fe0f}", Presentation::Emoji), + ("0\u{fe0f}", Presentation::Emoji), + ("โš›\u{fe0f}", Presentation::Emoji), + ("3\u{fe0f}", Presentation::Emoji), + ("โœˆ\u{fe0e}", Presentation::Text), + ("โœณ\u{fe0e}", Presentation::Text), + ("โคด\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•ž\u{fe0f}", Presentation::Emoji), + ("โ†”\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•\u{fe0e}", Presentation::Text), + ("๐Ÿ•ก\u{fe0f}", Presentation::Emoji), + ("๐Ÿ“ฅ\u{fe0e}", Presentation::Text), + ("โ™€\u{fe0e}", Presentation::Text), + ("โ€ผ\u{fe0f}", Presentation::Emoji), + ("๐ŸŸ\u{fe0f}", Presentation::Emoji), + ("โญ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ—\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•›\u{fe0e}", Presentation::Text), + ("โšช\u{fe0e}", Presentation::Text), + ("๐Ÿ—’\u{fe0e}", Presentation::Text), + ("โฒ\u{fe0e}", Presentation::Text), + ("๐ŸŽ›\u{fe0e}", Presentation::Text), + ("๐Ÿ›‹\u{fe0e}", Presentation::Text), + ("๐Ÿ•ฐ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ—‘\u{fe0e}", Presentation::Text), + ("๐Ÿ•ณ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ‘“\u{fe0e}", Presentation::Text), + ("๐Ÿ•ท\u{fe0f}", Presentation::Emoji), + ("โ™Š\u{fe0f}", Presentation::Emoji), + ("๐ŸŽž\u{fe0f}", Presentation::Emoji), + ("๐ŸŒ\u{fe0f}", Presentation::Emoji), + ("โ†™\u{fe0e}", Presentation::Text), + ("๐Ÿ–ผ\u{fe0e}", Presentation::Text), + ("โœด\u{fe0e}", Presentation::Text), + ("โ˜€\u{fe0f}", Presentation::Emoji), + ("๐Ÿ›ก\u{fe0f}", Presentation::Emoji), + ("๐Ÿ…ฟ\u{fe0f}", Presentation::Emoji), + ("๐ŸŠ\u{fe0f}", Presentation::Emoji), + ("โ˜ฃ\u{fe0f}", Presentation::Emoji), + ("*\u{fe0e}", Presentation::Text), + ("๐Ÿˆ‚\u{fe0f}", Presentation::Emoji), + ("#\u{fe0f}", Presentation::Emoji), + ("๐ŸŒค\u{fe0e}", Presentation::Text), + ("โ›…\u{fe0e}", Presentation::Text), + ("๐ŸŒŽ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•ข\u{fe0e}", Presentation::Text), + ("โšก\u{fe0e}", Presentation::Text), + ("ใ€ฝ\u{fe0e}", Presentation::Text), + ("๐ŸŒถ\u{fe0e}", Presentation::Text), + ("๐Ÿšบ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•น\u{fe0f}", Presentation::Emoji), + ("โŒจ\u{fe0e}", Presentation::Text), + ("๐Ÿ˜\u{fe0e}", Presentation::Text), + ("๐Ÿš\u{fe0e}", Presentation::Text), + ("โš“\u{fe0f}", Presentation::Emoji), + ("๐Ÿ—„\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•œ\u{fe0f}", Presentation::Emoji), + ("โœ‚\u{fe0e}", Presentation::Text), + ("ยฉ\u{fe0e}", Presentation::Text), + ("ใŠ—\u{fe0e}", Presentation::Text), + ("๐ŸŽ–\u{fe0e}", Presentation::Text), + ("โธ\u{fe0f}", Presentation::Emoji), + ("โ˜ƒ\u{fe0f}", Presentation::Emoji), + ("โžก\u{fe0f}", Presentation::Emoji), + ("โฌœ\u{fe0e}", Presentation::Text), + ("๐Ÿ€„\u{fe0f}", Presentation::Emoji), + ("๐Ÿšญ\u{fe0e}", Presentation::Text), + ("๐Ÿ‘\u{fe0f}", Presentation::Emoji), + ("๐ŸŒถ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ›\u{fe0f}", Presentation::Emoji), + ("โ™‚\u{fe0e}", Presentation::Text), + ("๐Ÿ› \u{fe0e}", Presentation::Text), + ("๐Ÿ’ป\u{fe0f}", Presentation::Emoji), + ("๐Ÿ“ฝ\u{fe0f}", Presentation::Emoji), + ("โšฑ\u{fe0e}", Presentation::Text), + ("โ“‚\u{fe0f}", Presentation::Emoji), + ("โฏ\u{fe0f}", Presentation::Emoji), + ("โšพ\u{fe0e}", Presentation::Text), + ("โ™Ž\u{fe0e}", Presentation::Text), + ("๐Ÿš‡\u{fe0f}", Presentation::Emoji), + ("โšฝ\u{fe0f}", Presentation::Emoji), + ("๐ŸŒฉ\u{fe0e}", Presentation::Text), + ("๐ŸŒ•\u{fe0f}", Presentation::Emoji), + ("๐Ÿธ\u{fe0f}", Presentation::Emoji), + ("โ–ถ\u{fe0e}", Presentation::Text), + ("โฌ‡\u{fe0e}", Presentation::Text), + ("๐Ÿ•ค\u{fe0f}", Presentation::Emoji), + ("3\u{fe0e}", Presentation::Text), + ("๐Ÿ‘\u{fe0f}", Presentation::Emoji), + ("๐ŸŒฌ\u{fe0e}", Presentation::Text), + ("๐Ÿš‘\u{fe0f}", Presentation::Emoji), + ("โ˜\u{fe0f}", Presentation::Emoji), + ("โšง\u{fe0f}", Presentation::Emoji), + ("๐ŸŒ\u{fe0e}", Presentation::Text), + ("ใ€ฐ\u{fe0f}", Presentation::Emoji), + ("โธ\u{fe0e}", Presentation::Text), + ("๐ŸŒ\u{fe0e}", Presentation::Text), + ("โšช\u{fe0f}", Presentation::Emoji), + ("โ˜บ\u{fe0f}", Presentation::Emoji), + ("โ—\u{fe0f}", Presentation::Emoji), + ("๐ŸŒœ\u{fe0e}", Presentation::Text), + ("ใŠ™\u{fe0f}", Presentation::Emoji), + ("โ›ฒ\u{fe0e}", Presentation::Text), + ("โ–ซ\u{fe0e}", Presentation::Text), + ("โฎ\u{fe0f}", Presentation::Emoji), + ("โค\u{fe0e}", Presentation::Text), + ("๐Ÿœ\u{fe0f}", Presentation::Emoji), + ("9\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•ฆ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ“ญ\u{fe0f}", Presentation::Emoji), + ("๐ŸŽฎ\u{fe0f}", Presentation::Emoji), + ("โ›น\u{fe0f}", Presentation::Emoji), + ("โฒ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ’ฐ\u{fe0f}", Presentation::Emoji), + ("โ˜\u{fe0f}", Presentation::Emoji), + ("โš”\u{fe0e}", Presentation::Text), + ("๐Ÿ—“\u{fe0f}", Presentation::Emoji), + ("๐Ÿญ\u{fe0e}", Presentation::Text), + ("๐Ÿท\u{fe0f}", Presentation::Emoji), + ("๐Ÿ™\u{fe0e}", Presentation::Text), + ("๐Ÿ›Ž\u{fe0f}", Presentation::Emoji), + ("๐ŸŽง\u{fe0f}", Presentation::Emoji), + ("๐ŸŒฅ\u{fe0e}", Presentation::Text), + ("โ–ซ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ”“\u{fe0f}", Presentation::Emoji), + ("๐Ÿ‘ˆ\u{fe0f}", Presentation::Emoji), + ("๐Ÿˆ‚\u{fe0e}", Presentation::Text), + ("โœ‚\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•”\u{fe0f}", Presentation::Emoji), + ("๐ŸŽ™\u{fe0f}", Presentation::Emoji), + ("๐Ÿ•ฐ\u{fe0e}", Presentation::Text), + ("โ˜น\u{fe0e}", Presentation::Text), + ("๐ŸŒฉ\u{fe0f}", Presentation::Emoji), + ("๐ŸŒง\u{fe0f}", Presentation::Emoji), + ("โ„ข\u{fe0e}", Presentation::Text), + ("๐Ÿ–\u{fe0f}", Presentation::Emoji), + ("โ˜ข\u{fe0e}", Presentation::Text), + ("โ›‘\u{fe0e}", Presentation::Text), + ("๐ŸŽž\u{fe0e}", Presentation::Text), + ("๐Ÿˆฏ\u{fe0f}", Presentation::Emoji), + ("๐ŸŸ\u{fe0e}", Presentation::Text), + ("โ˜ฏ\u{fe0e}", Presentation::Text), + ("๐Ÿ–\u{fe0e}", Presentation::Text), + ("๐Ÿž\u{fe0f}", Presentation::Emoji), + ("๐Ÿ“ซ\u{fe0e}", Presentation::Text), + ("๐Ÿ—‚\u{fe0e}", Presentation::Text), + ("๐Ÿ“ป\u{fe0e}", Presentation::Text), + ("๐ŸŒง\u{fe0e}", Presentation::Text), + ("โ—ผ\u{fe0e}", Presentation::Text), + ("โ™ฆ\u{fe0f}", Presentation::Emoji), + ("๐Ÿ€„\u{fe0e}", Presentation::Text), + ("๐Ÿšน\u{fe0f}", Presentation::Emoji), + ("2\u{fe0e}", Presentation::Text), + ("โ˜˜\u{fe0f}", Presentation::Emoji), + ("โ˜ธ\u{fe0f}", Presentation::Emoji), + ("โœ”\u{fe0e}", Presentation::Text), + ("๐ŸŒซ\u{fe0f}", Presentation::Emoji), + ], +}; diff --git a/termwiz/src/lib.rs b/termwiz/src/lib.rs index a05ae4866..5184a09bf 100644 --- a/termwiz/src/lib.rs +++ b/termwiz/src/lib.rs @@ -42,6 +42,7 @@ mod emoji; mod emoji_presentation; +mod emoji_variation; mod widechar_width; pub mod caps;