編輯器是你在 Caliu 裡待最久的地方,所以它得到了最多的用心。每個 App 都有自己的編輯器,建立在各自平台的文字技術之上,而它們都遵守同一個承諾:儲存的是純 Markdown,你看到的就是這份 Markdown,在你輸入時就地呈現格式。
一個循環,三個編輯器
每個 Caliu 編輯器都做同樣的三件事:
- 讀取筆記的 Markdown,並釐清它的結構:標題、清單、任務、引言、程式碼、表格。
- 顯示這個結構為有格式的文字,在你需要之前先把語法藏起來。
- 寫回你的編輯,存成 Markdown,也就是任何其他 Markdown App 都能讀取的純文字。
開啟一則筆記絕不會改變它。筆記只有在你編輯時才會改變,所以在另一台裝置上閱讀筆記,絕不會在背後把它改寫。
在網頁上:ProseMirror
網頁編輯器建立在 Tiptap 之上,而 Tiptap 又建立在 ProseMirror 之上。ProseMirror 是一套在瀏覽器中編輯格式化文字的工具組,許多知名的寫作工具都採用它。程式碼區塊由 Shiki 上色,許多程式碼編輯器用的也是這套語法高亮工具。
在 iPhone、iPad 和 Mac 上:Apple 自己的文字系統
Apple 的編輯器直接建立在 Apple 的原生文字視圖(iPhone 和 iPad 上是 UITextView,Mac 上是 NSTextView)和 TextKit 之上,後者是 Apple 自家 App 背後的文字引擎。Markdown 由 Apple 的 swift-markdown 程式庫讀取,它遵循和 GitHub 相同的規格;寫回時會完整保留你原本的寫法:如果你寫的是 *italic* 而不是 _italic_,它就會一直維持原樣。
整則筆記是一個連續的文字視圖。正是這一點,讓選取、捲動和跨段落編輯都感覺自然。那些不是純文字的內容,例如表格和程式碼區塊,會繪製成獨立的視圖,疊在文字上方。
在 Android 上:平台自己的文字欄位
Android 編輯器建立在 Android 自己的文字欄位之上,在你輸入時套用樣式。Markdown 由 commonmark-java 讀取,並對照和 Apple App 相同的參考進行驗證。數百份範例文件都必須原封不動地從 Android 編輯器裡出來,就像它們在 Apple 裝置上一樣。
為什麼原生文字很重要
文字編輯是 App 最難做好的事情之一。Caliu 建立在每個平台自己的文字引擎之上,而不是重新發明一套,因此能得到你的裝置早已會做的一切:自動修正和拼字檢查、聽寫、日文、中文和韓文輸入法、VoiceOver 和 TalkBack 等螢幕閱讀器,以及你習慣的選取控點和快速鍵。
檢視 Markdown
任何時候你想看看實際儲存的是什麼,切換到原始碼模式就行了。它會顯示原始的 Markdown,每個 # 和 * 都在,你也可以直接在那裡編輯。請參閱《原始碼模式》這篇文章。