MdLab — Markdown 解析试验台

本机 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 → 多种渲染 → 与金标对照 → 安全清洗」。主题、字号与最近用例只写本机,不上传云端。

当前产品边界:

首版不做笔记库、云同步、账号体系,也不是长文所见即所得编辑器。仅 Windows 桌面。

MdLab 主页

主页:嵌入套件覆盖率、预置样例、最近用例一键回填试验场


二、主要功能

2.1 主页与侧栏

无边框窗口。侧栏三组:工作台、对照、系统。底栏不抢视线,状态在各页自己的条上。

区域 说明
标题栏 品名、深浅色、最小 / 最大 / 关闭
侧栏 主页、试验场、AST、渲染对照、一致性、安全、设置 / 帮助 / 关于
覆盖率卡 CommonMark / GFM 套件 pass/total;点进一致性页
样例卡 GFM 全家桶、CommonMark 基础、脚注、危险 HTML、病态嵌套、空文档、非法 UTF-8
最近用例 点一行回填源码并进入试验场

2.2 试验场

左侧源码(行号槽),中间预览或 HTML 源,右侧扩展 / 选项开关。改字后经 Core 即时解析。

试验场

试验场:GFM 样例的源码、HTML 预览、五扩展与解析选项

共同能力:

右侧开关与 Core 位对齐:GFM 五扩展 + sourcepos / hardbreaks / unsafe / nobreaks / validate_utf8 / smart / github_pre_lang / footnotes 等。底栏显示耗时、节点数、字节与当前扩展。

2.3 AST

选样例后左侧是节点树,右侧是属性与原稿。打开 sourcepos 时,点节点会高亮对应源码区间。

AST

AST:document / heading / table 树,右侧 sourcepos 与原稿

走 Core doc_walk,不在 Ui 里重写解析。

2.4 渲染对照

同一份样例并排看本库输出与金标(或不同渲染器)。可切「全部」或「diff」。

渲染对照

对照:本库 HTML 与 cmark-gfm 金标并排,GFM 全家桶样例

页脚提示浏览第几处差异。用来抓对齐问题,而不是改预览样式。

2.5 一致性套件

嵌入例题表:规范、编号、节名、状态。点「运行」对每条调用 Core suite_run只改该行徽章,不整表拆掉再建。

一致性

一致性:59 条跑完,通过 59 · 失败 0;底栏 input / expected / actual

侧栏可滤 CommonMark / GFM,顶栏可滤节名或编号。覆盖率与首页三张卡同源。这是主路径套件,不是把官方 650+ 例全部灌进来。

2.6 安全对照

左侧危险样例(<script>javascript:data:iframe),右侧默认清洗后的 HTML。默认关 unsafe:原始 HTML 变成注释省略,危险链接地址被抽空。

安全

安全:输入危险样例,默认清洗后 script / javascript: / data: 不再可执行

打开 unsafe 会出现橙色警告。「在试验场打开」把该样例带回试验场。生产集成请保持默认,或再加一层 HTML sanitizer。

2.7 设置、帮助、关于

设置

设置:外观与解析默认值写本机,当前架构说明三层壳与 C ABI


三、使用流程示例

示例 1:改 GFM 看预览

  1. 主页点「GFM 全家桶」,或从最近用例点一行
  2. 试验场右侧确认五扩展已开,中间看表格 / 任务列表 / 删除线 / 自动链接
  3. 改源码或关某个扩展,预览与底栏扩展列表跟着变
  4. 切「HTML 源」或渲染器看 XML / LaTeX

示例 2:跑一致性并点开一例

  1. 打开「一致性」,点「运行」
  2. 等摘要变成「N 条 · 通过 x · 失败 y」(截图为 59 / 59 / 0)
  3. 点任意行,底栏对照 input / expected / actual
  4. 失败时把该 Markdown 拷回试验场复现

示例 3:看清洗差

  1. 打开「安全」,确认 unsafe 关闭
  2. 右侧应看不到可执行 script,链接 href 为空
  3. 打开 unsafe,对比未清洗 HTML(有橙色警告)
  4. 「在试验场打开」后可再配合 tagfilter 开关

四、从夹具到真实解析

试验台先有页面和样例,解析一度用夹具假输出。现在试验场 / 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(仅壳加载)

三条硬边界:

  1. 不链接任何插件导入库,只认中性 Host ABI(sdtech_qt_ui_host_run
  2. Ui 只做窗口、页面与主题;经 CoreClient 调 Core,不写解析算法
  3. Core 禁止 Qt;MarkDownParser、sqlite KV 都在这里

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,界面只负责夹具和对照。若有功能建议,欢迎反馈。