From ae98eb0df189aa5bc17ff66f21f85fdb30206800 Mon Sep 17 00:00:00 2001 From: Malo <57839069+MDLC01@users.noreply.github.com> Date: Thu, 17 Jul 2025 00:06:50 +0100 Subject: [PATCH 01/10] Add variation selectors to symbols that exist in both `sym` and `emoji` --- src/modules/emoji.txt | 76 +++++++++++++++++++++---------------------- src/modules/sym.txt | 76 +++++++++++++++++++++---------------------- 2 files changed, 76 insertions(+), 76 deletions(-) diff --git a/src/modules/emoji.txt b/src/modules/emoji.txt index 697b637..fa2ff7f 100644 --- a/src/modules/emoji.txt +++ b/src/modules/emoji.txt @@ -24,28 +24,28 @@ arm .muscle ๐Ÿ’ช .selfie ๐Ÿคณ arrow - .r.filled โžก - .r.hook โ†ช + .r.filled โžก\u{FE0F} + .r.hook โ†ช\u{FE0F} .r.soon ๐Ÿ”œ - .l.filled โฌ… - .l.hook โ†ฉ + .l.filled โฌ…\u{FE0F} + .l.hook โ†ฉ\u{FE0F} .l.back ๐Ÿ”™ .l.end ๐Ÿ”š - .t.filled โฌ† - .t.curve โคด + .t.filled โฌ†\u{FE0F} + .t.curve โคด\u{FE0F} .t.top ๐Ÿ” - .b.filled โฌ‡ - .b.curve โคต - .l.r โ†” + .b.filled โฌ‡\u{FE0F} + .b.curve โคต\u{FE0F} + .l.r โ†”\u{FE0F} .l.r.on ๐Ÿ”› - .t.b โ†• - .bl โ†™ - .br โ†˜ - .tl โ†– - .tr โ†— + .t.b โ†•\u{FE0F} + .bl โ†™\u{FE0F} + .br โ†˜\u{FE0F} + .tl โ†–\u{FE0F} + .tr โ†—\u{FE0F} arrows .cycle ๐Ÿ”„ -ast * +ast *\u{FE0F} .box โœณ atm ๐Ÿง atom โš› @@ -65,7 +65,7 @@ baggageclaim ๐Ÿ›„ baguette ๐Ÿฅ– balloon ๐ŸŽˆ ballot - .check โ˜‘ + .check โ˜‘\u{FE0F} ballotbox ๐Ÿ—ณ banana ๐ŸŒ banjo ๐Ÿช• @@ -245,7 +245,7 @@ chart .down ๐Ÿ“‰ .yen.up ๐Ÿ’น checkmark - .heavy โœ” + .heavy โœ”\u{FE0F} .box โœ… cheese ๐Ÿง€ cherries ๐Ÿ’ @@ -345,7 +345,7 @@ cookie ๐Ÿช .fortune ๐Ÿฅ  cooking ๐Ÿณ cool ๐Ÿ†’ -copyright ยฉ +copyright ยฉ\u{FE0F} coral ๐Ÿชธ corn ๐ŸŒฝ couch ๐Ÿ›‹ @@ -380,7 +380,7 @@ dancing .women.bunny ๐Ÿ‘ฏ darts ๐ŸŽฏ dash - .wave.double ใ€ฐ + .wave.double ใ€ฐ\u{FE0F} deer ๐ŸฆŒ desert ๐Ÿœ detective ๐Ÿ•ต @@ -435,8 +435,8 @@ elf ๐Ÿง email ๐Ÿ“ง excl โ— .white โ• - .double โ€ผ - .quest โ‰ + .double โ€ผ\u{FE0F} + .quest โ‰\u{FE0F} explosion ๐Ÿ’ฅ extinguisher ๐Ÿงฏ eye ๐Ÿ‘ @@ -714,7 +714,7 @@ hands .raised ๐Ÿ™Œ .shake ๐Ÿค harp ๐Ÿช‰ -hash # +hash #\u{FE0F} hat .ribbon ๐Ÿ‘’ .top ๐ŸŽฉ @@ -1135,7 +1135,7 @@ rat ๐Ÿ€ razor ๐Ÿช’ receipt ๐Ÿงพ recycling โ™ป -reg ยฎ +reg ยฎ\u{FE0F} restroom ๐Ÿšป rhino ๐Ÿฆ ribbon ๐ŸŽ€ @@ -1259,14 +1259,14 @@ splatter ๐ŸซŸ sponge ๐Ÿงฝ spoon ๐Ÿฅ„ square - .black โฌ› - .black.tiny โ–ช - .black.small โ—พ - .black.medium โ—ผ - .white โฌœ - .white.tiny โ–ซ - .white.small โ—ฝ - .white.medium โ—ป + .black โฌ›\u{FE0F} + .black.tiny โ–ช\u{FE0F} + .black.small โ—พ\u{FE0F} + .black.medium โ—ผ\u{FE0F} + .white โฌœ\u{FE0F} + .white.tiny โ–ซ\u{FE0F} + .white.small โ—ฝ\u{FE0F} + .white.medium โ—ป\u{FE0F} .blue ๐ŸŸฆ .brown ๐ŸŸซ .green ๐ŸŸฉ @@ -1287,10 +1287,10 @@ store .small ๐Ÿช strawberry ๐Ÿ“ suit - .club โ™ฃ - .diamond โ™ฆ - .heart โ™ฅ - .spade โ™  + .club โ™ฃ\u{FE0F} + .diamond โ™ฆ\u{FE0F} + .heart โ™ฅ\u{FE0F} + .spade โ™ \u{FE0F} sun โ˜€ .cloud ๐ŸŒค .face ๐ŸŒž @@ -1335,7 +1335,7 @@ ticket .travel ๐ŸŽซ tiger ๐Ÿ… .face ๐Ÿฏ -tm โ„ข +tm โ„ข\u{FE0F} toilet ๐Ÿšฝ toiletpaper ๐Ÿงป tomato ๐Ÿ… @@ -1377,8 +1377,8 @@ tree .palm ๐ŸŒด .xmas ๐ŸŽ„ triangle - .r โ–ถ - .l โ—€ + .r โ–ถ\u{FE0F} + .l โ—€\u{FE0F} .t ๐Ÿ”ผ .b ๐Ÿ”ฝ .t.red ๐Ÿ”บ diff --git a/src/modules/sym.txt b/src/modules/sym.txt index f5e08db..2fcf910 100644 --- a/src/modules/sym.txt +++ b/src/modules/sym.txt @@ -121,7 +121,7 @@ amp & ast .op โˆ— .op.o โŠ› - .basic * + .basic *\u{FE0E} .low โŽ .double โ‘ .triple โ‚ @@ -159,11 +159,11 @@ dash .em.two โธบ .em.three โธป .fig โ€’ - .wave ใ€œ .colon โˆน .o โŠ @deprecated: `dash.circle` is deprecated, use `dash.o` instead .circle โŠ + .wave ใ€œ\u{FE0F} .wave.double ใ€ฐ dot .op โ‹… @@ -180,16 +180,16 @@ dot .triple \u{20DB} .quad \u{20DC} excl ! - .double โ€ผ + .double โ€ผ\u{FE0E} .inv ยก - .quest โ‰ + .quest โ‰\u{FE0E} quest ? .double โ‡ .excl โˆ .inv ยฟ interrobang โ€ฝ .inv โธ˜ -hash # +hash #\u{FE0E} hyph โ€ .minus \u{2D} .nobreak \u{2011} @@ -708,11 +708,11 @@ yuan ยฅ // Miscellaneous. ballot โ˜ .cross โ˜’ - .check โ˜‘ + .check โ˜‘\u{FE0E} .check.heavy ๐Ÿ—น checkmark โœ“ .light ๐Ÿ—ธ - .heavy โœ” + .heavy โœ”\u{FE0E} crossmark โœ— .heavy โœ˜ floral โฆ @@ -726,21 +726,21 @@ cc ๐Ÿ…ญ .public ๐Ÿ…ฎ .sa ๐Ÿ„Ž .zero ๐Ÿ„ -copyright ยฉ +copyright ยฉ\u{FE0E} .sound โ„— copyleft ๐Ÿ„ฏ -trademark โ„ข - .registered ยฎ +trademark โ„ข\u{FE0E} + .registered ยฎ\u{FE0E} .service โ„  maltese โœ  suit - .club.filled โ™ฃ + .club.filled โ™ฃ\u{FE0E} .club.stroked โ™ง - .diamond.filled โ™ฆ + .diamond.filled โ™ฆ\u{FE0E} .diamond.stroked โ™ข - .heart.filled โ™ฅ + .heart.filled โ™ฅ\u{FE0E} .heart.stroked โ™ก - .spade.filled โ™  + .spade.filled โ™ \u{FE0E} .spade.stroked โ™ค // Music. @@ -826,8 +826,8 @@ triangle .stroked.dot โ—ฌ .filled.t โ–ฒ .filled.b โ–ผ - .filled.r โ–ถ - .filled.l โ—€ + .filled.r โ–ถ\u{FE0E} + .filled.l โ—€\u{FE0E} .filled.bl โ—ฃ .filled.br โ—ข .filled.tl โ—ค @@ -838,17 +838,17 @@ triangle .filled.small.l โ—‚ square .stroked โ–ก - .stroked.tiny โ–ซ - .stroked.small โ—ฝ - .stroked.medium โ—ป - .stroked.big โฌœ + .stroked.tiny โ–ซ\u{FE0E} + .stroked.small โ—ฝ\u{FE0E} + .stroked.medium โ—ป\u{FE0E} + .stroked.big โฌœ\u{FE0E} .stroked.dotted โฌš .stroked.rounded โ–ข .filled โ–  - .filled.tiny โ–ช - .filled.small โ—พ - .filled.medium โ—ผ - .filled.big โฌ› + .filled.tiny โ–ช\u{FE0E} + .filled.small โ—พ\u{FE0E} + .filled.medium โ—ผ\u{FE0E} + .filled.big โฌ›\u{FE0E} rect .stroked.h โ–ญ .stroked.v โ–ฏ @@ -898,8 +898,8 @@ arrow .r.double.long.bar โŸพ .r.double.not โ‡ .r.double.struck โคƒ - .r.filled โžก - .r.hook โ†ช + .r.filled โžก\u{FE0E} + .r.hook โ†ช\u{FE0E} .r.long โŸถ .r.long.squiggly โŸฟ .r.loop โ†ฌ @@ -936,8 +936,8 @@ arrow .l.double.long.bar โŸฝ .l.double.not โ‡ .l.double.struck โค‚ - .l.filled โฌ… - .l.hook โ†ฉ + .l.filled โฌ…\u{FE0E} + .l.hook โ†ฉ\u{FE0E} .l.long โŸต .l.long.bar โŸป .l.long.squiggly โฌณ @@ -965,11 +965,11 @@ arrow .l.wave โ†œ .t โ†‘ .t.bar โ†ฅ - .t.curve โคด + .t.curve โคด\u{FE0E} .t.turn โฎ .t.dashed โ‡ก .t.double โ‡‘ - .t.filled โฌ† + .t.filled โฌ†\u{FE0E} .t.quad โŸฐ .t.stop โค’ .t.stroked โ‡ง @@ -979,11 +979,11 @@ arrow .t.twohead โ†Ÿ .b โ†“ .b.bar โ†ง - .b.curve โคต + .b.curve โคต\u{FE0E} .b.turn โฎ .b.dashed โ‡ฃ .b.double โ‡“ - .b.filled โฌ‡ + .b.filled โฌ‡\u{FE0E} .b.quad โŸฑ .b.stop โค“ .b.stroked โ‡ฉ @@ -991,7 +991,7 @@ arrow .b.dstruck โ‡Ÿ .b.triple โค‹ .b.twohead โ†ก - .l.r โ†” + .l.r โ†”\u{FE0E} .l.r.double โ‡” .l.r.double.long โŸบ .l.r.double.not โ‡Ž @@ -1004,26 +1004,26 @@ arrow .l.r.dstruck โ‡ผ .l.r.open โ‡ฟ .l.r.wave โ†ญ - .t.b โ†• + .t.b โ†•\u{FE0E} .t.b.double โ‡• .t.b.filled โฌ .t.b.stroked โ‡ณ - .tr โ†— + .tr โ†—\u{FE0E} .tr.double โ‡— .tr.filled โฌˆ .tr.hook โคค .tr.stroked โฌ€ - .br โ†˜ + .br โ†˜\u{FE0E} .br.double โ‡˜ .br.filled โฌŠ .br.hook โคฅ .br.stroked โฌ‚ - .tl โ†– + .tl โ†–\u{FE0E} .tl.double โ‡– .tl.filled โฌ‰ .tl.hook โคฃ .tl.stroked โฌ - .bl โ†™ + .bl โ†™\u{FE0E} .bl.double โ‡™ .bl.filled โฌ‹ .bl.hook โคฆ From fabc977c32ead897727c232ddaeb3380110094d7 Mon Sep 17 00:00:00 2001 From: Malo <57839069+MDLC01@users.noreply.github.com> Date: Thu, 24 Jul 2025 22:33:40 +0100 Subject: [PATCH 02/10] Specify `'static` lifetime when possible --- src/lib.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 0455ae7..528c3ca 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -84,7 +84,8 @@ impl Symbol { /// Each variant is represented by a tuple `(modifiers, value, deprecation)`. pub fn variants( &self, - ) -> impl Iterator, &'static str, Option<&str>)> { + ) -> impl Iterator, &'static str, Option<&'static str>)> + { enum Variants { Single(std::iter::Once<&'static str>), Multi( From 2062af468b2a3b971b47c84e23fb6434ddfacfa2 Mon Sep 17 00:00:00 2001 From: Malo <57839069+MDLC01@users.noreply.github.com> Date: Thu, 24 Jul 2025 22:34:31 +0100 Subject: [PATCH 03/10] Add tests for variation sequences --- Cargo.lock | 1609 +++++++++++++++++++++++++++++++++++++++++++++++++++- Cargo.toml | 3 + src/lib.rs | 146 ++++- 3 files changed, 1756 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0efb2fd..6eb2305 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,7 +1,1614 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 + +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "backtrace" +version = "0.3.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets 0.52.6", +] + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bitflags" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" + +[[package]] +name = "bumpalo" +version = "3.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" + +[[package]] +name = "bytes" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" + +[[package]] +name = "cc" +version = "1.2.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7" +dependencies = [ + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" [[package]] name = "codex" version = "0.1.1" +dependencies = [ + "reqwest", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" +dependencies = [ + "libc", + "windows-sys 0.60.2", +] + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-core", + "futures-io", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "getrandom" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", +] + +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "h2" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17da50a276f1e01e0ba6c029e47b7100754904ee8a278f886546e98575380785" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" + +[[package]] +name = "http" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "hyper" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" +dependencies = [ + "http", + "hyper", + "hyper-util", + "rustls", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e" +dependencies = [ + "base64", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2 0.6.0", + "system-configuration", + "tokio", + "tower-service", + "tracing", + "windows-registry", +] + +[[package]] +name = "icu_collections" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" + +[[package]] +name = "icu_properties" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "potential_utf", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" + +[[package]] +name = "icu_provider" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +dependencies = [ + "displaydoc", + "icu_locale_core", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indexmap" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "io-uring" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4" +dependencies = [ + "bitflags", + "cfg-if", + "libc", +] + +[[package]] +name = "ipnet" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + +[[package]] +name = "iri-string" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "itoa" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "js-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "libc" +version = "0.2.174" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" + +[[package]] +name = "linux-raw-sys" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" + +[[package]] +name = "litemap" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" + +[[package]] +name = "log" +version = "0.4.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" + +[[package]] +name = "memchr" +version = "2.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", +] + +[[package]] +name = "mio" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" +dependencies = [ + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.59.0", +] + +[[package]] +name = "native-tls" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "object" +version = "0.36.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "openssl" +version = "0.10.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" +dependencies = [ + "bitflags", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "openssl-probe" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" + +[[package]] +name = "openssl-sys" +version = "0.9.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" + +[[package]] +name = "potential_utf" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +dependencies = [ + "zerovec", +] + +[[package]] +name = "proc-macro2" +version = "1.0.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "reqwest" +version = "0.12.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-tls", + "hyper-util", + "js-sys", + "log", + "mime", + "native-tls", + "percent-encoding", + "pin-project-lite", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-native-tls", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.16", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" + +[[package]] +name = "rustix" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.60.2", +] + +[[package]] +name = "rustls" +version = "0.23.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2491382039b29b9b11ff08b76ff6c97cf287671dbb74f0be44bda389fffe9bd1" +dependencies = [ + "once_cell", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pki-types" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +dependencies = [ + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" + +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + +[[package]] +name = "schannel" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "serde" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.141" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "slab" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "socket2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "socket2" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "2.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tempfile" +version = "3.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" +dependencies = [ + "fastrand", + "getrandom 0.3.3", + "once_cell", + "rustix", + "windows-sys 0.59.0", +] + +[[package]] +name = "tinystr" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tokio" +version = "1.46.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cc3a2344dafbe23a245241fe8b09735b521110d30fcefbbd5feb1797ca35d17" +dependencies = [ + "backtrace", + "bytes", + "io-uring", + "libc", + "mio", + "pin-project-lite", + "slab", + "socket2 0.5.10", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-http" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +dependencies = [ + "bitflags", + "bytes", + "futures-util", + "http", + "http-body", + "iri-string", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +dependencies = [ + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +dependencies = [ + "once_cell", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "unicode-ident" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasi" +version = "0.14.2+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +dependencies = [ + "cfg-if", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "web-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + +[[package]] +name = "windows-registry" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" +dependencies = [ + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.2", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef" +dependencies = [ + "windows_aarch64_gnullvm 0.53.0", + "windows_aarch64_msvc 0.53.0", + "windows_i686_gnu 0.53.0", + "windows_i686_gnullvm 0.53.0", + "windows_i686_msvc 0.53.0", + "windows_x86_64_gnu 0.53.0", + "windows_x86_64_gnullvm 0.53.0", + "windows_x86_64_msvc 0.53.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" + +[[package]] +name = "wit-bindgen-rt" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags", +] + +[[package]] +name = "writeable" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" + +[[package]] +name = "yoke" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + +[[package]] +name = "zerotrie" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] diff --git a/Cargo.toml b/Cargo.toml index c0d0258..9eeb281 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,3 +13,6 @@ keywords = ["unicode", "symbols"] [features] default = ["styling"] styling = [] + +[dev-dependencies] +reqwest = { version = "0.12.22", features = ["blocking"] } diff --git a/src/lib.rs b/src/lib.rs index 528c3ca..ac82708 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -125,7 +125,7 @@ include!(concat!(env!("OUT_DIR"), "/out.rs")); #[cfg(test)] mod test { use super::*; - use std::collections::BTreeSet; + use std::collections::{BTreeSet, HashSet}; #[test] fn all_modules_sorted() { @@ -188,4 +188,148 @@ mod test { assert_eq!(variants, control); } } + + /// https://www.unicode.org/reports/tr51/#def_text_presentation_selector. + const TEXT_PRESENTATION_SELECTOR: char = '\u{FE0E}'; + /// https://www.unicode.org/reports/tr51/#def_emoji_presentation_selector. + const EMOJI_PRESENTATION_SELECTOR: char = '\u{FE0F}'; + + #[test] + fn symbols_are_not_emojis() { + assert!( + are_all_variants_valid( + SYM, + |c| !c.ends_with(EMOJI_PRESENTATION_SELECTOR), + ) , + "unexpected use of emoji presentation selector (U+FE0F) in `sym` (see list above)", + ) + } + + #[test] + fn emojis_are_not_text() { + assert!( + are_all_variants_valid( + EMOJI, + |c| !c.ends_with(TEXT_PRESENTATION_SELECTOR), + ) , + "unexpected use of text presentation selector (U+FE0E) in `emoji` (see list above)", + ) + } + + /// Returns the list of presentation sequences defined by Unicode. + /// + /// See: https://www.unicode.org/reports/tr51/#Emoji_Variation_Sequences. + fn get_valid_presentation_sequences() -> HashSet { + reqwest::blocking::get("https://www.unicode.org/Public/UCD/latest/ucd/emoji/emoji-variation-sequences.txt").unwrap().text().unwrap() + .lines() + .filter_map(|l| { + let line = l.split('#').next().unwrap_or(l); + (!line.is_empty()).then_some(line) + }) + .map(|line| { + line.split(';') + .next() + .unwrap() + .split_whitespace() + .map(|cp| { + char::from_u32(u32::from_str_radix(cp, 0x10).unwrap()).unwrap() + }) + .collect() + }) + .collect() + } + + #[test] + fn no_invalid_presentation_sequence() { + let sequences = get_valid_presentation_sequences(); + assert!( + are_all_variants_valid(ROOT, |c| { + if c.ends_with(TEXT_PRESENTATION_SELECTOR) + || c.ends_with(EMOJI_PRESENTATION_SELECTOR) + { + sequences.contains(c) + } else { + true + } + }), + "invalid presentation sequence(s) (see list above)", + ) + } + + #[test] + fn symbols_have_text_presentation() { + let require_presentation_selector = get_valid_presentation_sequences() + .into_iter() + .map(|s| s.chars().next().unwrap()) + .collect::>(); + assert!( + are_all_variants_valid(SYM, |c| { + c.chars().count() != 1 + || !require_presentation_selector.contains(&c.chars().next().unwrap()) + }), + "missing text presentation selector(s) (U+FE0E) in `sym` (see list above)", + ) + } + + #[test] + fn emojis_have_emoji_presentation() { + let require_presentation_selector = get_valid_presentation_sequences() + .into_iter() + .map(|s| s.chars().next().unwrap()) + .collect::>(); + assert!( + are_all_variants_valid(EMOJI, |c| { + c.chars().count() != 1 + || !require_presentation_selector.contains(&c.chars().next().unwrap()) + }), + "missing emoji presentation selector(s) (U+FE0F) in `emoji` (see list above)", + ) + } + + /// Returns `false` if, and only if, the predicate returned `false` for at least one variant + /// within the module. + /// + /// Prints all variants for which the predicate returns `false`. + fn are_all_variants_valid bool>( + module: Module, + mut predicate: P, + ) -> bool { + let mut all_valid = true; + fn aux bool>( + module: Module, + path: Vec<&'static str>, + all_valid: &mut bool, + predicate: &mut P, + ) { + for (name, binding) in module.iter() { + let mut new_path = path.clone(); + new_path.push(name); + match binding.def { + Def::Symbol(s) => { + for (modifiers, c, _) in s.variants() { + if !predicate(c) { + *all_valid = false; + eprintln!( + "- {}{}{} {} ({})", + new_path.join("."), + if modifiers.is_empty() { "" } else { "." }, + modifiers.as_str(), + c, + c.chars() + .map(|cp| format!("{:04X}", cp as u32)) + .collect::>() + .join(" "), + ) + } + } + } + Def::Module(m) => { + aux(m, new_path, all_valid, predicate); + } + } + } + } + aux(module, Vec::new(), &mut all_valid, &mut predicate); + all_valid + } } From bc90113123cac98c9108d0ea8ee8e2587b917562 Mon Sep 17 00:00:00 2001 From: Malo <57839069+MDLC01@users.noreply.github.com> Date: Thu, 24 Jul 2025 22:39:56 +0100 Subject: [PATCH 04/10] Fix variation sequences --- src/modules/emoji.txt | 626 +++++++++++++++++++++--------------------- src/modules/sym.txt | 14 +- 2 files changed, 320 insertions(+), 320 deletions(-) diff --git a/src/modules/emoji.txt b/src/modules/emoji.txt index fa2ff7f..4e9acbd 100644 --- a/src/modules/emoji.txt +++ b/src/modules/emoji.txt @@ -3,17 +3,17 @@ abc ๐Ÿ”ค abcd ๐Ÿ”ก ABCD ๐Ÿ”  accordion ๐Ÿช— -aesculapius โš• -airplane โœˆ +aesculapius โš•\u{FE0F} +airplane โœˆ\u{FE0F} .landing ๐Ÿ›ฌ - .small ๐Ÿ›ฉ + .small ๐Ÿ›ฉ\u{FE0F} .takeoff ๐Ÿ›ซ -alembic โš— -alien ๐Ÿ‘ฝ +alembic โš—\u{FE0F} +alien ๐Ÿ‘ฝ\u{FE0F} .monster ๐Ÿ‘พ -ambulance ๐Ÿš‘ +ambulance ๐Ÿš‘\u{FE0F} amphora ๐Ÿบ -anchor โš“ +anchor โš“\u{FE0F} anger ๐Ÿ’ข ant ๐Ÿœ apple @@ -46,15 +46,15 @@ arrow arrows .cycle ๐Ÿ”„ ast *\u{FE0F} - .box โœณ + .box โœณ\u{FE0F} atm ๐Ÿง -atom โš› +atom โš›\u{FE0F} aubergine ๐Ÿ† avocado ๐Ÿฅ‘ axe ๐Ÿช“ baby ๐Ÿ‘ถ .angel ๐Ÿ‘ผ - .box ๐Ÿšผ + .box ๐Ÿšผ\u{FE0F} babybottle ๐Ÿผ backpack ๐ŸŽ’ bacon ๐Ÿฅ“ @@ -66,15 +66,15 @@ baguette ๐Ÿฅ– balloon ๐ŸŽˆ ballot .check โ˜‘\u{FE0F} -ballotbox ๐Ÿ—ณ +ballotbox ๐Ÿ—ณ\u{FE0F} banana ๐ŸŒ banjo ๐Ÿช• bank ๐Ÿฆ barberpole ๐Ÿ’ˆ -baseball โšพ +baseball โšพ\u{FE0F} basecap ๐Ÿงข basket ๐Ÿงบ -basketball โ›น +basketball โ›น\u{FE0F} .ball ๐Ÿ€ bat ๐Ÿฆ‡ bathtub ๐Ÿ›€ @@ -82,13 +82,13 @@ bathtub ๐Ÿ›€ battery ๐Ÿ”‹ .low ๐Ÿชซ beach - .palm ๐Ÿ - .umbrella ๐Ÿ– + .palm ๐Ÿ\u{FE0F} + .umbrella ๐Ÿ–\u{FE0F} beads ๐Ÿ“ฟ beans ๐Ÿซ˜ bear ๐Ÿป beaver ๐Ÿฆซ -bed ๐Ÿ› +bed ๐Ÿ›\u{FE0F} .person ๐Ÿ›Œ bee ๐Ÿ beer ๐Ÿบ @@ -97,18 +97,18 @@ beet ๐Ÿซœ beetle ๐Ÿชฒ .lady ๐Ÿž bell ๐Ÿ”” - .ding ๐Ÿ›Ž + .ding ๐Ÿ›Ž\u{FE0F} .not ๐Ÿ”• bento ๐Ÿฑ bicyclist ๐Ÿšด .mountain ๐Ÿšต -bike ๐Ÿšฒ +bike ๐Ÿšฒ\u{FE0F} .not ๐Ÿšณ bikini ๐Ÿ‘™ billiards ๐ŸŽฑ -bin ๐Ÿ—‘ -biohazard โ˜ฃ -bird ๐Ÿฆ +bin ๐Ÿ—‘\u{FE0F} +biohazard โ˜ฃ\u{FE0F} +bird ๐Ÿฆ\u{FE0F} bison ๐Ÿฆฌ blood ๐Ÿฉธ blouse ๐Ÿ‘š @@ -116,13 +116,13 @@ blowfish ๐Ÿก blueberries ๐Ÿซ boar ๐Ÿ— boat - .sail โ›ต + .sail โ›ต\u{FE0F} .row ๐Ÿšฃ - .motor ๐Ÿ›ฅ + .motor ๐Ÿ›ฅ\u{FE0F} .speed ๐Ÿšค .canoe ๐Ÿ›ถ bolt ๐Ÿ”ฉ -bomb ๐Ÿ’ฃ +bomb ๐Ÿ’ฃ\u{FE0F} bone ๐Ÿฆด book .red ๐Ÿ“• @@ -132,7 +132,7 @@ book .spiral ๐Ÿ“’ .open ๐Ÿ“– bookmark ๐Ÿ”– -books ๐Ÿ“š +books ๐Ÿ“š\u{FE0F} boomerang ๐Ÿชƒ bordercontrol ๐Ÿ›‚ bouquet ๐Ÿ’ @@ -157,12 +157,12 @@ brightness .low ๐Ÿ”… broccoli ๐Ÿฅฆ broom ๐Ÿงน -brush ๐Ÿ–Œ +brush ๐Ÿ–Œ\u{FE0F} bubble .speech.r ๐Ÿ’ฌ - .speech.l ๐Ÿ—จ + .speech.l ๐Ÿ—จ\u{FE0F} .thought ๐Ÿ’ญ - .anger.r ๐Ÿ—ฏ + .anger.r ๐Ÿ—ฏ\u{FE0F} bubbles ๐Ÿซง bubbletea ๐Ÿง‹ bucket ๐Ÿชฃ @@ -173,7 +173,7 @@ builder ๐Ÿ‘ท burger ๐Ÿ” burrito ๐ŸŒฏ bus ๐ŸšŒ - .front ๐Ÿš + .front ๐Ÿš\u{FE0F} .small ๐Ÿš .stop ๐Ÿš .trolley ๐ŸšŽ @@ -183,7 +183,7 @@ button ๐Ÿ”ฒ .alt ๐Ÿ”ณ .radio ๐Ÿ”˜ cabinet - .file ๐Ÿ—„ + .file ๐Ÿ—„\u{FE0F} cablecar ๐Ÿš  .small ๐Ÿšก cactus ๐ŸŒต @@ -192,30 +192,30 @@ cake ๐ŸŽ‚ .moon ๐Ÿฅฎ .slice ๐Ÿฐ calendar ๐Ÿ“… - .spiral ๐Ÿ—“ + .spiral ๐Ÿ—“\u{FE0F} .tearoff ๐Ÿ“† camel ๐Ÿซ .dromedar ๐Ÿช -camera ๐Ÿ“ท +camera ๐Ÿ“ท\u{FE0F} .flash ๐Ÿ“ธ .movie ๐ŸŽฅ .movie.box ๐ŸŽฆ - .video ๐Ÿ“น -camping ๐Ÿ• + .video ๐Ÿ“น\u{FE0F} +camping ๐Ÿ•\u{FE0F} can ๐Ÿฅซ -candle ๐Ÿ•ฏ +candle ๐Ÿ•ฏ\u{FE0F} candy ๐Ÿฌ cane ๐Ÿฆฏ car ๐Ÿš— - .front ๐Ÿš˜ + .front ๐Ÿš˜\u{FE0F} .pickup ๐Ÿ›ป .police ๐Ÿš“ - .police.front ๐Ÿš” - .racing ๐ŸŽ + .police.front ๐Ÿš”\u{FE0F} + .racing ๐ŸŽ\u{FE0F} .rickshaw ๐Ÿ›บ .suv ๐Ÿš™ card - .credit ๐Ÿ’ณ + .credit ๐Ÿ’ณ\u{FE0F} .id ๐Ÿชช cardindex ๐Ÿ“‡ carrot ๐Ÿฅ• @@ -224,7 +224,7 @@ cassette ๐Ÿ“ผ castle .eu ๐Ÿฐ .jp ๐Ÿฏ -cat ๐Ÿˆ +cat ๐Ÿˆ\u{FE0F} .face ๐Ÿฑ .face.angry ๐Ÿ˜พ .face.cry ๐Ÿ˜ฟ @@ -236,7 +236,7 @@ cat ๐Ÿˆ .face.smile ๐Ÿ˜บ .face.smirk ๐Ÿ˜ผ chain ๐Ÿ”— -chains โ›“ +chains โ›“\u{FE0F} chair ๐Ÿช‘ champagne ๐Ÿพ chart @@ -246,10 +246,10 @@ chart .yen.up ๐Ÿ’น checkmark .heavy โœ”\u{FE0F} - .box โœ… + .box โœ…\u{FE0F} cheese ๐Ÿง€ cherries ๐Ÿ’ -chess โ™Ÿ +chess โ™Ÿ\u{FE0F} chestnut ๐ŸŒฐ chicken ๐Ÿ” .baby ๐Ÿฅ @@ -258,89 +258,89 @@ chicken ๐Ÿ” .leg ๐Ÿ— .male ๐Ÿ“ child ๐Ÿง’ -chipmunk ๐Ÿฟ +chipmunk ๐Ÿฟ\u{FE0F} chocolate ๐Ÿซ chopsticks ๐Ÿฅข -church โ›ช +church โ›ช\u{FE0F} .love ๐Ÿ’’ cigarette ๐Ÿšฌ - .not ๐Ÿšญ + .not ๐Ÿšญ\u{FE0F} circle - .black โšซ + .black โšซ\u{FE0F} .blue ๐Ÿ”ต .brown ๐ŸŸค .green ๐ŸŸข .orange ๐ŸŸ  .purple ๐ŸŸฃ - .white โšช + .white โšช\u{FE0F} .red ๐Ÿ”ด .yellow ๐ŸŸก - .stroked โญ• + .stroked โญ•\u{FE0F} circus ๐ŸŽช -city ๐Ÿ™ +city ๐Ÿ™\u{FE0F} .dusk ๐ŸŒ† .night ๐ŸŒƒ .sunset ๐ŸŒ‡ -clamp ๐Ÿ—œ -clapperboard ๐ŸŽฌ +clamp ๐Ÿ—œ\u{FE0F} +clapperboard ๐ŸŽฌ\u{FE0F} climbing ๐Ÿง— clip ๐Ÿ“Ž -clipboard ๐Ÿ“‹ -clips ๐Ÿ–‡ +clipboard ๐Ÿ“‹\u{FE0F} +clips ๐Ÿ–‡\u{FE0F} clock - .one ๐Ÿ• - .one.thirty ๐Ÿ•œ - .two ๐Ÿ•‘ - .two.thirty ๐Ÿ• - .three ๐Ÿ•’ - .three.thirty ๐Ÿ•ž - .four ๐Ÿ•“ - .four.thirty ๐Ÿ•Ÿ - .five ๐Ÿ•” - .five.thirty ๐Ÿ•  - .six ๐Ÿ•• - .six.thirty ๐Ÿ•ก - .seven ๐Ÿ•– - .seven.thirty ๐Ÿ•ข - .eight ๐Ÿ•— - .eight.thirty ๐Ÿ•ฃ - .nine ๐Ÿ•˜ - .nine.thirty ๐Ÿ•ค - .ten ๐Ÿ•™ - .ten.thirty ๐Ÿ•ฅ - .eleven ๐Ÿ•š - .eleven.thirty ๐Ÿ•ฆ - .twelve ๐Ÿ•› - .twelve.thirty ๐Ÿ•ง - .alarm โฐ - .old ๐Ÿ•ฐ - .timer โฒ -cloud โ˜ + .one ๐Ÿ•\u{FE0F} + .one.thirty ๐Ÿ•œ\u{FE0F} + .two ๐Ÿ•‘\u{FE0F} + .two.thirty ๐Ÿ•\u{FE0F} + .three ๐Ÿ•’\u{FE0F} + .three.thirty ๐Ÿ•ž\u{FE0F} + .four ๐Ÿ•“\u{FE0F} + .four.thirty ๐Ÿ•Ÿ\u{FE0F} + .five ๐Ÿ•”\u{FE0F} + .five.thirty ๐Ÿ• \u{FE0F} + .six ๐Ÿ••\u{FE0F} + .six.thirty ๐Ÿ•ก\u{FE0F} + .seven ๐Ÿ•–\u{FE0F} + .seven.thirty ๐Ÿ•ข\u{FE0F} + .eight ๐Ÿ•—\u{FE0F} + .eight.thirty ๐Ÿ•ฃ\u{FE0F} + .nine ๐Ÿ•˜\u{FE0F} + .nine.thirty ๐Ÿ•ค\u{FE0F} + .ten ๐Ÿ•™\u{FE0F} + .ten.thirty ๐Ÿ•ฅ\u{FE0F} + .eleven ๐Ÿ•š\u{FE0F} + .eleven.thirty ๐Ÿ•ฆ\u{FE0F} + .twelve ๐Ÿ•›\u{FE0F} + .twelve.thirty ๐Ÿ•ง\u{FE0F} + .alarm โฐ\u{FE0F} + .old ๐Ÿ•ฐ\u{FE0F} + .timer โฒ\u{FE0F} +cloud โ˜\u{FE0F} .dust ๐Ÿ’จ - .rain ๐ŸŒง - .snow ๐ŸŒจ - .storm โ›ˆ - .sun โ›… - .sun.hidden ๐ŸŒฅ - .sun.rain ๐ŸŒฆ - .thunder ๐ŸŒฉ + .rain ๐ŸŒง\u{FE0F} + .snow ๐ŸŒจ\u{FE0F} + .storm โ›ˆ\u{FE0F} + .sun โ›…\u{FE0F} + .sun.hidden ๐ŸŒฅ\u{FE0F} + .sun.rain ๐ŸŒฆ\u{FE0F} + .thunder ๐ŸŒฉ\u{FE0F} coat ๐Ÿงฅ .lab ๐Ÿฅผ cockroach ๐Ÿชณ cocktail - .martini ๐Ÿธ + .martini ๐Ÿธ\u{FE0F} .tropical ๐Ÿน coconut ๐Ÿฅฅ -coffee โ˜• -coffin โšฐ +coffee โ˜•\u{FE0F} +coffin โšฐ\u{FE0F} coin ๐Ÿช™ -comet โ˜„ +comet โ˜„\u{FE0F} compass ๐Ÿงญ -computer ๐Ÿ–ฅ -computermouse ๐Ÿ–ฑ +computer ๐Ÿ–ฅ\u{FE0F} +computermouse ๐Ÿ–ฑ\u{FE0F} confetti ๐ŸŽŠ construction ๐Ÿšง -controller ๐ŸŽฎ +controller ๐ŸŽฎ\u{FE0F} cookie ๐Ÿช .fortune ๐Ÿฅ  cooking ๐Ÿณ @@ -348,19 +348,19 @@ cool ๐Ÿ†’ copyright ยฉ\u{FE0F} coral ๐Ÿชธ corn ๐ŸŒฝ -couch ๐Ÿ›‹ +couch ๐Ÿ›‹\u{FE0F} couple ๐Ÿ’‘ cow ๐Ÿ„ .face ๐Ÿฎ crab ๐Ÿฆ€ -crane ๐Ÿ— -crayon ๐Ÿ– +crane ๐Ÿ—\u{FE0F} +crayon ๐Ÿ–\u{FE0F} cricket ๐Ÿฆ— cricketbat ๐Ÿ crocodile ๐ŸŠ croissant ๐Ÿฅ -crossmark โŒ - .box โŽ +crossmark โŒ\u{FE0F} + .box โŽ\u{FE0F} crown ๐Ÿ‘‘ crutch ๐Ÿฉผ crystal ๐Ÿ”ฎ @@ -382,8 +382,8 @@ darts ๐ŸŽฏ dash .wave.double ใ€ฐ\u{FE0F} deer ๐ŸฆŒ -desert ๐Ÿœ -detective ๐Ÿ•ต +desert ๐Ÿœ\u{FE0F} +detective ๐Ÿ•ต\u{FE0F} diamond .blue ๐Ÿ”ท .blue.small ๐Ÿ”น @@ -395,13 +395,13 @@ dino .pod ๐Ÿฆ• .rex ๐Ÿฆ– disc - .cd ๐Ÿ’ฟ + .cd ๐Ÿ’ฟ\u{FE0F} .dvd ๐Ÿ“€ .mini ๐Ÿ’ฝ discoball ๐Ÿชฉ diving ๐Ÿคฟ dodo ๐Ÿฆค -dog ๐Ÿ• +dog ๐Ÿ•\u{FE0F} .face ๐Ÿถ .guide ๐Ÿฆฎ .poodle ๐Ÿฉ @@ -411,7 +411,7 @@ donkey ๐Ÿซ donut ๐Ÿฉ door ๐Ÿšช dove - .peace ๐Ÿ•Š + .peace ๐Ÿ•Š\u{FE0F} dragon ๐Ÿ‰ .face ๐Ÿฒ dress ๐Ÿ‘— @@ -424,7 +424,7 @@ drum ๐Ÿฅ duck ๐Ÿฆ† dumpling ๐ŸฅŸ eagle ๐Ÿฆ… -ear ๐Ÿ‘‚ +ear ๐Ÿ‘‚\u{FE0F} .aid ๐Ÿฆป egg ๐Ÿฅš eighteen @@ -433,13 +433,13 @@ elephant ๐Ÿ˜ elevator ๐Ÿ›— elf ๐Ÿง email ๐Ÿ“ง -excl โ— - .white โ• +excl โ—\u{FE0F} + .white โ•\u{FE0F} .double โ€ผ\u{FE0F} .quest โ‰\u{FE0F} explosion ๐Ÿ’ฅ extinguisher ๐Ÿงฏ -eye ๐Ÿ‘ +eye ๐Ÿ‘\u{FE0F} eyes ๐Ÿ‘€ face .grin ๐Ÿ˜€ @@ -469,12 +469,12 @@ face .drool ๐Ÿคค .explode ๐Ÿคฏ .eyeroll ๐Ÿ™„ - .friendly โ˜บ + .friendly โ˜บ\u{FE0F} .fear ๐Ÿ˜จ .fear.sweat ๐Ÿ˜ฐ .fever ๐Ÿค’ .flush ๐Ÿ˜ณ - .frown โ˜น + .frown โ˜น\u{FE0F} .frown.slight ๐Ÿ™ .frust ๐Ÿ˜ฃ .goofy ๐Ÿคช @@ -499,7 +499,7 @@ face .monocle ๐Ÿง .nausea ๐Ÿคข .nerd ๐Ÿค“ - .neutral ๐Ÿ˜ + .neutral ๐Ÿ˜\u{FE0F} .open ๐Ÿ˜ƒ .party ๐Ÿฅณ .peek ๐Ÿซฃ @@ -546,38 +546,38 @@ face .wow ๐Ÿ˜ฎ .yawn ๐Ÿฅฑ .zip ๐Ÿค -factory ๐Ÿญ +factory ๐Ÿญ\u{FE0F} fairy ๐Ÿงš faith - .christ โœ - .dharma โ˜ธ + .christ โœ\u{FE0F} + .dharma โ˜ธ\u{FE0F} .khanda ๐Ÿชฏ - .islam โ˜ช - .judaism โœก + .islam โ˜ช\u{FE0F} + .judaism โœก\u{FE0F} .menorah ๐Ÿ•Ž - .om ๐Ÿ•‰ - .orthodox โ˜ฆ - .peace โ˜ฎ + .om ๐Ÿ•‰\u{FE0F} + .orthodox โ˜ฆ\u{FE0F} + .peace โ˜ฎ\u{FE0F} .star.dot ๐Ÿ”ฏ .worship ๐Ÿ› - .yinyang โ˜ฏ + .yinyang โ˜ฏ\u{FE0F} falafel ๐Ÿง† -family ๐Ÿ‘ช +family ๐Ÿ‘ช\u{FE0F} fax ๐Ÿ“  feather ๐Ÿชถ feeding .breast ๐Ÿคฑ fencing ๐Ÿคบ ferriswheel ๐ŸŽก -filebox ๐Ÿ—ƒ -filedividers ๐Ÿ—‚ -film ๐ŸŽž +filebox ๐Ÿ—ƒ\u{FE0F} +filedividers ๐Ÿ—‚\u{FE0F} +film ๐ŸŽž\u{FE0F} finger - .r ๐Ÿ‘‰ - .l ๐Ÿ‘ˆ - .t ๐Ÿ‘† - .t.alt โ˜ - .b ๐Ÿ‘‡ + .r ๐Ÿ‘‰\u{FE0F} + .l ๐Ÿ‘ˆ\u{FE0F} + .t ๐Ÿ‘†\u{FE0F} + .t.alt โ˜\u{FE0F} + .b ๐Ÿ‘‡\u{FE0F} .front ๐Ÿซต .m ๐Ÿ–• fingerprint ๐Ÿซ† @@ -589,26 +589,26 @@ fire ๐Ÿ”ฅ firecracker ๐Ÿงจ fireengine ๐Ÿš’ fireworks ๐ŸŽ† -fish ๐ŸŸ +fish ๐ŸŸ\u{FE0F} .tropical ๐Ÿ  fishing ๐ŸŽฃ fist .front ๐Ÿ‘Š .r ๐Ÿคœ .l ๐Ÿค› - .raised โœŠ + .raised โœŠ\u{FE0F} flag .black ๐Ÿด - .white ๐Ÿณ + .white ๐Ÿณ\u{FE0F} .goal ๐Ÿ - .golf โ›ณ + .golf โ›ณ\u{FE0F} .red ๐Ÿšฉ flags .jp.crossed ๐ŸŽŒ flamingo ๐Ÿฆฉ flashlight ๐Ÿ”ฆ flatbread ๐Ÿซ“ -fleur โšœ +fleur โšœ\u{FE0F} floppy ๐Ÿ’พ flower .hibiscus ๐ŸŒบ @@ -623,24 +623,24 @@ flower .yellow ๐ŸŒผ flute ๐Ÿชˆ fly ๐Ÿชฐ -fog ๐ŸŒซ +fog ๐ŸŒซ\u{FE0F} folder ๐Ÿ“ .open ๐Ÿ“‚ fondue ๐Ÿซ• foot ๐Ÿฆถ -football โšฝ +football โšฝ\u{FE0F} .am ๐Ÿˆ forex ๐Ÿ’ฑ -fountain โ›ฒ +fountain โ›ฒ\u{FE0F} fox ๐ŸฆŠ free ๐Ÿ†“ fries ๐ŸŸ frisbee ๐Ÿฅ frog .face ๐Ÿธ -fuelpump โ›ฝ +fuelpump โ›ฝ\u{FE0F} garlic ๐Ÿง„ -gear โš™ +gear โš™\u{FE0F} gem ๐Ÿ’Ž genie ๐Ÿงž ghost ๐Ÿ‘ป @@ -652,18 +652,18 @@ glass .milk ๐Ÿฅ› .pour ๐Ÿซ— .tumbler ๐Ÿฅƒ -glasses ๐Ÿ‘“ - .sun ๐Ÿ•ถ +glasses ๐Ÿ‘“\u{FE0F} + .sun ๐Ÿ•ถ\u{FE0F} globe - .am ๐ŸŒŽ - .as.au ๐ŸŒ - .eu.af ๐ŸŒ + .am ๐ŸŒŽ\u{FE0F} + .as.au ๐ŸŒ\u{FE0F} + .eu.af ๐ŸŒ\u{FE0F} .meridian ๐ŸŒ gloves ๐Ÿงค goal ๐Ÿฅ… goat ๐Ÿ goggles ๐Ÿฅฝ -golfing ๐ŸŒ +golfing ๐ŸŒ\u{FE0F} goose ๐Ÿชฟ gorilla ๐Ÿฆ grapes ๐Ÿ‡ @@ -674,13 +674,13 @@ gymnastics ๐Ÿคธ haircut ๐Ÿ’‡ hairpick ๐Ÿชฎ hammer ๐Ÿ”จ - .pick โš’ - .wrench ๐Ÿ›  + .pick โš’\u{FE0F} + .wrench ๐Ÿ› \u{FE0F} hamsa ๐Ÿชฌ hamster .face ๐Ÿน hand - .raised โœ‹ + .raised โœ‹\u{FE0F} .raised.alt ๐Ÿคš .r ๐Ÿซฑ .l ๐Ÿซฒ @@ -690,14 +690,14 @@ hand .call ๐Ÿค™ .love ๐ŸคŸ .part ๐Ÿ–– - .peace โœŒ + .peace โœŒ\u{FE0F} .pinch ๐Ÿค .pushing.l ๐Ÿซท .pushing.r ๐Ÿซธ .rock ๐Ÿค˜ - .splay ๐Ÿ– + .splay ๐Ÿ–\u{FE0F} .wave ๐Ÿ‘‹ - .write โœ + .write โœ\u{FE0F} handbag ๐Ÿ‘œ handball ๐Ÿคพ handfan ๐Ÿชญ @@ -718,8 +718,8 @@ hash #\u{FE0F} hat .ribbon ๐Ÿ‘’ .top ๐ŸŽฉ -headphone ๐ŸŽง -heart โค +headphone ๐ŸŽง\u{FE0F} +heart โค\u{FE0F} .arrow ๐Ÿ’˜ .beat ๐Ÿ’“ .black ๐Ÿ–ค @@ -728,7 +728,7 @@ heart โค .broken ๐Ÿ’” .brown ๐ŸคŽ .double ๐Ÿ’• - .excl โฃ + .excl โฃ\u{FE0F} .gray ๐Ÿฉถ .green ๐Ÿ’š .grow ๐Ÿ’— @@ -746,11 +746,11 @@ hedgehog ๐Ÿฆ” helicopter ๐Ÿš helix ๐Ÿงฌ helmet - .cross โ›‘ + .cross โ›‘\u{FE0F} .military ๐Ÿช– hippo ๐Ÿฆ› hockey ๐Ÿ‘ -hole ๐Ÿ•ณ +hole ๐Ÿ•ณ\u{FE0F} honey ๐Ÿฏ hongbao ๐Ÿงง hook ๐Ÿช @@ -764,13 +764,13 @@ hospital ๐Ÿฅ hotdog ๐ŸŒญ hotel ๐Ÿจ .love ๐Ÿฉ -hotspring โ™จ -hourglass โŒ› - .flow โณ -house ๐Ÿ  - .derelict ๐Ÿš +hotspring โ™จ\u{FE0F} +hourglass โŒ›\u{FE0F} + .flow โณ\u{FE0F} +house ๐Ÿ \u{FE0F} + .derelict ๐Ÿš\u{FE0F} .garden ๐Ÿก - .multiple ๐Ÿ˜ + .multiple ๐Ÿ˜\u{FE0F} hundred ๐Ÿ’ฏ hut ๐Ÿ›– ice ๐ŸงŠ @@ -779,69 +779,69 @@ icecream ๐Ÿจ .soft ๐Ÿฆ icehockey ๐Ÿ’ id ๐Ÿ†” -info โ„น +info โ„น\u{FE0F} izakaya ๐Ÿฎ jar ๐Ÿซ™ jellyfish ๐Ÿชผ jeans ๐Ÿ‘– jigsaw ๐Ÿงฉ -joystick ๐Ÿ•น +joystick ๐Ÿ•น\u{FE0F} juggling ๐Ÿคน juice ๐Ÿงƒ kaaba ๐Ÿ•‹ kadomatsu ๐ŸŽ kangaroo ๐Ÿฆ˜ -gachi ๐Ÿˆท +gachi ๐Ÿˆท\u{FE0F} go ๐Ÿˆด -hi ใŠ™ +hi ใŠ™\u{FE0F} ka ๐Ÿ‰‘ kachi ๐Ÿˆน kara ๐Ÿˆณ kon ๐Ÿˆฒ man ๐Ÿ‘จ - .box ๐Ÿšน + .box ๐Ÿšน\u{FE0F} .crown ๐Ÿคด .guapimao ๐Ÿ‘ฒ - .levitate ๐Ÿ•ด + .levitate ๐Ÿ•ด\u{FE0F} .old ๐Ÿ‘ด .pregnant ๐Ÿซƒ .turban ๐Ÿ‘ณ .tuxedo ๐Ÿคต -muryo ๐Ÿˆš +muryo ๐Ÿˆš\u{FE0F} shin ๐Ÿˆธ -shuku ใŠ— +shuku ใŠ—\u{FE0F} toku ๐Ÿ‰ yo ๐Ÿˆบ -yubi ๐Ÿˆฏ +yubi ๐Ÿˆฏ\u{FE0F} yuryo ๐Ÿˆถ koko ๐Ÿˆ -sa ๐Ÿˆ‚ +sa ๐Ÿˆ‚\u{FE0F} kebab ๐Ÿฅ™ key ๐Ÿ”‘ - .old ๐Ÿ— -keyboard โŒจ + .old ๐Ÿ—\u{FE0F} +keyboard โŒจ\u{FE0F} kiss ๐Ÿ’ kissmark ๐Ÿ’‹ kite ๐Ÿช kiwi ๐Ÿฅ knife ๐Ÿ”ช - .dagger ๐Ÿ—ก + .dagger ๐Ÿ—ก\u{FE0F} knot ๐Ÿชข koala ๐Ÿจ koinobori ๐ŸŽ -label ๐Ÿท +label ๐Ÿท\u{FE0F} lacrosse ๐Ÿฅ ladder ๐Ÿชœ lamp .diya ๐Ÿช” -laptop ๐Ÿ’ป -a ๐Ÿ…ฐ +laptop ๐Ÿ’ป\u{FE0F} +a ๐Ÿ…ฐ\u{FE0F} ab ๐Ÿ†Ž -b ๐Ÿ…ฑ +b ๐Ÿ…ฑ\u{FE0F} cl ๐Ÿ†‘ -o ๐Ÿ…พ +o ๐Ÿ…พ\u{FE0F} leaf - .clover.three โ˜˜ + .clover.three โ˜˜\u{FE0F} .clover.four ๐Ÿ€ .fall ๐Ÿ‚ .herb ๐ŸŒฟ @@ -856,7 +856,7 @@ letter .love ๐Ÿ’Œ liberty ๐Ÿ—ฝ lightbulb ๐Ÿ’ก -lightning โšก +lightning โšก\u{FE0F} lion ๐Ÿฆ lipstick ๐Ÿ’„ litter ๐Ÿšฎ @@ -864,9 +864,9 @@ litter ๐Ÿšฎ lizard ๐ŸฆŽ llama ๐Ÿฆ™ lobster ๐Ÿฆž -lock ๐Ÿ”’ +lock ๐Ÿ”’\u{FE0F} .key ๐Ÿ” - .open ๐Ÿ”“ + .open ๐Ÿ”“\u{FE0F} .pen ๐Ÿ” lollipop ๐Ÿญ lotion ๐Ÿงด @@ -876,24 +876,24 @@ mage ๐Ÿง™ magnet ๐Ÿงฒ magnify .r ๐Ÿ”Ž - .l ๐Ÿ” + .l ๐Ÿ”\u{FE0F} mahjong - .dragon.red ๐Ÿ€„ -mail โœ‰ + .dragon.red ๐Ÿ€„\u{FE0F} +mail โœ‰\u{FE0F} .arrow ๐Ÿ“ฉ mailbox - .closed.empty ๐Ÿ“ช - .closed.full ๐Ÿ“ซ - .open.empty ๐Ÿ“ญ - .open.full ๐Ÿ“ฌ + .closed.empty ๐Ÿ“ช\u{FE0F} + .closed.full ๐Ÿ“ซ\u{FE0F} + .open.empty ๐Ÿ“ญ\u{FE0F} + .open.full ๐Ÿ“ฌ\u{FE0F} mammoth ๐Ÿฆฃ mango ๐Ÿฅญ map - .world ๐Ÿ—บ + .world ๐Ÿ—บ\u{FE0F} .jp ๐Ÿ—พ maracas ๐Ÿช‡ martialarts ๐Ÿฅ‹ -masks ๐ŸŽญ +masks ๐ŸŽญ\u{FE0F} mate ๐Ÿง‰ matryoshka ๐Ÿช† meat ๐Ÿฅฉ @@ -903,21 +903,21 @@ medal .second ๐Ÿฅˆ .third ๐Ÿฅ‰ .sports ๐Ÿ… - .military ๐ŸŽ– + .military ๐ŸŽ–\u{FE0F} megaphone ๐Ÿ“ข .simple ๐Ÿ“ฃ melon ๐Ÿˆ merperson ๐Ÿงœ -metro โ“‚ +metro โ“‚\u{FE0F} microbe ๐Ÿฆ  microphone ๐ŸŽค - .studio ๐ŸŽ™ + .studio ๐ŸŽ™\u{FE0F} microscope ๐Ÿ”ฌ milkyway ๐ŸŒŒ mirror ๐Ÿชž -mixer ๐ŸŽ› +mixer ๐ŸŽ›\u{FE0F} money - .bag ๐Ÿ’ฐ + .bag ๐Ÿ’ฐ\u{FE0F} .dollar ๐Ÿ’ต .euro ๐Ÿ’ถ .pound ๐Ÿ’ท @@ -930,27 +930,27 @@ monkey ๐Ÿ’ .speak.not ๐Ÿ™Š moon .crescent ๐ŸŒ™ - .full ๐ŸŒ• + .full ๐ŸŒ•\u{FE0F} .full.face ๐ŸŒ .new ๐ŸŒ‘ .new.face ๐ŸŒš .wane.one ๐ŸŒ– .wane.two ๐ŸŒ— - .wane.three.face ๐ŸŒœ + .wane.three.face ๐ŸŒœ\u{FE0F} .wane.three ๐ŸŒ˜ .wax.one ๐ŸŒ’ .wax.two ๐ŸŒ“ .wax.two.face ๐ŸŒ› .wax.three ๐ŸŒ” moose ๐ŸซŽ -mortarboard ๐ŸŽ“ +mortarboard ๐ŸŽ“\u{FE0F} mosque ๐Ÿ•Œ mosquito ๐ŸฆŸ -motorcycle ๐Ÿ -motorway ๐Ÿ›ฃ -mountain โ›ฐ +motorcycle ๐Ÿ\u{FE0F} +motorway ๐Ÿ›ฃ\u{FE0F} +mountain โ›ฐ\u{FE0F} .fuji ๐Ÿ—ป - .snow ๐Ÿ” + .snow ๐Ÿ”\u{FE0F} .sunrise ๐ŸŒ„ mouse ๐Ÿ .face ๐Ÿญ @@ -958,7 +958,7 @@ mousetrap ๐Ÿชค mouth ๐Ÿ‘„ .bite ๐Ÿซฆ moyai ๐Ÿ—ฟ -museum ๐Ÿ› +museum ๐Ÿ›\u{FE0F} mushroom ๐Ÿ„ musicalscore ๐ŸŽผ nails @@ -972,21 +972,21 @@ nest .eggs ๐Ÿชบ new ๐Ÿ†• newspaper ๐Ÿ“ฐ - .rolled ๐Ÿ—ž + .rolled ๐Ÿ—ž\u{FE0F} ng ๐Ÿ†– ningyo ๐ŸŽŽ ninja ๐Ÿฅท -noentry โ›” +noentry โ›”\u{FE0F} nose ๐Ÿ‘ƒ notebook ๐Ÿ““ .deco ๐Ÿ“” -notepad ๐Ÿ—’ +notepad ๐Ÿ—’\u{FE0F} notes ๐ŸŽต .triple ๐ŸŽถ numbers ๐Ÿ”ข octopus ๐Ÿ™ office ๐Ÿข -oil ๐Ÿ›ข +oil ๐Ÿ›ข\u{FE0F} ok ๐Ÿ†— olive ๐Ÿซ’ oni ๐Ÿ‘น @@ -996,23 +996,23 @@ otter ๐Ÿฆฆ owl ๐Ÿฆ‰ ox ๐Ÿ‚ oyster ๐Ÿฆช -package ๐Ÿ“ฆ +package ๐Ÿ“ฆ\u{FE0F} paella ๐Ÿฅ˜ page ๐Ÿ“„ .curl ๐Ÿ“ƒ .pencil ๐Ÿ“ -pager ๐Ÿ“Ÿ +pager ๐Ÿ“Ÿ\u{FE0F} pages .tabs ๐Ÿ“‘ -painting ๐Ÿ–ผ +painting ๐Ÿ–ผ\u{FE0F} palette ๐ŸŽจ pancakes ๐Ÿฅž panda ๐Ÿผ parachute ๐Ÿช‚ -park ๐Ÿž -parking ๐Ÿ…ฟ +park ๐Ÿž\u{FE0F} +parking ๐Ÿ…ฟ\u{FE0F} parrot ๐Ÿฆœ -partalteration ใ€ฝ +partalteration ใ€ฝ\u{FE0F} party ๐ŸŽ‰ peach ๐Ÿ‘ peacock ๐Ÿฆš @@ -1022,12 +1022,12 @@ pear ๐Ÿ pedestrian ๐Ÿšถ .not ๐Ÿšท pen - .ball ๐Ÿ–Š - .fountain ๐Ÿ–‹ -pencil โœ + .ball ๐Ÿ–Š\u{FE0F} + .fountain ๐Ÿ–‹\u{FE0F} +pencil โœ\u{FE0F} penguin ๐Ÿง pepper ๐Ÿซ‘ - .hot ๐ŸŒถ + .hot ๐ŸŒถ\u{FE0F} person ๐Ÿง‘ .angry ๐Ÿ™Ž .beard ๐Ÿง” @@ -1053,14 +1053,14 @@ person ๐Ÿง‘ petri ๐Ÿงซ phone ๐Ÿ“ฑ .arrow ๐Ÿ“ฒ - .classic โ˜Ž + .classic โ˜Ž\u{FE0F} .not ๐Ÿ“ต .off ๐Ÿ“ด .receiver ๐Ÿ“ž .signal ๐Ÿ“ถ .vibrate ๐Ÿ“ณ piano ๐ŸŽน -pick โ› +pick โ›\u{FE0F} pie ๐Ÿฅง pig ๐Ÿ– .face ๐Ÿท @@ -1078,23 +1078,23 @@ planet ๐Ÿช plant ๐Ÿชด plaster ๐Ÿฉน plate - .cutlery ๐Ÿฝ + .cutlery ๐Ÿฝ\u{FE0F} playback - .down โฌ - .eject โ - .forward โฉ - .pause โธ - .record โบ + .down โฌ\u{FE0F} + .eject โ\u{FE0F} + .forward โฉ\u{FE0F} + .pause โธ\u{FE0F} + .record โบ\u{FE0F} .repeat ๐Ÿ” .repeat.once ๐Ÿ”‚ .repeat.v ๐Ÿ”ƒ - .restart โฎ - .rewind โช + .restart โฎ\u{FE0F} + .rewind โช\u{FE0F} .shuffle ๐Ÿ”€ - .skip โญ - .stop โน - .toggle โฏ - .up โซ + .skip โญ\u{FE0F} + .stop โน\u{FE0F} + .toggle โฏ\u{FE0F} + .up โซ\u{FE0F} playingcard .flower ๐ŸŽด .joker ๐Ÿƒ @@ -1112,34 +1112,34 @@ pouch ๐Ÿ‘ powerplug ๐Ÿ”Œ present ๐ŸŽ pretzel ๐Ÿฅจ -printer ๐Ÿ–จ +printer ๐Ÿ–จ\u{FE0F} prints .foot ๐Ÿ‘ฃ .paw ๐Ÿพ prohibited ๐Ÿšซ -projector ๐Ÿ“ฝ +projector ๐Ÿ“ฝ\u{FE0F} pumpkin .lantern ๐ŸŽƒ purse ๐Ÿ‘› -quest โ“ - .white โ” +quest โ“\u{FE0F} + .white โ”\u{FE0F} rabbit ๐Ÿ‡ .face ๐Ÿฐ raccoon ๐Ÿฆ -radio ๐Ÿ“ป -radioactive โ˜ข -railway ๐Ÿ›ค +radio ๐Ÿ“ป\u{FE0F} +radioactive โ˜ข\u{FE0F} +railway ๐Ÿ›ค\u{FE0F} rainbow ๐ŸŒˆ ram ๐Ÿ rat ๐Ÿ€ razor ๐Ÿช’ receipt ๐Ÿงพ -recycling โ™ป +recycling โ™ป\u{FE0F} reg ยฎ\u{FE0F} restroom ๐Ÿšป rhino ๐Ÿฆ ribbon ๐ŸŽ€ - .remind ๐ŸŽ— + .remind ๐ŸŽ—\u{FE0F} rice ๐Ÿš .cracker ๐Ÿ˜ .ear ๐ŸŒพ @@ -1150,7 +1150,7 @@ robot ๐Ÿค– rock ๐Ÿชจ rocket ๐Ÿš€ rollercoaster ๐ŸŽข -rosette ๐Ÿต +rosette ๐Ÿต\u{FE0F} rugby ๐Ÿ‰ ruler ๐Ÿ“ .triangle ๐Ÿ“ @@ -1165,13 +1165,13 @@ santa .man ๐ŸŽ… .woman ๐Ÿคถ satdish ๐Ÿ“ก -satellite ๐Ÿ›ฐ +satellite ๐Ÿ›ฐ\u{FE0F} saw ๐Ÿชš saxophone ๐ŸŽท -scales โš– +scales โš–\u{FE0F} scarf ๐Ÿงฃ school ๐Ÿซ -scissors โœ‚ +scissors โœ‚\u{FE0F} scooter ๐Ÿ›ด .motor ๐Ÿ›ต scorpion ๐Ÿฆ‚ @@ -1184,10 +1184,10 @@ shark ๐Ÿฆˆ sheep ๐Ÿ‘ shell .spiral ๐Ÿš -shield ๐Ÿ›ก +shield ๐Ÿ›ก\u{FE0F} ship ๐Ÿšข - .cruise ๐Ÿ›ณ - .ferry โ›ด + .cruise ๐Ÿ›ณ\u{FE0F} + .ferry โ›ด\u{FE0F} shirt .sports ๐ŸŽฝ .t ๐Ÿ‘• @@ -1196,48 +1196,48 @@ shoe ๐Ÿ‘ž .flat ๐Ÿฅฟ .heel ๐Ÿ‘  .hike ๐Ÿฅพ - .ice โ›ธ + .ice โ›ธ\u{FE0F} .roller ๐Ÿ›ผ .sandal.heel ๐Ÿ‘ก .ski ๐ŸŽฟ .sneaker ๐Ÿ‘Ÿ .tall ๐Ÿ‘ข .thong ๐Ÿฉด -shopping ๐Ÿ› +shopping ๐Ÿ›\u{FE0F} shorts ๐Ÿฉณ shoshinsha ๐Ÿ”ฐ shovel ๐Ÿช shower ๐Ÿšฟ shrimp ๐Ÿฆ .fried ๐Ÿค -shrine โ›ฉ +shrine โ›ฉ\u{FE0F} sign .crossing ๐Ÿšธ .stop ๐Ÿ›‘ silhouette ๐Ÿ‘ค .double ๐Ÿ‘ฅ .hug ๐Ÿซ‚ - .speak ๐Ÿ—ฃ + .speak ๐Ÿ—ฃ\u{FE0F} siren ๐Ÿšจ skateboard ๐Ÿ›น skewer .dango ๐Ÿก .oden ๐Ÿข -skiing โ›ท +skiing โ›ท\u{FE0F} skull ๐Ÿ’€ - .bones โ˜  + .bones โ˜ \u{FE0F} skunk ๐Ÿฆจ sled ๐Ÿ›ท slide ๐Ÿ› -slider ๐ŸŽš +slider ๐ŸŽš\u{FE0F} sloth ๐Ÿฆฅ slots ๐ŸŽฐ snail ๐ŸŒ snake ๐Ÿ -snowboarding ๐Ÿ‚ -snowflake โ„ -snowman โ›„ - .snow โ˜ƒ +snowboarding ๐Ÿ‚\u{FE0F} +snowflake โ„\u{FE0F} +snowman โ›„\u{FE0F} + .snow โ˜ƒ\u{FE0F} soap ๐Ÿงผ socks ๐Ÿงฆ softball ๐ŸฅŽ @@ -1245,15 +1245,15 @@ sos ๐Ÿ†˜ soup ๐Ÿฒ spaghetti ๐Ÿ sparkle - .box โ‡ + .box โ‡\u{FE0F} sparkler ๐ŸŽ‡ -sparkles โœจ -speaker ๐Ÿ”ˆ +sparkles โœจ\u{FE0F} +speaker ๐Ÿ”ˆ\u{FE0F} .not ๐Ÿ”‡ .wave ๐Ÿ”‰ .waves ๐Ÿ”Š -spider ๐Ÿ•ท -spiderweb ๐Ÿ•ธ +spider ๐Ÿ•ท\u{FE0F} +spiderweb ๐Ÿ•ธ\u{FE0F} spinach ๐Ÿฅฌ splatter ๐ŸซŸ sponge ๐Ÿงฝ @@ -1275,10 +1275,10 @@ square .red ๐ŸŸฅ .yellow ๐ŸŸจ squid ๐Ÿฆ‘ -stadium ๐ŸŸ -star โญ +stadium ๐ŸŸ\u{FE0F} +star โญ\u{FE0F} .arc ๐Ÿ’ซ - .box โœด + .box โœด\u{FE0F} .glow ๐ŸŒŸ .shoot ๐ŸŒ  stethoscope ๐Ÿฉบ @@ -1291,18 +1291,18 @@ suit .diamond โ™ฆ\u{FE0F} .heart โ™ฅ\u{FE0F} .spade โ™ \u{FE0F} -sun โ˜€ - .cloud ๐ŸŒค +sun โ˜€\u{FE0F} + .cloud ๐ŸŒค\u{FE0F} .face ๐ŸŒž sunrise ๐ŸŒ… superhero ๐Ÿฆธ supervillain ๐Ÿฆน -surfing ๐Ÿ„ +surfing ๐Ÿ„\u{FE0F} sushi ๐Ÿฃ swan ๐Ÿฆข -swimming ๐ŸŠ +swimming ๐ŸŠ\u{FE0F} swimsuit ๐Ÿฉฑ -swords โš” +swords โš”\u{FE0F} symbols ๐Ÿ”ฃ synagogue ๐Ÿ• syringe ๐Ÿ’‰ @@ -1323,15 +1323,15 @@ temple ๐Ÿ›• ten ๐Ÿ”Ÿ tengu ๐Ÿ‘บ tennis ๐ŸŽพ -tent โ›บ +tent โ›บ\u{FE0F} testtube ๐Ÿงช -thermometer ๐ŸŒก +thermometer ๐ŸŒก\u{FE0F} thread ๐Ÿงต thumb - .up ๐Ÿ‘ - .down ๐Ÿ‘Ž + .up ๐Ÿ‘\u{FE0F} + .down ๐Ÿ‘Ž\u{FE0F} ticket - .event ๐ŸŽŸ + .event ๐ŸŽŸ\u{FE0F} .travel ๐ŸŽซ tiger ๐Ÿ… .face ๐Ÿฏ @@ -1344,10 +1344,10 @@ tongue ๐Ÿ‘… toolbox ๐Ÿงฐ tooth ๐Ÿฆท toothbrush ๐Ÿชฅ -tornado ๐ŸŒช +tornado ๐ŸŒช\u{FE0F} tower .tokyo ๐Ÿ—ผ -trackball ๐Ÿ–ฒ +trackball ๐Ÿ–ฒ\u{FE0F} tractor ๐Ÿšœ trafficlight .v ๐Ÿšฆ @@ -1355,7 +1355,7 @@ trafficlight train ๐Ÿš† .car ๐Ÿšƒ .light ๐Ÿšˆ - .metro ๐Ÿš‡ + .metro ๐Ÿš‡\u{FE0F} .mono ๐Ÿš .mountain ๐Ÿšž .speed ๐Ÿš„ @@ -1365,11 +1365,11 @@ train ๐Ÿš† .suspend ๐ŸšŸ .tram ๐ŸšŠ .tram.car ๐Ÿš‹ -transgender โšง +transgender โšง\u{FE0F} tray - .inbox ๐Ÿ“ฅ + .inbox ๐Ÿ“ฅ\u{FE0F} .mail ๐Ÿ“จ - .outbox ๐Ÿ“ค + .outbox ๐Ÿ“ค\u{FE0F} tree .deciduous ๐ŸŒณ .evergreen ๐ŸŒฒ @@ -1385,24 +1385,24 @@ triangle .b.red ๐Ÿ”ป trident ๐Ÿ”ฑ troll ๐ŸงŒ -trophy ๐Ÿ† +trophy ๐Ÿ†\u{FE0F} truck ๐Ÿšš .trailer ๐Ÿš› trumpet ๐ŸŽบ tsukimi ๐ŸŽ‘ turkey ๐Ÿฆƒ turtle ๐Ÿข -tv ๐Ÿ“บ +tv ๐Ÿ“บ\u{FE0F} ufo ๐Ÿ›ธ umbrella - .open โ˜‚ + .open โ˜‚\u{FE0F} .closed ๐ŸŒ‚ - .rain โ˜” - .sun โ›ฑ + .rain โ˜”\u{FE0F} + .sun โ›ฑ\u{FE0F} unicorn ๐Ÿฆ„ unknown ๐Ÿฆณ up ๐Ÿ†™ -urn โšฑ +urn โšฑ\u{FE0F} vampire ๐Ÿง› violin ๐ŸŽป volcano ๐ŸŒ‹ @@ -1410,21 +1410,21 @@ volleyball ๐Ÿ vs ๐Ÿ†š waffle ๐Ÿง‡ wand ๐Ÿช„ -warning โš  -watch โŒš - .stop โฑ +warning โš \u{FE0F} +watch โŒš\u{FE0F} + .stop โฑ\u{FE0F} watermelon ๐Ÿ‰ waterpolo ๐Ÿคฝ wave ๐ŸŒŠ wc ๐Ÿšพ -weightlifting ๐Ÿ‹ +weightlifting ๐Ÿ‹\u{FE0F} whale ๐Ÿ‹ .spout ๐Ÿณ wheel ๐Ÿ›ž wheelchair ๐Ÿฆฝ - .box โ™ฟ + .box โ™ฟ\u{FE0F} .motor ๐Ÿฆผ -wind ๐ŸŒฌ +wind ๐ŸŒฌ\u{FE0F} windchime ๐ŸŽ window ๐ŸชŸ wine ๐Ÿท @@ -1432,7 +1432,7 @@ wing ๐Ÿชฝ wireless ๐Ÿ›œ wolf ๐Ÿบ woman ๐Ÿ‘ฉ - .box ๐Ÿšบ + .box ๐Ÿšบ\u{FE0F} .crown ๐Ÿ‘ธ .old ๐Ÿ‘ต .pregnant ๐Ÿคฐ @@ -1445,18 +1445,18 @@ yarn ๐Ÿงถ yoyo ๐Ÿช€ zebra ๐Ÿฆ“ zodiac - .aquarius โ™’ - .aries โ™ˆ - .cancer โ™‹ - .capri โ™‘ - .gemini โ™Š - .leo โ™Œ - .libra โ™Ž - .ophi โ›Ž - .pisces โ™“ - .sagit โ™ - .scorpio โ™ - .taurus โ™‰ - .virgo โ™ + .aquarius โ™’\u{FE0F} + .aries โ™ˆ\u{FE0F} + .cancer โ™‹\u{FE0F} + .capri โ™‘\u{FE0F} + .gemini โ™Š\u{FE0F} + .leo โ™Œ\u{FE0F} + .libra โ™Ž\u{FE0F} + .ophi โ›Ž\u{FE0F} + .pisces โ™“\u{FE0F} + .sagit โ™\u{FE0F} + .scorpio โ™\u{FE0F} + .taurus โ™‰\u{FE0F} + .virgo โ™\u{FE0F} zombie ๐ŸงŸ zzz ๐Ÿ’ค diff --git a/src/modules/sym.txt b/src/modules/sym.txt index 2fcf910..d426b67 100644 --- a/src/modules/sym.txt +++ b/src/modules/sym.txt @@ -163,8 +163,8 @@ dash .o โŠ @deprecated: `dash.circle` is deprecated, use `dash.o` instead .circle โŠ - .wave ใ€œ\u{FE0F} - .wave.double ใ€ฐ + .wave ใ€œ + .wave.double ใ€ฐ\u{FE0E} dot .op โ‹… .basic \u{2E} @@ -630,7 +630,7 @@ perp โŸ‚ earth ๐Ÿœจ .alt โ™ jupiter โ™ƒ -mars โ™‚ +mars โ™‚\u{FE0E} mercury โ˜ฟ neptune โ™† .alt โฏ‰ @@ -638,7 +638,7 @@ saturn โ™„ sun โ˜‰ uranus โ›ข .alt โ™… -venus โ™€ +venus โ™€\u{FE0E} // Miscellaneous Technical. diameter โŒ€ @@ -1269,16 +1269,16 @@ errorbar .circle.filled โงณ gender { - female โ™€ + female โ™€\u{FE0E} .double โšข .male โšค intersex โšฅ - male โ™‚ + male โ™‚\u{FE0E} .double โšฃ .female โšค .stroke โšฆ .stroke.t โšจ .stroke.r โšฉ neuter โšฒ - trans โšง + trans โšง\u{FE0E} } From 84f7d3e1ad4b503ce1c117dc95dbf526f082fdbb Mon Sep 17 00:00:00 2001 From: Malo <57839069+MDLC01@users.noreply.github.com> Date: Tue, 5 Aug 2025 13:08:32 +0200 Subject: [PATCH 05/10] Download file on build and add `_test-unicode-conformance` feature --- .github/workflows/ci.yml | 2 +- Cargo.lock | 1564 ++++---------------------------------- Cargo.toml | 5 +- build.rs | 12 + src/lib.rs | 10 +- 5 files changed, 174 insertions(+), 1419 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fe3508d..c4fa7fa 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,4 +8,4 @@ jobs: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable - run: cargo build - - run: cargo test + - run: cargo test --features=_test-unicode-conformance diff --git a/Cargo.lock b/Cargo.lock index 6eb2305..b914a74 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3,1360 +3,271 @@ version = 4 [[package]] -name = "addr2line" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" -dependencies = [ - "gimli", -] - -[[package]] -name = "adler2" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" - -[[package]] -name = "atomic-waker" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" - -[[package]] -name = "backtrace" -version = "0.3.75" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "windows-targets 0.52.6", -] - -[[package]] -name = "base64" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" - -[[package]] -name = "bitflags" -version = "2.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" - -[[package]] -name = "bumpalo" -version = "3.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" - -[[package]] -name = "bytes" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" - -[[package]] -name = "cc" -version = "1.2.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7" -dependencies = [ - "shlex", -] - -[[package]] -name = "cfg-if" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" - -[[package]] -name = "codex" -version = "0.1.1" -dependencies = [ - "reqwest", -] - -[[package]] -name = "core-foundation" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" - -[[package]] -name = "displaydoc" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "encoding_rs" -version = "0.8.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - -[[package]] -name = "errno" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" -dependencies = [ - "libc", - "windows-sys 0.60.2", -] - -[[package]] -name = "fastrand" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - -[[package]] -name = "form_urlencoded" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "futures-channel" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" - -[[package]] -name = "futures-io" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" - -[[package]] -name = "futures-sink" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" - -[[package]] -name = "futures-task" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" - -[[package]] -name = "futures-util" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" -dependencies = [ - "futures-core", - "futures-io", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "getrandom" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.11.1+wasi-snapshot-preview1", -] - -[[package]] -name = "getrandom" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" -dependencies = [ - "cfg-if", - "libc", - "r-efi", - "wasi 0.14.2+wasi-0.2.4", -] - -[[package]] -name = "gimli" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" - -[[package]] -name = "h2" -version = "0.4.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17da50a276f1e01e0ba6c029e47b7100754904ee8a278f886546e98575380785" -dependencies = [ - "atomic-waker", - "bytes", - "fnv", - "futures-core", - "futures-sink", - "http", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "hashbrown" -version = "0.15.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" - -[[package]] -name = "http" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" -dependencies = [ - "bytes", - "http", -] - -[[package]] -name = "http-body-util" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" -dependencies = [ - "bytes", - "futures-core", - "http", - "http-body", - "pin-project-lite", -] - -[[package]] -name = "httparse" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" - -[[package]] -name = "hyper" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" -dependencies = [ - "bytes", - "futures-channel", - "futures-util", - "h2", - "http", - "http-body", - "httparse", - "itoa", - "pin-project-lite", - "smallvec", - "tokio", - "want", -] - -[[package]] -name = "hyper-rustls" -version = "0.27.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" -dependencies = [ - "http", - "hyper", - "hyper-util", - "rustls", - "rustls-pki-types", - "tokio", - "tokio-rustls", - "tower-service", -] - -[[package]] -name = "hyper-tls" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" -dependencies = [ - "bytes", - "http-body-util", - "hyper", - "hyper-util", - "native-tls", - "tokio", - "tokio-native-tls", - "tower-service", -] - -[[package]] -name = "hyper-util" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e" -dependencies = [ - "base64", - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "http", - "http-body", - "hyper", - "ipnet", - "libc", - "percent-encoding", - "pin-project-lite", - "socket2 0.6.0", - "system-configuration", - "tokio", - "tower-service", - "tracing", - "windows-registry", -] - -[[package]] -name = "icu_collections" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" -dependencies = [ - "displaydoc", - "potential_utf", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_locale_core" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" -dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", -] - -[[package]] -name = "icu_normalizer" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" -dependencies = [ - "displaydoc", - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "zerovec", -] - -[[package]] -name = "icu_normalizer_data" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" - -[[package]] -name = "icu_properties" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" -dependencies = [ - "displaydoc", - "icu_collections", - "icu_locale_core", - "icu_properties_data", - "icu_provider", - "potential_utf", - "zerotrie", - "zerovec", -] - -[[package]] -name = "icu_properties_data" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" - -[[package]] -name = "icu_provider" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" -dependencies = [ - "displaydoc", - "icu_locale_core", - "stable_deref_trait", - "tinystr", - "writeable", - "yoke", - "zerofrom", - "zerotrie", - "zerovec", -] - -[[package]] -name = "idna" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" -dependencies = [ - "idna_adapter", - "smallvec", - "utf8_iter", -] - -[[package]] -name = "idna_adapter" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" -dependencies = [ - "icu_normalizer", - "icu_properties", -] - -[[package]] -name = "indexmap" -version = "2.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" -dependencies = [ - "equivalent", - "hashbrown", -] - -[[package]] -name = "io-uring" -version = "0.7.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d93587f37623a1a17d94ef2bc9ada592f5465fe7732084ab7beefabe5c77c0c4" -dependencies = [ - "bitflags", - "cfg-if", - "libc", -] - -[[package]] -name = "ipnet" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" - -[[package]] -name = "iri-string" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" -dependencies = [ - "memchr", - "serde", -] - -[[package]] -name = "itoa" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" - -[[package]] -name = "js-sys" -version = "0.3.77" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" -dependencies = [ - "once_cell", - "wasm-bindgen", -] - -[[package]] -name = "libc" -version = "0.2.174" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" - -[[package]] -name = "linux-raw-sys" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" - -[[package]] -name = "litemap" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" - -[[package]] -name = "log" -version = "0.4.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" - -[[package]] -name = "memchr" -version = "2.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" - -[[package]] -name = "mime" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" - -[[package]] -name = "miniz_oxide" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" -dependencies = [ - "adler2", -] - -[[package]] -name = "mio" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" -dependencies = [ - "libc", - "wasi 0.11.1+wasi-snapshot-preview1", - "windows-sys 0.59.0", -] - -[[package]] -name = "native-tls" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" -dependencies = [ - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - -[[package]] -name = "object" -version = "0.36.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" -dependencies = [ - "memchr", -] - -[[package]] -name = "once_cell" -version = "1.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" - -[[package]] -name = "openssl" -version = "0.10.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" -dependencies = [ - "bitflags", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "openssl-probe" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" - -[[package]] -name = "openssl-sys" -version = "0.9.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "percent-encoding" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" - -[[package]] -name = "pin-project-lite" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkg-config" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" - -[[package]] -name = "potential_utf" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" -dependencies = [ - "zerovec", -] - -[[package]] -name = "proc-macro2" -version = "1.0.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "r-efi" -version = "5.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" - -[[package]] -name = "reqwest" -version = "0.12.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531" -dependencies = [ - "base64", - "bytes", - "encoding_rs", - "futures-channel", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "http-body-util", - "hyper", - "hyper-rustls", - "hyper-tls", - "hyper-util", - "js-sys", - "log", - "mime", - "native-tls", - "percent-encoding", - "pin-project-lite", - "rustls-pki-types", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper", - "tokio", - "tokio-native-tls", - "tower", - "tower-http", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "ring" -version = "0.17.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" -dependencies = [ - "cc", - "cfg-if", - "getrandom 0.2.16", - "libc", - "untrusted", - "windows-sys 0.52.0", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" - -[[package]] -name = "rustix" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" -dependencies = [ - "bitflags", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.60.2", -] - -[[package]] -name = "rustls" -version = "0.23.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2491382039b29b9b11ff08b76ff6c97cf287671dbb74f0be44bda389fffe9bd1" -dependencies = [ - "once_cell", - "rustls-pki-types", - "rustls-webpki", - "subtle", - "zeroize", -] - -[[package]] -name = "rustls-pki-types" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" -dependencies = [ - "zeroize", -] - -[[package]] -name = "rustls-webpki" -version = "0.103.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" -dependencies = [ - "ring", - "rustls-pki-types", - "untrusted", -] - -[[package]] -name = "rustversion" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" - -[[package]] -name = "ryu" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" - -[[package]] -name = "schannel" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" -dependencies = [ - "windows-sys 0.59.0", -] - -[[package]] -name = "security-framework" -version = "2.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" -dependencies = [ - "bitflags", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" -dependencies = [ - "core-foundation-sys", - "libc", -] - -[[package]] -name = "serde" -version = "1.0.219" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.219" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.141" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3" -dependencies = [ - "itoa", - "memchr", - "ryu", - "serde", -] - -[[package]] -name = "serde_urlencoded" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" -dependencies = [ - "form_urlencoded", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - -[[package]] -name = "slab" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" - -[[package]] -name = "smallvec" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" - -[[package]] -name = "socket2" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "socket2" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" -dependencies = [ - "libc", - "windows-sys 0.59.0", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - -[[package]] -name = "subtle" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" - -[[package]] -name = "syn" -version = "2.0.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "sync_wrapper" -version = "1.0.2" +name = "adler2" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" -dependencies = [ - "futures-core", -] +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] -name = "synstructure" -version = "0.13.2" +name = "base64" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] -name = "system-configuration" -version = "0.6.1" +name = "bytes" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" -dependencies = [ - "bitflags", - "core-foundation", - "system-configuration-sys", -] +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] -name = "system-configuration-sys" -version = "0.6.0" +name = "cc" +version = "1.2.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +checksum = "c3a42d84bb6b69d3a8b3eaacf0d88f179e1929695e1ad012b6cf64d9caaa5fd2" dependencies = [ - "core-foundation-sys", - "libc", + "shlex", ] [[package]] -name = "tempfile" -version = "3.20.0" +name = "cfg-if" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" -dependencies = [ - "fastrand", - "getrandom 0.3.3", - "once_cell", - "rustix", - "windows-sys 0.59.0", -] +checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" [[package]] -name = "tinystr" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +name = "codex" +version = "0.1.1" dependencies = [ - "displaydoc", - "zerovec", + "ureq", ] [[package]] -name = "tokio" -version = "1.46.1" +name = "crc32fast" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc3a2344dafbe23a245241fe8b09735b521110d30fcefbbd5feb1797ca35d17" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ - "backtrace", - "bytes", - "io-uring", - "libc", - "mio", - "pin-project-lite", - "slab", - "socket2 0.5.10", - "windows-sys 0.52.0", + "cfg-if", ] [[package]] -name = "tokio-native-tls" -version = "0.3.1" +name = "flate2" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" dependencies = [ - "native-tls", - "tokio", + "crc32fast", + "miniz_oxide", ] [[package]] -name = "tokio-rustls" -version = "0.26.2" +name = "fnv" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" -dependencies = [ - "rustls", - "tokio", -] +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] -name = "tokio-util" -version = "0.7.15" +name = "getrandom" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", + "cfg-if", + "libc", + "wasi", ] [[package]] -name = "tower" -version = "0.5.2" +name = "http" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" dependencies = [ - "futures-core", - "futures-util", - "pin-project-lite", - "sync_wrapper", - "tokio", - "tower-layer", - "tower-service", + "bytes", + "fnv", + "itoa", ] [[package]] -name = "tower-http" -version = "0.6.6" +name = "httparse" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" -dependencies = [ - "bitflags", - "bytes", - "futures-util", - "http", - "http-body", - "iri-string", - "pin-project-lite", - "tower", - "tower-layer", - "tower-service", -] +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] -name = "tower-layer" -version = "0.3.3" +name = "itoa" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] -name = "tower-service" -version = "0.3.3" +name = "libc" +version = "0.2.174" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" +checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" [[package]] -name = "tracing" -version = "0.1.41" +name = "log" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" -dependencies = [ - "pin-project-lite", - "tracing-core", -] +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] -name = "tracing-core" -version = "0.1.34" +name = "miniz_oxide" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ - "once_cell", + "adler2", ] [[package]] -name = "try-lock" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" - -[[package]] -name = "unicode-ident" -version = "1.0.18" +name = "once_cell" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] -name = "untrusted" -version = "0.9.0" +name = "percent-encoding" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] -name = "url" -version = "2.5.4" +name = "ring" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", + "cc", + "cfg-if", + "getrandom", + "libc", + "untrusted", + "windows-sys", ] [[package]] -name = "utf8_iter" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" - -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - -[[package]] -name = "want" -version = "0.3.1" +name = "rustls" +version = "0.23.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc" dependencies = [ - "try-lock", + "log", + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", ] [[package]] -name = "wasi" -version = "0.11.1+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" - -[[package]] -name = "wasi" -version = "0.14.2+wasi-0.2.4" +name = "rustls-pemfile" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "wit-bindgen-rt", + "rustls-pki-types", ] [[package]] -name = "wasm-bindgen" -version = "0.2.100" +name = "rustls-pki-types" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" dependencies = [ - "cfg-if", - "once_cell", - "rustversion", - "wasm-bindgen-macro", + "zeroize", ] [[package]] -name = "wasm-bindgen-backend" -version = "0.2.100" +name = "rustls-webpki" +version = "0.103.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", + "ring", + "rustls-pki-types", + "untrusted", ] [[package]] -name = "wasm-bindgen-futures" -version = "0.4.50" +name = "shlex" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" -dependencies = [ - "cfg-if", - "js-sys", - "once_cell", - "wasm-bindgen", - "web-sys", -] +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] -name = "wasm-bindgen-macro" -version = "0.2.100" +name = "subtle" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.100" +name = "untrusted" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] -name = "wasm-bindgen-shared" -version = "0.2.100" +name = "ureq" +version = "3.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "9f0fde9bc91026e381155f8c67cb354bcd35260b2f4a29bcc84639f762760c39" dependencies = [ - "unicode-ident", + "base64", + "flate2", + "log", + "percent-encoding", + "rustls", + "rustls-pemfile", + "rustls-pki-types", + "ureq-proto", + "utf-8", + "webpki-roots 0.26.11", ] [[package]] -name = "web-sys" -version = "0.3.77" +name = "ureq-proto" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "59db78ad1923f2b1be62b6da81fe80b173605ca0d57f85da2e005382adf693f7" dependencies = [ - "js-sys", - "wasm-bindgen", + "base64", + "http", + "httparse", + "log", ] [[package]] -name = "windows-link" -version = "0.1.3" +name = "utf-8" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" [[package]] -name = "windows-registry" -version = "0.5.3" +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" -dependencies = [ - "windows-link", - "windows-result", - "windows-strings", -] +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] -name = "windows-result" -version = "0.3.4" +name = "webpki-roots" +version = "0.26.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" dependencies = [ - "windows-link", + "webpki-roots 1.0.2", ] [[package]] -name = "windows-strings" -version = "0.4.2" +name = "webpki-roots" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2" dependencies = [ - "windows-link", + "rustls-pki-types", ] [[package]] @@ -1365,25 +276,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" -dependencies = [ - "windows-targets 0.53.2", + "windows-targets", ] [[package]] @@ -1392,30 +285,14 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm 0.52.6", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", -] - -[[package]] -name = "windows-targets" -version = "0.53.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef" -dependencies = [ - "windows_aarch64_gnullvm 0.53.0", - "windows_aarch64_msvc 0.53.0", - "windows_i686_gnu 0.53.0", - "windows_i686_gnullvm 0.53.0", - "windows_i686_msvc 0.53.0", - "windows_x86_64_gnu 0.53.0", - "windows_x86_64_gnullvm 0.53.0", - "windows_x86_64_msvc 0.53.0", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", ] [[package]] @@ -1424,191 +301,50 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" -[[package]] -name = "windows_aarch64_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" - [[package]] name = "windows_i686_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" -[[package]] -name = "windows_i686_gnu" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" - [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" -[[package]] -name = "windows_i686_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" - [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" -[[package]] -name = "windows_i686_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" -[[package]] -name = "windows_x86_64_gnu" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" - [[package]] name = "windows_x86_64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" -[[package]] -name = "windows_x86_64_msvc" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" - -[[package]] -name = "wit-bindgen-rt" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags", -] - -[[package]] -name = "writeable" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" - -[[package]] -name = "yoke" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" -dependencies = [ - "serde", - "stable_deref_trait", - "yoke-derive", - "zerofrom", -] - -[[package]] -name = "yoke-derive" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "synstructure", -] - -[[package]] -name = "zerofrom" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" -dependencies = [ - "zerofrom-derive", -] - -[[package]] -name = "zerofrom-derive" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "synstructure", -] - [[package]] name = "zeroize" version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" - -[[package]] -name = "zerotrie" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" -dependencies = [ - "displaydoc", - "yoke", - "zerofrom", -] - -[[package]] -name = "zerovec" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" -dependencies = [ - "yoke", - "zerofrom", - "zerovec-derive", -] - -[[package]] -name = "zerovec-derive" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] diff --git a/Cargo.toml b/Cargo.toml index 9eeb281..5103eb1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,6 +13,7 @@ keywords = ["unicode", "symbols"] [features] default = ["styling"] styling = [] +_test-unicode-conformance = ["ureq"] -[dev-dependencies] -reqwest = { version = "0.12.22", features = ["blocking"] } +[build-dependencies] +ureq = { version = "3.0.12", optional = true } diff --git a/build.rs b/build.rs index 2ef0bdd..85849c4 100644 --- a/build.rs +++ b/build.rs @@ -68,6 +68,18 @@ fn main() { let out = std::env::var_os("OUT_DIR").unwrap(); let dest = Path::new(&out).join("out.rs"); std::fs::write(&dest, buf).unwrap(); + + #[cfg(feature = "_test-unicode-conformance")] + std::fs::write( + Path::new(&out).join("emoji-variation-sequences.txt"), + ureq::get("https://www.unicode.org/Public/16.0.0/ucd/emoji/emoji-variation-sequences.txt") + .call() + .unwrap() + .body_mut() + .read_to_string() + .unwrap(), + ) + .unwrap(); } /// Processes a single file and turns it into a global module. diff --git a/src/lib.rs b/src/lib.rs index ac82708..362f4de 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -125,7 +125,9 @@ include!(concat!(env!("OUT_DIR"), "/out.rs")); #[cfg(test)] mod test { use super::*; - use std::collections::{BTreeSet, HashSet}; + use std::collections::BTreeSet; + #[cfg(feature = "_test-unicode-conformance")] + use std::collections::HashSet; #[test] fn all_modules_sorted() { @@ -219,8 +221,9 @@ mod test { /// Returns the list of presentation sequences defined by Unicode. /// /// See: https://www.unicode.org/reports/tr51/#Emoji_Variation_Sequences. + #[cfg(feature = "_test-unicode-conformance")] fn get_valid_presentation_sequences() -> HashSet { - reqwest::blocking::get("https://www.unicode.org/Public/UCD/latest/ucd/emoji/emoji-variation-sequences.txt").unwrap().text().unwrap() + include_str!(concat!(env!("OUT_DIR"), "/emoji-variation-sequences.txt")) .lines() .filter_map(|l| { let line = l.split('#').next().unwrap_or(l); @@ -239,6 +242,7 @@ mod test { .collect() } + #[cfg(feature = "_test-unicode-conformance")] #[test] fn no_invalid_presentation_sequence() { let sequences = get_valid_presentation_sequences(); @@ -256,6 +260,7 @@ mod test { ) } + #[cfg(feature = "_test-unicode-conformance")] #[test] fn symbols_have_text_presentation() { let require_presentation_selector = get_valid_presentation_sequences() @@ -271,6 +276,7 @@ mod test { ) } + #[cfg(feature = "_test-unicode-conformance")] #[test] fn emojis_have_emoji_presentation() { let require_presentation_selector = get_valid_presentation_sequences() From a94ed5b013fc7dfe5e33e2d7e2447efd183f6bea Mon Sep 17 00:00:00 2001 From: Malo <57839069+MDLC01@users.noreply.github.com> Date: Thu, 7 Aug 2025 15:20:36 +0200 Subject: [PATCH 06/10] Only download file if not cached --- build.rs | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/build.rs b/build.rs index 85849c4..2106372 100644 --- a/build.rs +++ b/build.rs @@ -70,16 +70,22 @@ fn main() { std::fs::write(&dest, buf).unwrap(); #[cfg(feature = "_test-unicode-conformance")] - std::fs::write( - Path::new(&out).join("emoji-variation-sequences.txt"), - ureq::get("https://www.unicode.org/Public/16.0.0/ucd/emoji/emoji-variation-sequences.txt") - .call() - .unwrap() - .body_mut() - .read_to_string() - .unwrap(), - ) - .unwrap(); + { + let emoji_vs_list = Path::new(&out).join("emoji-variation-sequences.txt"); + if !std::fs::read_to_string(&emoji_vs_list) + .is_ok_and(|text| text.contains("Emoji Version 16.0")) + { + let content = ureq::get( + "https://www.unicode.org/Public/16.0.0/ucd/emoji/emoji-variation-sequences.txt", + ) + .call() + .unwrap() + .body_mut() + .read_to_string() + .unwrap(); + std::fs::write(emoji_vs_list, content).unwrap(); + } + } } /// Processes a single file and turns it into a global module. From 2fb667e53b4c9ad5da875d66ba23c1881c7d3e0f Mon Sep 17 00:00:00 2001 From: Malo <57839069+MDLC01@users.noreply.github.com> Date: Mon, 11 Aug 2025 12:45:57 +0200 Subject: [PATCH 07/10] Improve code clarity and future-proofness --- src/lib.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 362f4de..c89c9df 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -201,7 +201,7 @@ mod test { assert!( are_all_variants_valid( SYM, - |c| !c.ends_with(EMOJI_PRESENTATION_SELECTOR), + |c| !c.contains(EMOJI_PRESENTATION_SELECTOR), ) , "unexpected use of emoji presentation selector (U+FE0F) in `sym` (see list above)", ) @@ -212,7 +212,7 @@ mod test { assert!( are_all_variants_valid( EMOJI, - |c| !c.ends_with(TEXT_PRESENTATION_SELECTOR), + |c| !c.contains(TEXT_PRESENTATION_SELECTOR), ) , "unexpected use of text presentation selector (U+FE0E) in `emoji` (see list above)", ) @@ -248,8 +248,8 @@ mod test { let sequences = get_valid_presentation_sequences(); assert!( are_all_variants_valid(ROOT, |c| { - if c.ends_with(TEXT_PRESENTATION_SELECTOR) - || c.ends_with(EMOJI_PRESENTATION_SELECTOR) + if c.contains(TEXT_PRESENTATION_SELECTOR) + || c.contains(EMOJI_PRESENTATION_SELECTOR) { sequences.contains(c) } else { @@ -269,8 +269,8 @@ mod test { .collect::>(); assert!( are_all_variants_valid(SYM, |c| { - c.chars().count() != 1 - || !require_presentation_selector.contains(&c.chars().next().unwrap()) + !(c.chars().count() == 1 + && require_presentation_selector.contains(&c.chars().next().unwrap())) }), "missing text presentation selector(s) (U+FE0E) in `sym` (see list above)", ) @@ -285,8 +285,8 @@ mod test { .collect::>(); assert!( are_all_variants_valid(EMOJI, |c| { - c.chars().count() != 1 - || !require_presentation_selector.contains(&c.chars().next().unwrap()) + !(c.chars().count() == 1 + && require_presentation_selector.contains(&c.chars().next().unwrap())) }), "missing emoji presentation selector(s) (U+FE0F) in `emoji` (see list above)", ) From 0258d05bf428b34b3ab7fc736cc027d60a79d37d Mon Sep 17 00:00:00 2001 From: Malo <57839069+MDLC01@users.noreply.github.com> Date: Mon, 11 Aug 2025 16:19:26 +0200 Subject: [PATCH 08/10] Add clarification comment --- src/lib.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index c89c9df..ba94c00 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -269,6 +269,8 @@ mod test { .collect::>(); assert!( are_all_variants_valid(SYM, |c| { + // All text presentations are exactly 2 codepoints long as of + // Unicode 16.0, so this doesn't miss anything. !(c.chars().count() == 1 && require_presentation_selector.contains(&c.chars().next().unwrap())) }), @@ -285,6 +287,8 @@ mod test { .collect::>(); assert!( are_all_variants_valid(EMOJI, |c| { + // All text presentations are exactly 2 codepoints long as of + // Unicode 16.0, so this doesn't miss anything. !(c.chars().count() == 1 && require_presentation_selector.contains(&c.chars().next().unwrap())) }), From 3fe4ebb436f82c07f85973bd136c63df274eba17 Mon Sep 17 00:00:00 2001 From: Malo <57839069+MDLC01@users.noreply.github.com> Date: Mon, 11 Aug 2025 17:09:30 +0200 Subject: [PATCH 09/10] "presentation sequences" -> "emoji variation sequences" --- src/lib.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index ba94c00..d33b2d4 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -269,8 +269,8 @@ mod test { .collect::>(); assert!( are_all_variants_valid(SYM, |c| { - // All text presentations are exactly 2 codepoints long as of - // Unicode 16.0, so this doesn't miss anything. + // All emoji variation sequences are exactly 2 codepoints long + // as of Unicode 16.0, so this doesn't miss anything. !(c.chars().count() == 1 && require_presentation_selector.contains(&c.chars().next().unwrap())) }), @@ -287,8 +287,8 @@ mod test { .collect::>(); assert!( are_all_variants_valid(EMOJI, |c| { - // All text presentations are exactly 2 codepoints long as of - // Unicode 16.0, so this doesn't miss anything. + // All emoji variation sequences are exactly 2 codepoints long + // as of Unicode 16.0, so this doesn't miss anything. !(c.chars().count() == 1 && require_presentation_selector.contains(&c.chars().next().unwrap())) }), From efadf1d95c4c771348f8c87f803bb7d08a64e1e2 Mon Sep 17 00:00:00 2001 From: Malo <57839069+MDLC01@users.noreply.github.com> Date: Fri, 15 Aug 2025 14:19:24 +0200 Subject: [PATCH 10/10] Add and use `\vs{15}` syntax --- build.rs | 72 +++-- src/lib.rs | 8 +- src/modules/emoji.txt | 702 +++++++++++++++++++++--------------------- src/modules/sym.txt | 88 +++--- 4 files changed, 453 insertions(+), 417 deletions(-) diff --git a/build.rs b/build.rs index 2106372..a696365 100644 --- a/build.rs +++ b/build.rs @@ -1,10 +1,9 @@ +use self::shared::ModifierSet; use std::fmt::Write; use std::iter; use std::iter::Peekable; use std::path::Path; -use self::shared::ModifierSet; - type StrResult = Result; #[path = "src/shared.rs"] @@ -192,23 +191,60 @@ fn validate_ident(string: &str) -> StrResult<()> { Err(format!("invalid identifier: {string:?}")) } -/// Extracts the value of a variant, parsing `\u{XXXX}` escapes -fn decode_value(text: &str) -> StrResult { - let mut iter = text.split("\\u{"); - let mut res = iter.next().unwrap().to_string(); - for other in iter { - let (hex, rest) = other.split_once("}").ok_or_else(|| { - format!("unclosed unicode escape \\u{{{}", other.escape_debug()) - })?; - res.push( - u32::from_str_radix(hex, 16) - .ok() - .and_then(|n| char::try_from(n).ok()) - .ok_or_else(|| format!("invalid unicode escape \\u{{{hex}}}"))?, - ); - res += rest; +/// Extracts the value of a variant, parsing `\u{XXXX}` and other escapes. +fn decode_value(mut text: &str) -> StrResult { + let mut result = String::new(); + loop { + if let Some(rest) = text.strip_prefix("\\u{") { + let Some((code, tail)) = rest.split_once('}') else { + return Err(format!( + "unclosed Unicode escape: \\u{{{}", + rest.escape_debug() + )); + }; + result.push( + u32::from_str_radix(code, 16) + .ok() + .and_then(|n| char::try_from(n).ok()) + .ok_or_else(|| format!("invalid Unicode escape \\u{{{code}}}"))?, + ); + text = tail; + } else if let Some(rest) = text.strip_prefix("\\vs{") { + let Some((value, tail)) = rest.split_once('}') else { + return Err(format!("unclosed VS escape: \\vs{{{}", rest.escape_debug())); + }; + let vs = match value { + "1" => '\u{fe00}', + "2" => '\u{fe01}', + "3" => '\u{fe02}', + "4" => '\u{fe03}', + "5" => '\u{fe04}', + "6" => '\u{fe05}', + "7" => '\u{fe06}', + "8" => '\u{fe07}', + "9" => '\u{fe08}', + "10" => '\u{fe09}', + "11" => '\u{fe0a}', + "12" => '\u{fe0b}', + "13" => '\u{fe0c}', + "14" => '\u{fe0d}', + "15" | "text" => '\u{fe0e}', + "16" | "emoji" => '\u{fe0f}', + code => return Err(format!("invalid VS escape: \\vs{{{code}}}")), + }; + result.push(vs); + text = tail; + } else if let Some((prefix, tail)) = text.find('\\').map(|i| text.split_at(i)) { + if prefix.is_empty() { + return Err(format!("invalid escape sequence: {tail}")); + } + result.push_str(prefix); + text = tail; + } else { + result.push_str(text); + return Ok(result); + } } - Ok(res) } /// Turns a stream of lines into a list of definitions. diff --git a/src/lib.rs b/src/lib.rs index d33b2d4..cd401ac 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -203,7 +203,7 @@ mod test { SYM, |c| !c.contains(EMOJI_PRESENTATION_SELECTOR), ) , - "unexpected use of emoji presentation selector (U+FE0F) in `sym` (see list above)", + "unexpected use of emoji presentation selector in `sym` (see list above)", ) } @@ -214,7 +214,7 @@ mod test { EMOJI, |c| !c.contains(TEXT_PRESENTATION_SELECTOR), ) , - "unexpected use of text presentation selector (U+FE0E) in `emoji` (see list above)", + "unexpected use of text presentation selector in `emoji` (see list above)", ) } @@ -274,7 +274,7 @@ mod test { !(c.chars().count() == 1 && require_presentation_selector.contains(&c.chars().next().unwrap())) }), - "missing text presentation selector(s) (U+FE0E) in `sym` (see list above)", + "missing text presentation selector(s) in `sym` (see list above)", ) } @@ -292,7 +292,7 @@ mod test { !(c.chars().count() == 1 && require_presentation_selector.contains(&c.chars().next().unwrap())) }), - "missing emoji presentation selector(s) (U+FE0F) in `emoji` (see list above)", + "missing emoji presentation selector(s) in `emoji` (see list above)", ) } diff --git a/src/modules/emoji.txt b/src/modules/emoji.txt index 4e9acbd..19cf11c 100644 --- a/src/modules/emoji.txt +++ b/src/modules/emoji.txt @@ -3,17 +3,17 @@ abc ๐Ÿ”ค abcd ๐Ÿ”ก ABCD ๐Ÿ”  accordion ๐Ÿช— -aesculapius โš•\u{FE0F} -airplane โœˆ\u{FE0F} +aesculapius โš•\vs{emoji} +airplane โœˆ\vs{emoji} .landing ๐Ÿ›ฌ - .small ๐Ÿ›ฉ\u{FE0F} + .small ๐Ÿ›ฉ\vs{emoji} .takeoff ๐Ÿ›ซ -alembic โš—\u{FE0F} -alien ๐Ÿ‘ฝ\u{FE0F} +alembic โš—\vs{emoji} +alien ๐Ÿ‘ฝ\vs{emoji} .monster ๐Ÿ‘พ -ambulance ๐Ÿš‘\u{FE0F} +ambulance ๐Ÿš‘\vs{emoji} amphora ๐Ÿบ -anchor โš“\u{FE0F} +anchor โš“\vs{emoji} anger ๐Ÿ’ข ant ๐Ÿœ apple @@ -24,37 +24,37 @@ arm .muscle ๐Ÿ’ช .selfie ๐Ÿคณ arrow - .r.filled โžก\u{FE0F} - .r.hook โ†ช\u{FE0F} + .r.filled โžก\vs{emoji} + .r.hook โ†ช\vs{emoji} .r.soon ๐Ÿ”œ - .l.filled โฌ…\u{FE0F} - .l.hook โ†ฉ\u{FE0F} + .l.filled โฌ…\vs{emoji} + .l.hook โ†ฉ\vs{emoji} .l.back ๐Ÿ”™ .l.end ๐Ÿ”š - .t.filled โฌ†\u{FE0F} - .t.curve โคด\u{FE0F} + .t.filled โฌ†\vs{emoji} + .t.curve โคด\vs{emoji} .t.top ๐Ÿ” - .b.filled โฌ‡\u{FE0F} - .b.curve โคต\u{FE0F} - .l.r โ†”\u{FE0F} + .b.filled โฌ‡\vs{emoji} + .b.curve โคต\vs{emoji} + .l.r โ†”\vs{emoji} .l.r.on ๐Ÿ”› - .t.b โ†•\u{FE0F} - .bl โ†™\u{FE0F} - .br โ†˜\u{FE0F} - .tl โ†–\u{FE0F} - .tr โ†—\u{FE0F} + .t.b โ†•\vs{emoji} + .bl โ†™\vs{emoji} + .br โ†˜\vs{emoji} + .tl โ†–\vs{emoji} + .tr โ†—\vs{emoji} arrows .cycle ๐Ÿ”„ -ast *\u{FE0F} - .box โœณ\u{FE0F} +ast *\vs{emoji} + .box โœณ\vs{emoji} atm ๐Ÿง -atom โš›\u{FE0F} +atom โš›\vs{emoji} aubergine ๐Ÿ† avocado ๐Ÿฅ‘ axe ๐Ÿช“ baby ๐Ÿ‘ถ .angel ๐Ÿ‘ผ - .box ๐Ÿšผ\u{FE0F} + .box ๐Ÿšผ\vs{emoji} babybottle ๐Ÿผ backpack ๐ŸŽ’ bacon ๐Ÿฅ“ @@ -65,16 +65,16 @@ baggageclaim ๐Ÿ›„ baguette ๐Ÿฅ– balloon ๐ŸŽˆ ballot - .check โ˜‘\u{FE0F} -ballotbox ๐Ÿ—ณ\u{FE0F} + .check โ˜‘\vs{emoji} +ballotbox ๐Ÿ—ณ\vs{emoji} banana ๐ŸŒ banjo ๐Ÿช• bank ๐Ÿฆ barberpole ๐Ÿ’ˆ -baseball โšพ\u{FE0F} +baseball โšพ\vs{emoji} basecap ๐Ÿงข basket ๐Ÿงบ -basketball โ›น\u{FE0F} +basketball โ›น\vs{emoji} .ball ๐Ÿ€ bat ๐Ÿฆ‡ bathtub ๐Ÿ›€ @@ -82,13 +82,13 @@ bathtub ๐Ÿ›€ battery ๐Ÿ”‹ .low ๐Ÿชซ beach - .palm ๐Ÿ\u{FE0F} - .umbrella ๐Ÿ–\u{FE0F} + .palm ๐Ÿ\vs{emoji} + .umbrella ๐Ÿ–\vs{emoji} beads ๐Ÿ“ฟ beans ๐Ÿซ˜ bear ๐Ÿป beaver ๐Ÿฆซ -bed ๐Ÿ›\u{FE0F} +bed ๐Ÿ›\vs{emoji} .person ๐Ÿ›Œ bee ๐Ÿ beer ๐Ÿบ @@ -97,18 +97,18 @@ beet ๐Ÿซœ beetle ๐Ÿชฒ .lady ๐Ÿž bell ๐Ÿ”” - .ding ๐Ÿ›Ž\u{FE0F} + .ding ๐Ÿ›Ž\vs{emoji} .not ๐Ÿ”• bento ๐Ÿฑ bicyclist ๐Ÿšด .mountain ๐Ÿšต -bike ๐Ÿšฒ\u{FE0F} +bike ๐Ÿšฒ\vs{emoji} .not ๐Ÿšณ bikini ๐Ÿ‘™ billiards ๐ŸŽฑ -bin ๐Ÿ—‘\u{FE0F} -biohazard โ˜ฃ\u{FE0F} -bird ๐Ÿฆ\u{FE0F} +bin ๐Ÿ—‘\vs{emoji} +biohazard โ˜ฃ\vs{emoji} +bird ๐Ÿฆ\vs{emoji} bison ๐Ÿฆฌ blood ๐Ÿฉธ blouse ๐Ÿ‘š @@ -116,13 +116,13 @@ blowfish ๐Ÿก blueberries ๐Ÿซ boar ๐Ÿ— boat - .sail โ›ต\u{FE0F} + .sail โ›ต\vs{emoji} .row ๐Ÿšฃ - .motor ๐Ÿ›ฅ\u{FE0F} + .motor ๐Ÿ›ฅ\vs{emoji} .speed ๐Ÿšค .canoe ๐Ÿ›ถ bolt ๐Ÿ”ฉ -bomb ๐Ÿ’ฃ\u{FE0F} +bomb ๐Ÿ’ฃ\vs{emoji} bone ๐Ÿฆด book .red ๐Ÿ“• @@ -132,7 +132,7 @@ book .spiral ๐Ÿ“’ .open ๐Ÿ“– bookmark ๐Ÿ”– -books ๐Ÿ“š\u{FE0F} +books ๐Ÿ“š\vs{emoji} boomerang ๐Ÿชƒ bordercontrol ๐Ÿ›‚ bouquet ๐Ÿ’ @@ -157,12 +157,12 @@ brightness .low ๐Ÿ”… broccoli ๐Ÿฅฆ broom ๐Ÿงน -brush ๐Ÿ–Œ\u{FE0F} +brush ๐Ÿ–Œ\vs{emoji} bubble .speech.r ๐Ÿ’ฌ - .speech.l ๐Ÿ—จ\u{FE0F} + .speech.l ๐Ÿ—จ\vs{emoji} .thought ๐Ÿ’ญ - .anger.r ๐Ÿ—ฏ\u{FE0F} + .anger.r ๐Ÿ—ฏ\vs{emoji} bubbles ๐Ÿซง bubbletea ๐Ÿง‹ bucket ๐Ÿชฃ @@ -173,7 +173,7 @@ builder ๐Ÿ‘ท burger ๐Ÿ” burrito ๐ŸŒฏ bus ๐ŸšŒ - .front ๐Ÿš\u{FE0F} + .front ๐Ÿš\vs{emoji} .small ๐Ÿš .stop ๐Ÿš .trolley ๐ŸšŽ @@ -183,7 +183,7 @@ button ๐Ÿ”ฒ .alt ๐Ÿ”ณ .radio ๐Ÿ”˜ cabinet - .file ๐Ÿ—„\u{FE0F} + .file ๐Ÿ—„\vs{emoji} cablecar ๐Ÿš  .small ๐Ÿšก cactus ๐ŸŒต @@ -192,30 +192,30 @@ cake ๐ŸŽ‚ .moon ๐Ÿฅฎ .slice ๐Ÿฐ calendar ๐Ÿ“… - .spiral ๐Ÿ—“\u{FE0F} + .spiral ๐Ÿ—“\vs{emoji} .tearoff ๐Ÿ“† camel ๐Ÿซ .dromedar ๐Ÿช -camera ๐Ÿ“ท\u{FE0F} +camera ๐Ÿ“ท\vs{emoji} .flash ๐Ÿ“ธ .movie ๐ŸŽฅ .movie.box ๐ŸŽฆ - .video ๐Ÿ“น\u{FE0F} -camping ๐Ÿ•\u{FE0F} + .video ๐Ÿ“น\vs{emoji} +camping ๐Ÿ•\vs{emoji} can ๐Ÿฅซ -candle ๐Ÿ•ฏ\u{FE0F} +candle ๐Ÿ•ฏ\vs{emoji} candy ๐Ÿฌ cane ๐Ÿฆฏ car ๐Ÿš— - .front ๐Ÿš˜\u{FE0F} + .front ๐Ÿš˜\vs{emoji} .pickup ๐Ÿ›ป .police ๐Ÿš“ - .police.front ๐Ÿš”\u{FE0F} - .racing ๐ŸŽ\u{FE0F} + .police.front ๐Ÿš”\vs{emoji} + .racing ๐ŸŽ\vs{emoji} .rickshaw ๐Ÿ›บ .suv ๐Ÿš™ card - .credit ๐Ÿ’ณ\u{FE0F} + .credit ๐Ÿ’ณ\vs{emoji} .id ๐Ÿชช cardindex ๐Ÿ“‡ carrot ๐Ÿฅ• @@ -224,7 +224,7 @@ cassette ๐Ÿ“ผ castle .eu ๐Ÿฐ .jp ๐Ÿฏ -cat ๐Ÿˆ\u{FE0F} +cat ๐Ÿˆ\vs{emoji} .face ๐Ÿฑ .face.angry ๐Ÿ˜พ .face.cry ๐Ÿ˜ฟ @@ -236,7 +236,7 @@ cat ๐Ÿˆ\u{FE0F} .face.smile ๐Ÿ˜บ .face.smirk ๐Ÿ˜ผ chain ๐Ÿ”— -chains โ›“\u{FE0F} +chains โ›“\vs{emoji} chair ๐Ÿช‘ champagne ๐Ÿพ chart @@ -245,11 +245,11 @@ chart .down ๐Ÿ“‰ .yen.up ๐Ÿ’น checkmark - .heavy โœ”\u{FE0F} - .box โœ…\u{FE0F} + .heavy โœ”\vs{emoji} + .box โœ…\vs{emoji} cheese ๐Ÿง€ cherries ๐Ÿ’ -chess โ™Ÿ\u{FE0F} +chess โ™Ÿ\vs{emoji} chestnut ๐ŸŒฐ chicken ๐Ÿ” .baby ๐Ÿฅ @@ -258,109 +258,109 @@ chicken ๐Ÿ” .leg ๐Ÿ— .male ๐Ÿ“ child ๐Ÿง’ -chipmunk ๐Ÿฟ\u{FE0F} +chipmunk ๐Ÿฟ\vs{emoji} chocolate ๐Ÿซ chopsticks ๐Ÿฅข -church โ›ช\u{FE0F} +church โ›ช\vs{emoji} .love ๐Ÿ’’ cigarette ๐Ÿšฌ - .not ๐Ÿšญ\u{FE0F} + .not ๐Ÿšญ\vs{emoji} circle - .black โšซ\u{FE0F} + .black โšซ\vs{emoji} .blue ๐Ÿ”ต .brown ๐ŸŸค .green ๐ŸŸข .orange ๐ŸŸ  .purple ๐ŸŸฃ - .white โšช\u{FE0F} + .white โšช\vs{emoji} .red ๐Ÿ”ด .yellow ๐ŸŸก - .stroked โญ•\u{FE0F} + .stroked โญ•\vs{emoji} circus ๐ŸŽช -city ๐Ÿ™\u{FE0F} +city ๐Ÿ™\vs{emoji} .dusk ๐ŸŒ† .night ๐ŸŒƒ .sunset ๐ŸŒ‡ -clamp ๐Ÿ—œ\u{FE0F} -clapperboard ๐ŸŽฌ\u{FE0F} +clamp ๐Ÿ—œ\vs{emoji} +clapperboard ๐ŸŽฌ\vs{emoji} climbing ๐Ÿง— clip ๐Ÿ“Ž -clipboard ๐Ÿ“‹\u{FE0F} -clips ๐Ÿ–‡\u{FE0F} +clipboard ๐Ÿ“‹\vs{emoji} +clips ๐Ÿ–‡\vs{emoji} clock - .one ๐Ÿ•\u{FE0F} - .one.thirty ๐Ÿ•œ\u{FE0F} - .two ๐Ÿ•‘\u{FE0F} - .two.thirty ๐Ÿ•\u{FE0F} - .three ๐Ÿ•’\u{FE0F} - .three.thirty ๐Ÿ•ž\u{FE0F} - .four ๐Ÿ•“\u{FE0F} - .four.thirty ๐Ÿ•Ÿ\u{FE0F} - .five ๐Ÿ•”\u{FE0F} - .five.thirty ๐Ÿ• \u{FE0F} - .six ๐Ÿ••\u{FE0F} - .six.thirty ๐Ÿ•ก\u{FE0F} - .seven ๐Ÿ•–\u{FE0F} - .seven.thirty ๐Ÿ•ข\u{FE0F} - .eight ๐Ÿ•—\u{FE0F} - .eight.thirty ๐Ÿ•ฃ\u{FE0F} - .nine ๐Ÿ•˜\u{FE0F} - .nine.thirty ๐Ÿ•ค\u{FE0F} - .ten ๐Ÿ•™\u{FE0F} - .ten.thirty ๐Ÿ•ฅ\u{FE0F} - .eleven ๐Ÿ•š\u{FE0F} - .eleven.thirty ๐Ÿ•ฆ\u{FE0F} - .twelve ๐Ÿ•›\u{FE0F} - .twelve.thirty ๐Ÿ•ง\u{FE0F} - .alarm โฐ\u{FE0F} - .old ๐Ÿ•ฐ\u{FE0F} - .timer โฒ\u{FE0F} -cloud โ˜\u{FE0F} + .one ๐Ÿ•\vs{emoji} + .one.thirty ๐Ÿ•œ\vs{emoji} + .two ๐Ÿ•‘\vs{emoji} + .two.thirty ๐Ÿ•\vs{emoji} + .three ๐Ÿ•’\vs{emoji} + .three.thirty ๐Ÿ•ž\vs{emoji} + .four ๐Ÿ•“\vs{emoji} + .four.thirty ๐Ÿ•Ÿ\vs{emoji} + .five ๐Ÿ•”\vs{emoji} + .five.thirty ๐Ÿ• \vs{emoji} + .six ๐Ÿ••\vs{emoji} + .six.thirty ๐Ÿ•ก\vs{emoji} + .seven ๐Ÿ•–\vs{emoji} + .seven.thirty ๐Ÿ•ข\vs{emoji} + .eight ๐Ÿ•—\vs{emoji} + .eight.thirty ๐Ÿ•ฃ\vs{emoji} + .nine ๐Ÿ•˜\vs{emoji} + .nine.thirty ๐Ÿ•ค\vs{emoji} + .ten ๐Ÿ•™\vs{emoji} + .ten.thirty ๐Ÿ•ฅ\vs{emoji} + .eleven ๐Ÿ•š\vs{emoji} + .eleven.thirty ๐Ÿ•ฆ\vs{emoji} + .twelve ๐Ÿ•›\vs{emoji} + .twelve.thirty ๐Ÿ•ง\vs{emoji} + .alarm โฐ\vs{emoji} + .old ๐Ÿ•ฐ\vs{emoji} + .timer โฒ\vs{emoji} +cloud โ˜\vs{emoji} .dust ๐Ÿ’จ - .rain ๐ŸŒง\u{FE0F} - .snow ๐ŸŒจ\u{FE0F} - .storm โ›ˆ\u{FE0F} - .sun โ›…\u{FE0F} - .sun.hidden ๐ŸŒฅ\u{FE0F} - .sun.rain ๐ŸŒฆ\u{FE0F} - .thunder ๐ŸŒฉ\u{FE0F} + .rain ๐ŸŒง\vs{emoji} + .snow ๐ŸŒจ\vs{emoji} + .storm โ›ˆ\vs{emoji} + .sun โ›…\vs{emoji} + .sun.hidden ๐ŸŒฅ\vs{emoji} + .sun.rain ๐ŸŒฆ\vs{emoji} + .thunder ๐ŸŒฉ\vs{emoji} coat ๐Ÿงฅ .lab ๐Ÿฅผ cockroach ๐Ÿชณ cocktail - .martini ๐Ÿธ\u{FE0F} + .martini ๐Ÿธ\vs{emoji} .tropical ๐Ÿน coconut ๐Ÿฅฅ -coffee โ˜•\u{FE0F} -coffin โšฐ\u{FE0F} +coffee โ˜•\vs{emoji} +coffin โšฐ\vs{emoji} coin ๐Ÿช™ -comet โ˜„\u{FE0F} +comet โ˜„\vs{emoji} compass ๐Ÿงญ -computer ๐Ÿ–ฅ\u{FE0F} -computermouse ๐Ÿ–ฑ\u{FE0F} +computer ๐Ÿ–ฅ\vs{emoji} +computermouse ๐Ÿ–ฑ\vs{emoji} confetti ๐ŸŽŠ construction ๐Ÿšง -controller ๐ŸŽฎ\u{FE0F} +controller ๐ŸŽฎ\vs{emoji} cookie ๐Ÿช .fortune ๐Ÿฅ  cooking ๐Ÿณ cool ๐Ÿ†’ -copyright ยฉ\u{FE0F} +copyright ยฉ\vs{emoji} coral ๐Ÿชธ corn ๐ŸŒฝ -couch ๐Ÿ›‹\u{FE0F} +couch ๐Ÿ›‹\vs{emoji} couple ๐Ÿ’‘ cow ๐Ÿ„ .face ๐Ÿฎ crab ๐Ÿฆ€ -crane ๐Ÿ—\u{FE0F} -crayon ๐Ÿ–\u{FE0F} +crane ๐Ÿ—\vs{emoji} +crayon ๐Ÿ–\vs{emoji} cricket ๐Ÿฆ— cricketbat ๐Ÿ crocodile ๐ŸŠ croissant ๐Ÿฅ -crossmark โŒ\u{FE0F} - .box โŽ\u{FE0F} +crossmark โŒ\vs{emoji} + .box โŽ\vs{emoji} crown ๐Ÿ‘‘ crutch ๐Ÿฉผ crystal ๐Ÿ”ฎ @@ -380,10 +380,10 @@ dancing .women.bunny ๐Ÿ‘ฏ darts ๐ŸŽฏ dash - .wave.double ใ€ฐ\u{FE0F} + .wave.double ใ€ฐ\vs{emoji} deer ๐ŸฆŒ -desert ๐Ÿœ\u{FE0F} -detective ๐Ÿ•ต\u{FE0F} +desert ๐Ÿœ\vs{emoji} +detective ๐Ÿ•ต\vs{emoji} diamond .blue ๐Ÿ”ท .blue.small ๐Ÿ”น @@ -395,13 +395,13 @@ dino .pod ๐Ÿฆ• .rex ๐Ÿฆ– disc - .cd ๐Ÿ’ฟ\u{FE0F} + .cd ๐Ÿ’ฟ\vs{emoji} .dvd ๐Ÿ“€ .mini ๐Ÿ’ฝ discoball ๐Ÿชฉ diving ๐Ÿคฟ dodo ๐Ÿฆค -dog ๐Ÿ•\u{FE0F} +dog ๐Ÿ•\vs{emoji} .face ๐Ÿถ .guide ๐Ÿฆฎ .poodle ๐Ÿฉ @@ -411,7 +411,7 @@ donkey ๐Ÿซ donut ๐Ÿฉ door ๐Ÿšช dove - .peace ๐Ÿ•Š\u{FE0F} + .peace ๐Ÿ•Š\vs{emoji} dragon ๐Ÿ‰ .face ๐Ÿฒ dress ๐Ÿ‘— @@ -424,7 +424,7 @@ drum ๐Ÿฅ duck ๐Ÿฆ† dumpling ๐ŸฅŸ eagle ๐Ÿฆ… -ear ๐Ÿ‘‚\u{FE0F} +ear ๐Ÿ‘‚\vs{emoji} .aid ๐Ÿฆป egg ๐Ÿฅš eighteen @@ -433,13 +433,13 @@ elephant ๐Ÿ˜ elevator ๐Ÿ›— elf ๐Ÿง email ๐Ÿ“ง -excl โ—\u{FE0F} - .white โ•\u{FE0F} - .double โ€ผ\u{FE0F} - .quest โ‰\u{FE0F} +excl โ—\vs{emoji} + .white โ•\vs{emoji} + .double โ€ผ\vs{emoji} + .quest โ‰\vs{emoji} explosion ๐Ÿ’ฅ extinguisher ๐Ÿงฏ -eye ๐Ÿ‘\u{FE0F} +eye ๐Ÿ‘\vs{emoji} eyes ๐Ÿ‘€ face .grin ๐Ÿ˜€ @@ -469,12 +469,12 @@ face .drool ๐Ÿคค .explode ๐Ÿคฏ .eyeroll ๐Ÿ™„ - .friendly โ˜บ\u{FE0F} + .friendly โ˜บ\vs{emoji} .fear ๐Ÿ˜จ .fear.sweat ๐Ÿ˜ฐ .fever ๐Ÿค’ .flush ๐Ÿ˜ณ - .frown โ˜น\u{FE0F} + .frown โ˜น\vs{emoji} .frown.slight ๐Ÿ™ .frust ๐Ÿ˜ฃ .goofy ๐Ÿคช @@ -499,7 +499,7 @@ face .monocle ๐Ÿง .nausea ๐Ÿคข .nerd ๐Ÿค“ - .neutral ๐Ÿ˜\u{FE0F} + .neutral ๐Ÿ˜\vs{emoji} .open ๐Ÿ˜ƒ .party ๐Ÿฅณ .peek ๐Ÿซฃ @@ -546,38 +546,38 @@ face .wow ๐Ÿ˜ฎ .yawn ๐Ÿฅฑ .zip ๐Ÿค -factory ๐Ÿญ\u{FE0F} +factory ๐Ÿญ\vs{emoji} fairy ๐Ÿงš faith - .christ โœ\u{FE0F} - .dharma โ˜ธ\u{FE0F} + .christ โœ\vs{emoji} + .dharma โ˜ธ\vs{emoji} .khanda ๐Ÿชฏ - .islam โ˜ช\u{FE0F} - .judaism โœก\u{FE0F} + .islam โ˜ช\vs{emoji} + .judaism โœก\vs{emoji} .menorah ๐Ÿ•Ž - .om ๐Ÿ•‰\u{FE0F} - .orthodox โ˜ฆ\u{FE0F} - .peace โ˜ฎ\u{FE0F} + .om ๐Ÿ•‰\vs{emoji} + .orthodox โ˜ฆ\vs{emoji} + .peace โ˜ฎ\vs{emoji} .star.dot ๐Ÿ”ฏ .worship ๐Ÿ› - .yinyang โ˜ฏ\u{FE0F} + .yinyang โ˜ฏ\vs{emoji} falafel ๐Ÿง† -family ๐Ÿ‘ช\u{FE0F} +family ๐Ÿ‘ช\vs{emoji} fax ๐Ÿ“  feather ๐Ÿชถ feeding .breast ๐Ÿคฑ fencing ๐Ÿคบ ferriswheel ๐ŸŽก -filebox ๐Ÿ—ƒ\u{FE0F} -filedividers ๐Ÿ—‚\u{FE0F} -film ๐ŸŽž\u{FE0F} +filebox ๐Ÿ—ƒ\vs{emoji} +filedividers ๐Ÿ—‚\vs{emoji} +film ๐ŸŽž\vs{emoji} finger - .r ๐Ÿ‘‰\u{FE0F} - .l ๐Ÿ‘ˆ\u{FE0F} - .t ๐Ÿ‘†\u{FE0F} - .t.alt โ˜\u{FE0F} - .b ๐Ÿ‘‡\u{FE0F} + .r ๐Ÿ‘‰\vs{emoji} + .l ๐Ÿ‘ˆ\vs{emoji} + .t ๐Ÿ‘†\vs{emoji} + .t.alt โ˜\vs{emoji} + .b ๐Ÿ‘‡\vs{emoji} .front ๐Ÿซต .m ๐Ÿ–• fingerprint ๐Ÿซ† @@ -589,26 +589,26 @@ fire ๐Ÿ”ฅ firecracker ๐Ÿงจ fireengine ๐Ÿš’ fireworks ๐ŸŽ† -fish ๐ŸŸ\u{FE0F} +fish ๐ŸŸ\vs{emoji} .tropical ๐Ÿ  fishing ๐ŸŽฃ fist .front ๐Ÿ‘Š .r ๐Ÿคœ .l ๐Ÿค› - .raised โœŠ\u{FE0F} + .raised โœŠ\vs{emoji} flag .black ๐Ÿด - .white ๐Ÿณ\u{FE0F} + .white ๐Ÿณ\vs{emoji} .goal ๐Ÿ - .golf โ›ณ\u{FE0F} + .golf โ›ณ\vs{emoji} .red ๐Ÿšฉ flags .jp.crossed ๐ŸŽŒ flamingo ๐Ÿฆฉ flashlight ๐Ÿ”ฆ flatbread ๐Ÿซ“ -fleur โšœ\u{FE0F} +fleur โšœ\vs{emoji} floppy ๐Ÿ’พ flower .hibiscus ๐ŸŒบ @@ -623,24 +623,24 @@ flower .yellow ๐ŸŒผ flute ๐Ÿชˆ fly ๐Ÿชฐ -fog ๐ŸŒซ\u{FE0F} +fog ๐ŸŒซ\vs{emoji} folder ๐Ÿ“ .open ๐Ÿ“‚ fondue ๐Ÿซ• foot ๐Ÿฆถ -football โšฝ\u{FE0F} +football โšฝ\vs{emoji} .am ๐Ÿˆ forex ๐Ÿ’ฑ -fountain โ›ฒ\u{FE0F} +fountain โ›ฒ\vs{emoji} fox ๐ŸฆŠ free ๐Ÿ†“ fries ๐ŸŸ frisbee ๐Ÿฅ frog .face ๐Ÿธ -fuelpump โ›ฝ\u{FE0F} +fuelpump โ›ฝ\vs{emoji} garlic ๐Ÿง„ -gear โš™\u{FE0F} +gear โš™\vs{emoji} gem ๐Ÿ’Ž genie ๐Ÿงž ghost ๐Ÿ‘ป @@ -652,18 +652,18 @@ glass .milk ๐Ÿฅ› .pour ๐Ÿซ— .tumbler ๐Ÿฅƒ -glasses ๐Ÿ‘“\u{FE0F} - .sun ๐Ÿ•ถ\u{FE0F} +glasses ๐Ÿ‘“\vs{emoji} + .sun ๐Ÿ•ถ\vs{emoji} globe - .am ๐ŸŒŽ\u{FE0F} - .as.au ๐ŸŒ\u{FE0F} - .eu.af ๐ŸŒ\u{FE0F} + .am ๐ŸŒŽ\vs{emoji} + .as.au ๐ŸŒ\vs{emoji} + .eu.af ๐ŸŒ\vs{emoji} .meridian ๐ŸŒ gloves ๐Ÿงค goal ๐Ÿฅ… goat ๐Ÿ goggles ๐Ÿฅฝ -golfing ๐ŸŒ\u{FE0F} +golfing ๐ŸŒ\vs{emoji} goose ๐Ÿชฟ gorilla ๐Ÿฆ grapes ๐Ÿ‡ @@ -674,13 +674,13 @@ gymnastics ๐Ÿคธ haircut ๐Ÿ’‡ hairpick ๐Ÿชฎ hammer ๐Ÿ”จ - .pick โš’\u{FE0F} - .wrench ๐Ÿ› \u{FE0F} + .pick โš’\vs{emoji} + .wrench ๐Ÿ› \vs{emoji} hamsa ๐Ÿชฌ hamster .face ๐Ÿน hand - .raised โœ‹\u{FE0F} + .raised โœ‹\vs{emoji} .raised.alt ๐Ÿคš .r ๐Ÿซฑ .l ๐Ÿซฒ @@ -690,14 +690,14 @@ hand .call ๐Ÿค™ .love ๐ŸคŸ .part ๐Ÿ–– - .peace โœŒ\u{FE0F} + .peace โœŒ\vs{emoji} .pinch ๐Ÿค .pushing.l ๐Ÿซท .pushing.r ๐Ÿซธ .rock ๐Ÿค˜ - .splay ๐Ÿ–\u{FE0F} + .splay ๐Ÿ–\vs{emoji} .wave ๐Ÿ‘‹ - .write โœ\u{FE0F} + .write โœ\vs{emoji} handbag ๐Ÿ‘œ handball ๐Ÿคพ handfan ๐Ÿชญ @@ -714,12 +714,12 @@ hands .raised ๐Ÿ™Œ .shake ๐Ÿค harp ๐Ÿช‰ -hash #\u{FE0F} +hash #\vs{emoji} hat .ribbon ๐Ÿ‘’ .top ๐ŸŽฉ -headphone ๐ŸŽง\u{FE0F} -heart โค\u{FE0F} +headphone ๐ŸŽง\vs{emoji} +heart โค\vs{emoji} .arrow ๐Ÿ’˜ .beat ๐Ÿ’“ .black ๐Ÿ–ค @@ -728,7 +728,7 @@ heart โค\u{FE0F} .broken ๐Ÿ’” .brown ๐ŸคŽ .double ๐Ÿ’• - .excl โฃ\u{FE0F} + .excl โฃ\vs{emoji} .gray ๐Ÿฉถ .green ๐Ÿ’š .grow ๐Ÿ’— @@ -746,11 +746,11 @@ hedgehog ๐Ÿฆ” helicopter ๐Ÿš helix ๐Ÿงฌ helmet - .cross โ›‘\u{FE0F} + .cross โ›‘\vs{emoji} .military ๐Ÿช– hippo ๐Ÿฆ› hockey ๐Ÿ‘ -hole ๐Ÿ•ณ\u{FE0F} +hole ๐Ÿ•ณ\vs{emoji} honey ๐Ÿฏ hongbao ๐Ÿงง hook ๐Ÿช @@ -764,13 +764,13 @@ hospital ๐Ÿฅ hotdog ๐ŸŒญ hotel ๐Ÿจ .love ๐Ÿฉ -hotspring โ™จ\u{FE0F} -hourglass โŒ›\u{FE0F} - .flow โณ\u{FE0F} -house ๐Ÿ \u{FE0F} - .derelict ๐Ÿš\u{FE0F} +hotspring โ™จ\vs{emoji} +hourglass โŒ›\vs{emoji} + .flow โณ\vs{emoji} +house ๐Ÿ \vs{emoji} + .derelict ๐Ÿš\vs{emoji} .garden ๐Ÿก - .multiple ๐Ÿ˜\u{FE0F} + .multiple ๐Ÿ˜\vs{emoji} hundred ๐Ÿ’ฏ hut ๐Ÿ›– ice ๐ŸงŠ @@ -779,69 +779,69 @@ icecream ๐Ÿจ .soft ๐Ÿฆ icehockey ๐Ÿ’ id ๐Ÿ†” -info โ„น\u{FE0F} +info โ„น\vs{emoji} izakaya ๐Ÿฎ jar ๐Ÿซ™ jellyfish ๐Ÿชผ jeans ๐Ÿ‘– jigsaw ๐Ÿงฉ -joystick ๐Ÿ•น\u{FE0F} +joystick ๐Ÿ•น\vs{emoji} juggling ๐Ÿคน juice ๐Ÿงƒ kaaba ๐Ÿ•‹ kadomatsu ๐ŸŽ kangaroo ๐Ÿฆ˜ -gachi ๐Ÿˆท\u{FE0F} +gachi ๐Ÿˆท\vs{emoji} go ๐Ÿˆด -hi ใŠ™\u{FE0F} +hi ใŠ™\vs{emoji} ka ๐Ÿ‰‘ kachi ๐Ÿˆน kara ๐Ÿˆณ kon ๐Ÿˆฒ man ๐Ÿ‘จ - .box ๐Ÿšน\u{FE0F} + .box ๐Ÿšน\vs{emoji} .crown ๐Ÿคด .guapimao ๐Ÿ‘ฒ - .levitate ๐Ÿ•ด\u{FE0F} + .levitate ๐Ÿ•ด\vs{emoji} .old ๐Ÿ‘ด .pregnant ๐Ÿซƒ .turban ๐Ÿ‘ณ .tuxedo ๐Ÿคต -muryo ๐Ÿˆš\u{FE0F} +muryo ๐Ÿˆš\vs{emoji} shin ๐Ÿˆธ -shuku ใŠ—\u{FE0F} +shuku ใŠ—\vs{emoji} toku ๐Ÿ‰ yo ๐Ÿˆบ -yubi ๐Ÿˆฏ\u{FE0F} +yubi ๐Ÿˆฏ\vs{emoji} yuryo ๐Ÿˆถ koko ๐Ÿˆ -sa ๐Ÿˆ‚\u{FE0F} +sa ๐Ÿˆ‚\vs{emoji} kebab ๐Ÿฅ™ key ๐Ÿ”‘ - .old ๐Ÿ—\u{FE0F} -keyboard โŒจ\u{FE0F} + .old ๐Ÿ—\vs{emoji} +keyboard โŒจ\vs{emoji} kiss ๐Ÿ’ kissmark ๐Ÿ’‹ kite ๐Ÿช kiwi ๐Ÿฅ knife ๐Ÿ”ช - .dagger ๐Ÿ—ก\u{FE0F} + .dagger ๐Ÿ—ก\vs{emoji} knot ๐Ÿชข koala ๐Ÿจ koinobori ๐ŸŽ -label ๐Ÿท\u{FE0F} +label ๐Ÿท\vs{emoji} lacrosse ๐Ÿฅ ladder ๐Ÿชœ lamp .diya ๐Ÿช” -laptop ๐Ÿ’ป\u{FE0F} -a ๐Ÿ…ฐ\u{FE0F} +laptop ๐Ÿ’ป\vs{emoji} +a ๐Ÿ…ฐ\vs{emoji} ab ๐Ÿ†Ž -b ๐Ÿ…ฑ\u{FE0F} +b ๐Ÿ…ฑ\vs{emoji} cl ๐Ÿ†‘ -o ๐Ÿ…พ\u{FE0F} +o ๐Ÿ…พ\vs{emoji} leaf - .clover.three โ˜˜\u{FE0F} + .clover.three โ˜˜\vs{emoji} .clover.four ๐Ÿ€ .fall ๐Ÿ‚ .herb ๐ŸŒฟ @@ -856,7 +856,7 @@ letter .love ๐Ÿ’Œ liberty ๐Ÿ—ฝ lightbulb ๐Ÿ’ก -lightning โšก\u{FE0F} +lightning โšก\vs{emoji} lion ๐Ÿฆ lipstick ๐Ÿ’„ litter ๐Ÿšฎ @@ -864,9 +864,9 @@ litter ๐Ÿšฎ lizard ๐ŸฆŽ llama ๐Ÿฆ™ lobster ๐Ÿฆž -lock ๐Ÿ”’\u{FE0F} +lock ๐Ÿ”’\vs{emoji} .key ๐Ÿ” - .open ๐Ÿ”“\u{FE0F} + .open ๐Ÿ”“\vs{emoji} .pen ๐Ÿ” lollipop ๐Ÿญ lotion ๐Ÿงด @@ -876,24 +876,24 @@ mage ๐Ÿง™ magnet ๐Ÿงฒ magnify .r ๐Ÿ”Ž - .l ๐Ÿ”\u{FE0F} + .l ๐Ÿ”\vs{emoji} mahjong - .dragon.red ๐Ÿ€„\u{FE0F} -mail โœ‰\u{FE0F} + .dragon.red ๐Ÿ€„\vs{emoji} +mail โœ‰\vs{emoji} .arrow ๐Ÿ“ฉ mailbox - .closed.empty ๐Ÿ“ช\u{FE0F} - .closed.full ๐Ÿ“ซ\u{FE0F} - .open.empty ๐Ÿ“ญ\u{FE0F} - .open.full ๐Ÿ“ฌ\u{FE0F} + .closed.empty ๐Ÿ“ช\vs{emoji} + .closed.full ๐Ÿ“ซ\vs{emoji} + .open.empty ๐Ÿ“ญ\vs{emoji} + .open.full ๐Ÿ“ฌ\vs{emoji} mammoth ๐Ÿฆฃ mango ๐Ÿฅญ map - .world ๐Ÿ—บ\u{FE0F} + .world ๐Ÿ—บ\vs{emoji} .jp ๐Ÿ—พ maracas ๐Ÿช‡ martialarts ๐Ÿฅ‹ -masks ๐ŸŽญ\u{FE0F} +masks ๐ŸŽญ\vs{emoji} mate ๐Ÿง‰ matryoshka ๐Ÿช† meat ๐Ÿฅฉ @@ -903,21 +903,21 @@ medal .second ๐Ÿฅˆ .third ๐Ÿฅ‰ .sports ๐Ÿ… - .military ๐ŸŽ–\u{FE0F} + .military ๐ŸŽ–\vs{emoji} megaphone ๐Ÿ“ข .simple ๐Ÿ“ฃ melon ๐Ÿˆ merperson ๐Ÿงœ -metro โ“‚\u{FE0F} +metro โ“‚\vs{emoji} microbe ๐Ÿฆ  microphone ๐ŸŽค - .studio ๐ŸŽ™\u{FE0F} + .studio ๐ŸŽ™\vs{emoji} microscope ๐Ÿ”ฌ milkyway ๐ŸŒŒ mirror ๐Ÿชž -mixer ๐ŸŽ›\u{FE0F} +mixer ๐ŸŽ›\vs{emoji} money - .bag ๐Ÿ’ฐ\u{FE0F} + .bag ๐Ÿ’ฐ\vs{emoji} .dollar ๐Ÿ’ต .euro ๐Ÿ’ถ .pound ๐Ÿ’ท @@ -930,27 +930,27 @@ monkey ๐Ÿ’ .speak.not ๐Ÿ™Š moon .crescent ๐ŸŒ™ - .full ๐ŸŒ•\u{FE0F} + .full ๐ŸŒ•\vs{emoji} .full.face ๐ŸŒ .new ๐ŸŒ‘ .new.face ๐ŸŒš .wane.one ๐ŸŒ– .wane.two ๐ŸŒ— - .wane.three.face ๐ŸŒœ\u{FE0F} + .wane.three.face ๐ŸŒœ\vs{emoji} .wane.three ๐ŸŒ˜ .wax.one ๐ŸŒ’ .wax.two ๐ŸŒ“ .wax.two.face ๐ŸŒ› .wax.three ๐ŸŒ” moose ๐ŸซŽ -mortarboard ๐ŸŽ“\u{FE0F} +mortarboard ๐ŸŽ“\vs{emoji} mosque ๐Ÿ•Œ mosquito ๐ŸฆŸ -motorcycle ๐Ÿ\u{FE0F} -motorway ๐Ÿ›ฃ\u{FE0F} -mountain โ›ฐ\u{FE0F} +motorcycle ๐Ÿ\vs{emoji} +motorway ๐Ÿ›ฃ\vs{emoji} +mountain โ›ฐ\vs{emoji} .fuji ๐Ÿ—ป - .snow ๐Ÿ”\u{FE0F} + .snow ๐Ÿ”\vs{emoji} .sunrise ๐ŸŒ„ mouse ๐Ÿ .face ๐Ÿญ @@ -958,7 +958,7 @@ mousetrap ๐Ÿชค mouth ๐Ÿ‘„ .bite ๐Ÿซฆ moyai ๐Ÿ—ฟ -museum ๐Ÿ›\u{FE0F} +museum ๐Ÿ›\vs{emoji} mushroom ๐Ÿ„ musicalscore ๐ŸŽผ nails @@ -972,21 +972,21 @@ nest .eggs ๐Ÿชบ new ๐Ÿ†• newspaper ๐Ÿ“ฐ - .rolled ๐Ÿ—ž\u{FE0F} + .rolled ๐Ÿ—ž\vs{emoji} ng ๐Ÿ†– ningyo ๐ŸŽŽ ninja ๐Ÿฅท -noentry โ›”\u{FE0F} +noentry โ›”\vs{emoji} nose ๐Ÿ‘ƒ notebook ๐Ÿ““ .deco ๐Ÿ“” -notepad ๐Ÿ—’\u{FE0F} +notepad ๐Ÿ—’\vs{emoji} notes ๐ŸŽต .triple ๐ŸŽถ numbers ๐Ÿ”ข octopus ๐Ÿ™ office ๐Ÿข -oil ๐Ÿ›ข\u{FE0F} +oil ๐Ÿ›ข\vs{emoji} ok ๐Ÿ†— olive ๐Ÿซ’ oni ๐Ÿ‘น @@ -996,23 +996,23 @@ otter ๐Ÿฆฆ owl ๐Ÿฆ‰ ox ๐Ÿ‚ oyster ๐Ÿฆช -package ๐Ÿ“ฆ\u{FE0F} +package ๐Ÿ“ฆ\vs{emoji} paella ๐Ÿฅ˜ page ๐Ÿ“„ .curl ๐Ÿ“ƒ .pencil ๐Ÿ“ -pager ๐Ÿ“Ÿ\u{FE0F} +pager ๐Ÿ“Ÿ\vs{emoji} pages .tabs ๐Ÿ“‘ -painting ๐Ÿ–ผ\u{FE0F} +painting ๐Ÿ–ผ\vs{emoji} palette ๐ŸŽจ pancakes ๐Ÿฅž panda ๐Ÿผ parachute ๐Ÿช‚ -park ๐Ÿž\u{FE0F} -parking ๐Ÿ…ฟ\u{FE0F} +park ๐Ÿž\vs{emoji} +parking ๐Ÿ…ฟ\vs{emoji} parrot ๐Ÿฆœ -partalteration ใ€ฝ\u{FE0F} +partalteration ใ€ฝ\vs{emoji} party ๐ŸŽ‰ peach ๐Ÿ‘ peacock ๐Ÿฆš @@ -1022,12 +1022,12 @@ pear ๐Ÿ pedestrian ๐Ÿšถ .not ๐Ÿšท pen - .ball ๐Ÿ–Š\u{FE0F} - .fountain ๐Ÿ–‹\u{FE0F} -pencil โœ\u{FE0F} + .ball ๐Ÿ–Š\vs{emoji} + .fountain ๐Ÿ–‹\vs{emoji} +pencil โœ\vs{emoji} penguin ๐Ÿง pepper ๐Ÿซ‘ - .hot ๐ŸŒถ\u{FE0F} + .hot ๐ŸŒถ\vs{emoji} person ๐Ÿง‘ .angry ๐Ÿ™Ž .beard ๐Ÿง” @@ -1053,14 +1053,14 @@ person ๐Ÿง‘ petri ๐Ÿงซ phone ๐Ÿ“ฑ .arrow ๐Ÿ“ฒ - .classic โ˜Ž\u{FE0F} + .classic โ˜Ž\vs{emoji} .not ๐Ÿ“ต .off ๐Ÿ“ด .receiver ๐Ÿ“ž .signal ๐Ÿ“ถ .vibrate ๐Ÿ“ณ piano ๐ŸŽน -pick โ›\u{FE0F} +pick โ›\vs{emoji} pie ๐Ÿฅง pig ๐Ÿ– .face ๐Ÿท @@ -1078,23 +1078,23 @@ planet ๐Ÿช plant ๐Ÿชด plaster ๐Ÿฉน plate - .cutlery ๐Ÿฝ\u{FE0F} + .cutlery ๐Ÿฝ\vs{emoji} playback - .down โฌ\u{FE0F} - .eject โ\u{FE0F} - .forward โฉ\u{FE0F} - .pause โธ\u{FE0F} - .record โบ\u{FE0F} + .down โฌ\vs{emoji} + .eject โ\vs{emoji} + .forward โฉ\vs{emoji} + .pause โธ\vs{emoji} + .record โบ\vs{emoji} .repeat ๐Ÿ” .repeat.once ๐Ÿ”‚ .repeat.v ๐Ÿ”ƒ - .restart โฎ\u{FE0F} - .rewind โช\u{FE0F} + .restart โฎ\vs{emoji} + .rewind โช\vs{emoji} .shuffle ๐Ÿ”€ - .skip โญ\u{FE0F} - .stop โน\u{FE0F} - .toggle โฏ\u{FE0F} - .up โซ\u{FE0F} + .skip โญ\vs{emoji} + .stop โน\vs{emoji} + .toggle โฏ\vs{emoji} + .up โซ\vs{emoji} playingcard .flower ๐ŸŽด .joker ๐Ÿƒ @@ -1112,34 +1112,34 @@ pouch ๐Ÿ‘ powerplug ๐Ÿ”Œ present ๐ŸŽ pretzel ๐Ÿฅจ -printer ๐Ÿ–จ\u{FE0F} +printer ๐Ÿ–จ\vs{emoji} prints .foot ๐Ÿ‘ฃ .paw ๐Ÿพ prohibited ๐Ÿšซ -projector ๐Ÿ“ฝ\u{FE0F} +projector ๐Ÿ“ฝ\vs{emoji} pumpkin .lantern ๐ŸŽƒ purse ๐Ÿ‘› -quest โ“\u{FE0F} - .white โ”\u{FE0F} +quest โ“\vs{emoji} + .white โ”\vs{emoji} rabbit ๐Ÿ‡ .face ๐Ÿฐ raccoon ๐Ÿฆ -radio ๐Ÿ“ป\u{FE0F} -radioactive โ˜ข\u{FE0F} -railway ๐Ÿ›ค\u{FE0F} +radio ๐Ÿ“ป\vs{emoji} +radioactive โ˜ข\vs{emoji} +railway ๐Ÿ›ค\vs{emoji} rainbow ๐ŸŒˆ ram ๐Ÿ rat ๐Ÿ€ razor ๐Ÿช’ receipt ๐Ÿงพ -recycling โ™ป\u{FE0F} -reg ยฎ\u{FE0F} +recycling โ™ป\vs{emoji} +reg ยฎ\vs{emoji} restroom ๐Ÿšป rhino ๐Ÿฆ ribbon ๐ŸŽ€ - .remind ๐ŸŽ—\u{FE0F} + .remind ๐ŸŽ—\vs{emoji} rice ๐Ÿš .cracker ๐Ÿ˜ .ear ๐ŸŒพ @@ -1150,7 +1150,7 @@ robot ๐Ÿค– rock ๐Ÿชจ rocket ๐Ÿš€ rollercoaster ๐ŸŽข -rosette ๐Ÿต\u{FE0F} +rosette ๐Ÿต\vs{emoji} rugby ๐Ÿ‰ ruler ๐Ÿ“ .triangle ๐Ÿ“ @@ -1165,13 +1165,13 @@ santa .man ๐ŸŽ… .woman ๐Ÿคถ satdish ๐Ÿ“ก -satellite ๐Ÿ›ฐ\u{FE0F} +satellite ๐Ÿ›ฐ\vs{emoji} saw ๐Ÿชš saxophone ๐ŸŽท -scales โš–\u{FE0F} +scales โš–\vs{emoji} scarf ๐Ÿงฃ school ๐Ÿซ -scissors โœ‚\u{FE0F} +scissors โœ‚\vs{emoji} scooter ๐Ÿ›ด .motor ๐Ÿ›ต scorpion ๐Ÿฆ‚ @@ -1184,10 +1184,10 @@ shark ๐Ÿฆˆ sheep ๐Ÿ‘ shell .spiral ๐Ÿš -shield ๐Ÿ›ก\u{FE0F} +shield ๐Ÿ›ก\vs{emoji} ship ๐Ÿšข - .cruise ๐Ÿ›ณ\u{FE0F} - .ferry โ›ด\u{FE0F} + .cruise ๐Ÿ›ณ\vs{emoji} + .ferry โ›ด\vs{emoji} shirt .sports ๐ŸŽฝ .t ๐Ÿ‘• @@ -1196,48 +1196,48 @@ shoe ๐Ÿ‘ž .flat ๐Ÿฅฟ .heel ๐Ÿ‘  .hike ๐Ÿฅพ - .ice โ›ธ\u{FE0F} + .ice โ›ธ\vs{emoji} .roller ๐Ÿ›ผ .sandal.heel ๐Ÿ‘ก .ski ๐ŸŽฟ .sneaker ๐Ÿ‘Ÿ .tall ๐Ÿ‘ข .thong ๐Ÿฉด -shopping ๐Ÿ›\u{FE0F} +shopping ๐Ÿ›\vs{emoji} shorts ๐Ÿฉณ shoshinsha ๐Ÿ”ฐ shovel ๐Ÿช shower ๐Ÿšฟ shrimp ๐Ÿฆ .fried ๐Ÿค -shrine โ›ฉ\u{FE0F} +shrine โ›ฉ\vs{emoji} sign .crossing ๐Ÿšธ .stop ๐Ÿ›‘ silhouette ๐Ÿ‘ค .double ๐Ÿ‘ฅ .hug ๐Ÿซ‚ - .speak ๐Ÿ—ฃ\u{FE0F} + .speak ๐Ÿ—ฃ\vs{emoji} siren ๐Ÿšจ skateboard ๐Ÿ›น skewer .dango ๐Ÿก .oden ๐Ÿข -skiing โ›ท\u{FE0F} +skiing โ›ท\vs{emoji} skull ๐Ÿ’€ - .bones โ˜ \u{FE0F} + .bones โ˜ \vs{emoji} skunk ๐Ÿฆจ sled ๐Ÿ›ท slide ๐Ÿ› -slider ๐ŸŽš\u{FE0F} +slider ๐ŸŽš\vs{emoji} sloth ๐Ÿฆฅ slots ๐ŸŽฐ snail ๐ŸŒ snake ๐Ÿ -snowboarding ๐Ÿ‚\u{FE0F} -snowflake โ„\u{FE0F} -snowman โ›„\u{FE0F} - .snow โ˜ƒ\u{FE0F} +snowboarding ๐Ÿ‚\vs{emoji} +snowflake โ„\vs{emoji} +snowman โ›„\vs{emoji} + .snow โ˜ƒ\vs{emoji} soap ๐Ÿงผ socks ๐Ÿงฆ softball ๐ŸฅŽ @@ -1245,28 +1245,28 @@ sos ๐Ÿ†˜ soup ๐Ÿฒ spaghetti ๐Ÿ sparkle - .box โ‡\u{FE0F} + .box โ‡\vs{emoji} sparkler ๐ŸŽ‡ -sparkles โœจ\u{FE0F} -speaker ๐Ÿ”ˆ\u{FE0F} +sparkles โœจ\vs{emoji} +speaker ๐Ÿ”ˆ\vs{emoji} .not ๐Ÿ”‡ .wave ๐Ÿ”‰ .waves ๐Ÿ”Š -spider ๐Ÿ•ท\u{FE0F} -spiderweb ๐Ÿ•ธ\u{FE0F} +spider ๐Ÿ•ท\vs{emoji} +spiderweb ๐Ÿ•ธ\vs{emoji} spinach ๐Ÿฅฌ splatter ๐ŸซŸ sponge ๐Ÿงฝ spoon ๐Ÿฅ„ square - .black โฌ›\u{FE0F} - .black.tiny โ–ช\u{FE0F} - .black.small โ—พ\u{FE0F} - .black.medium โ—ผ\u{FE0F} - .white โฌœ\u{FE0F} - .white.tiny โ–ซ\u{FE0F} - .white.small โ—ฝ\u{FE0F} - .white.medium โ—ป\u{FE0F} + .black โฌ›\vs{emoji} + .black.tiny โ–ช\vs{emoji} + .black.small โ—พ\vs{emoji} + .black.medium โ—ผ\vs{emoji} + .white โฌœ\vs{emoji} + .white.tiny โ–ซ\vs{emoji} + .white.small โ—ฝ\vs{emoji} + .white.medium โ—ป\vs{emoji} .blue ๐ŸŸฆ .brown ๐ŸŸซ .green ๐ŸŸฉ @@ -1275,10 +1275,10 @@ square .red ๐ŸŸฅ .yellow ๐ŸŸจ squid ๐Ÿฆ‘ -stadium ๐ŸŸ\u{FE0F} -star โญ\u{FE0F} +stadium ๐ŸŸ\vs{emoji} +star โญ\vs{emoji} .arc ๐Ÿ’ซ - .box โœด\u{FE0F} + .box โœด\vs{emoji} .glow ๐ŸŒŸ .shoot ๐ŸŒ  stethoscope ๐Ÿฉบ @@ -1287,22 +1287,22 @@ store .small ๐Ÿช strawberry ๐Ÿ“ suit - .club โ™ฃ\u{FE0F} - .diamond โ™ฆ\u{FE0F} - .heart โ™ฅ\u{FE0F} - .spade โ™ \u{FE0F} -sun โ˜€\u{FE0F} - .cloud ๐ŸŒค\u{FE0F} + .club โ™ฃ\vs{emoji} + .diamond โ™ฆ\vs{emoji} + .heart โ™ฅ\vs{emoji} + .spade โ™ \vs{emoji} +sun โ˜€\vs{emoji} + .cloud ๐ŸŒค\vs{emoji} .face ๐ŸŒž sunrise ๐ŸŒ… superhero ๐Ÿฆธ supervillain ๐Ÿฆน -surfing ๐Ÿ„\u{FE0F} +surfing ๐Ÿ„\vs{emoji} sushi ๐Ÿฃ swan ๐Ÿฆข -swimming ๐ŸŠ\u{FE0F} +swimming ๐ŸŠ\vs{emoji} swimsuit ๐Ÿฉฑ -swords โš”\u{FE0F} +swords โš”\vs{emoji} symbols ๐Ÿ”ฃ synagogue ๐Ÿ• syringe ๐Ÿ’‰ @@ -1323,19 +1323,19 @@ temple ๐Ÿ›• ten ๐Ÿ”Ÿ tengu ๐Ÿ‘บ tennis ๐ŸŽพ -tent โ›บ\u{FE0F} +tent โ›บ\vs{emoji} testtube ๐Ÿงช -thermometer ๐ŸŒก\u{FE0F} +thermometer ๐ŸŒก\vs{emoji} thread ๐Ÿงต thumb - .up ๐Ÿ‘\u{FE0F} - .down ๐Ÿ‘Ž\u{FE0F} + .up ๐Ÿ‘\vs{emoji} + .down ๐Ÿ‘Ž\vs{emoji} ticket - .event ๐ŸŽŸ\u{FE0F} + .event ๐ŸŽŸ\vs{emoji} .travel ๐ŸŽซ tiger ๐Ÿ… .face ๐Ÿฏ -tm โ„ข\u{FE0F} +tm โ„ข\vs{emoji} toilet ๐Ÿšฝ toiletpaper ๐Ÿงป tomato ๐Ÿ… @@ -1344,10 +1344,10 @@ tongue ๐Ÿ‘… toolbox ๐Ÿงฐ tooth ๐Ÿฆท toothbrush ๐Ÿชฅ -tornado ๐ŸŒช\u{FE0F} +tornado ๐ŸŒช\vs{emoji} tower .tokyo ๐Ÿ—ผ -trackball ๐Ÿ–ฒ\u{FE0F} +trackball ๐Ÿ–ฒ\vs{emoji} tractor ๐Ÿšœ trafficlight .v ๐Ÿšฆ @@ -1355,7 +1355,7 @@ trafficlight train ๐Ÿš† .car ๐Ÿšƒ .light ๐Ÿšˆ - .metro ๐Ÿš‡\u{FE0F} + .metro ๐Ÿš‡\vs{emoji} .mono ๐Ÿš .mountain ๐Ÿšž .speed ๐Ÿš„ @@ -1365,11 +1365,11 @@ train ๐Ÿš† .suspend ๐ŸšŸ .tram ๐ŸšŠ .tram.car ๐Ÿš‹ -transgender โšง\u{FE0F} +transgender โšง\vs{emoji} tray - .inbox ๐Ÿ“ฅ\u{FE0F} + .inbox ๐Ÿ“ฅ\vs{emoji} .mail ๐Ÿ“จ - .outbox ๐Ÿ“ค\u{FE0F} + .outbox ๐Ÿ“ค\vs{emoji} tree .deciduous ๐ŸŒณ .evergreen ๐ŸŒฒ @@ -1377,32 +1377,32 @@ tree .palm ๐ŸŒด .xmas ๐ŸŽ„ triangle - .r โ–ถ\u{FE0F} - .l โ—€\u{FE0F} + .r โ–ถ\vs{emoji} + .l โ—€\vs{emoji} .t ๐Ÿ”ผ .b ๐Ÿ”ฝ .t.red ๐Ÿ”บ .b.red ๐Ÿ”ป trident ๐Ÿ”ฑ troll ๐ŸงŒ -trophy ๐Ÿ†\u{FE0F} +trophy ๐Ÿ†\vs{emoji} truck ๐Ÿšš .trailer ๐Ÿš› trumpet ๐ŸŽบ tsukimi ๐ŸŽ‘ turkey ๐Ÿฆƒ turtle ๐Ÿข -tv ๐Ÿ“บ\u{FE0F} +tv ๐Ÿ“บ\vs{emoji} ufo ๐Ÿ›ธ umbrella - .open โ˜‚\u{FE0F} + .open โ˜‚\vs{emoji} .closed ๐ŸŒ‚ - .rain โ˜”\u{FE0F} - .sun โ›ฑ\u{FE0F} + .rain โ˜”\vs{emoji} + .sun โ›ฑ\vs{emoji} unicorn ๐Ÿฆ„ unknown ๐Ÿฆณ up ๐Ÿ†™ -urn โšฑ\u{FE0F} +urn โšฑ\vs{emoji} vampire ๐Ÿง› violin ๐ŸŽป volcano ๐ŸŒ‹ @@ -1410,21 +1410,21 @@ volleyball ๐Ÿ vs ๐Ÿ†š waffle ๐Ÿง‡ wand ๐Ÿช„ -warning โš \u{FE0F} -watch โŒš\u{FE0F} - .stop โฑ\u{FE0F} +warning โš \vs{emoji} +watch โŒš\vs{emoji} + .stop โฑ\vs{emoji} watermelon ๐Ÿ‰ waterpolo ๐Ÿคฝ wave ๐ŸŒŠ wc ๐Ÿšพ -weightlifting ๐Ÿ‹\u{FE0F} +weightlifting ๐Ÿ‹\vs{emoji} whale ๐Ÿ‹ .spout ๐Ÿณ wheel ๐Ÿ›ž wheelchair ๐Ÿฆฝ - .box โ™ฟ\u{FE0F} + .box โ™ฟ\vs{emoji} .motor ๐Ÿฆผ -wind ๐ŸŒฌ\u{FE0F} +wind ๐ŸŒฌ\vs{emoji} windchime ๐ŸŽ window ๐ŸชŸ wine ๐Ÿท @@ -1432,7 +1432,7 @@ wing ๐Ÿชฝ wireless ๐Ÿ›œ wolf ๐Ÿบ woman ๐Ÿ‘ฉ - .box ๐Ÿšบ\u{FE0F} + .box ๐Ÿšบ\vs{emoji} .crown ๐Ÿ‘ธ .old ๐Ÿ‘ต .pregnant ๐Ÿคฐ @@ -1445,18 +1445,18 @@ yarn ๐Ÿงถ yoyo ๐Ÿช€ zebra ๐Ÿฆ“ zodiac - .aquarius โ™’\u{FE0F} - .aries โ™ˆ\u{FE0F} - .cancer โ™‹\u{FE0F} - .capri โ™‘\u{FE0F} - .gemini โ™Š\u{FE0F} - .leo โ™Œ\u{FE0F} - .libra โ™Ž\u{FE0F} - .ophi โ›Ž\u{FE0F} - .pisces โ™“\u{FE0F} - .sagit โ™\u{FE0F} - .scorpio โ™\u{FE0F} - .taurus โ™‰\u{FE0F} - .virgo โ™\u{FE0F} + .aquarius โ™’\vs{emoji} + .aries โ™ˆ\vs{emoji} + .cancer โ™‹\vs{emoji} + .capri โ™‘\vs{emoji} + .gemini โ™Š\vs{emoji} + .leo โ™Œ\vs{emoji} + .libra โ™Ž\vs{emoji} + .ophi โ›Ž\vs{emoji} + .pisces โ™“\vs{emoji} + .sagit โ™\vs{emoji} + .scorpio โ™\vs{emoji} + .taurus โ™‰\vs{emoji} + .virgo โ™\vs{emoji} zombie ๐ŸงŸ zzz ๐Ÿ’ค diff --git a/src/modules/sym.txt b/src/modules/sym.txt index d426b67..ec7d6fd 100644 --- a/src/modules/sym.txt +++ b/src/modules/sym.txt @@ -121,7 +121,7 @@ amp & ast .op โˆ— .op.o โŠ› - .basic *\u{FE0E} + .basic *\vs{text} .low โŽ .double โ‘ .triple โ‚ @@ -131,7 +131,7 @@ ast .circle โŠ› .square โง† at @ -backslash \ +backslash \u{005C} .o โฆธ @deprecated: `backslash.circle` is deprecated, use `backslash.o` instead .circle โฆธ @@ -164,7 +164,7 @@ dash @deprecated: `dash.circle` is deprecated, use `dash.o` instead .circle โŠ .wave ใ€œ - .wave.double ใ€ฐ\u{FE0E} + .wave.double ใ€ฐ\vs{text} dot .op โ‹… .basic \u{2E} @@ -180,16 +180,16 @@ dot .triple \u{20DB} .quad \u{20DC} excl ! - .double โ€ผ\u{FE0E} + .double โ€ผ\vs{text} .inv ยก - .quest โ‰\u{FE0E} + .quest โ‰\vs{text} quest ? .double โ‡ .excl โˆ .inv ยฟ interrobang โ€ฝ .inv โธ˜ -hash #\u{FE0E} +hash #\vs{text} hyph โ€ .minus \u{2D} .nobreak \u{2011} @@ -630,7 +630,7 @@ perp โŸ‚ earth ๐Ÿœจ .alt โ™ jupiter โ™ƒ -mars โ™‚\u{FE0E} +mars โ™‚\vs{text} mercury โ˜ฟ neptune โ™† .alt โฏ‰ @@ -638,7 +638,7 @@ saturn โ™„ sun โ˜‰ uranus โ›ข .alt โ™… -venus โ™€\u{FE0E} +venus โ™€\vs{text} // Miscellaneous Technical. diameter โŒ€ @@ -708,11 +708,11 @@ yuan ยฅ // Miscellaneous. ballot โ˜ .cross โ˜’ - .check โ˜‘\u{FE0E} + .check โ˜‘\vs{text} .check.heavy ๐Ÿ—น checkmark โœ“ .light ๐Ÿ—ธ - .heavy โœ”\u{FE0E} + .heavy โœ”\vs{text} crossmark โœ— .heavy โœ˜ floral โฆ @@ -726,21 +726,21 @@ cc ๐Ÿ…ญ .public ๐Ÿ…ฎ .sa ๐Ÿ„Ž .zero ๐Ÿ„ -copyright ยฉ\u{FE0E} +copyright ยฉ\vs{text} .sound โ„— copyleft ๐Ÿ„ฏ -trademark โ„ข\u{FE0E} - .registered ยฎ\u{FE0E} +trademark โ„ข\vs{text} + .registered ยฎ\vs{text} .service โ„  maltese โœ  suit - .club.filled โ™ฃ\u{FE0E} + .club.filled โ™ฃ\vs{text} .club.stroked โ™ง - .diamond.filled โ™ฆ\u{FE0E} + .diamond.filled โ™ฆ\vs{text} .diamond.stroked โ™ข - .heart.filled โ™ฅ\u{FE0E} + .heart.filled โ™ฅ\vs{text} .heart.stroked โ™ก - .spade.filled โ™ \u{FE0E} + .spade.filled โ™ \vs{text} .spade.stroked โ™ค // Music. @@ -826,8 +826,8 @@ triangle .stroked.dot โ—ฌ .filled.t โ–ฒ .filled.b โ–ผ - .filled.r โ–ถ\u{FE0E} - .filled.l โ—€\u{FE0E} + .filled.r โ–ถ\vs{text} + .filled.l โ—€\vs{text} .filled.bl โ—ฃ .filled.br โ—ข .filled.tl โ—ค @@ -838,17 +838,17 @@ triangle .filled.small.l โ—‚ square .stroked โ–ก - .stroked.tiny โ–ซ\u{FE0E} - .stroked.small โ—ฝ\u{FE0E} - .stroked.medium โ—ป\u{FE0E} - .stroked.big โฌœ\u{FE0E} + .stroked.tiny โ–ซ\vs{text} + .stroked.small โ—ฝ\vs{text} + .stroked.medium โ—ป\vs{text} + .stroked.big โฌœ\vs{text} .stroked.dotted โฌš .stroked.rounded โ–ข .filled โ–  - .filled.tiny โ–ช\u{FE0E} - .filled.small โ—พ\u{FE0E} - .filled.medium โ—ผ\u{FE0E} - .filled.big โฌ›\u{FE0E} + .filled.tiny โ–ช\vs{text} + .filled.small โ—พ\vs{text} + .filled.medium โ—ผ\vs{text} + .filled.big โฌ›\vs{text} rect .stroked.h โ–ญ .stroked.v โ–ฏ @@ -898,8 +898,8 @@ arrow .r.double.long.bar โŸพ .r.double.not โ‡ .r.double.struck โคƒ - .r.filled โžก\u{FE0E} - .r.hook โ†ช\u{FE0E} + .r.filled โžก\vs{text} + .r.hook โ†ช\vs{text} .r.long โŸถ .r.long.squiggly โŸฟ .r.loop โ†ฌ @@ -936,8 +936,8 @@ arrow .l.double.long.bar โŸฝ .l.double.not โ‡ .l.double.struck โค‚ - .l.filled โฌ…\u{FE0E} - .l.hook โ†ฉ\u{FE0E} + .l.filled โฌ…\vs{text} + .l.hook โ†ฉ\vs{text} .l.long โŸต .l.long.bar โŸป .l.long.squiggly โฌณ @@ -965,11 +965,11 @@ arrow .l.wave โ†œ .t โ†‘ .t.bar โ†ฅ - .t.curve โคด\u{FE0E} + .t.curve โคด\vs{text} .t.turn โฎ .t.dashed โ‡ก .t.double โ‡‘ - .t.filled โฌ†\u{FE0E} + .t.filled โฌ†\vs{text} .t.quad โŸฐ .t.stop โค’ .t.stroked โ‡ง @@ -979,11 +979,11 @@ arrow .t.twohead โ†Ÿ .b โ†“ .b.bar โ†ง - .b.curve โคต\u{FE0E} + .b.curve โคต\vs{text} .b.turn โฎ .b.dashed โ‡ฃ .b.double โ‡“ - .b.filled โฌ‡\u{FE0E} + .b.filled โฌ‡\vs{text} .b.quad โŸฑ .b.stop โค“ .b.stroked โ‡ฉ @@ -991,7 +991,7 @@ arrow .b.dstruck โ‡Ÿ .b.triple โค‹ .b.twohead โ†ก - .l.r โ†”\u{FE0E} + .l.r โ†”\vs{text} .l.r.double โ‡” .l.r.double.long โŸบ .l.r.double.not โ‡Ž @@ -1004,26 +1004,26 @@ arrow .l.r.dstruck โ‡ผ .l.r.open โ‡ฟ .l.r.wave โ†ญ - .t.b โ†•\u{FE0E} + .t.b โ†•\vs{text} .t.b.double โ‡• .t.b.filled โฌ .t.b.stroked โ‡ณ - .tr โ†—\u{FE0E} + .tr โ†—\vs{text} .tr.double โ‡— .tr.filled โฌˆ .tr.hook โคค .tr.stroked โฌ€ - .br โ†˜\u{FE0E} + .br โ†˜\vs{text} .br.double โ‡˜ .br.filled โฌŠ .br.hook โคฅ .br.stroked โฌ‚ - .tl โ†–\u{FE0E} + .tl โ†–\vs{text} .tl.double โ‡– .tl.filled โฌ‰ .tl.hook โคฃ .tl.stroked โฌ - .bl โ†™\u{FE0E} + .bl โ†™\vs{text} .bl.double โ‡™ .bl.filled โฌ‹ .bl.hook โคฆ @@ -1269,16 +1269,16 @@ errorbar .circle.filled โงณ gender { - female โ™€\u{FE0E} + female โ™€\vs{text} .double โšข .male โšค intersex โšฅ - male โ™‚\u{FE0E} + male โ™‚\vs{text} .double โšฃ .female โšค .stroke โšฆ .stroke.t โšจ .stroke.r โšฉ neuter โšฒ - trans โšง\u{FE0E} + trans โšง\vs{text} }