# 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` 使用独立绝对目录,避免干扰原生构建输出: ```powershell 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# 预览不能替代已通过实体介质验收的旧版。