Implement the P0 View grammar, expr bridge, stateless view Components, and Ebox mount path in a new independent package. Include bilingual architecture and implementation documents plus contract tests.
2.2 KiB
2.2 KiB
ETAF
ETAF 是构建在独立 Ebox 布局与渲染引擎之上的文本应用框架。
公共模型刻意保持很小:
View描述 Host 和 Component 调用。Component根据 props 产生 View。Ebox负责测量、布局、绘制和发布结果。
所有结构都使用同一种形状:
(name :property value ... child ...)
属性必须全部位于前面,子节点必须全部位于后面。属性值就是普通 Elisp 表达式;子节点中唯一的可执行桥接是 expr:
(etaf-view
(column
(text :face 'bold "Hello")
(text (expr :value (if ready "Ready" "Waiting")))))
使用 :view 定义无状态 Component:
(etaf-define-component status-label (&key label)
"Render a status label."
:view
(text :face 'bold (expr :value label)))
(etaf-mount
"*etaf-demo*"
(etaf-view
(status-label :label "Connected")))
etaf-view 是唯一公共 View 构造入口。View 结构和 Component 的 :view 都不需要 quote;quote 仍然是普通 Elisp 数据语法,例如用 'bold 表示 face 符号。普通 Elisp 表达式返回 Renderable 时,必须在 expr 中使用未 quote 的 (etaf-view ...) 构造它。
开发检出
开发时先把同级的 Ebox 检出目录加入 load-path:
(add-to-list 'load-path "/path/to/github/emacs-box")
(add-to-list 'load-path "/path/to/github/etaf")
(require 'etaf)
包元数据声明 Ebox 1.0.1 为运行时依赖。ETAF 不调用 Ebox 私有函数。
第一阶段范围
当前仓库建立并测试 P0 语法、etaf-view、expr、无状态 :view Component、核心 Host(text、fragment、container、row、column、stack、flex、spacer)以及 Ebox 挂载桥接。状态型 :setup、slot、styles、Context、Behavior、事件、Action、数据和增量 Component 协调将在后续里程碑实现;暂未实现的子句会显式报错。
运行聚焦检查:
make check EMACS=/Applications/Emacs.app/Contents/MacOS/Emacs
目标架构和分阶段开发工作分别见 docs/architecture.zh.md 与 docs/implementation-plan.zh.md,英文版本与中文版本并列维护。