Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
2b1fb15
文档:升级言界1.0安装与配置
LiuXiu233 Jul 22, 2026
2976c39
文档:将桌面入口升级为双稳定路线
LiuXiu233 Jul 22, 2026
a39407b
文档:发布言台1.0架构与协议
LiuXiu233 Jul 22, 2026
54aa7b2
文档:发布言界1.0控件与API
LiuXiu233 Jul 22, 2026
3550828
文档:提供1.0兼容迁移与排障
LiuXiu233 Jul 22, 2026
a0c2126
文档:补齐1.0桌面生产验收
LiuXiu233 Jul 22, 2026
73c0a63
示例:同步言界1.0综合控件
LiuXiu233 Jul 22, 2026
ea842dc
文档:说明1.0运行时反馈与生命周期
LiuXiu233 Jul 22, 2026
bc623b2
文档:新增原生无障碍指南
LiuXiu233 Jul 22, 2026
2c5f367
文档:新增资源生命周期与诊断指南
LiuXiu233 Jul 22, 2026
9577ebc
文档:新增言界1.0表单指南
LiuXiu233 Jul 22, 2026
f0e254c
文档:新增叠层与菜单指南
LiuXiu233 Jul 22, 2026
bfa689a
文档:新增数据源与虚拟列表指南
LiuXiu233 Jul 22, 2026
e6dee56
文档:新增动画与帧反馈指南
LiuXiu233 Jul 22, 2026
188c236
文档:强化1.0打包与来源核验
LiuXiu233 Jul 22, 2026
15b5dae
文档:说明1.0托管图片资源
LiuXiu233 Jul 22, 2026
663de60
构建:调整1.0文档搜索容量预算
LiuXiu233 Jul 22, 2026
de5a33f
CI:验证桌面文档双工具链
LiuXiu233 Jul 22, 2026
0aee0f3
测试:冻结桌面1.0文档契约
LiuXiu233 Jul 22, 2026
4ca254c
文档:增加1.0生产指南入口
LiuXiu233 Jul 22, 2026
0488b4b
文档:更新生态桌面稳定版本入口
LiuXiu233 Jul 22, 2026
d7a007f
示例:锁定桌面1.0发布依赖
LiuXiu233 Jul 22, 2026
9e27c77
修复:保持文档示例最低工具链锁
LiuXiu233 Jul 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 9 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,12 @@ jobs:
test "$("$core" examples/language/问候项目.yx)" = $'你好,言序\n你好,开发者'

desktop-examples:
name: 桌面生态示例
name: 桌面生态示例(言序 ${{ matrix.yanxu }})
runs-on: ubuntu-24.04
strategy:
fail-fast: false
matrix:
yanxu: ['1.1.9', '1.1.20']
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
- name: 安装原生窗口运行依赖
Expand All @@ -71,14 +75,15 @@ jobs:
sudo apt-get -o Acquire::Retries=5 install -y \
libfontconfig1 libwayland-client0 libxkbcommon0 libxkbcommon-x11-0 \
libx11-6 xvfb
- name: 检出言序 1.1.9(言界已验证基线)
- name: 检出言序 ${{ matrix.yanxu }}
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
with:
repository: YanXuLang/yanxu
ref: v1.1.9
ref: v${{ matrix.yanxu }}
path: target/yanxu-core
- name: 构建言序并锁定言界
- name: 构建言序并锁定言界 1.0
run: |
grep -Fx '言界 = { 包 = "yanxu-ui", git = "https://github.com/yanxulang/yanxu-ui.git", 修订 = "v1.0.0", 版 = "^1.0" }' examples/desktop/言序.toml
cargo build --manifest-path target/yanxu-core/Cargo.toml --locked --bin yanxu
target/yanxu-core/target/debug/yanxu 包 更新 examples/desktop
- name: 核对文档源码、格式与静态类型
Expand Down
66 changes: 66 additions & 0 deletions content/docs/ecosystem/desktop/accessibility.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
---
title: 原生无障碍
description: 用同一棵言界控件树接入 Windows UIA、macOS NSAccessibility 与 Linux AT-SPI。
---

言界 1.0 把控件树转换为言台无障碍协议 1.0 的纯言序语义树。言台再把同一模型注册到
Windows UIA、macOS NSAccessibility 或 Linux AT-SPI;应用不接触系统对象、原始指针或
平台条件分支。

## 内置控件语义

每个控件存活期间拥有稳定正整数编号,并公开角色、逻辑像素边界、名称、描述、状态、值、
动作和子节点。应用应为没有充分可见文字的控件设置名称:

