旅とプログラミングを少々

趣味に関する記録などをします。さしあたっては2017年JGC修行とプログラミング入門に関しての内容を連ねていきます。

SKKを仮に実装する場合の難しそうなところ

自分の備忘録として書いていたら既に良い例が公開されていましたので、まずはそちらへリンクを。

mzp.hatenablog.com

 

いまのところ一工夫がいるのは

1. concat; 単純なエスケープの変換
例: (^o^;)/

> owata /(concat "\(^o^\059)\057")/

/や;や*等の文字がSKK辞書に収録される際、このように収録されている。L辞書にも"I/O"のようなエントリに使われるので、なるべく対応したい。

2. #; 数値変換
SKK 16.2 マニュアル 5.5.4 数値変換エントリ
> だい\#かい /第#1回/第#0回/第#2回/第#3回/第#0回/\#回

のように、見出しの#とエントリ右辺の#と続く数字は特別な意味を持つ。

3. skk-henkan-okuri-strictly; 送り仮名の厳密マッチ
SKK 16.2 マニュアル 5.8.1 送り仮名の厳密マッチ
> おおk /大/多/[く/多/]/[き/大]/

このようなエントリに対し、"O o K i i" は "大き" のみを候補にするようにしたい。
L辞書には使われていないので、ddskk以外ではあまり実装されていないかもしれない?

4. .lisp 辞書サポート
> today /(skk-current-date)/

のようなconcat以外のLispの関数。かなりマニアックな実装だけが限定的な関数を実装している。

5. アノテーション
SKK 16.2 マニュアル 5.11
;で区切られるシステムアノテーションと;*で区切られるユーザアノテーション
L辞書に無いためユーザアノテーションは探せば既存実装でもミスがありそう。

SKKのマニュアルは

SKK Openlab - Documents

のpdfを参照しています。