1. 程式人生 > >紅孩兒編輯器的模組設計3

紅孩兒編輯器的模組設計3

紅孩兒編輯器的模組設計3

 編輯器的主顯示區域的顯示行號的邏輯
首先需要明確的是行號的概念,有檔案中的行號和螢幕上相對於螢幕左上角頂點的螢幕的行號。
需要需要的是檔案中的行號,這是使用者更關心的行號。這也意味著在上下翻頁,或者滾動一行時,
行號與顯示內容要一起重新整理。

邏輯上分成兩種情況來討論。
一種是不自動換行的情況,意味著螢幕上的每一行都有一個行號,這個檔案行號=
螢幕上的相對行號+螢幕上左上角的位置在檔案中的行號。

另一種是自動換行的情況,意味著可能有螢幕上的好幾行對應於檔案中的一行。
例如在螢幕上的第三到第五行顯示的是檔案中的第三行。那麼在螢幕上的第三行顯示檔案的行號3,
第四行和第五行顯示檔案行號的位置為空,表示,這也是檔案第3行的部分。

在這種情況下,螢幕行號與檔案的行號需要進行相互的轉換。
邏輯如下:
螢幕的行號 轉成 檔案的行號的邏輯
螢幕的第一行的情況下,是檔案的第一行,並且是序號第一號
非首行的情況下  如果關聯表中的上一條記錄中的佔用行數與序列號一致    檔案的行號增加一,序列為1
                         如果關聯表中的上一條記錄中的佔用行數與序列號不一致 檔案的行號不變,序列增加一。

檔案的行號 轉成 螢幕的行號的邏輯
檔案的第一行,對應的螢幕的開始的行號是1,螢幕的結束行號是開始行號+佔用的行數-1
檔案的非首行 ,對應的螢幕的開始行號是關聯表中上一條記錄的結束的行號+1

編輯器的主顯示區域新增一個字元的邏輯
分成兩種情況
一是非插入模式
顯示這個字元,然後游標右移一個字元的位置
二是插入字元模式
顯示這個字元,然後游標右移一個字元的位置,
再顯示出本行的剩餘的字元。

編輯器的主顯示區域刪除一個字元的邏輯
1、游標向左移動一個字元的位置,
2、在快取中刪除相應的字元,
3、在螢幕上顯示出本行的剩餘的字元。

編輯器的主顯示區域新增一行字元的邏輯
1。在快取中插入一行
2。在螢幕上重新整理顯示
3。游標移動到新增的一行的行尾

編輯器的主顯示區域刪除一行字元的邏輯
1。在快取中刪除一行
2。在螢幕上重新整理顯示
3。游標移動到刪除的一行的行首