UAX #14 を実装した。
UAX #14 が提示するサンプル実装は、基本的にはさまざまなスクリプトに対して最大公約数的な動作をする仕様だと思う(実際、最後の方にさまざまなカスタマイズを行う例とかが載っている)。が、一方で UAX #14 は Unicode のアップデートに従ってけっこう拡張されているようなので、とりあえずサンプル実装のまま組んだ。また、Unicode 関連の関数やクラスが増えてきたので、くくりだして独立したソースにした。
これを利用して、textwidth に応じて自動的に改行する処理を組み込む。
[cci]:set tw=10[/cci] とした上で
abc def ghi
と打つと、i を打った時点で自動的に改行され
abc def
ghi
となるわけだ。内部的には、i を打ってバッファが更新される直前に line break の情報を取得する。すると 4 文字目、および 8 文字目のスペースが INDIRECT_BRK とマークされる。これはつまりその文字の直後で改行してもよいということだ。したがって、line break 情報を後ろからサーチし、最初に見つけた改行可能マークで実際に改行すればよい。
ここで
- 改行できない場合。たとえば
abcdefghijk
などと打った場合はどうなるのか? - Undo 情報はどのような構造になるべきなのか?
を明確にしておく必要がある。これは vim のソース(edit.c)を見るしかないかな。