ecss/docs/api.zh.md
2026-08-28 22:06:17 +08:00

67 lines
6.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ecss API 参考
[English](api.en.md)
## Schema
- `(ecss-schema-package-create PACKAGE-ID DEFINITIONS)` 一次校验并快照一个 package 的属性定义。
- `(ecss-schema-package-id PACKAGE)``(ecss-schema-package-property-ids PACKAGE)` 返回 detached identity/index 信息。
- `(ecss-schema-set-compose &rest PACKAGES)` 原子组合一个 surface 的不可变 schema setpackage、canonical 与 alias 冲突都会使整次组合失败。
- `(ecss-schema-set-package-ids SCHEMAS)``(ecss-schema-set-property-ids SCHEMAS)` 返回稳定组合顺序。
- `(ecss-schema-set-canonical-id SCHEMAS NAME)` 把 exact alias 解析为 canonical ID。
- `(ecss-schema-set-property SCHEMAS ID)` 返回 defensive schema copy`ID` 可以是 canonical 或 exact alias。
- `(ecss-schema-set-property-metadata SCHEMAS ID)` 返回 detached metadata。
- `(ecss-expand-declarations SCHEMAS DECLARATIONS)` 校验属性并只展开一次 shorthand。
- `(ecss-merge-declarations SCHEMAS &rest DECLARATION-GROUPS)` 按从左到右的优先级展开并合并多组声明;后组覆盖相同 longhand显式 nil 不会被当作缺省。
每个 definition 是包含 `:id`、非空 `:impacts`,以及可选 `:initial`、`:inherits`、`:normalizer`、`:validator`、`:equality`、`:shorthand`、`:aliases`、`:projections`、`:metadata` 的 plist。Property ID 必须是包含 `/` 的 symbol例如 `demo/color`。Alias 只存在于声明归一化入口;同一声明中 canonical/alias、重复 alias 或 shorthand/owned-longhand 冲突会报错,不采用隐式 last-wins。不同 declaration group 仍由后组覆盖前组。
Custom property 不需要 schema使用 `--name` symbol。`initial` 在 package 创建时规范化并校验一次;已计算的 initial/inherited value 不会再次执行 normalizer。Package 与组合后的 schema set 没有公共 mutator。
## Subject 与 selector
- `(ecss-subject-create &key type id classes attributes states parent children)` 创建内置 subject。
- `(ecss-subject-adapter-create &key type id classes attributes states parent children)` 为 caller-owned node 创建 adapter。
- `(ecss-selector-parse STRING)` 返回 AST。
- `(ecss-selector-normalize SELECTOR)` 接受 string 或 AST返回 defensive AST。
- `(ecss-selector-match-p SELECTOR SUBJECT &optional ADAPTER)` 执行匹配。
- `(ecss-selector-specificity SELECTOR)` 返回 `(ID CLASS TYPE)`
Parser 支持 selector list、compound selector、type/id/class、attribute presence/equality/token/language/prefix/suffix/substring、state pseudo、`:is()`、`:where()`、`:not()`、`:has()`,以及 descendant/child/adjacent/general-sibling combinator。`:has()` 使用相对 selector list支持 `:has(> child)`、`:has(+ sibling)`、`:has(~ sibling)` 及其后续复合关系。未知 functional pseudo 被保存为 state token由 adapter 的 `states` 决定是否匹配。
## Stylesheet
- `(ecss-stylesheet-create)` 创建隔离 stylesheet。
- `(ecss-stylesheet-declare-layers STYLESHEET LAYERS &optional ORIGIN)` 为一个 origin 预声明独立 layer orderORIGIN 默认是 `author`
- `(ecss-stylesheet-add-rule STYLESHEET SCHEMAS SELECTOR DECLARATIONS &key origin layer scope)` 原子添加 rule。
- `(ecss-stylesheet-rules STYLESHEET)``(ecss-stylesheet-layers STYLESHEET &optional ORIGIN)` 返回 defensive copies。
- `(ecss-stylesheet-clear STYLESHEET)` 清空显式对象。
ORIGIN 是 `ua`、`user`、`author`、`animation` 或 `transition`。Inline declarations 不放入 stylesheet而通过 compute 的 `:declarations` 传入。
## Values 与 computation
- `(ecss-important VALUE)` 标记 `!important`
- `(ecss-wide-value KIND)` 创建 `initial`、`inherit`、`unset`、`revert` 或 `revert-layer` tagged value同名普通 symbol 保持普通值。
- `(ecss-var NAME &optional FALLBACK)` 创建 custom-property reference。
- `(ecss-compute-style SCHEMAS SUBJECT &key stylesheet rules declarations parent-style adapter provenance value-resolver)` 返回 `ecss-computed-style`
不能同时传 `:stylesheet``:rules`。`:rules` 接受 `ecss-stylesheet-rules` 返回的 rule list适用于不可变 snapshot 的保存和重放。`:parent-style` 可以是 computed style也可以是已经计算完成的 values plist。`:provenance t` 才保留 winner facts。`:value-resolver` 的签名是 `(VALUE PROPERTY SUBJECT)`;未提供时 ECSS 不调用任何 property value。
## Computed style
- `(ecss-computed-style-values STYLE)` 返回 defensive values plist。
- `(ecss-computed-style-custom-properties STYLE)` 返回 deterministic custom-property plist。
- `(ecss-computed-style-active-properties STYLE)` 返回由有效 declaration 或 active inheritance 实际提供的 property ids保留 explicit nil 与 absence 的区别invalid winner 回退到 initial 时不伪装成 active declaration。
- `(ecss-computed-style-specified-properties STYLE)` 返回存在 cascade winner 的长手 property ids独立于是否请求 provenance。
- `(ecss-computed-style-precedence-winner STYLE PROPERTIES)` 返回这些 canonical property 已选 winner 中 cascade 优先级最高的 property ID不会重跑 cascade也不要求公开 provenance。
- `(ecss-computed-style-copy-with-values STYLE VALUES &key active-properties specified-properties)` 在 selector/cascade 事实已证明不变、只需替换 computed values 时返回新的 immutable-style copy。
- `(ecss-computed-style-provenance STYLE)` 返回 winner、origin、important、layer、specificity、scope/source/declaration order、valid/fallback 等事实。
- `(ecss-computed-style-diagnostics STYLE)` 返回 custom-property cycle 等 deterministic diagnostics。
- `(ecss-computed-style-value STYLE PROPERTY &optional FALLBACK)` 读取 detached 单值PROPERTY 可以是 canonical 或 exact alias。
- `(ecss-computed-style-property-fact STYLE PROPERTY)` 返回一个 detached typed fact包含 canonical property、computed value、owner、impact set、projections、winner provenance 与 metadata。同一个 fact 可同时交给多个 impact consumer不重新规范化其 value。
- `(ecss-computed-style-present-p STYLE PROPERTY)` 判断 property 是否 active即使值为 nil。
- `(ecss-computed-style-specified-p STYLE PROPERTY)` 判断长手 property 是否存在 cascade winner。
所有公共 schema/computed getter 都不会暴露 registry 或 computed style 的可变内部对象。调用者修改返回值不会改变 computed style、schema set 或 stylesheet。