```yanxu
定 姓名 为 表单.输入框({「占位」:「姓名」});
姓名.可访问名称(「账户姓名」);
姓名.必填(真);

定 保存 为 表单.按钮(「保存」);
保存.可访问描述(「保存当前账户设置」);
```

`显示`、`启用`、`可聚焦`、`只读`、`必填`、`无效`、焦点、选择和忙碌状态会按角色映射。
值只允许空、逻辑值、有限数或有界文字;集合数量、加载错误和其他诊断不应塞进值字段。

## 焦点与动作

内置控件把辅助技术请求复用到已有交互路径:

| 控件 | 主要动作 |
| --- | --- |
| 按钮、复选框、单选框、切换 | 点击、选择 |
| 下拉选择、滑块、输入框 | 设置值;按控件支持展开、折叠、增加、减少或选择 |
| 滚动、列表项 | 滚动、选择、滚动到 |
| 标签、分割面板 | 选择或调整比例 |
| 菜单、菜单项、弹出层 | 点击、展开、折叠 |

请求携带窗口、当前树修订和节点编号。言界先同步尚未提交的语义变化,再重新查找当前控件,
核对可见、启用、可聚焦状态和参数;旧修订、离开可见范围的列表项、已关闭控件或未声明动作
都会被拒绝,不会转成普通事件。

## 同步与检查

通常由窗口在显示、布局、重绘和状态变化时自动同步。测试和诊断可以显式读取:

```yanxu
定 摘要 为 窗口.同步无障碍();
定 快照 为 窗口.无障碍快照();
```

快照包含修订、节点数、文字字节、焦点和规范化树。单窗口最多 16384 个节点、深度 64、
总文字 4 MiB;普通列表和虚拟列表只为当前可见范围生成最多 256 个`列表项`节点。密码框
不把值或文字运行交给系统桥,内容安全诊断也不复制语义文字树。

