訓練家的快寫筆記

The legend of trainer's paper


搜尋:

     關閉     
標題:嘸蝦米輸入法 5.0 版參考檔 liubig5.tab 規格使用說明
內容:

From : ftp://mail.im.tku.edu.tw/%A7U%B1%D0/bearhero/prog/%A8%E4%A5%A6/JavaWorld/%E5F%BD%BC%A6%CC5.6/SUPPORT/README.TXT

======================================================================
§嘸蝦米輸入法技術手冊
======================================================================
<目錄>

一、嘸蝦米輸入法 5.0 版參考檔 liubig5.tab 規格使用說明
二、如何在應用程式中切換到嘸蝦米輸入法

======================================================================
一、嘸蝦米輸入法 5.0 版參考檔 liubig5.tab 規格使用說明
======================================================================

<1.1> 宗旨
    由於使用者不斷的支持與愛護,嘸蝦米輸入法已廣為在社會的各行各業
、各階層中被大家使用。為了感謝使用者的支持,我們在以後嘸蝦米輸入法
的版本中,放入了嘸蝦米輸入法的參考檔,這是一個編碼過的對照表,用以
對應嘸蝦米輸入的字根和其對應的中文字。我們將此參考檔的格式公開,以
方便任何廠商或個人在不同的環境、不同的機器、不同的作業系統、或是不
同的應用程式中撰寫其介面程式以驅動嘸蝦米輸入法。要注意的是,本參考
檔的著作權屬於嘸蝦米輸入法的創作人,而使用權則屬於合法持有本參考檔
之使用者。合法持有者,除備用存檔及配合所使用環境之需要而修改,限於
該持有者自行使用外,其他一切權利均予保留。非經著作權利人正式授權,
嚴禁將此參考檔作任何型式之修改、翻拷、流傳、出租、出售、交換或透過
網路和其他一切對外界公佈其內容的行為。

    因此,在不同的中文環境下,廠商、軟體公司或是個人皆可依循這個參
考檔的規格,撰寫對於此參考檔的驅動程式,並說明安裝的過程,以提供合
法持有此參考檔的使用者能使用嘸蝦米輸入法。由於我們希望使用者在不一
樣中文環境下使用嘸蝦米輸入法時,有「統一」的輸入習慣與「完全正確」
的字碼,以避免日後因錯誤所造成的不便,因此,當您要發行或流傳此驅動
程式之前,請務必讓嘸蝦米輸入法的創作人劉重次先生做「測試」,如果一
切無誤的話,本公司將會給予此產品「支援嘸蝦米輸入法 5.0版參考檔」的
「認證」。
=====================================================================

<1.2> 字根按鍵:嘸蝦米輸入法所使用的按鍵有

 A - Z 等 26 個字母鍵,用來輸入中文。
 ,. ' [ ] 等 5 個符號鍵,用來輸入符號。
 Space 空白鍵,當有輸入字根時,用來下達組字命令。

=====================================================================
<1.3> 使用習慣:

1.在中文環境下,通常以 Ctrl-Shift或 Ctrl-Alt-9切換到嘸蝦米輸入法。
  不過一般應用程式也可依自己的習慣,比如說以滑鼠或下拉式功能表等其
  他方式切換。當切換至嘸蝦米輸入法的狀態時,請務必顯示其為「嘸蝦米
  」,請勿以其他名稱替代。

2.在嘸蝦米輸入法的輸入狀態時,除了上述的 32個鍵,其他的輸入鍵一概
  不處理,這些不處理的輸入鍵的反應即與「英數」的狀態下的反應一樣。

3.組合鍵如 Shift-、Ctrl-、Alt-、Ctrl-Alt-、也一概不處理。

4.當沒有輸入字根時 (即輸入法的 Input Buffer是空的時 ), Space鍵、
  Backspace鍵與 ESC鍵也不處理。

5.當一有字根輸入時,嘸蝦米輸入法即根據目前已輸入的字根,立即從
  liubig5.tab這個 table中尋找對應的中文字,如果找不到對應的字或對
  應的字只有一個的話,狀態列只顯示目前已輸入的字根。如果對應的字不
  只一個的話,狀態列除了顯示目前已輸入的字根外,也要以這樣的方式顯
  示候選字:

  □ 1□ 2□ 3□ 4□...

  比如說,當字根輸入 RWP且尚未按空白鍵時,RWP找到的對應字有三個,
  即「范」、「萍」、「菠」,此時,狀態列應出現:

  RWP     范 1萍 2菠

  接下來,如果按「空白鍵」,即輸出「范」字,如果按「 1鍵」即輸出「
  萍」字,如果按「 2鍵」即輸出「菠」字,如果按其他字根鍵或
  Backspace鍵,則再繼續依目前已輸入的字根組字。

