1. 程式人生 > >紅孩兒編輯器的詳細設計

紅孩兒編輯器的詳細設計

紅孩兒編輯器的詳細設計

1。輸入子系統
第一個設計問題是編輯器是採用多模式切換的方式,還是單模式的方式。本次開發採用了單模式的方式
多模式是指像linux作業系統下的vim編輯器那樣分成編輯模式,命令模式,單行模式等。
單模式只有一種編輯模式。符合絕大多數的使用者的使用習慣,開發會複雜一些。
多模式有利於開發實踐,有利於純鍵盤操作,和執行效能等,是適合系統管理員與程式設計師使用的方式。
多模式切換的概念會讓普通使用者一頭霧水,增加學習使用編輯器的成本。
以易用性為第一的原則,因此選擇單模式。

系統對鍵盤和滑鼠的響應依賴於html的事件響應機制。
鍵盤的響應如下:
對字元,數字和符號,以及箭頭等控制鍵有響應,F1到F12等鍵無響應
對鍵盤的響應分成按下和按鍵彈起兩個動作分別響應。
滑鼠響應的是單點選操作。

鍵值對映模組的設計是主要為了程式的可讀性,可維護性的考慮。
把按鍵的鍵值碼與字元對應起來。例如數字0-9的鍵值碼就是它的ascii碼。

2。核心控制子系統
二級的控制邏輯
第一級的配置資訊主要有輸入語言的設定例如中文或者是英語,輸入法的設定例如
五筆或者是拼音等,現在的預設是五筆。

第二級的控制是字元分成英語字母,數字,空格,標點符號。
在輸入的語言設定為英語的情況下,第二級不區分字元,直接顯示在螢幕上。
在設定為漢語的情況下,分成多種輸入法的情況,現在專門分析五筆輸入法的情況。
第一種情況是多個英語字母加上一個數字或者是一個空格,打出一個漢字
第二種情況是僅有數字,空格,標點符號時直接列印在螢幕上。

配置模組
它的資訊的資料結構目前設計為鍵值對
例如 config.is_auto_newline    是否自動換新行
        config.is_show_linenum  是否顯示行號
        config.is_insert_mode     是否是插入模式
        config.font_size   字型的大小
        config.encode      字的編碼方式
這些定義會隨著需求和開發過程的迭代,進而修改與追加,沒必要也不可能在初始時一次定義全面。

輸入法模組
以五筆輸入法為例子,該模組實現了 一個漢字的五筆字型的編碼到這個漢字的區位碼的轉換。
還有區位碼與unicode碼和UTF-8的轉換。
編碼的對應關係儲存在表格中,由查詢的方式得到相應的轉換。
以下的二行的程式碼註釋,表達了輸入法模組的最主要的介面。
//輸入的是一個英語字串,輸出是一個以區位碼為元素的二維矩陣。
// lookup_table('wwww') ---> [[4043],[4043,4043],[2222,4043][]]

游標控制模組
這是一個與其它的模組互動很多的模組,也是特別容易出邏輯錯誤的地方。
它的內容有定位到行首,行尾,頁首,頁尾等。
前進一格,後退一格。換行的定位

3快取子系統

資料結構的設計,現在設計為二維的陣列,這部分還得詳細得考慮

4渲染
字型檔的模組
現在採用的是16*16的點陣方式。擴充套件的情況有32*32點陣和64*64點陣。
向量的方式,在未來會擴充套件到。

狀態列模組 現在顯示的資訊有當前游標所在的位置,包括行和列。當前的檔名。
當前螢幕的左上邊的頂點在檔案中的行數與列數。預設值為0和0,當有滾動螢幕的操作時
它們才有修改。

編輯主區域的顯示模組
分成兩種情況,一種是英語字元的顯示和漢字的顯示。
在系統的底層是通過二重的迴圈來把字型檔中的點陣列印在螢幕上。