自定义控件覆写语义时应保留父实现的编号、边界和通用状态,只声明已经实现的动作,并在
执行动作时再次校验当前状态和参数。完整角色、状态、动作组合与限制见
[言台协议](https://github.com/yanxulang/yanxu-platform/blob/v1.0.0/docs/ACCESSIBILITY_PROTOCOL.md)和
[言界接入指南](https://github.com/yanxulang/yanxu-ui/blob/v1.0.0/docs/ACCESSIBILITY.md)。

## 上线验收

六目标 CI 验证适配器创建、树同步、焦点/动作回传和关闭收敛,但不能替代实际辅助技术的
播报。发布前应分别使用 Windows Narrator、macOS VoiceOver 和 Linux Orca 检查名称、焦点
顺序、必填/无效状态、表单改值、菜单层级、列表项和窗口关闭。运行时还应确认言台能力
查询报告`原生无障碍桥 = 真`及预期的 UIA、NSAccessibility 或 AT-SPI 后端。
67 changes: 67 additions & 0 deletions content/docs/ecosystem/desktop/animation.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
---
title: 动画与帧反馈
description: 用言台呈现反馈驱动有界动画,并通过单槽背压避免无界帧队列。
---

言界 1.0 动画使用言台 1.0 的帧提交回执和`帧呈现`事件,不用固定间隔计时器猜测窗口何时
完成绘制。每个窗口只保存一个待呈现帧;应用持续更新时,新帧有界替换旧帧,不形成无界
渲染队列。

## 创建动画

`窗口.动画(配置,更新回调)`返回动画任务:

| 字段 | 默认值 | 边界 |
| --- | --- | --- |
| `起值` | `0` | 有限数,起终跨度也必须有限 |
| `终值` | `1` | 有限数,起终跨度也必须有限 |
| `时长毫秒` | `140` | 1–3600000 |
| `缓动` | `线性` | `线性`、`缓入`、`缓出`、`缓入缓出` |
| `完成` | 空 | 可选回调,只在正常到达终点后调用一次 |

```yanxu
法 更新(值) 则
进度.值(值);

法 完成() 则
提示.内容(「完成」);

定 任务 为 窗口.动画({
「起值」:0,
「终值」:100,
「时长毫秒」:600,
「缓动」:「缓入缓出」,
「完成」:完成
},更新);
```

任务公开编号、状态、运行中、取消和快照。状态为运行中、完成、已取消或失败;更新/完成
回调抛错只终止当前任务,其他动画和事件循环继续。每窗最多 1024 个活动动画,底层队列
硬上限为 4096。窗口关闭会取消活动任务,不再访问已释放平台资源。

## 呈现反馈链

1. 注册任务时立即写入起值并请求首帧;
2. `需要重绘`生成完整帧,并取得提交帧序号;
3. 匹配的`帧呈现`携带进程内单调呈现时间;
4. 言界用该时间推进活动任务并请求下一帧;
5. 到达终值后提交静态终帧,终帧呈现后停止调度。

提交回执中的`被替换帧`会替换唯一待呈现身份,旧帧此后不会驱动动画。窗口隐藏、最小化
或表面尺寸为零时反馈可以暂停;恢复后的重绘按当前单调时间追赶,不积累计时器或帧任务。
`帧呈现`表示软件缓冲已交给原生表面,不等同于显示器垂直同步时间戳。

## 诊断与性能

窗口诊断提供待呈现身份、提交、替换、呈现、忽略、失败、最后延迟,以及动画活动数、高
水位、完成、取消和失败总数。诊断不保存更新回调或控件内容。提交失败会恢复全量脏区,
便于调用方处理错误后重试。

言界 Release 在固定 Linux x86-64 环境测量动画任务生命周期、帧反馈、64 个活动任务诊断
以及 32 控件布局/帧编码;报告使用预热、长样本、中位数和 MAD 门禁。性能预算用于发现
持续回归,不承诺任意机器的显示延迟,也不替代六目标真实窗口测试。

完整契约见
[动画、帧反馈与运行诊断](https://github.com/yanxulang/yanxu-ui/blob/v1.0.0/docs/ANIMATION_AND_DIAGNOSTICS.md)。
23 changes: 15 additions & 8 deletions content/docs/ecosystem/desktop/api-reference.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -9,23 +9,30 @@ description: 言界常用公开入口与言台版本化原语的索引。
引「包:言界」为 界面;
引「包:言界/几何」为 几何;
引「包:言界/文本」为 文本;
引「包:言界/数据源」为 数据;
引「包:言界/配置」为 配置;
引「包:言界/错误」为 错误;
```

| 对象 | 常用方法 |
| --- | --- |
| 应用 | `窗口`、`主题`、`主题配置`、`监听`、`定时器`、`加载图片`、`运行`、`退出`、`关闭` |
| 窗口 | `行`、`列`、`堆叠`、`网格`、`显示`、`隐藏`、`标题`、`大小`、`关闭时`、`快捷`、`关闭` |
| 通用控件 | `显示`、`启用`、`可聚焦`、尺寸、边距、伸展、样式、监听、捕获、可访问名称/描述、`关闭` |
| 内容控件 | `内容`、`取内容`、`点击`、`变化时`、`选择范围` |
| 容器 | 行、列、堆叠、网格、滚动、列表、标签页、分割面板、菜单、弹出层、画布、图片 |
| 应用 | `窗口`、主题、监听、资源配额、托管定时器/图片、诊断、生命周期、运行、退出、关闭 |
| 窗口 | 容器、显示、标题、大小、快捷、动画、无障碍同步、诊断、生命周期、关闭 |
| 通用控件 | 显示、启用、可聚焦、只读、必填、无效、尺寸、边距、样式、事件、语义、关闭 |
| 表单控件 | 文字、按钮、复选框、单选框、切换、下拉选择、滑块、进度条、输入框 |
| 数据与导航 | 滚动、列表、虚拟列表、标签页、分割面板、菜单、弹出层 |
| 绘制与资源 | 画布、图片、帧反馈动画、托管图片生命周期 |
| 系统服务 | 剪贴板读取/写入、打开文件/多个文件、保存文件、选择目录/多个目录 |

完整、由源码快照生成的签名参考见[言界 REFERENCE](https://github.com/yanxulang/yanxu-ui/blob/v0.1.1/docs/REFERENCE.md),叙事 API 见[言界 API](https://github.com/yanxulang/yanxu-ui/blob/v0.1.1/docs/API.md)。
1.0 冻结 30 个声明、23 个类、7 个包级函数、125 个域和 375 个方法。完整、由源码快照
生成的签名参考见[言界 REFERENCE](https://github.com/yanxulang/yanxu-ui/blob/v1.0.0/docs/REFERENCE.md),
叙事 API 见[言界 API](https://github.com/yanxulang/yanxu-ui/blob/v1.0.0/docs/API.md),稳定范围
见[支持政策](https://github.com/yanxulang/yanxu-ui/blob/v1.0.0/SUPPORT.md)。

## 言台原语

普通应用只依赖言界。自定义框架、后端调试和协议工具可查阅[言台平台 API](https://github.com/yanxulang/yanxu-platform/blob/v0.1.0/docs/PLATFORM_API.md)与[生成签名](https://github.com/yanxulang/yanxu-platform/blob/v0.1.0/docs/API.md)。
普通应用只依赖言界。自定义框架、后端调试和协议工具可查阅[言台平台 API](https://github.com/yanxulang/yanxu-platform/blob/v1.0.0/docs/PLATFORM_API.md)与[生成签名](https://github.com/yanxulang/yanxu-platform/blob/v1.0.0/docs/API.md)。

言台公开应用、窗口、显示器、事件批次、输入法、光标、计时器、字体、文字整形/测量/命中、图片、完整帧提交、剪贴板、文件对话框、协议查询、能力查询和统一错误;不公开任何高级控件或系统句柄。
言台公开应用、窗口、显示器、事件批次、输入法、光标、计时器、字体、文字整形/测量/命中、
图片、完整帧与呈现反馈、无障碍语义树、资源配额、剪贴板、文件对话框、协议/能力查询和
统一错误;不公开任何高级控件或系统句柄。
22 changes: 18 additions & 4 deletions content/docs/ecosystem/desktop/app-loop.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ title: 应用和事件循环
description: 创建应用、监听生命周期、使用计时器并安全退出事件循环。
---

每个进程通常创建一个`应用`,由它持有窗口、字体、图片、计时器和事件队列。`运行`必须在 VM 所有者线程调用,且同一应用不能并发运行两次。
每个进程通常创建一个`应用`,由它持有窗口、托管图片、托管计时任务、监听和事件队列。
`运行`必须在 VM 所有者线程调用,且同一应用不能并发运行两次。生命周期只沿`就绪`、
`运行中`、`退出请求`、`已退出`和`已关闭`前进;已经退出的应用不能再次运行。

```yanxu
引「包:言界」为 界面;
Expand All @@ -24,10 +26,22 @@ description: 创建应用、监听生命周期、使用计时器并安全退出
窗口.关闭时(关闭);
窗口.显示();
应用.运行();
定 关闭报告 为 应用.关闭();
```

`定时器(毫秒,重复,回调)`最小间隔为 10 毫秒。回调不是操作系统线程回调,而是和窗口事件一样进入有界宿主队列,再由事件泵在言序线程执行。周期动画应使用单调时间计算当前值,不要假设每次回调间隔完全相等。
`定时器(毫秒,重复,回调)`最小间隔为 10 毫秒,并返回托管任务。任务可查询状态、触发
次数和结构化错误,也可幂等取消/关闭;一次任务回调完成后自动归还平台配额,回调失败只
使该任务进入失败。回调不是操作系统线程回调,而是和窗口事件一样进入有界宿主队列,再由
事件泵在言序线程执行。

应用级`监听(事件类型,回调)`可处理启动、激活、失活、退出请求、系统主题和显示器变化。窗口未处理的退出请求会结束循环;显式调用`退出`只请求停止,`运行`返回后再由`关闭`释放应用根资源。
周期动画不要使用计时器猜测显示节奏。调用`窗口.动画(配置,更新回调)`后,言界以匹配的
`帧呈现`事件和进程内单调时间推进任务;每窗只保留一个待呈现帧,被替换帧不会继续驱动动画。

事件队列最多保留 4096 项。指针移动、窗口缩放和重绘会保留最新状态,滚轮在同一批次累积,因此繁忙时不会因每个物理事件都跨 ABI 而无限增长。
应用级`监听(事件类型,回调)`可处理启动、激活、失活、退出请求、系统主题和显示器变化。
窗口未处理的退出请求会结束循环;显式调用`退出`只请求停止,`运行`返回后再由`关闭`按
计时器、窗口、图片、监听和原生应用继续最佳努力清理。关闭报告可 JSON 序列化,生产应用
应记录其中的失败步骤;重复关闭返回同一结果,不再次释放资源。

事件队列最多保留 4096 项。指针移动、窗口缩放和重绘会保留最新状态,滚轮在同一批次累积,
因此繁忙时不会因每个物理事件都跨 ABI 而无限增长;离散事件满时会以稳定错误停止循环,
而不是静默丢失。应用可读取内容安全的诊断快照观察队列水位、资源、帧、配额和生命周期。
4 changes: 2 additions & 2 deletions content/docs/ecosystem/desktop/backend-guide.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: 贡献新的平台后端
description: 在不泄漏系统句柄或下沉高级控件的前提下扩展言台。
---

首版 Windows、macOS、Wayland 和 X11 共享 winit/softbuffer 后端。新增集成应先扩展公共路径;只有上游确实无法表达所需平台原语时,才增加小型目标适配器。
1.0 的 Windows、macOS、Wayland 和 X11 共享 winit/softbuffer 后端。新增集成应先扩展公共路径;只有上游确实无法表达所需平台原语时,才增加小型目标适配器。

## 边界

Expand All @@ -22,4 +22,4 @@ description: 在不泄漏系统句柄或下沉高级控件的前提下扩展言

高频新事件必须选择明确策略:连续状态可保留最新,增量滚轮应累积,按键、按钮、IME、拖放与生命周期事件永不合并。新绘制能力优先增加带自描述长度的次版本操作码;改变既有解释才提升主版本。

完整贡献流程和本地命令见[言台后端指南](https://github.com/yanxulang/yanxu-platform/blob/v0.1.0/docs/BACKEND_GUIDE.md)。
完整贡献流程和本地命令见[言台 1.0 后端指南](https://github.com/yanxulang/yanxu-platform/blob/v1.0.0/docs/BACKEND_GUIDE.md)。
18 changes: 14 additions & 4 deletions content/docs/ecosystem/desktop/capability-matrix.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: 平台能力表
description: 言台 0.1.0 与言界 0.1.1 在六个正式桌面目标上的能力和验证范围
description: 言台 1.0 与言界 1.0 在六个正式桌面目标上的能力和生产验证范围
---

`支持`表示同一公开接口已实现并进入六目标 CI;`桌面验证`表示自动测试可覆盖确定部分,但最终体验还依赖真实用户会话。
Expand All @@ -15,12 +15,16 @@ description: 言台 0.1.0 与言界 0.1.1 在六个正式桌面目标上的能
| 实际中文候选窗 | 桌面验证 | 桌面验证 | 桌面验证(IBus/Fcitx5) |
| 文件拖放 | 支持 | 支持 | 支持 |
| 文本剪贴板 | 支持,需权限 | 支持,需权限 | 支持,需权限 |
| RGBA8 图片剪贴板 | 支持,需权限 | 支持,需权限 | 支持,需权限 |
| 文件/目录对话框 | 支持,需权限 | 支持,需权限 | 支持,需权限 |
| 系统字体、回退与复杂整形 | 支持 | 支持 | 支持 |
| PNG/JPEG 图片 | 支持 | 支持 | 支持 |
| CPU 二维绘制 YXDR 1.1 | 支持 | 支持 | 支持 |
| 言界全部首版控件 | 支持 | 支持 | 支持 |
| 原生无障碍桥 | 尚未接入 | 尚未接入 | 尚未接入 |
| 言界 1.0 全部控件 | 支持 | 支持 | 支持 |
| 原生无障碍桥 | UIA | NSAccessibility | AT-SPI |
| 帧反馈与有界动画 | 支持 | 支持 | 支持 |
| 资源配额与结构化关闭 | 支持 | 支持 | 支持 |
| 版本化运行诊断 | 支持 | 支持 | 支持 |
| GPU 后端 | 尚未提供 | 尚未提供 | 尚未提供 |

## 六个正式目标
Expand All @@ -34,6 +38,12 @@ x86_64-unknown-linux-gnu
aarch64-unknown-linux-gnu
```

每个目标都会核对动态库实际架构、包清单摘要、言序 1.1.9 类型检查、ABI 集成、API 漂移和 Release 构建。真实窗口自动退出在六个执行器运行;Linux 使用 Xvfb 验证 X11 路径,Wayland 与实际输入法会话需另做桌面冒烟。该矩阵是 0.1.1 的发布证据,不代表已经兼容当前核心 1.1.20。
言台每个目标都会核对动态库实际架构、ABI 导出、包清单摘要、最低言序 1.1.7 集成、真实
窗口和原生无障碍桥;另外执行 109 项 Rust 测试、协议/ABI 畸形语料、4096 轮事件背压、
2048 轮资源浸泡、性能预算和零例外依赖审计。

言界每个目标同时验证最低言序 1.1.9 与正式构建基线 1.1.20,覆盖 API 漂移、全部公开
示例、11 条无窗口集成、5 条真实窗口路径、4096 轮交互和 1024 轮资源归零。Linux 使用
Xvfb 验证 X11 路径;Wayland、实际输入法候选窗和屏幕阅读器最终播报仍需用户桌面验收。

运行时应调用言台`能力查询()`,根据字段判断可选能力;不要只根据操作系统名称猜测。
Loading