┌─────────────────────────┐ │【嘸蝦米輸入法】 BIG5 碼反查詢參考檔 規格使用說明 │ └─────────────────────────┘ 一、前言: 我將此參考檔的格式公開,以利任何人在不同的環境、不同的機器 、不同的作業系統、或是不同的應用程式中撰寫其介面程式。要注意的 是,本參考檔的著作權屬於敝人(謝崇祥),而使用權則屬於合法擁有 本參考檔之使用者。非經著作權利人正式授權,嚴禁將此參考檔作任何 型式之修改、出租、出售等行為。 二、字根按鍵:嘸蝦米輸入法所使用的按鍵有  A - Z 等 26 個字母鍵,用來輸入中文。  , . ' [ ] 等 5 個符號鍵,用來輸入符號。  Space 空白鍵,當有輸入字根時,用來下達組字命令。 三、字根排列與編碼: ┌───┬───┬───┐ ┌───┬───┬───┐ │字 根│十進位│二進位│ │字 根│十進位│二進位│ ├───┼───┼───┤ ├───┼───┼───┤ │SPACE │ 0 │00000 │ │ P │ 16 │10000 │ │ A │ 1 │00001 │ │ Q │ 17 │10001 │ │ B │ 2 │00010 │ │ R │ 18 │10010 │ │ C │ 3 │00011 │ │ S │ 19 │10011 │ │ D │ 4 │00100 │ │ T │ 20 │10100 │ │ E │ 5 │00101 │ │ U │ 21 │10101 │ │ F │ 6 │00110 │ │ V │ 22 │10110 │ │ G │ 7 │00111 │ │ W │ 23 │10111 │ │ H │ 8 │01000 │ │ X │ 24 │11000 │ │ I │ 9 │01001 │ │ Y │ 25 │11001 │ │ J │ 10 │01010 │ │ Z │ 26 │11010 │ │ K │ 11 │01011 │ │ , │ 27 │11011 │ │ L │ 12 │01100 │ │ . │ 28 │11100 │ │ M │ 13 │01101 │ │ ' │ 29 │11101 │ │ N │ 14 │01110 │ │ [ │ 30 │11110 │ │ O │ 15 │01111 │ │ ] │ 31 │11111 │ └───┴───┴───┘ └───┴───┴───┘ 四 、參考檔格式與字根的編碼: 參考檔最上面的 34042 Bytes 為一個 Index TABLE,各別指到各 BIG5 碼的嘸蝦米字根對應在 Data TABLE 的位置。每一個位置為一個 2 Bytes 無號整數 (unsigned integer),一共有 17021 個。每個位置在 實際的檔案中是以 low byte, high byte 的順序來表示一個無號整數。 中文字以 Big-5 內碼為例: 其高位元組範圍是 A1H ~ FEH 共 126 個 ( High ) 8EH ~ A0H 81H ~ 8DH 低位元組範圍是 40H ~ 7EH 63個 共 157 個 ( Low ) A1H ~ FEH 94個 我依下面的 Hash Function 算出 offset 在 Index TABLE 的位置: hash = (High*765 + Low) % 17021 offset = Index[hash] 接下來即為 Data TABLE 以 3 bytes 為一個字單位 位置 0 ┌──────────┐ │ │ 3 bytes = 24 bits 位置 3 ├──────────┤ │ │ 3 bytes 位置 6 ├──────────┤ │ │ 3 bytes 位置 9 ├──────────┤ │ │ 3 bytes 位置 12 ├──────────┤ │ │ 3 bytes 位置 15 ├──────────┤ │ │ 3 bytes 位置 18 ├──────────┤ . 位置 n . . │ │ ├──────────┤ │ │ 位置END └──────────┘ 在每個 24 bits 中: Byte 0 Byte 1 Byte 2 ┌┬┬┬┬┬┬┬┼┬┬┬┬┬┬┬─┼┬┬┬┬┬┬┬─┐ │ │ │ │ │ │ │ │ │ 字根一 │ 字根二 │ 字根三 │A│ 字根四 │A│B│ │ │ │ │ │ │ │ │ └┴┴┴┴┴┴┴┼┴┴┴┴┴┴┴─┼┴┴┴┴┴┴┴─┘ bit0 bit23 (A: unused) 前 15 個bits,分別以 5 bits 表一組字根的前三根,Byte 2 的前 5 bits 表第四根。最後的 bit(B),則表示是否為多組字根的第一組 字根。此 bit 為零的字,也都屬於此中文字的嘸蝦米合法字根。 五、如何使用參考檔: 舉例說明,當使用者鍵入「奐」後。 High = 0xAB () Low = 0xB7 () hash = (High*765 + Low) % 17021 = 11851 到 Index Table 的第 11851 位置,查得 offset = 6489;再從 Data Table 的第 6489 位置一次取 3 bytes,並檢查下一 3 bytes 的 第 23 bit 是否為 0,是的話,表示此組字根也是合法嘸蝦米字根,重 覆這過程,直到此 bit 為 1。(因為這是另外一中文字的第一組根) 在此例中:Data TABLE 的 6489、6490、6491 byte 分別為 0x71、 0x84、0x01,轉碼得字根「NFB 」,且第 23 bit 為 1,表示此字根為 第一組字根,我們再檢查下一 3 bytes:0x738420,轉碼得字根「NNBD」 ,且第 23 bit 為 0,表示還有下一組字根。同理我們還可找到「NNRD」 、「NOBB」、「NORB」這三組字根。 交通大學資訊科學研究所 謝崇祥 Kenny Shieh 新竹市交通大學六舍 206 室 kenny@cindy.cis.nctu.edu.tw kenny.bbs@cis.nctu.edu.tw gis84507@cis.nctu.edu.tw 【註 1】嘸蝦米字根原則上最多四碼,在編碼時,不足四碼的以 Space 替代。 【註 2】嘸蝦米輸入法著作權屬於行易有限公司所有。 【註 3】所附檔案:liucode.txt 本檔 liucode.tab BIG5 碼反查詢參考檔 liucode.c 範例程式原始碼 liucode.exe MSDOS 版範例程式 liucode UNIX 版範例程式