五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網 會員登陸 & 注冊

對于編輯器的一些思考

2022-05-27 01:21 作者:clerk_ma  | 我要投稿

打開手機或者電腦的時候,都會碰到編輯器。能輸入文本的地方,表現(xiàn)可能是框或是線,就是編輯器。輸入法也是一種編輯器,即input method editor。

然而用是容易的,創(chuàng)造一個新的編輯器卻不是太容易的。這個容易,指的是使用API就能實現(xiàn)出一個編輯器的容易度。

我一直試圖把TeX遷移到移動平臺,但是難度不低。這個編輯器就是困擾我很久的事情。我之前做的Android版TeX編輯器,用的是WebView中使用CodeMirror的實現(xiàn),出效果很快,但是問題也有,就是WebView中的操作是異步的,發(fā)送編輯命令和預覽命令給別的UI組件就略微有些麻煩。再加上這些年Android的安全政策更新,我還得重新編譯一套動態(tài)庫版的TeX組件。所以啊,越不想弄的東西,越不想看見的問題,越會在之后重新出現(xiàn)。

編譯的事,簡單。編輯器的事,復雜。

所以我在前幾天開始重新思考編輯器的實現(xiàn)。能參考的東西不少,比如CodeMirror,比如Scintilla,也比如Qt中的QTextEdit。

所有的GUI都是在畫圖。但是怎么畫圖,這是得琢磨的。因為很少有書講怎么去實現(xiàn)GUI框架以及具體的GUI組件。我琢磨了幾天,就突然發(fā)現(xiàn)這事的好玩之處:能不能實現(xiàn)一個編輯器,基本上能夠驗證掌握了多少相關的知識。比如:設計模式(尤其是事件驅動),多線程編程,文本處理支持(Unicode和相關編碼),排版知識(字體等)。

文本處理和排版,對我來說并不困難。設計模式和多線程編程也不麻煩。

麻煩的反而是文檔。Android的一些API的文檔,寫的極為精簡,想要知道使用場景和具體含義,都得看AOSP的源碼。這對我來說,就得看源碼之后不斷的測試。這其中最讓我頭痛的是輸入法的交互:實體鍵盤和軟鍵盤的處理,按鍵事件的處理,快捷鍵的處理。

輸入法的處理結束之后,基本上就是花活了,按部就班,能參考的就很多。

比如說,Android的View在Canvas上繪制。文本是不是要渲染成一行?如果過長,一行太長要拆開,要怎么分割文本?文本的拖選高亮怎么實現(xiàn)?文本的語法高亮怎么實現(xiàn)?暗色模式怎么做?光標和光標閃爍是如何現(xiàn)實的?標尺(如行號,頂欄標尺)是怎么實現(xiàn)的?Bidirectional文本是如何控制的(如光標移動)?

我之前寫的proto.py其實是個基于偽終端的最簡單的文本編輯器。和Android這種基于View的實現(xiàn),實在是太簡單了(所以講解的部分,基本停了,準備在這個Android的搞定了之后,加大篇幅寫)。文本編輯器的門路大概是摸清楚了,我另外想搞懂的,其實是字體編輯器。這事好玩啊,足夠打發(fā)很長一段時間。雖然大部分公司都不會從頭搞這些東西。

對于編輯器的一些思考的評論 (共 條)

分享到微博請遵守國家法律
岳池县| 高邑县| 仙桃市| 高碑店市| 安溪县| 巴林左旗| 濮阳县| 天峻县| 塔河县| 广灵县| 颍上县| 依兰县| 南投县| 栾川县| 冷水江市| 犍为县| 柯坪县| 凉山| 宁武县| 舞阳县| 嘉鱼县| 织金县| 勐海县| 施甸县| 定结县| 鄂温| 贵南县| 中宁县| 溧水县| 略阳县| 尼玛县| 眉山市| 衡阳市| 偃师市| 杨浦区| 都匀市| 永修县| 宁南县| 商河县| 越西县| 武鸣县|