前言
最近一段時間沒有更新文章,因爲業餘時間都在寫一個markdown編輯器。市面上有很多各種各樣的編輯器,但是或多或少存在一些問題,對於一個輕度強迫症患者而言,在使用了一些編輯器後,還是轉爲自己手寫了一個簡單的markdown編輯器。
不同的markdown編輯器比較
個人感覺使用最方便的編輯器是Typora,因爲是實時編輯和預覽的,也就是說,不需要額外的預覽界面。但是Typora也存在一些問題,比如不能實時同步數據,我們可以使用一些同步工具來做,但這樣畢竟還是需要額外的工作。另外一點是Typora是採用JavaScript寫的web程序,有時候會感覺比較卡,特別是程序開的比較多的時候。
至於別的markdown編輯器,之前用的比較多的是印象筆記的馬克飛象,還買了一年的套餐。但是發現自己其實對每次打開網頁並不感冒,總的來說,很多web版本的markdown編輯器都存在類似的問題,另外就是需要開一半的區域作爲預覽界面。
我的markdown編輯器
如果能夠結合Typora/數據實時同步/快速高效零卡頓這幾個特性,纔算是我心目中的比較好的markdown編輯器吧。
於是纔有了現在這個軟件。
我大概花了一週時間(也就是上週),從腦海中有一個大體框架,到一步步解決各種奇葩問題和bug,實現了幾個程序員寫作專用的特性。
基本特性
首先是最基本的加粗/斜體/刪除特性。
公式特性
比如方程
這個特性還需要稍微調整一些大小,現在只是實現了核心功能。
使用$$符號是整行居中的公式:
代碼特性
比如寫一個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樹還原原有的文本,這一部分需要自己解析,暫時沒有精力做。目前編輯器是不支持嵌套結構的。