JavaのUnicode補助文字対応

Javaで文字を扱うプログラムを書いているとJavaUnicode補助文字対応はちょっと足りないなぁと思うことがよくあります。特に文字列やそれに類するもの(eclipseのIDocumentなど)をイテレートする際にもう少し使いやすいユーティリティがあってもいいように思います。
Characterクラスには以下のようなプリミティブなメソッドがあります。

  • Character.codePointAt(seq, index)
  • Character.charCount(codePoint)
  • Character.codePointBefore(seq, index)

これらを使えばある程度のことはできるのですが、実際にやりたいのはイテレートなのでもっと直接的にCodePointIteratorのようなものがほしいのです。
実際、Webを調べてみるとたとえば
http://www.itarchitect.jp/technology_and_programming/-/51291.html
にその実装例があります。
自分でコーディングした範囲では次の2つがあるといいと思います。

  • CodePointIterator
    • コンストラクタでCharSequenceをとる双方向のIterator実装(java.text.CharacterIterator風のAPIでも良いけど、ちょっとマイナー)
    • 現在のindexが取れる(元のAPIを操作するのに必要)
  • CharSequenceのスケルトンクラス
    • subSequenceのデフォルト実装を用意して欲しい

この2つがあれば、自分の操作対象をCharSequenceにするアダプタクラスを書くだけで文字のイテレーションができるようになります。CodePointIteratorが双方向だと良いのは実際に逆向きに処理する場合があるのと、正向きであっても字句解析的にはpushbackが必要だからです。
More Emacsでは、CodePointIteratorとIDocumentをCharSequenceにするアダプタを作って補助文字対応しました。