6.已有字根輸入時,按了 Backspace鍵,則消去最後一個輸入的字根。記住
  ,不要忘記「立即組字」。

7.已有字根輸入時,按了 ESC鍵,則消去所有輸入的字根,即清除 Input
  Buffer,回到原始狀態。

8.已有字根輸入時,如果按 Space鍵即下達輸出命令。此時程式便輸出第一
  個找出的對應字,如果沒有找到對應的字,即清除 Input Buffer與狀態
  列,嗶一聲並顯示「無此字」。

9.選字是輸入速度的瓶頸,因為「數目字鍵」不像 26英文字母好按,因此
  嘸蝦米以加「輔選字根」V鍵來輔助,直接得到在 Table中第二順位的候
  選字,舉例說:如「膏」字和「敲」在嘸蝦米輸入法的字根皆是 LONU,
  當使用者鍵入 LONU並按 Space後,由於在 Table中排列的順序,必輸出
  第一候選字「膏」,而第二候選字「敲」必須選字。在有重覆字的情況下
  ,嘸蝦米是以字根加V直接輸出第二順位的候選字;上述的情況如使用者
  直接鍵入 LONUV鍵並按 Space組字後,則直接得到「敲」字。嘸蝦米的字
  根最多只有四個,只有在這種情況下會輸入第五個字根 V。又如「已」和
  「己」字都是 FLL,但我們可以直接輸入 FLLV以得到「己」字。在程式
  中,如何做到這個功能呢?

  1. 當使用者輸入字根,按了 Space 鍵欲輸出字時。
  2. 如果結果是沒有對應字的話,先檢查最後一個字根是不是V。
  3. 如果不是V的話,嗶一聲並顯示「無此字」。
  4. 如果是V的話,請把這最後一個V字根拿掉,再到 table 中重新尋
     找對應字。
  5. 如果沒有找到對應字、或只找到一個對應字的話,嗶一聲並顯示「
     無此字」。
  6. 如果找到兩個或以上的對應字時,請直接輸出第二個對應字。
10其他尚未提及的輸入習慣或形式,與其他一般現行的輸入法無異,詳細的
  例子,可參考行易有限公司出版之嘸蝦米輸入法 5.0 版在倚天中文系統
  與 Windows 3.1中文版操作的情形。

=====================================================================
<1.4> 字根排列與編碼:
┌───┬───┬───┐     ┌───┬───┬───┐
│字  根│十進位│二進位│     │字  根│十進位│二進位│
├───┼───┼───┤     ├───┼───┼───┤
│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 │
└───┴───┴───┘     └───┴───┴───┘

=====================================================================
<1.5> 參考檔格式與字的編碼:

    參考檔最上面的 2048+2 bytes 為一個 Index table,各別指到前兩碼
字根對應在 Data table的開始位置。每一個位置為一個 2 bytes 無號整數
(unsigned integer, Intel格式 ),一共有 32*32個,即 1024個,加上最
後一個為 Data table的結束位置。

┌──────┬────┬────┬    ┬────┬────┐
│SPACE-SPACE │SPACE-A │SPACE-B │....│SPACE-[ │SPACE-] │32*2
├──────┼────┼────┼    ┼────┼────┤
│A   - SPACE │A  -  A │A  -  B │....│A  -  [ │A  -  ] │32*2
├──────┼────┼────┼    ┼────┼────┤
│B   - SPACE │B  -  A │B  -  B │....│B  -  [ │B  -  ] │32*2
├──────┼────┼────┼    ┼────┼────┤
│C   - SPACE │C  -  A │C  -  B │....│C  -  [ │C  -  ] │32*2
├──────┼────┼────┼    ┼────┼────┤   
 ..........................................................     .

├──────┼────┼────┼    ┼────┼────┤   
│[   - SPACE │[  -  A │[  -  B │....│[  -  [ │[  -  ] │32*2
├──────┼────┼────┼    ┼────┼────┤
│]   - SPACE │]  -  A │]  -  B │....│]  -  ] │]  -  ] │32*2
├──────┼────┴────┴    ┴────┴────┘
│結束位置 END│                                               1*2
└──────┘

 接下來即為 Data table,以 3 bytes為一個字的單位,字數目多少並
 不固定,不過您可以從 Index table 的最後一個 integer 除以 3 算出。

  位置 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中,前10個bits,分別以5 bits表第三碼,5 bits表第
