Markdown to DOCX 转换工具 - 轻量级架构设计
1. 设计理念
- 渐进式开发:从最基础功能开始,逐步添加新特性
- 最小可用原则:每个功能模块都可以独立运行和测试
- 简单易用:降低架构复杂度,便于维护和打包发布
- 可测试性:所有功能都要有对应的测试用例
- 文档驱动:先文档后开发,保持文档与代码的一致性
2. 项目结构
md2docx/
├── src/
│ └── mddocx/ # PyPI 包名 mddocx
│ ├── __init__.py
│ ├── cli.py # CLI 入口 (mddocx)
│ ├── converter/ # 转换核心
│ │ ├── base.py # BaseConverter · _reset_state()
│ │ ├── token_processor.py # token 遍历
│ │ ├── security.py # 图片 URL/路径安全校验
│ │ ├── errors.py # 统一错误码
│ │ └── elements/ # 元素转换器(heading/text/list/...)
│ └── webui/ # Flask Web 界面 (mddocx-webui)
│ ├── app.py # 路由 · bleach 预览 · CSRF
│ ├── config.py # 默认 HOST 127.0.0.1
│ ├── rate_limit.py
│ ├── templates/
│ ├── static/
│ └── tests/
├── tests/ # 单元 + 集成测试
│ ├── unit/
│ ├── integration/
│ └── samples/
├── docs/ # 01–07 阅读序,见 docs/README.md
├── scripts/
│ └── batch_convert.py
├── .github/workflows/ # CI/CD (ci.yml · publish.yml)
├── pyproject.toml # 依赖与构建(唯一依赖源)
├── plan.md # Sprint 编排(jwplan/jwrun)
└── README.md3. 功能开发路线
阶段一:基础文本结构(已完成)
- 标题转换(h1-h6)
- 基础转换类设计
- 标题层级和样式支持
- 完整测试用例
- 段落和文本样式
- 段落格式
- 粗体、斜体
- 删除线
- 引用块
- 单层引用
- 多层嵌套引用
阶段二:列表和代码(已完成)
- 列表转换
- 无序列表(* - +)
- 有序列表(1. 2. 3.)
- 多级列表缩进
- 代码支持
- 行内代码
- 代码块
- 基础语法高亮
阶段三:链接和图片(已完成)
- 链接处理
- 内联链接
- 引用链接
- URL 自动链接
- 图片支持
- 本地图片
- 在线图片
- 图片尺寸调整
阶段四:表格和分隔符(已完成)
- 表格转换
- 基础表格
- 对齐方式
- 表格样式
- 分隔线
- 任务列表(TODO)
阶段五:高级功能(已完成 v0.5.x)
- ✅ 数学公式(LaTeX · CodeCogs PNG)
- ✅ Mermaid(graph/flowchart/sequence/gantt/state/class/pie · mermaid.ink)
- ✅ HTML 块(html-for-docx 可选依赖)
- ✅ 统一错误码(
errors.py)
阶段六:界面与架构(已完成 v0.4.x–v0.5.x)
- ✅ Web 编辑器与文件上传
- ✅ 实时预览(bleach 消毒)
- ✅ DOCX 导出下载
- ✅ CSRF / CSP / SSRF 防护 · per-IP 限流
- ✅ TokenProcessor 拆分(base.py 精简)
- 🔲 自定义样式配置(远期)
4. 核心设计
转换器设计
python
class BaseConverter:
"""基础转换器,处理文档结构"""
def convert(self, md_text: str) -> Document:
pass
class ElementConverter:
"""元素转换器基类"""
def convert(self, element: Any) -> Any:
pass
# 示例:标题转换器
class HeadingConverter(ElementConverter):
"""处理 h1-h6 标题"""
def convert(self, heading: Any) -> Any:
pass5. 开发原则
独立性
- 每个转换器独立工作
- 新功能不影响已有功能
- 测试覆盖单一功能点
简单依赖
- markdown-it-py:Markdown 解析
- python-docx:DOCX 生成
- Flask / bleach / flask-wtf:WebUI 与安全
- requests:在线图片下载
测试驱动
- 每个功能都有对应测试
- 样例文档验证
- 边界情况处理
6. 打包发布
依赖管理
- 最小化依赖
- 版本锁定
- 虚拟环境隔离
打包配置
- 使用 PyInstaller
- 单文件模式
- 资源文件打包
发布检查
- 功能完整性验证
- 依赖完整性检查
- 启动性能优化
7. 当前阶段任务
- ✅ 实现基础转换器
- ✅ 完成标题转换功能
- ✅ 编写对应测试用例
- ✅ 验证导出功能
- ✅ 集成AI协作规则系统
- ✅ 实现完整Markdown转换功能
- ✅ Web 图形界面(Flask WebUI)
- ✅ 数学公式、Mermaid、html-for-docx(v0.5.0–v0.5.26)
- 🔲 其他 Mermaid 类型(journey/ER 等,见 README);公式编号已支持(v0.5.35)
8. 开发规范
代码风格
- 使用 Black 进行代码格式化
- 类型注解必须完整
- 函数必须有文档字符串
提交规范
- feat: 新功能
- fix: 修复问题
- docs: 文档更新
- test: 测试相关
- refactor: 代码重构
分支管理
- master: 主分支,稳定版本
- dev: 开发分支,日常开发
- feature/*: 功能分支 (从dev分支创建)
- release/*: 发布分支 (从dev分支创建)
9. 错误处理
异常体系
pythonclass MD2DocxError(Exception): """基础异常类""" pass class ParseError(MD2DocxError): """解析错误""" pass class ConvertError(MD2DocxError): """转换错误""" pass错误处理原则
- 提供清晰的错误信息
- 保持文档状态一致性
- 支持错误恢复
10. 版本规划
v0.1.0:基础文本结构(已完成)
- 标题、段落、文本样式
- 命令行接口
v0.1.1:AI协作系统集成(已完成)
- 集成Cursor AI规则系统v3.0.0
- 智能项目感知和自动进化
- 多语言协作环境支持
v0.2.0:完整Markdown转换(已完成)
- 所有类型列表(有序、无序、多级)
- 代码块支持和基础语法高亮
- 链接处理(内联、引用、自动链接)
- 图片支持(本地、在线图片)
- 表格转换(基础表格、对齐方式)
- 分隔线和任务列表
- HTML标签基础支持
v0.4.0:高级功能扩展(已发布)
- 完整的Web界面功能
- 自定义样式配置
- 批量处理界面
- 主题切换功能
v0.5.0–v0.5.26:产品化增强(已发布)
- LaTeX 数学公式、Mermaid 流程图
- html-for-docx 复杂 HTML
- 架构建议:错误码、TokenProcessor、限流、Dockerfile、mypy 渐进
- 测试 199 passed
v1.0.0:企业级功能(远期规划)
- 多格式输出
- 云端协作
- 企业级安全和合规