本を読む

読書やコンピュータなどに関するメモ

libskkにSKK-JISYO.Lの式をぜんぶ実装してみた

 「仕事PCでfcitx-skkを使い始めた」で書いたように、先日libskkのソースを眺めた。で、辞書にある式を一部サポートしていることを知った。

 各種SKK実装では、たいていSKK-JISYO.Lという辞書ファイルを使っていると思う。このSKK-JISYO.Lは、もともとEmacs上のSKKのためのもので、「プログラム実行変換」機能のための項目を含んでいる。プログラム実行変換というのは、辞書の候補として通常の単語でなくEmacs Lispの式を書いておき、候補を表示するときに式を評価する機能だ。たとえば、「now」はこんな感じ。

now /ナウ/(current-time-string)/(substring (current-time-string) 11 16)/(substring (current-time-string) 11 19)/

 この式が候補として表示されるときは、現在の時刻の文字列になっているという寸法だ。

 Emacs上のSKK以外では、Emacs Lispインタプリタを積んでいないので、式がそのまま単なる文字列となってしまう。ただ、libskkでは、ごく一部の式だけど対応する枠組みができていた。

 というわけで、SKK-JISYO.Lにある式を抽出して、(たぶん)ぜんぶ実装してみた。まだ実験段階。

 結局、Lispインタプリタもどきを再実装してるんだけど。

 ちなみにハマったのは、Emacs Lisp版を参考に時刻関係の処理を実装したら、単体テストではうまくいくのに、libskkに組み込んだらうまくいかなかったこと。悩んだあげく、ロケールの影響のようだったので、SKK-JISYO.Lにある式やEmacs版が想定しているasctime()形式を自前で実装した。

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://emasaka.blog65.fc2.com/tb.php/1204-190daa22

 | HOME | 

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

フリーター。
連絡先はこのへん

Monthly


FC2Ad