各平台的編輯器

編輯器是你在 Caliu 裡待最久的地方,所以它得到了最多的用心。每個 App 都有自己的編輯器,建立在各自平台的文字技術之上,而它們都遵守同一個承諾:儲存的是純 Markdown,你看到的就是這份 Markdown,在你輸入時就地呈現格式。

一個循環,三個編輯器

每個 Caliu 編輯器都做同樣的三件事:

  1. 讀取筆記的 Markdown,並釐清它的結構:標題、清單、任務、引言、程式碼、表格。
  2. 顯示這個結構為有格式的文字,在你需要之前先把語法藏起來。
  3. 寫回你的編輯,存成 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,每個 # 和 * 都在,你也可以直接在那裡編輯。請參閱《原始碼模式》這篇文章。