最近一段时间没有更新文章,因为业余时间都在写一个markdown编辑器。市面上有很多各种各样的编辑器,但是或多或少存在一些问题,对于一个轻度强迫症患者而言,在使用了一些编辑器后,还是转为自己手写了一个简单的markdown编辑器。
个人感觉使用最方便的编辑器是Typora,因为是实时编辑和预览的,也就是说,不需要额外的预览界面。但是Typora也存在一些问题,比如不能实时同步数据,我们可以使用一些同步工具来做,但这样毕竟还是需要额外的工作。另外一点是Typora是采用JavaScript写的web程序,有时候会感觉比较卡,特别是程序开的比较多的时候。
至于别的markdown编辑器,之前用的比较多的是印象笔记的马克飞象,还买了一年的套餐。但是发现自己其实对每次打开网页并不感冒,总的来说,很多web版本的markdown编辑器都存在类似的问题,另外就是需要开一半的区域作为预览界面。
先上图:
如果能够结合Typora/数据实时同步/快速高效零卡顿这几个特性,才算是我心目中的比较好的markdown编辑器吧。
于是才有了现在这个软件。
我大概花了一周时间(也就是上周),从脑海中有一个大体框架,到一步步解决各种奇葩问题和bug,实现了几个程序员写作专用的特性。
首先是最基本的加粗/斜体/删除特性。
比如方程 $f(x) = 1+x^2$
这个特性还需要稍微调整一些大小,现在只是实现了核心功能。
比如写一个hello world
#include <stdio.h>
int main()
{
printf("hello world");
return 0;
}
截图直接复制或者从文件复制,或者从网页复制图片
由于本人是游戏程序出生,本软件其实和王者荣耀一样数据是实时同步服务器的,并且支持离线存储,加载文章不需要从服务器拉取数据。修改文章也不需要自己保存,会自动保存到本地和远端数据库。
编辑器使用的是桌面开发库QT,采用的是最基本的QPlainTextEdit控件进行开发,因此也使得该编辑器非常高效和精简,不会出现卡顿现象。代码行数也就两千行左右,比较容易修改和维护。之前考虑过采用web方式,但是感觉很笨重,而且修改起来难度极大,代码太多有bug的话完全伤不起。
QT库也存在一些问题,而且是官方bug,特别是代码字体,不能和中文字体区分开,中文字体是微软雅黑,英文应该是Consolas,现在都是微软雅黑,这是5.13版本回退bug。
开发过程中最大的问题是QT上面的问题,特别是控件刷新问题,很多时候文档根本没什么用,只能从QT源码堆里面到处翻答案。开发过程中算法也很重要,编辑器最麻烦的地方并没有解决,那就是markdown标签的嵌套问题,这个问题和浏览器的DOM树形结构类似,但是我们这个实时编辑器可能更复杂一点,因为我们需要从这颗DOM树还原原有的文本,这一部分需要自己解析,暂时没有精力做。目前编辑器是不支持嵌套结构的。
不过对于这个编辑器,我自己已经比较满意了,后面写文章也都会使用这个工具。一周时间没有做题了,本周开始继续。