Encoding

エンコーディングなんて嫌いだけど仕方ない。

ruby/encoding.h をインクルードして rb_utf8_encoding() ってしてたらエラーが出ると思ってたけど ruby/io.h 経由でインクルードしたら直った。

symbol lookup error: /.../runo.so: undefined symbol: _Z16rb_utf8_encodingv

OpenOffice.org では内部で保持している文字列のエンコードUCS-2 らしい。Ruby -> UNO では RubyUCS-2エンコードして OUString に RTL_TEXTENCODING_UCS2 指定で変換すればいいかと思ったらうまくいかない。面倒だからこうすると変換が二度になるので文字列が長くなると不利・・・。

VALUE str = rb_funcall(rbstr, rb_intern("encode"), 1, rb_str_new2("UTF-8"));
return OUString(RSTRING_PTR(str), RSTRING_LEN(str), RTL_TEXTENCODING_UTF8);

対応表を書くか悩む。

UNO -> Ruby では rb_default_external_encoding() で・・・対応表がいるのか。

UNO 側のエンコード指定は決め打ちの定数があるけど Ruby 側は読み込んだものの順とかもあるらしくてややこしい。

メソッド名とプロパティ名の変換は別の関数を用意した方がいいのかもしれない。

Runo.#encoding|= を用意してエンコーディングを保持しておこうかどうしようか。