#osxchat blog

2004/12/22

自訂標點符號的輸入方式

作者: barabbas

繼 zonble 於自訂、新增與設計屬於自己的輸入法介紹了 cin 檔的基本格式之後,這篇文章將針對如何自訂標點符號的輸入方式進一步介紹 cin 檔中另一個相當重要的欄位:%endkey。

不同的輸入法,對於如何便捷地輸入全型標點符號,總是有不同的作法;更有甚者,同一種輸入法,也會有好幾種不同的習慣。根據我在朋友之間作的小小調查,有人希望按下英文的標點符號之後就自動轉成中文全型標點,有人喜歡按 shift + 英文標點再變成全型標點,有人偏好使用 ` 之類的前導字元,有人習慣按組合鍵等等。由於每種輸入法拿來組字的字根對應到英文鍵盤的位置範圍不盡相同,標點符號的處理就應該自行定義,最好能提供使用者選擇的自由。基於這樣的原則,Open Vanilla 中的 Xcin 模組只能在能力所及的情況下,透過 cin 檔的規則來完成這個任務。

%endkey 這個欄位的用途是列舉輸入法字根中會觸發組字事件的字元,舉例來說,就像注音的聲調符號,通常應該出現在每個注音序列的最後一位,並表示這著串注音已經打完,應該重組為一個中文字了。因此,在使用標準鍵盤對應的情況下,注音的 cin 檔裡應該有這麼一行:

%endkey 3467

3467 分別是注音標準鍵盤對應裡的三聲、四聲、二聲與輕聲。

那麼,這個欄位要如何幫助我們自訂標點符號的輸入方式呢?接下來會以我個人在使用倉頡輸入法時的習慣為例,介紹 cj.cin 的改法。

首先,如果我喜歡用「shift+英文標點」這種方式來輸入全型標點,我就應該把這些「shift+英文標點」加進 cin 檔的 %keyname 及 %chardef 區,以下是我的例子:

%keyname begin
< ,
> 。
? ?
: :
" 、
{ 「
} 」
| |
~ ~
! !
@ @
# #
$ $
% %
^ ︿
& &
* *
( (
) )
_ -
+ +
...(以下是倉頡本來的字根,別把這行也抄進去啊!XD)
%keyname end
%chardef begin
< ,
> 。
? ?
: :
: ;
" 、
" ”
" ’
" ‘
{ 「
{ 『
{ 《
{ 〈
{ 〔
} 」
} 』
} 》
} 〉
} 〕
} }
| |
| \
~ ~
! !
@ @
# #
$ $
% %
^ ︿
& &
* *
( (
) )
_ -
_ _
_ ─
_ –
_ —
+ +
+ =
...(同樣,以下是倉頡本來的字根對應)
%chardef end

上面的例子,在 %keyname 裡加入了會用來輸入標點符號的英文鍵位,並在 %chardef 裡加入了可能會用到的全型標點符號與字根對應的狀況。像是「<」(相當於 shift + ,) 只會對應到「,」,但「:」(相當於 shift + ;) 就會對應到「:」或「;」。

當 cj.cin 加入了這些資訊之後,「shift+英文標點」就可以用來輸入全型標點了!

等等,這樣好難打!由於倉頡的組字事件通常由空白鍵來觸發,每次打標點符號時,也得多按一個空白鍵才能讓倉頡知道:嘿!我現在要組字!問題是我按了「shift+英文標點」再按一個空白鍵,好彆扭啊!

這時候 %endkey 就派上用場了!還記得前面怎麼說的嗎?%endkey 的用途是「列舉輸入法字根中會觸發組字事件的字元」,想想看,如果有一種字的字根只有一個,打了之後就代表要組字,這是什麼呢?不正是全型標點符號嗎!

因此,在 cj.cin 裡再加上這一行:

%endkey <>?:"{}|~!@#$%^&*()_+

事就這麼成了。:)

總結以上的說法,這個方式理論上可以推廣到所有的 cin 檔,用來定義全型標點符號如何輸入,而且你也可以把這個行為定義成只要按了英文標點就輸出中文全型標點,把我在上面用到 <>?:"{}|~_+ 的地方 (%endkey、%keyname、%chardef 裡都要) 改成 ,./;'[]\-=` 就好了。但是... 發現我為什麼不用這個方法了嗎?因為 1234567890 被定義選字鍵的 %selkey 用掉了!當然,你可以把兩種混在一起就是了,只要別和輸入法字根衝到就好,像是標準鍵盤配置的注音輸入法,就得小心地避開,此時使用「shift+英文標點」來輸入中文全型標點,依然是我建議採用的解決方案。

附帶一提,Open Vanilla 的 Xcin 輸入法模組,已經把選字窗出現時不想按選字鍵而想接著輸入的行為考慮進去,標點符號也能在這種情況下快速輸入。但是,以倉頡輸入法為例,若「shift+英文標點」已定義為中文全型標點,同時又想讓英文標點也能在選字窗出現時快速輸入的話,就得按照上述的方式,把英文標點也都加到 %endkey、%keyname 及 %chardef 裡,否則輸入法只會把你輸入的東西當成不合法的字根。

嗯,如果覺得我寫得不太好懂,請用 comment 來發問,多謝指教!

標籤: , ,

1 篇留言:

  • 非常謝謝您
    您的分享對我有很大幫助
    自訂了輸入法的標點符號之後
    不但工作效率變佳
    手指頭之間的感情也好很多囉~
    祝您健康快樂

    作者: Anonymous 匿名 發表時間: 11/10/2005 09:46:00 上午  

張貼留言

逆向鍊結:

建立連結

? 回前頁