首页
社区
心情
心情广播
游戏
面板
靓号
功能
摸鱼
摸鱼
登录
立即注册
帮助
会员星图
字帖生成
登录特效
旅行地图
任务成就
积分商城
超级淘客
资源广场
友情链接
众裁中心
寻宝彩蛋
游戏勋章
牛马网盘
牛马图床
时间胶囊
牛马万年历
恶作剧商店
技术
做了三年 ProseMirror 后,我用四个月自研排版引擎实现 WPS / Google Docs 替代品,整套框架 MIT 开源
微信扫一扫 分享朋友圈
已有
36274
人穿越成功
教程:手机怎么扫描二维码
13
4
🐈nico
ID
265
2 小时前
发表在
兴趣交流
|
查看全部
阅读模式
众裁
先别急着划走,这不是概念图,也不是拼出来的截图。
打开 https://quirekit.com/demo/classic-editor,首屏就是一个真实的编辑器:一页一页的纸,打字、换行、表格跨页、切换 Canvas / SVG 渲染,全都是实时的。
演示里的 DOCX 导出、页眉页脚等是商业 Word 组件,编辑器框架、排版引擎和编辑器本身是开源的。
先交代下背景:我做 ProseMirror 相关的产品已经三年了,被问得最多的一句就是“能不能像 Word 一样一页一页地排”。可开源的富文本编辑器基本都做不到。今年 6 月我决定自己从头写,四个月下来,做出了
QuireKit
。
它不是某一个编辑器,而是
一整套编辑器生态
:
最底层
是两套编辑器框架,写法都是 Tiptap 风格:一套基于 ProseMirror ,API 兼容 Tiptap ;一套基于 CodeMirror ,专门做 Markdown ;
中间
是自研的排版引擎、Canvas / SVG / HTML 等多种视图,以及一套统一的 UI 组件库;
最上层
是能直接用的编辑器:分页文档、块编辑器、Markdown 编辑器,还有公式、思维导图、白板、流程图这些周边编辑器。
每一层都可以单独拿去用,也可以整套组合起来。一句话说它能干嘛:
用它,你可以在自己的网页应用里嵌入一个像 WPS 、Google Docs 那样的文档编辑器。
先说做出了什么
1. 浏览器里真正分页的文档编辑器
做过在线文档的都知道,浏览器只会排一条无限长的页面。想要“一页一页的纸”,常见做法是排完再量高度、手动切页,内容一改就全乱。
QuireKit 的分页编辑器不靠 DOM 排版:
断行、分页、光标、选区全部自己算,再画到 Canvas 或 SVG 上
。屏幕上看到的分页,就是打印出来的分页。
表格可以跨页,表头自动重复
公式、流程图、思维导图、白板直接放进页面里一起排版
暗黑模式、中英文界面切换
长文档只绘制看得见的页,滚动不卡
操作面板也不是摆设。我按 Word 的功能区逐项对过一遍:开始、插入、页面、引用、审阅、视图,加上右键菜单、格式设置面板、表格和图片的上下文
工具
,
已经有 350+ 功能能直接在界面上点出来用
,还在继续补。
DOCX 往返也打通了
:Word 、WPS 写的文档导进来,可以接着改,再导出成 DOCX ,拿回 Word 里继续用。
PDF 和 OFD 导出也是自研的
:不走浏览器打印,直接复用分页排版画出来的那一份绘制指令,屏幕上一页什么样,导出的 PDF / OFD 就是什么样。OFD 是国产版式文件格式,政务、公文场景用得多。
DOCX 往返和 PDF / OFD 导出属于商业的 Word 组件,开发和评估免费。
2. 块编辑器
不需要分页的场景,比如笔记、知识库,用块编辑器:拖拽、斜杠菜单、表格、目录都有。
它解决了一个用过 contenteditable 的人都踩过的坑:
你选中一段字,去工具栏输个链接,选区就没了。
在 QuireKit 里,光标和选区是自己画的,焦点跑到输入框,选区照样在。
3. Markdown 编辑器:原文一个字不丢
MD Editor 有四种视图:文档、实时预览、
源码
、阅读。前三种都能直接编辑,
改的都是同一份 Markdown 原文
,中间没有转成 JSON 再转回来,所以保存时你没碰过的行,一个字符都不会变。
大文档也不怕。我给 Markdown 解析器加了一个“复用证明”,编辑时直接跳过没变的部分。1 MiB 的文档连续输入 20 次,实测:
工作量优化前优化后语法树访问107,7601,380 (**少了 98.7%**)语法树比较153,940660 (**少了 99.6%**)
4. 一整套周边编辑器,单独也能用
公式、思维导图、白板、文本绘图( Mermaid / PlantUML / Graphviz )、流程图、图表、多维表格,每一个都是独立的包,不用整个编辑器也能单独装。
5. 自己设计的 UI 组件库
编辑器的操作界面比一般后台复杂得多:字体菜单、颜色选择、表格右键菜单、格式设置对话框、缩放、快捷键提示……为了让分页文档、块编辑器、Markdown 编辑器和这些周边编辑器用起来是同一种手感,我单独设计了一套 UI 组件库( Vue + UnoCSS ),颜色、间距、字号都由同一套设计令牌管理,亮色和暗黑两套主题一键切换。
上面截图里所有的按钮、菜单和面板,都来自这套组件库,它同样是 MIT 开源的,可以单独用在你自己的项目里: https://design.quirekit.com
再说说最难的一块:中文输入法
Canvas 上没有输入框,
中文输入法是最难啃的骨头
。拼音还没确认的时候,字要先显示出来、把后面的内容往后推,但又不能进撤销历史、不能同步给协作者。
我的做法是:输入法组合期间,用一份“临时文档状态”去排版和绘制,等你按下确认才真正写进文档。
浏览器在输入法上的坑非常多,事件数据为空、组合结束事件不来、确认后重复插入……这套处理我单独做成了 @quirekit/ime 包,其他 Canvas 编辑器也能直接拿去用。
底层:两套 Tiptap 风格的编辑器框架
**ProseMirror 线:@quirekit/core**。保留 ProseMirror 的文档模型、命令、插件、协同,API 兼容 Tiptap ,目标是迁移一个 Tiptap 扩展时,主要只需把 @tiptap/core 的导入换成 @quirekit/core。不同的是视图层:除了原生的 DOM 视图,还能挂自己排版的 Canvas / SVG 视图(分页文档用的就是它),以及自己管光标和选区的 HTML 视图(块编辑器用的就是它)。
CodeMirror 线:MSFE
。基于 CodeMirror 和 Lezer ,Markdown 原文就是文档,扩展和命令的写法也是 Tiptap 风格。MD Editor 构建在它上面。
两套框架的成品共用一套 UI 组件库,所以分页文档、块编辑器、Markdown 编辑器看起来是一家人。熟悉 Tiptap 的话,两条线都能很快上手。
能用吗?怎么用?
几行代码就能把 Markdown 编辑器放进 Vue 项目:
npm install @quirekit/md-editor@alpha<script setup lang="ts">import { MdEditor } from '@quirekit/md-editor/vue'import '@quirekit/md-editor/styles.css'</script><template> <MdEditor markdown="# Hello" label="Document" /></template>块编辑器和分页编辑器分别是 @quirekit/block-editor、@quirekit/classic-editor。
整套生态里开源的部分
,MIT 许可,闭源商用也可以:两套编辑器框架、Canvas / SVG 排版引擎和各种视图、UI 组件库、分页 / 块 / Markdown 三个编辑器,以及公式、导图、白板这些周边编辑器。Word 兼容能力( DOCX 往返、PDF/OFD 导出、审阅等)是单独的商业组件,开发和评估免费,不用它们也能完整使用编辑器。
目前是 alpha ,API 还会变,欢迎来试、来挑刺:
在线体验: https://quirekit.com
文档: https://docs.quirekit.com
GitHub: https://github.com/quirekit/quirekit
觉得有意思的话,点个 Star 就是对我最大的支持。
⚠️内容来自互联网,如有侵权请点击
反馈
!侵权
投诉
违规内容举报
回复
转播
恶作剧
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
本帖共 4 条回复,登录后即可查看
登录查看
立即注册
回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
🐈nico
Lv.1
牛马新星
30
主题
0
回帖
96
积分
+ 关注
发消息
hot.热文
换一批
宇宙到底是大还是小?一张纸对折103次的厚度,宇宙已装不下
别眨眼!人类首次"看见"光子!你家灯泡里全是它!
人类至今无法彻底解释的15个顶级现象,看完敬畏万物
二十出头就显成熟?揭秘上一代人的"大人模样"背后原因
明明含有氢和氧,氢可燃氧助燃,为什么水偏偏不能燃烧?
🎉庆祝应用中心上架15个插件了,抽波优惠券![开奖时间:2026-04-26 20:00]
宇宙和大脑很相似?科学家新理论惊人,难道我们是活在生物体内?
人类已发现外星生命?科学家:就在12亿公里外,可能以甲烷为食
又一个新游戏上线了,欢迎体验!
自来水微塑料3000万/升,煮沸后降到480万,比桶装水高还是低?
女装退货率飙至80%,商家为何挂密码锁发货?
现在这金价是不是还有余地
古人为何50岁就百病缠身?揭秘1972年7月30日“马王堆女尸”出土之谜
世界上最凶猛的10种鸟,金雕到底有多厉害?猎杀野狼轻而易举?
中国真挖到“宝”了!海水里藏45亿吨铀,美国70年难题被突破
太阳和银河系之间,还有一个神秘结构?
科学家:在人类出生前,有两种神秘的力量帮助构建了人脑
下潜到1万多米的海底,人类发现了不该出现的东西?需要引起警惕
古人到底能有多苦?这么说吧,现代人在古人面前不值一提
🌱牛马论坛-每日早报-2026年10月08日
终于装上了LightSNS,然后模块一通买,还是花了上千
吃一块能顶一天?军用压缩饼干为啥抗饿?
小时候父母不让玩手机的秘密,网友亲测:经历过才懂!
测试
上一主题
下一主题
有头有脸
上传一个头像,在任务中心获得。
QQ用户
绑定QQ账号,在任务中心获得。
晨曦初露
干啥都抢在前面,论坛第一批用户
模板默认
东方雅韵
竹青·幽篁
霁蓝·澄碧
朱砂·绛霞
紫宸·夜宴
黛青·烟岚
月白·素练
莫兰迪雾色
雾灰·静默
鼠尾草·低吟
陶土·温存
石板·沉静
薄红·微醺
燕麦·素净
自然原木
橡木·暖阳
苔藓·晨露
陶土·粗陶
砂岩·旷野
森林·深境
桦木·素白
×
社区首页
我的帖子
我的消息
每日签到
游戏中心
查看全部
收起
全部应用
5
社区首页
默认
我的帖子
默认
我的消息
默认
每日签到
默认
游戏中心
默认
牛马论坛(niumabbs.com),一个专注于分享日常新鲜事、职场工作点滴、摸鱼乐趣与各类生活感悟的交流平台。
快捷访问
我的帖子
我的收藏
我的好友
我的关注
附加功能
任务大厅
道具商店
勋章中心
随便看看
关于我们
举报
小黑屋
手机版
站点统计
关注我们
加入Q群
微信客服
QQ客服
Copyright © 2026
NIUMABBS
版权所有
All Rights Reserved.
|
网站地图
劰载中...
关灯
在本版发帖
扫一扫添加微信客服
QQ客服
返回顶部
快速回复
返回顶部
返回列表