106个版本

0.34.0 2024年4月23日
0.33.0 2023年9月11日
0.32.0 2023年8月2日
0.31.2 2023年6月6日
0.1.1 2014年11月14日

#27 in 解析器实现

Download history 99593/week @ 2024-04-26 97354/week @ 2024-05-03 95759/week @ 2024-05-10 104193/week @ 2024-05-17 104660/week @ 2024-05-24 115261/week @ 2024-05-31 99212/week @ 2024-06-07 110622/week @ 2024-06-14 119389/week @ 2024-06-21 111914/week @ 2024-06-28 106862/week @ 2024-07-05 121442/week @ 2024-07-12 120646/week @ 2024-07-19 138784/week @ 2024-07-26 124659/week @ 2024-08-02 138841/week @ 2024-08-09

544,839 每月下载量
用于 1,018crate(直接使用62个)

MPL-2.0 许可证

225KB
4K SLoC

rust-cssparser

Build Status

文档

Rust实现的CSS 3语法模块

概述

解析CSS涉及一系列步骤

  • 当从字节解析(例如读取文件或从网络获取URL)时,检测字符编码(基于HTTP头部中的Content-Type@charset规则、BOM等)并将其解码为Unicode文本。

    rust-cssparser尚未实现此功能,仅假设UTF-8。

    当从Unicode解析时(例如在HTML的<style>元素中),此步骤将被跳过。

  • 令牌化,也称为词法分析。输入,一个Unicode文本流,被转换为令牌流。令牌化永远不会失败,尽管输出可能包含错误令牌。

  • 然后,将这个平展的令牌流转换为组件值的树,这些值可以是保留令牌,也可以是包含更多组件值的块/函数(如{ … }[ … ]( … )foo( … )等)。

    rust-cssparser在标记化过程中同时进行:原始标记永远不会实例化,你只能得到组件值。

  • 然后可以将组件值解析为通用规则或声明。此时,规则的头和体以及声明的值仍然是组件值的列表。请参见这里的Token枚举了解数据结构。

  • 完整的CSS解析器的最后一步是将剩余的组件值解析为选择器、特定的CSS属性等。

    按照设计,rust-cssparser不会执行这一最后一步,因为这很大程度上取决于你想要做什么:你想要支持哪些属性,你想要如何处理选择器等。

    然而,它确实提供了一些辅助函数来解析CSS颜色An+B:nth-child()和相关选择器的参数)。

    请参见Servo的stylecrate中基于rust-cssparser的解析器示例。

依赖关系

~0.7–1.3MB
~29K SLoC