Mawy
把 Markdown 的编辑与阅读做进同一个库,同时以 React 库和 Flutter 包提供。可以对着排好版的文档写,也可以切到源码写,两者只隔一次点击;写完的文档交给只读的阅读器,呈现出来一模一样。
关于这个项目
Mawy 把 Markdown 编辑器和阅读器做成了同一个库,并同时以 React 库和 Flutter 包提供。编辑器和另行维护的渲染器迟早会在某处不一致——一张表格、一层嵌套列表、一个代码块——那一刻,作者确认过的文档就不再是读者拿到的文档。这里两边共用同一个解析器和同一个渲染器,所以敲进去的就是读到的。
编辑器不是两个编辑器,而是同一份文档的两种视图。带语法着色的 Markdown 源码与排好版的文档只隔一次点击,格式工具栏上的每个命令同时也是一个快捷键,来回切换不会丢掉另一种视图表达不了的东西。着色层底下是一个真正的 textarea,所以浏览器自带的撤销记录、输入法的组字和移动端键盘都照常工作。阅读器本身就是一个完整的阅读界面:字体、字号、行高、字距、栏宽、明暗配色,以及一份标题大纲——没有一项会改动文档。如果不给它文档,它就是一个文件选择器,把 .md 文件拖上去就是它空状态的用处。
安装是一个包加一行 CSS。这个库画出来的一切都经过 --mawy-* 自定义属性,所以换主题是在外层元素上重新声明一个令牌,而不是靠更高的优先级去压过某条规则,深色模式也只是其中一个令牌。它不向外取任何东西:字体菜单给出的是读者机器上已经有的字体,随包附带的十三款自由许可字族只有在应用主动传入时才会用到。Markdown 变成的是元素而不是一串 HTML,所以文档和页面之间没有 innerHTML。React 包仅提供 ESM,附带 TypeScript 类型声明,运行时依赖只有工具栏图标用的那一个。
功能
文档站点
TypeScript 类型
多语言支持
经测试验证
跨平台支持
内置无障碍支持
深色模式
支持摇树优化
