Swanman's Horizon

性欲をもてあましつつなんらかの話をするよ。

日本語関連修正プラグイン for Delphi XE4 ver.1.10。

意外と早く次ができました。

ビフォー


アフター


説明

するまでもないと思いますが、Ctrl+Spaceを押した時の挙動です。
上から、

  • UTF-8で2バイトの文字
  • UTF-8で3バイトでUnicode的には全角なんだけどフォントによって半角の文字
  • UTF-8で3バイトでフォントも全角の文字
  • UTF-8で4バイトの文字

となってます。

どうしてUTF-8

それはこっちが聞きたいくらいなんですが、どうやらDelphiIDEは一部の文字幅計算でわざわざUTF-8を使ってるみたいなんです。DelphiのデフォルトはUTF-16なのにわざわざUTF-8を使っているという部分には百万歩譲って目を瞑るとして、そのUTF-8をあたかもASCIIしか存在しないかのように「UTF-8のバイト数×固定幅」という計算をしてるせいでずれるんですね。Unicode化とはいったい…うごごご。

IDE全体がダメなの?

当然文字のコピーや選択、Backspace等での削除では問題ないわけで、正しく文字を認識するルーチンはIDEは持ってるんです。持ってるのに使ってない。というか文字幅が必要な箇所ごとにわざわざ個別に計算してるせいで、あっちは正しいけどこっちは間違ってるといったことが起きまくってるという、真似しちゃいけないプログラムのお手本みたいになってます。
以前RTLやVCLのソースを見た時、関数やユニットごとにコーディング規約が全然バラバラだった時にも感じましたけど、チーム間の連携というかそういうの全然取れてなさそうですよね…。これじゃバグ報告以前の問題…。

気を取り直してダウンロード

日本語関連修正プラグイン for Delphi XE4 ver.1.10をダウンロード
あとは矩形範囲選択時に日本語が含まれるとガタガタになる問題を直したい。

本日のまとめ

IDEの開発チームに「猿でもわかるUnicode対応セミナー」的なものを開いてあげて下さい。