libiconvを試す

ndsはutf16と親和性が高い、と思う。
(text型背景レイヤの文字種が16bitなので、事前にunicodeフォント(タイル?)をVRAMに設定しておけば(但し、サイズは8x8。美咲フォントぐらいじゃないと無理だ)、utf16は直接表示できる。ただ、この方法だとVRAMを大量に浪費してしまうが。)
(追記: あとで計算したら、この方法だとVRAMのサイズが足りないのでunicodeを網羅するのは無理な事に気付いた。)
なので、文字コードunicodeを使えばそれなりに簡単に日本語表示はできそうだ。
が、Shift_JISEUC-JPもまだ普通に使われているし、メールやircもやろうと思うならiso-2022-jp対応も欲しい。
そして、大抵の日本語フォントのデフォルトのマッピング(というか、単なる並び順)も大体JIS系なので、これを並び替えるのは結構な手間だ。
そこで、libiconvを試した。


まず、駄目元でdevkitPro付属のiconvを……と思って試したら、iconv.hはあるけどlibiconv.aが入ってない。
まあ、入ってても多分日本語変換は出来なかっただろうとは思うが。


次に、定番のGNU libiconv。GPL物はGPL汚染されるので使わない方が良いと思うが、これはLGPLなのでソース自体は汚染されない、という解釈で(当ってるか保証は無いが)、使ってみる事にする。
ちょっと./configureを通すのに手間取ったが、ズルをして通す。
(devkitProのgccは*.elfを生成するところまでしか行わないので実行バイナリを生成する能力がなく(実行バイナリを生成しようとするとエラーになる)、./configureが通らない。エラーが出たら、configureスクリプトの該当部分をtouch a.outとか適当に偽ファイルを作るコマンドに変更して誤魔化した。)
そして、iconv.hとlibiconv.aだけ生成し、組み込んでみる。
動いた。


しかし、生成された実行バイナリイメージのサイズが、組み込み前は100k程度だったのが、組み込み後は950k程度になってしまった。
ndsのたった4Mのramにコレは、ちょっと厳しいように思える。


最終的には自前で日本語変換関数を持つ必要がありそうだ。
しかし、当分はlibiconvでいいだろう。
gaucheのcharconvは、変換portとして使うのに最適化されているので流用はかなり手を入れないと難しそうだった(しかし、最終的には、そうする事になりそうだが……)。
他の日本語変換ライブラリも探してみたものの、utf-8非対応だったりで、良いものは見付からなかった。
rubyとかperlとかも結局自前で実装してるし、この辺、誰か、どうにかしてほしい。未踏プロジェクトとかで。
……iconvあったら誰もやらないか。