2017-10-09 91 views
2

enter image description here在文本編輯器中使用繩索

我正在閱讀如何從頭開始編寫文本編輯器。我遇到了各種不同的數據結構,如間隙緩衝區,塊表和繩索。我可以理解其他人如何在實踐中工作,並且我理解繩子的好處以及它在後勤方面的工作原理。但是,我不明白編輯如何使用繩索。讓我解釋。

假設我有一個新文件並輸入「Hello world!」。我會想象每個按鍵編輯都會處理每個角色。但是,從程序邏輯的角度來看,我沒有看到處理每個新字符的明顯方法。根據我的理解,由於樹結構允許相對低成本的搜索,插入,追加和刪除操作,繩索很有用。但是,如果我處理輸入字符一個字符是我預計有:

  1. 每個節點是單個字符
  2. 有字符的每個節點保持X量
  3. 的每個節點都是一個完整的字和節點用空白打破
  4. 每個字符輸入的時間每X量變爲一個節點
  5. 東西我還沒有想到的

第一個選項雖然容易實施,但似乎沒有太大意義,我不相信最好地利用繩索結構。第二個選項似乎只通過在節點內附加字符串來實現一半的使用,直到達到X長度。第三個選項與第二個選項具有相同的問題,但至少不會在某個設定的長度處中斷字符串。選項4會給出與我在大多數示例圖表中看到的類似結果,但在執行級別看起來像是一場噩夢。

TL; DR:當在文本編輯器中使用繩索時,理想情況下按下鍵和該樹中出現的那個角色之間會發生什麼?無論是僞代碼還是隻是一個高級解釋就足夠了。

+1

這裏的xi的繩索在葉子中存儲511-1024(ish)個字節,使用基本相當於一個向量的字節。 https://github.com/google/xi-editor/tree/master/rust/rope –

回答

0

查看過現有的繩索實現後,它看起來像選項2是如何在實踐中使用文本編輯器。