本机 Markdown 解析试验台。Qt 三层壳(MdLab.exe → MdLabUI.dll → MdLabCore.dll),Core 零 Qt、纯 C ABI 3,自研 MarkDownParser 对齐 CommonMark / GFM,可对照 AST、五种渲染、嵌入套件与 unsafe 清洗。
本机 Markdown 解析试验台。Qt 三层壳(
MdLab.exe → MdLabUI.dll → MdLabCore.dll),Core 零 Qt、纯 C ABI 3。用来设计、触发、观察自研 MarkDownParser:改源码、看预览、拆 AST、对金标、跑套件。
MdLab 面向解析器作者与集成方:同一份 Markdown 在本机走完「输入 → AST → 多种渲染 → 与金标对照 → 安全清洗」。主题、字号与最近用例只写本机,不上传云端。
当前产品边界:
javascript: / vbscript: / data: / file: 地址首版不做笔记库、云同步、账号体系,也不是长文所见即所得编辑器。仅 Windows 桌面。

主页:嵌入套件覆盖率、预置样例、最近用例一键回填试验场
无边框窗口。侧栏三组:工作台、对照、系统。底栏不抢视线,状态在各页自己的条上。
| 区域 | 说明 |
|---|---|
| 标题栏 | 品名、深浅色、最小 / 最大 / 关闭 |
| 侧栏 | 主页、试验场、AST、渲染对照、一致性、安全、设置 / 帮助 / 关于 |
| 覆盖率卡 | CommonMark / GFM 套件 pass/total;点进一致性页 |
| 样例卡 | GFM 全家桶、CommonMark 基础、脚注、危险 HTML、病态嵌套、空文档、非法 UTF-8 |
| 最近用例 | 点一行回填源码并进入试验场 |
左侧源码(行号槽),中间预览或 HTML 源,右侧扩展 / 选项开关。改字后经 Core 即时解析。

试验场:GFM 样例的源码、HTML 预览、五扩展与解析选项
共同能力:
右侧开关与 Core 位对齐:GFM 五扩展 + sourcepos / hardbreaks / unsafe / nobreaks / validate_utf8 / smart / github_pre_lang / footnotes 等。底栏显示耗时、节点数、字节与当前扩展。
选样例后左侧是节点树,右侧是属性与原稿。打开 sourcepos 时,点节点会高亮对应源码区间。

AST:document / heading / table 树,右侧 sourcepos 与原稿
走 Core doc_walk,不在 Ui 里重写解析。
同一份样例并排看本库输出与金标(或不同渲染器)。可切「全部」或「diff」。

对照:本库 HTML 与 cmark-gfm 金标并排,GFM 全家桶样例
页脚提示浏览第几处差异。用来抓对齐问题,而不是改预览样式。
嵌入例题表:规范、编号、节名、状态。点「运行」对每条调用 Core suite_run,只改该行徽章,不整表拆掉再建。

一致性:59 条跑完,通过 59 · 失败 0;底栏 input / expected / actual
侧栏可滤 CommonMark / GFM,顶栏可滤节名或编号。覆盖率与首页三张卡同源。这是主路径套件,不是把官方 650+ 例全部灌进来。
左侧危险样例(<script>、javascript:、data:、iframe),右侧默认清洗后的 HTML。默认关 unsafe:原始 HTML 变成注释省略,危险链接地址被抽空。

安全:输入危险样例,默认清洗后 script / javascript: / data: 不再可执行
打开 unsafe 会出现橙色警告。「在试验场打开」把该样例带回试验场。生产集成请保持默认,或再加一层 HTML sanitizer。
MdLab.exe → MdLabUI.dll → MdLabCore.dll
设置:外观与解析默认值写本机,当前架构说明三层壳与 C ABI
href 为空试验台先有页面和样例,解析一度用夹具假输出。现在试验场 / AST / 对照 / 安全 / 套件都走同一套 Core。
| 维度 | 夹具阶段 | 现在 |
|---|---|---|
| 预览 / 渲染 | Ui 内写死或切换样例金标 | doc_parse + doc_render |
| AST | 静态树或空 | doc_walk |
| 套件与首页覆盖率 | 展示用数字 | suite_get / suite_run / suite_coverage |
| 安全 | 文案说明 | 默认关 unsafe,Core 清洗 |
| Ui 职责 | 兼做「假引擎」 | 只做夹具、对照和展示 |
产品叙事从「能点的壳」收到「本机试验台,解析关在零 Qt 的 Core 里」。
MdLab.exe → MdLabUI.dll → MdLabCore.dll
(loader) (Host run) (零 Qt / C ABI 3)
└──────── → Upgrade.dll(仅壳加载)
三条硬边界:
sdtech_qt_ui_host_run)CoreClient 调 Core,不写解析算法Ui ↔ Core 是 C 函数表:create / destroy / kv_* / doc_parse / doc_render / doc_walk / doc_free / suite_*。ABI 版本为 3。
落盘大致是:
| 位置 | 内容 |
|---|---|
QSettings(SDTech/MdLab) |
主题、字号、默认扩展 / unsafe、最近用例 |
mdlab.db |
Core 内 KV |
Function/prebuilt |
Qt 依赖以外的本树预编译库 |
依赖只认本树 Function/prebuilt。CMake 不写工作目录外盘符,不在本树编 SDK、不跑 vcpkg。
| 项 | 说明 |
|---|---|
| 语言 | C++(Core / Ui) |
| UI | Qt 6 Widgets(sdtech::ui) |
| 构建 | CMake,MSVC 2022 x64,源码树内生成 Function/MdLab.sln |
| Core | 自研 MarkDownParser;选项位对齐 CMARK_OPT_* |
| 测试 | GTest(块 / 行内 / GFM / 选项 / 渲染 / 套件)+ Qt Test(页面 offscreen) |
在 Function 目录配置并编译,产出在 Function/bin/。链 DLL 前若 MdLab.exe 仍在跑,先结束进程,否则 MSVC 会 LNK1168。
日常 Debug:
cd Function
cmake --build . --config Debug --target MdLabUI
改 Core 后同样要先退出再编 MdLabCore。
| 版本 | 说明 | 下载链接 |
|---|---|---|
| 绿色版 | 解压即用 | 待补充 |
| 源码包 | Qt 工程源码 | 待补充 |
解压密码:1150。
MdLab 适合把 MarkDownParser 的选项、扩展和渲染差摊在桌面上看:改一句源码、走一棵 AST、跑一条套件、看一次清洗。解析留在零 Qt 的 Core,界面只负责夹具和对照。若有功能建议,欢迎反馈。