XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFESystem

【Rust】XFE系统,基于Rust和汇编

公开
关注 0 Fork 0 Star 0
UTF-8

C# 浏览器第六轮:网站文档与代码预览

本轮把指定网站的 Markdown 文章组件接入 XFESystem 自研 Web 管线。Markdown 继续使用相同 Markdig 扩展和 HTML 清理策略,随后载入原网站主题、Markdown、代码 CSS 及实际 JavaScript,通过 AngleSharp DOM、Jint、自研级联/布局/绘制和 framebuffer 显示。运行网站脚本的是来宾中的解释器;Chrome/Edge 仅用于独立截图对照,没有成为操作系统内核或来宾渲染控件。

操作入口

首次启动默认使用深色主题,沿用原来的深蓝界面和蓝色终端字体;在 Settings 可切换 Light / Dark 并调整主题色。有合法已保存配置时,采用其中的主题选择。

在 Files 打开 .md 文件,在 Editor 选择 Preview 或按 F5,进入真实文章 DOM 预览。代码文件使用 Monaco 编辑;C# 文件的着色分类来自网站原高亮脚本。Ctrl+S 保存到本次 RAM 会话。Browser 地址栏的 about:Monaco 仍可打开独立编辑示例。窗口拖动、任务栏、键盘和现有桌面主题保持原入口。

文档主题由打开预览时的系统 Light / Dark 决定。原网站文章组件包括代码工具栏、行号、列表、表格、引用、链接、数学及图表初始化;各功能实际通过情况必须读取这份镜像的验收报告,不能仅凭初始化脚本存在推断支持完成。

相同来源与显式适配

文章资源位于 Source/XFESystem.Documents/Assets/Website/Exact/。SourceManifest.json 固定来源工作树提交、每个源文件路径、规范 URL、源和快照 SHA256。CSS 和 JS 按原字节保存;本地资源目录只负责把网站 URL 对应到这些文件。清理策略继续过滤 Markdown 本身携带的不可信 HTML/脚本,不通过放宽 sanitizer 来执行文档内脚本。资源范围是文章组件,未复制账号、站点导航或其他完整网站功能。

原网站使用 highlight.js 11.11.1 + 自定义 csharp.js + code-style.css,没有 Monaco 配置。系统中 Markdown 的静态代码块直接运行这些原脚本。Monaco C# 编辑采用单独、可追踪的 WebsiteMonaco.js 适配器:真实 highlight.js 对当前完整模型产生分类,适配器转换为 Monaco TokensProvider;CodePalette.js 从相同 CSS 规则生成颜色。Monaco 继续承担真实模型、编辑和选择,JavaScript 仍使用官方 Monarch。这里保证可检查的语法与调色板来源,不把新增适配器称为网站原脚本,也不宣称编辑 UI 和静态代码块相同。

发行包 BrowserAssets/WebsiteCode/ 保存原资源、适配器、调色板、Manifest、Readme 和完整许可证;DocumentAssets/Website/Exact/ 保存原文章资源及 SourceManifest,父目录提供文档第三方声明与补充许可。新资源许可证放在 Licenses/Preview6Website/、Licenses/Preview6Fonts/Lato/、WebCjk/、BootstrapIcons/,保留已有许可证清单原样。

自研渲染与字体范围

本轮增加 color-mix(in srgb)、长度 min/max/clamp、字体与行高继承、inset、列表 marker 与 ::marker、基础二维表格和折叠边框、相邻块外边距折叠、中文和长文本换行。设备像素层支持圆角抗锯齿、外阴影、多层线性/圆形径向渐变和圆角 overflow;子背景、文字、Canvas 与命中测试采用同一裁剪几何。

Web 字体按真实 TrueType advance 和 kerning 度量,使用字体 head/hhea 表把 CSS em 转换为固定 Cosmos API 的行高单位;不再把所有 Web 字体当作固定格宽。系统正文实际采用可分发的 Lato Regular/Bold 回退,Consolas 等等宽请求实际采用已有 Cascadia Mono。Web 主字体缺少 BMP 中文字形时选择 Noto Sans SC 2.004-H2 派生的静态 TrueType 400/700,使用真实轮廓、字宽和抗锯齿,并与主字体基线对齐;只在该字体也没有字形时回退 Unifont。此路径不改变桌面、终端或原有 ASCII 字形。派生字体家族、现有 Unicode bank 范围子集、实际 28,184 个映射及原字体未提供的 1,913 个请求码位、原始输入与转换输出 SHA256 均在 assets/fonts/noto-sans-sc-2.004/Manifest.json 记录。网站原 font-family 保留,实际回退写入字体清单。没有捆绑 Windows Segoe UI/Consolas/微软雅黑,因此不能声明与该站在 Windows 浏览器中的字形逐像素相等。

