#emoji #github #unicode #gemoji

不使用 std emojis

✨ 在 *O(1)* 时间内查找表情符号,访问元数据和GitHub短码,遍历所有表情符号等!

16个版本

0.6.3 2024年7月24日
0.6.1 2023年9月4日
0.6.0 2023年4月18日
0.5.2 2022年11月25日
0.1.1 2021年3月29日

21文本处理

Download history 7947/week @ 2024-05-03 6987/week @ 2024-05-10 5781/week @ 2024-05-17 5311/week @ 2024-05-24 5448/week @ 2024-05-31 5854/week @ 2024-06-07 6833/week @ 2024-06-14 6830/week @ 2024-06-21 6730/week @ 2024-06-28 7685/week @ 2024-07-05 10287/week @ 2024-07-12 8241/week @ 2024-07-19 7494/week @ 2024-07-26 7205/week @ 2024-08-02 8352/week @ 2024-08-09 6820/week @ 2024-08-16

30,840 每月下载量
用于 42 个crate (29 个直接)

MIT/Apache

1MB
12K SLoC

emojis

Crates.io Version Docs.rs Latest Build Status

✨ 在 O(1) 时间内查找表情符号,访问元数据和GitHub短码,遍历所有表情符号。

功能

  • 按Unicode值查找表情符号
  • 按GitHub短码查找表情符号 (gemoji v4.1.0)
  • 访问表情符号元数据:名称、Unicode版本、分组、肤色、gemoji 短码
  • 按Unicode CLDR顺序遍历表情符号
  • 按表情符号组遍历表情符号,例如“笑脸 & 情感”或“旗帜”
  • 遍历表情符号的肤色
  • 为表情符号选择特定的肤色
  • 使用 Unicode v15.1 表情符号规范

入门

首先,将 emojis crate 添加到您的Cargo清单中。

cargo add emojis

只需使用 get() 函数通过Unicode值查找表情符号。

let rocket = emojis::get("🚀").unwrap();

或使用 get_by_shortcode() 函数通过 gemoji 短码查找表情符号。

let rocket = emojis::get_by_shortcode("rocket").unwrap();

这些操作需要 Ο(1) 时间。

MSRV

目前由于依赖 phf,最低支持的Rust版本是1.60。此crate的策略是在破坏性版本中仅提高MSRV。

破坏性更改

gemoji 或Unicode版本升级时,这不算作破坏性更改,相反,您应该确保使用 unicode_version() 过滤掉较新版本。

示例

请参阅 examples/replace.rs 以了解将 :gemoji: 名称替换为文本中的真实表情符号的示例。

$ echo "launch :rocket:" | cargo run --example replace
launch 🚀

get()get_by_shortcode() 返回一个包含关于表情符号的多种元数据的 Emoji 结构体。

let hand = emojis::get("🤌").unwrap();
assert_eq!(hand.as_str(), "\u{1f90c}");
assert_eq!(hand.as_bytes(), &[0xf0, 0x9f, 0xa4, 0x8c]);
assert_eq!(hand.name(), "pinched fingers");
assert_eq!(hand.unicode_version(), emojis::UnicodeVersion::new(13, 0));
assert_eq!(hand.group(), emojis::Group::PeopleAndBody);
assert_eq!(hand.skin_tone(), Some(emojis::SkinTone::Default));
assert_eq!(hand.shortcode(), Some("pinched_fingers"));

使用 skin_tones() 来遍历表情符号的肤色。

let raised_hands = emojis::get("🙌🏼").unwrap();
let skin_tones: Vec<_> = raised_hands.skin_tones().unwrap().map(|e| e.as_str()).collect();
assert_eq!(skin_tones, ["🙌", "🙌🏻", "🙌🏼", "🙌🏽", "🙌🏾", "🙌🏿"]);

您可以使用 iter() 函数遍历所有表情符号。这仅包括默认肤色版本。

let faces: Vec<_> = emojis::iter().map(|e| e.as_str()).take(5).collect();
assert_eq!(faces, ["😀", "😃", "😄", "😁", "😆"]);

建议根据您希望支持的最大的 Unicode 版本来过滤列表。

let iter = emojis::iter().filter(|e| {
    e.unicode_version() < emojis::UnicodeVersion::new(13, 0)
});

使用 Group 枚举可以遍历组中的所有表情符号。

let fruit: Vec<_> = emojis::Group::FoodAndDrink.emojis().map(|e| e.as_str()).take(5).collect();
assert_eq!(fruit, ["🍇", "🍈", "🍉", "🍊", "🍋"]);

许可证

本项目根据 MIT 许可证和 Apache 许可证(版本 2.0)的条款分发。

有关详细信息,请参阅 LICENSE-APACHELICENSE-MIT

依赖项

~97–265KB