四碼。後14個bits,則表示對應的中文字。這中文字已經編碼過: Big5碼
的高位元組範圍是 A1H ~ FEH    共 126個

               8EH ~ A0H
               81H ~ 8DH
低位元組範圍是 40H ~ 7EH    63個  共 157 個
               A1H ~ FEH    94個

    但我們所感興趣的範圍是 A140~ F9FE 共 13973個,於是便把這13973
個內碼依照順序編碼由 0~ 13972 以 14個bits來表示。

註】2 的14次方是 16384,所以足夠對 13973 個字作順序編碼。

    這編碼過的 14 bits 如何轉換回 Big5 碼呢? 其實很簡單,只要將這
14 bits,前面先補上 2 bits的 0,使之變成 2 bytes的無號整數,再將此
無號整數除以 157 得商與餘數。

1.把商加上 A1H 即得到 Big-5 碼的高位元組。
2.如果餘數小於63,把餘數加上 40H 即得到 Big-5 碼的低位元組。如果餘
  數大於或等於63,把餘數減去63加上 A1H 即得到 Big-5 碼的低位元組。

=====================================================================

<1.6>如何使用參考檔:

例如,當鍵入 OVFF 後, 首先,找到 OV 對應的開始與結束位置。

 第一碼 O 是第15個字根, 第二碼 V 是第22個字根
 INDEX 位置即為 15*32+22 = 502
 第三碼 F 是第 6個字根,二進位是 00110,第四碼 F 的二進位也是
 00110,第三、四碼共 10個 bits 是用來在 Data Table 中比對用的。

於是,我們先從 Index table 中取出第 502 個無號整數,假設是 offset1
,即 OV 的開始位置,與下一個第 503 個無號整數假設是 offset2,即 OW
的開始位置,offset1 與 offset2 一定都是 3 的倍數。

如果 offset1 與 offset2 相等,則表示沒有 OV 開頭的字,就無此字啦!
不然這中間一定有 (offset2-offset1)/3 這麼多個 OV 開頭的字。因此,
我們就從 offset1 的位置一次取 3 bytes,並比對前 10 個 bits是不是後
兩碼 FF( 0011000110 )。如果比對相同,則取出此 3 bytes 後面的 14
bits,並做上述的轉換得到 2 Bytes 的 Big-5 內碼 E546 的「嘸」字。

    不管比較是否相等,每次再繼續取下面的 3 bytes做比對,除非已到了
offset2,即以 OV 開頭的字都尋找過一遍了。

【註】嘸蝦米原則上最多四碼,在編碼到參考檔時,不足四碼的以Space替
      代,也就是以「零」表示,舉例說:
      1.輸入 A 時,是以 A SPACE SPACE SPACE 進入參考檔比對,A 和
        SPACE 取得 INDEX,而 SPACE SPACE 以 0000000000 進行比對。
      2.輸入 AB 時,是以 A B SPACE SPACE 進入參考檔比對,以 A和B
        取得INDEX,而SPACE SPACE 以 0000000000 等10 bits進行比對。
      3.輸入 ABC 時,是以 A B C SPACE 進入參考檔比對,以 A和B 取
        得INDEX,而 C SPACE 以 0001100000 等 10 bits進行比對。

特別注意的一點是,由於嘸蝦米輸入法的版本不同,liubig5.tab的檔案長
度並未固定,因此,驅動程式應該在載入liubig5.tab時才依檔案的長度,
動態決定記憶體配置的大小。不過,可以確定的一點是,由於Index Table
的 entry 是用 unsigned int 來表示,所以Data table的大小決不會超過
64K bytes;詳細的範例程式在標準版磁片中的 liubig5.c,你可以用 C
complier(如 Borland C 或 Microsoft C..)編譯後, 配合liubig5.tab
執行看看。亦可擷取 liubig5.c 的程式片段作為發展您的嘸蝦米輸入法驅
動程式。

其實,嘸蝦米輸入法 for Microsoft Windows 3.1、 Microsoft Windows
NT 3.5、倚天中文...等等,皆按此 liubig5.tab 規格做出。

我們亦非常歡迎中文環境的開發廠商,除了支援嘸蝦米輸入法liubig5.tab
的規格外,亦支援 liu.box 加字、加詞的功能,這部分的規格,請參閱書
本中「軟體安裝與使用說明」之「加字、加詞」部分。