blog
blog copied to clipboard
Servo 中的 Crates
style
- 从DOM树和样式表集合中,计算 specified 和 computed values
- 具体说,这个库包含属性的定义,以及将属性解析为 specified 值、再根据 specified 值计算 computed 值的相关代码,当然还有序列化 specified 和 computed 值的代码
- 主入口是函数
style::traversal::recalc_style_at
-
style::traversal::recalc_style_at
函数,计算单个节点的样式 -
style::traversal
模块,遍历DOM树 -
style
是个 Crate
-
- 主要依赖是 cssparser 和 selectors
模块 | 说明 |
---|---|
animation | CSS 的 transition 和 animation |
applicable_declarations | applicable(适用的)声明管理 |
attr | 解析 DOM attributes 的表示 |
author_styles | 一组作者样式表及其计算表示,例如用于 ShadowRoot 和 XBL 的 |
bezier | 贝塞尔曲线 |
bloom | 样式 bloom filter 是一项优化手段,用在深层后代选择器匹配时 |
computed_values | computed 值 的类型 |
context | 计算样式的上下文 |
counter_style | @counter-style 规则 |
custom_properties | 支持层叠变量的自定义属性,CSS Custom Properties for Cascading Variables Module Level 1 |
data | 样式计算中的每个节点的数据 |
dom | 用于从样式计算中访问DOM的类型和特征 |
dom_apis | 一些 DOM API 的通用实现,以便它们可以在 Servo 和 Gecko 间共享 |
driver | 遍历 DOM 树。遍历以顺序模式开始,当它发现 work 的时候有选择的并行 |
element_state | 声明元素可以在 |
encoding_support | 从字节解析样式表(不是从字符串) |
error_reporting | 用于报告解析错误的类型 |
font_face | @font-face 规则 |
font_metrics | 从样式系统访问字体指标 |
hash | 在 Gecko 模式下重新导出 hashglobe 类型,在 Servo 模式下重新导出 stdlib hashmap |
invalidation | 与无效样式相关的不同代码 |
logical_geometry | 在 flow-relative 空间中的几何信息 |
macros | 各种宏助手 |
matching | CSS 选择器匹配的高级接口 |
media_queries | 媒体查询 |
parallel | 并行遍历 DOM 树的实现 |
parser | 解析 CSS 代码的上下文 |
properties | 样式系统支持的 CSS 属性。由 build.rs 从 properties.mako.rs 模板生成 |
rule_cache | 从规则节点到 computed 值的缓存,以便缓存重置属性 |
rule_tree | 规则树 |
scoped_tls | Stack-scoped thread-local storage for rayon thread pools |
selector_map | 一种数据结构,可通过本地名称,ID和哈希有效地索引包含选择器的结构 |
selector_parser | 样式系统支持的伪类和伪元素 |
servo | 样式系统的和 servo 相关的 |
shared_lock | 受同一个锁保护的不同对象 |
sharing | 与样式共享缓存相关的代码,这种优化允许类似节点共享样式而无需两次运行选择器匹配 |
str | 字符串相关的方法,用于 attribute 等类似的东东 |
style_adjuster | 一个结构,用于封装计算样式所需的所有样式修正和标记传播,以使其符合 CSS 规范 |
style_resolver | 给定元素或伪元素的样式解析 |
stylesheet_set | 一组集中的文档样式表 |
stylesheets | 样式表及其 CSS 规则 |
stylist | 选择器匹配 |
thread_state | 支持动态断言,关于什么类型的线程正在运行以及它处于什么状态 |
timer | 定时器模块,用于定义由脚本控制的 Timer 类型 |
traversal | 遍历 DOM 树;bloom 过滤器 |
traversal_flags | 控制遍历过程的标志 |
values | CSS 中用到的常用值-values |
http://doc.servo.org/style/index.html
cssparser
cssparser 是 CSS Syntax Module Level 3 的 Rust 实现
一切都基于Parser
对象,输入是&str
。如果你有来自文件/网络/或其它地方的字节,并且想要支持 UTF-8 以外的字符编码,可参阅stylesheet_encoding
函数,它可以与 rust-encoding 和 encoding-rs 一起使用。
解析函数的约定
- 至少有一个
input: &mut cssparser::Parser
参数 - 返回
Result<_, ()>
- 当返回
Ok(_)
时,函数必须已经完全消耗了表示已解析值的输入 - 当返回
Err(())
时,可能已经消耗了一定数量的输入
因此,在调用另一个解析函数的时候:
- 要么,返回的
Err(())
值必须冒泡。这通过尾部调用的定义发生,可以使用try!
宏 - 要么,调用必须被
Parser::try
包着。try
采用闭包,接受一个Parser
,返回一个Result
,调用它一次,并返回自己相同的结果。如果结果是Err
,则将输入内的位置恢复为在调用闭包之前保存的位置
模块 | 说明 |
---|---|
Delimiter | 定界符常量,分别是 ! , { ; 以及空字符 等5类 |
color | |
cow_rc_str | |
cssparser | |
from_bytes | |
macros | |
nth | |
parser | |
rules_and_declarations | |
serializer | |
tokenizer | |
unicode_range | https://drafts.csswg.org/css-syntax/#urange |
结构 | 说明 |
---|---|
BasicParseError | 基本的解析错误,可由内置解析触发 |
CowRcStr | 共享(堆分配和引用计数)或 borrowed 字符串 |
CssStringWriter | fmt::Write 适配器,把文本转换为双引号的 CSS 字符串。引号不包括在内 |
DeclarationListParser | 提供声明列表解析的迭代器 |
Delimiters | 一个字符集,和Parser::parse_until* 方法一起使用 |
ParseError | 可扩展解析错误,客户端解析时可能会遇到 |
Parser | 一个 CSS 解析器,输入是$str ,产生Token ,跟踪嵌套的 block 和函数 |
ParserInput | 解析器的输入 |
ParserState | Parser 的内部状态(包括输入的位置),从Parser::position 方法获得 |
RGBA | |
RuleListParser | 给规则列表解析提供的迭代器 |
SourceLocation | 行号和列号 |
SourcePosition | 下表 |
TokenSerializationType | 一类令牌,看needs_separator_when_before 方法 |
UnicodeRange | 代码点的连续的范围 |
http://doc.servo.org/cssparser/index.html