通用 ::before / ::after(含单冒号形式)按级联、继承、!important 解析字符串、CSS Unicode 转义与 attr(),产生匿名布局盒而不修改 DOM;支持内联盒尺寸、边距、边框及数值 vertical-align。原网站 Bootstrap Icons 1.11.3 的完整 2,050 个码位映射从原 CDN WOFF 无损展开为 glyf TTF,家族名 bootstrap-icons 由 Web 字体解析器选择。四个代码工具按钮使用原 CSS 的真实内容和字体,没有硬编码图标替代;源文件、MIT、转换脚本及输入输出 SHA256 在 assets/fonts/bootstrap-icons-1.11.3/。参考浏览器也加载同版字体,所有资源请求及哈希单独留证。

仍未完整实现父子外边距折叠、复杂表格跨行列、完整 flex/grid/堆叠上下文、网页字体塑形、任意下载字体、椭圆渐变、内阴影及生成计数器/引号/URL;外阴影使用有限 Gaussian 近似。真实 KaTeX 初始化已产生 DOM,但完整数学排版绘制仍需单独验收;Mermaid 在缺少 SVG getBBox 时保留原站错误与源码回退,未伪造成功。SVG、数学的脚本运行与最终图像绘制必须分开验收。具体剩余差异以对照报告为准。

复现与证据

在仓库根目录运行宿主验证;--artifacts-path 使用独立绝对目录,避免干扰原生构建输出:

dotnet test Tests/XFESystem.Documents.Tests/XFESystem.Documents.Tests.csproj -c Release --artifacts-path "$PWD/build/CSharp/DocumentsV6"
dotnet test Tests/XFESystem.Browser.Tests/XFESystem.Browser.Tests.csproj -c Release --artifacts-path "$PWD/build/CSharp/BrowserV6"
dotnet run --project Tools/BrowserCompatibility/NativeFontProbe/NativeFontProbe.csproj -c Release --artifacts-path "$PWD/build/CSharp/FontV6" -- "$PWD"
node Tests/XFESystem.Documents.Tests/CaptureWebsiteReference.mjs

参考截图脚本创建独立 Chromium 配置,读取指定网站资源并验证原字节,不启动网站数据库,也不操作用户浏览器。默认网站目录是仓库相邻的 XFEStudioWebSite,可用 XFE_WEBSITE_ROOT 指定;XFE_DOCUMENT_BROWSER 指定 Edge/Chrome 可执行文件,XFE_REFERENCE_WIDTH / XFE_REFERENCE_HEIGHT 指定参考 CSS 视口。每次创建新的 build/CSharpDocuments/WebsiteReference-* 目录,保存 Light/Dark 截图、完整页面图、DOM、资源请求与计算样式。公开参考证明和自研原生镜像证明分别记录,宿主截图不能替代 QEMU 实测。

原生构建仍使用 Tools/CSharpBoot/BuildKernel.ps1,镜像验收由 Tools/CSharpBoot/TestBoot.py 与本轮报告列出的原生文档/Monaco检查执行。所有通过数字、镜像/内核/源快照 SHA256、实际分辨率/RAM、原生截图与参考图对比结果以对应发行包 Validation/Report.json 和 Validation/Report.md 为准。本说明不提前声明尚未完成的原生验收结果。

报告的 Receipts 指向每项原始记录;包内 Validation/ReceiptFiles.json 将来源映射到包内路径,Validation/Evidence/<记录名>/ 保存独立的参考图、来宾图、DOM、日志和结果,Validation/EvidenceFiles.json 给出逐文件 SHA256。同名截图放在不同记录目录,不覆盖原图。对照结果必须区分资源字节相同、C# token/颜色相同、布局几何差异与最终像素差异,不能只以图片尺寸相同作为成功。

文件及编辑模型仍在 RAM 会话。完整 CoreCLR、Framework 4.8、Worker/语言服务器、原生 HTTPS、独立浏览器进程、实体 USB 与持续 240 Hz 呈现尚未因此完成。专用实体启动 U 盘仍遵守既有安全发行流程;这份 C# 预览不能替代已通过实体介质验收的旧版。