#message-parser #markdown #dc #email #text-formatting #deltachat #deltachat-messenger

bin+lib deltachat_message_parser

电子邮件、链接、标签、Markdown等 - DeltaChat消息的解析

8个重大版本

0.11.0 2024年6月4日
0.9.0 2023年11月16日
0.5.0 2023年2月27日
0.4.0 2022年5月9日
0.3.0 2022年3月4日

#239解析器实现

Download history 146/week @ 2024-05-06 6/week @ 2024-05-13 5/week @ 2024-05-20 118/week @ 2024-06-03 5/week @ 2024-06-10 32/week @ 2024-07-01 162/week @ 2024-07-29

162 每月下载量

MPL-2.0 许可证

93KB
2.5K SLoC

DeltaChat消息解析器

在DeltaChat消息中解析链接、电子邮件地址、简单的文本格式(Markdown子集)、用户提及、标签等。

规范可以在 spec.md 中找到。

WASM演示: https://deltachat.github.io/message-parser/

背后的想法

在所有平台上都有相同丰富的消息解析。

基本想法是核心可以使用这个库将消息转换为AST格式,然后UI可以根据需要显示它,对于桌面,它将被转换为react元素。

桌面已经使用这个包(除了Markdown,因为在单个平台上只有Markdown没有意义)作为wasm模块(见 ./message_parser_wasm),以后这个可能会集成到DeltaChat核心中。

编码原则

  • 许多 测试用例
  • 目标是快速 - 因此也有基准测试以确保库足够快

建议

如果用于消息解析,不要解析超过 10 000 个字符大小的消息,以确保性能保持出色。(库可以并且应该支持更多,并且应该足够快,但在慢速设备上或转换到wasm或asmjs时限制它是合理的,以避免界面卡顿/冻结)

基准测试

cargo install cargo-criterion

基准测试

cargo criterion

基准测试文档:https://bheisler.github.io/criterion.rs/book/criterion_rs.html

更改CPU电源设置以获得一致的结果

这些天,大多数CPU根据某些规则改变其性能以节省电力。为了产生一致的基准测试结果,CPU性能必须在基准测试之间保持不变。有各种方法可以实现这一点。如果你有笔记本电脑,第一步可能是连接交流适配器,以确保你的笔记本电脑不会进入省电模式,从而改变CPU频率。下一步是改变CPU频率到一个常数值,该值不能超过CPU能处理的最大频率。因为CPU通常不能在所有核心上处理最大的可能频率。

在Linux上,你可以使用cpupower实用程序来设置CPU频率

cpupower frequency-set --min 3500 --max 3500 # this to set maximum and minimum to the same value
cpupower frequency-set -f 3500 # set frequency explicitly if the kernel module is available

参考资料

  • 有关在deltachat中引入markdown的旧讨论:[链接](https://github.com/deltachat/interface/pull/20)
  • 论坛中对消息markdown的功能请求:[链接](https://support.delta.chat/t/markdown-support-in-chat/159)

表情符号助手

除了消息解析,这个crate还包含一些用于处理表情符号的有用函数。

  • parser::is_emoji::emoji(仅限rust)- nom解析器,消耗一个表情符号
    • 想法:可能被核心用来过滤只有表情符号的反应
  • parser::is_emoji::get_first_emoji(text) - 如果文本以表情符号开头,则获取第一个表情符号
    • 想法:可以被UI用来获取聊天名称的第一个表情符号以显示为文本头像
  • parser::is_emoji::count_emojis_if_only_contains_emoji(text) - 在只包含表情符号的文本中计算表情符号
    • 对于jumbomoji逻辑很有用(如果你只发送带有表情符号的短消息,表情符号会以更大的尺寸显示)。
    • 此函数不会在过长字符串上失败,因此为了保持良好的性能,请先检查长度,如果它太长,消息本身就不大,因此不需要调用此函数。

依赖项

~1.2–2MB
~41K SLoC