ひとまず input モードでの自動改行が動くようにした。改行できない場合は、無理に改行せずに長いままにするようにした。
あとは overwrite モードでの整合性をとるのと、Unicode.org 謹製のテストパターンがあるのでこれを通すようにしよう。6311 パターンくらいある。それから、gq コマンドを実装する。
とりあえずこれで、一通り pure vi の機能を実装し終えたということになるのかな。だいたい 1 年かかった。週末に一気に書き上げたという伝説はともかく、Bill Joy さんはせいぜい数ヶ月で(しかも BSD 本体やら Pascal コンパイラと並行して)vi を書いたというのだからおそろしい(参考: Bill Joy’s greatest gift to man – the vi editor および vi – Wikipedia, the free encyclopedia)。
* * *
とりあえずテストを通してみたところ、87.59% 通った(テストデータは基本的な実装に加えて UAX #14 の 8.2 Examples of Customization の Example 7、つまり数値文字列に対する拡張を施した上での状態を前提にしている。したがって基本的な実装のままでは 100% にはならない)。
しかしなんかしょうもないバグが残っているような気がしないでもないのでもう少し追ってみることにしよう。……うわーん、案の定。修正したら 95.5%。
残りは上記の Example 7 の件だろう。たぶん。そういうことにしてこの状態で進める。
* * *
といいつつまだやっている。CR や LF などの処理を付け足したりして 99.5% まできた。残りの半分は、Contingent Break Opportunity (CB)、具体的には U+FFFC Replacement Character にまつわるテストケースなのだが……これが UAX #14 を見てもよくわからない。CB は LB1 で処理することになってたり、文脈に応じて適当に扱うことになっていたり、UAX #14 を通してどうするか明示されてるわけではない。うーん。U+FFFC を含んだテストケースでは、FFFC については LB1 のルールに従う、みたいな事が書いてあるのだが LB1 の定義にも U+FFFC の取り扱いは明示されていない。うーん。
まあいいか?