术语表
文档里出现的名词,按首次可能遇到的顺序排。
文档里出现的名词,按首次可能遇到的顺序排。
组件
YSU — 渲染内核。负责从 HTML 字节到像素的全部过程。名字来自项目早期的代号,现在只当专有名词用,不展开。
JSE — JavaScript 引擎。词法与语法分析完成,运行期只有数字抽象操作。
Vexo — 浏览器本体,指用户看到的那一层,也指整个项目。
外壳(shell) — 承载内核的那一层。现在指 ui/ 里的 C++ / Qt6 程序。
crates/vexo — 早期的 Rust 外壳,已被 ui/ 取代。现在留在工作区里,不参与发布。
内核管线
记号(token) — 词法阶段的产物。HTML 词法产出标签、属性、文本、注释、DOCTYPE;CSS 词法产出标识符、字符串、数字、分隔符。
插入模式(insertion mode) — HTML 树构建的状态。规范定义了「初始」「文档中」「表格中」「文本中」等一组模式,当前模式决定一个标签该怎么处理。
收养机构算法(adoption agency) — 规范里处理嵌套格式化元素错位的那段算法。<b>1<p>2</b>3</p> 这类输入靠它把树修回规范要求的样子。
寄养(foster parenting) — 表格上下文里遇到不该出现的元素时,规范要求的处理:把它插到表格前面,而不是里面。
怪异模式(quirks mode) — 缺少或写坏 DOCTYPE 时进入的兼容模式。内核会记录这件事,因为盒模型在两种模式下不一样。
外来内容(foreign content) — SVG 与 MathML 的子树。它们有各自的标签名调整与属性调整规则,也要处理中文档里常见的大小写混写。
计算样式(computed style) — 层叠与继承算完之后,每个元素最终用到的属性值。它是布局的直接输入。
盒子树(box tree) — 布局的输入结构。DOM 节点在这里被翻译成块盒、行内盒、表格盒、弹性盒,并补上匿名块。
匿名块盒 — 块容器里混着行内内容时,规范要求把连续的行内内容包进一个没有对应元素的块盒。
行盒(line box) — 一行内容所占的范围。文字片段、行内块都挂在行盒上。
显示列表(display list) — 绘制阶段的产物,一串平台无关的绘制命令:填矩形、画边框、画文字、推裁剪切、弹裁剪切。
剪刀矩形(scissor rect) — GPU 上的裁剪范围。它必须和顶点变换走同一套换算,否则滚动之后内容会被裁错。
字形图集(glyph atlas) — 一张把用到的字形位图拼在一起的大纹理。文字渲染时按坐标从图集里采样,而不是每个字形单独一张纹理。
设备像素比(device pixel ratio) — 一个逻辑像素对应几个物理像素。高分屏上是 2 或更大。
布局坐标 — 内核内部用的坐标系,相对页面左上角,单位是逻辑像素。滚动量也用这个坐标传。
C ABI
C ABI — 内核暴露给 C 调用方的那层接口,在 crates/ysu-capi 里,26 个 extern "C" 函数。
接口版本(YSU_CAPI_VERSION) — 只在函数签名变化时递增的那个版本号。头文件与静态库不一致时,外壳会在启动时发现并退出。
产品版本 — version.toml 里的 browser_version,是给人看的版本号,形状如 0.1.0。
引擎实例(YsuEngine *) — 内核的一份状态:文档、样式、布局、渲染目标。一个标签页一个实例。
取回(fetch) — 在后台线程上把 URL 的内容拿回来。它同时用于取网页和取外部样式表,靠 as_page 参数区分。
构建
静态库 — libysu_capi.a。C++ 外壳链接的就是它。改了 C ABI 的任何签名都要重新构建它,否则外壳链的是旧库。
rlib — Rust 的库形式。ysu-capi 同时产出静态库和 rlib,后者让 examples/ 里的例子能在 Rust 里直接调同一套 ABI 函数。
PPM — 一种极简的图片格式。内核的示例程序把渲染结果写成 PPM,因为写它只需要十几行代码,不需要引图像库。