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 解析器实现
225KB
4K SLoC
rust-cssparser
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的
style
crate中基于rust-cssparser的解析器示例。
依赖关系
~0.7–1.3MB
~29K SLoC