Mars 选型和语法定义
1. 选型
1.1 Markdown 编辑器
期望:只考虑专门的 markdown 编辑器,API 简洁好用
- 🔴 CodeMirror
排除通用的富文本编辑器 - 🔴 milkdown
官网 playground 很好看,实际试了一下包不好用,最新 v7 文档不齐全 - ✅ byteMd
字节开源,VitePress,掘金同款 markdown 编辑器。基于 CodeMirror 实现。流畅好用,样式好看,区分 Editor 和 Viewer,API 简洁好理解(还是国产的好,不知道为啥外国的包,各种 option, API 总是很复杂)。
1.2 Flow 流程图
期望:传入流程图的nodes, edges
数据自动布局、自动渲染,文档流程图的节点较少(<300 个)。希望节点是 html 渲染,依赖 css 实现自适应。连线基于 svg 实现。支持自定义节点、连线样式。支持节点拖拽,节点移动,边同步移动
- 🔴 Antv X6 Flow
蚂蚁 Antv 系列,demo 看着很给力。本地跑了一下,基于 svg 实现。不支持传入nodes
,edges
就自动渲染,每个节点都传入 x, y, width, height。由于节点不是 html 实现,宽高不支持自适应,框架也没支持。每次 render 的时候都会闪一下,实在是太闪了。 - 🔴 LogicFlow
滴滴开源,没有看到可以自动布局的。但是它 demo 里的流程编排交互做得很好。 - ✅ React Flow
支持传入nodes, edges
,每次重新 render 的时候不会闪,很好。结合第三方库,可实现自动布局- Darge
- D3-Hierarchy
- D3-Force
- ELK
1.3 PPT 幻灯片
- 🔴 Vue-mark-display
仅支持 Vue,但我用的是 React - 🔴 slidev
一个类似 hexo 的, markdown 转 ppt 的博客工具,没有单独的 npm 包。 - 🔴 Reveal.js
直接把 ppt 挂载 body 下,只能全屏展示,把其他 html 都吃掉了。 - 🔴 ReactFlow
ReactFlow 幻灯片应用。文档只有一篇,提供了模板自定义的方法,借助 Remark 可以直接实现 markdown 转 html 塞进 ppt 每一页里, 但是实际效果不是很好。因为转换后的 html 是正常流布局,不能实现如 flex 的多列布局。为了实现两列布局、三列布局等版式,需要抛弃 remark。
而 Reactflow 提供了 ppt 展示,ppt 播放,点击自动聚焦到该页 ppt 上、滚动到某一页的方法。但是 ReactFlow 本身是一个画布,画布只能拖动缩放,不能像这场页面那样滚动,这是最大的问题。ReactFlow 推荐整个 ppt 只能以一条直线显示。(试了一下两列布局,创建 edge 的时候会报错),所以 ReactFlow 也要抛弃。 - ✅ 自己实现
1.4 数据报告
- ✅ Antv G2 Plot
之前用 Antv G2 Plot 实现过一套图表 + 自己写的 grid 布局自动排版,直接用
2. 模板样式
3. 语法定义
要实现 markdown 转各种,首先要扩展 Markdown 语法。
Markdown 语法在 2004 诞生。当时网络的文本排版主要依赖 HTML。为了能快速写作,希望有一种新的标记语言,用简单的文本格式书写,又能轻松转换为 HTML 格式,以满足网络发布的需求。Markdown 一经推出,就受到了技术社区和写作者的欢迎,许多博客平台、写作工具都开始支持 Markdown 。
20 年过去了,Markdown 成为了 AI 大模型最主流的返回格式。解析、编辑 markdown 成为 AI 工具链中重要的一环。Markdown 语法需要扩展吗?不管怎样,做这个应用就得扩展。
借鉴 mermaid, 我们可以代码块 3 个`,带上标识表示渲染为什么组件。
[]: # … existing code …
1 | graph TD; |
3.1 flow
流程图包含两大块内容:
- 节点(Nodes):代表流程图中的一个单元,例如一个步骤、任务或事件
- 连线(Edges):连接两个节点的线条,标识流程中的依赖或顺序
1 | 1. 开始 |
3.2 ppt
用----
进行分页,每一页里面是 markdown
1 | # 这里是第一页 |