wxStyledTextCtrlのUnicode化
Honeycombのエディタ部であるwxStyledTextCtrlの設定をいろいろといじっていたのだが、どうもUnicode化する際に色々と手間のかかる仕様らしく、あれこれと調べまわる羽目に。

wxStyledTextCtrlをUnicodeに対応させるためにはwxUSE_UNICODEをコンパイル時にdefineしてやらなければならない。これを定義すると、そもそもTextCtrlの方がUnicode化するので後々操作が楽。その後デフォのwxStyledTextCtrl::LoadFileはUTF-16やUTF-32には使えないのでLoadFileをオーバーライドする。

どういうわけかwxUSE_UNICODEを利用しているにも関わらずchar型でテキストを読み込もうとしている。これはUTF-8しか使えませんということなのだろうか…
バッファとして用いているwxStringのコンストラクタでは*wxConvCurrentを指定しているので、ロケールをそもそもUTF-8にしないとUnicodeを利用するのは無理そうだ。

というわけで、ファイルをバッファに読み込むのは独自に実装するとして、

SetText(バッファ);
EmptyUndoBuffer();
SetSavePoint();

でエディタにバッファを投げ、アンドゥ・セーブポイントを初期化。
InitializePrefsでStyleを拡張子に合わせてセットしてスクリーンショットのような状態まで持っていった。

うーん、なかなか。

コメント