このページは過去に掲載していたものをそのまま使用しています。

Dia-0.83用パッチの作成

ja.poの修正や、フォント関係の修正をしたパッチを 配布するために作成したページです。 [Jan 27 2000]このページも随分長くなってきたので、みづらいですね。 そろそろ改装(化…...)しましょう。

目次


さいしょに

dia-0.83を日本語化するパッチを公開するために、このページを書いています。 なぜdiaの0.83を標的に選んだのかと言えば、0.82より少しカッコイイからぐらいの 意味しかありません。一応dia-currentも眺めています。

短期的にはこの変更点をdiaの本家にマージしたいとは思いません。 本家のメールアーカイブにたまに目を通しますが、参加していませんし、 いまはこれに100%の時間と力を使える状況ではないので、長期的な期待を かけられては困るとだけは言っておきます。

さてさて暗い話題はこれぐらいにして、本家や参考にしたサイトへの リンクを紹介しておきます。

環境

パッチ

下の方にそれぞれ簡単な説明をしています。*.patch.gzファイルは たとえばdia-0.83-0-1.patchの場合

cd dia-0.83
patch -p1 < dia-0.83-0-1.patch
のようにして使ってください。

md5の結果

パッチを置いているホストと同じ場所にmd5の結果を置いてもあまり 意味がないので、他のサイトとの結果も比較すると良いかもしれません。

5a3253972403fdcc5da4976922dd5ad8  dia-0.83-0-1.patch
ef1320400e4585d2ee4cff26dd2a2392  dia-0.83-1-2.patch
a3dbb49e9977e9c3984ad7ff1c1186b1  dia-0.83-2-3.patch
80dd22ca7ff5a5507abad0c6f114f37a  dia-0.83-3-4.patch
255c97f69e01e230850fbf460e743863  dia-0.83-0-4.patch
d87b10c69badcb9f84ce46e996e8d6da  dia-0.83-4-5.patch
62f55490b397899d74c18fddcb758957  dia-0.83-5-6pr1.patch
91df65cb4a4e324a3c69f521cfe176c1  dia-0.83-0-6.patch

古いパッチを公開してしまったので、修正したdia-0.83-1-2.patch.gzを 置きます。(御指摘くださった、みやも@神戸大さんどうもありがとうございました)


問題点

dia-0.82.tar.gz と fjに投稿された、みついわゆきおさんのパッチ (dia-0.82-jp1.diff)の組合せだけではまだ不十分に感じた点がありました。 (dia-0.83用に修正したパッチ)

主にUMLを書くために使っていますが、これがデスクトップです。[Jan 22 18:19]
[ small image (29KB) | full image (89KB) ]

UML用のコンポーネントはフォントを動的に変更することができずに 標準では日本語が出力できないようになっています。まぁそれなら それでもいいんですが、気になった点もあるのでデフォルトのフォントなどを 変更するようにしました。

修正 1

みついわゆきおさんのパッチのおかげで、fontsetで読み込めるように なったので、Times-Roman等のフォントを使っていても 日本語も表示されるように修正したパッチを作成してみました。 テキストの中に英語と日本語が混在しているなどした時に ちゃんと表示できなかったので、epsを生成する所(app/render_eps.c) に仕掛をつくり、lib/text.cの中で日本語とASCII文字の境界を 認識して、別々の処理をしています。

lib/text.cを変更したので、フローチャート用のオブジェクト などではある程度、ちゃんと日本語と英語が区別されて表示されます。 パッチを見て、適宜自分の環境に合わせてフォントを指定した方が良いと思います。

修正 2

UMLのクラス図のオブジェクトはtextを使わずに独自に作成されているよう なので、まだ日本語をEPSで表示させるとおかしかったりします。 この問題は先送りにして、附属のja.poを元にしてja.poを作成してみました。 DIA-0.83用のja.poファイル

% msgfmt -o /usr/local/share/locale/ja/LC_MESSAGES/dia.mo ja.po みたいにして使ってください。

ここまでの修正をすると次のようなデスクトップになりました。[Jan 24 23:58]
[ small image (22KB) | full image (71KB) ]

このja.poファイルはdia-0.82との間の変更はそれほどないので、 我慢できないという程度ではないと思います。

修正 3 (1/25)

前回までのパッチと比較してフォント周りを次のように修正した。
[ dia-0.83-2-3.patch ]

ここまでの変更をしたデスクトップ上の様子 [Jan 25 23:39]
[ small image(25KB) | full image (74KB) ]

修正 4 (1/26)

今回の修正は全てのダイアグラムで最小の変更で漢字が扱えるように 修正した。
[ dia-0.83-3-4.patch (いままでの差分) | dia-0.83-0-4.patch (dia-0.83.tar.gzに当てる) ]

lib/text.cなどでは一々テキストを出力するのに次のような 手法を取っていた。

void
text_draw(Text *text, Renderer *renderer)
{
 ...省略
 renderer->ops->set_font(renderer, text->font, text->height);
  
  pos = text->position;
  
  for (i=0;i<text->numlines;i++) {
    renderer->ops->draw_string(renderer,
                               text->line[i],
                               &pos, text->alignment,
                               &text->color);
    pos.y += text->height;
  }
 ...省略
}

日本語化のために作ったパッチは、EPSの時にフォントの設定を切り替える 必要があるためにset_mbfont()を作ったのだが、そういう処理は draw_string()の中に閉じ込めてしまえばよい。

なぜ、こんな事をするのかといえば、UMLのダイアグラム全部に ASCIIとEUCの境界を判断させて、フォントを切り替えさせるのが面倒だから。 lib/text.cだけでも嫌になってくる作業を、これ以外の 独自にテキスト領域を描画させている部分、全部にするなんて冗談ではない。

そういうわけで、後からコンポーネントが追加された場合の事を 考えて変更のほとんどは、renderオブジェクト側でする事にしました。 変更すると上記のプログラムは次のような形になった。

void
text_draw(Text *text, Renderer *renderer)
{
 ...省略
  pos = text->position;

  /* modified only this loop */
  for (i=0;i<text->numlines;i++) {
    renderer->ops->draw_mbstring(renderer,
				 text->line[i],
				 &pos, text->alignment,
				 &text->color,
				 text->font,
				 text->height);
    pos.y += text->height;
  }
 ...省略
}

もともとdiaの内部は1byte環境を前提にしたコーディングなので、 ここまでやって日本語化(あわよくばi18n)への対応を取るための 土台ができたといった感じです。

今日作成したパッチを当てると 次のようなデスクトップになります。[Jan 26 20:21]
[ small image(23KB) | full image (79KB) ]

明日からは文字の配置の際に2バイト文字を考慮するように 変更しましょう。三日ぐらい前に眠りながら書いたコードでは、一応 日本語のalignmentが出来ていたのですが、小人さんが消してしまった ようなので。変更点の技術的な事についてもまとめる事にします。

ステレオタイプの描画を改善するパッチ

UMLのクラス図でステレオタイプを書くと、描画がおかしくなります。 この問題を解決するために稲地@NECさん <inachi@dbg.bs1.fc.nec.co.jp>が作成されたパッチ [dia-0.83-4.stype.patch]があります。

その他にも、最初にクラス図を表示させると落ちてみたり、挙動の 怪しい部分がたくさんありますが、日本語の扱いができて当然だとは 思わないで、それなりの覚悟で使ってください。

クラス図から書き始められるパッチ (1/27)

小さいパッチですが、とりあえず公開しておきます。 キャンバスを開いて、最初にクラス図のオブジェクトを置こうとすると クラッシュするバグを回避するものです。その他には変数の名前付けを変更した 程度のものです。
[ dia-0.83-4-5.patch ]

このバグは前日までのパッチによるものだと言う事は理解してください。 この週末を利用して、より完全なdia-0.83.tar.gzを展開直後に当てるパッチを 作り、ページも改装するつもりです。

試用パッチ

試験的に作成してみました。
[ dia-0.83-5-6pr1.patch ]

テキスト入力でのカーソル処理を改善した。BSでの消去などの場合に 一字を消せるようにした。

最終パッチ

いままでのパッチを全て統合したものです。dia-0.83.tar.gzを展開した後にこれだけ当ててください。
[ dia-0.83-0-6.patch ]

Diaの作成と起動の手順

tar xvzf dia-0.83.tar.gz
patch -p1 < dia-0.83-0-6.patch
cd dia-0.83
./configure ; make
./app/run_dia.sh

Yasuhiro Abe <m5031201@u-aizu.ac.jp>
Last modified: Fri Feb 18 00:13:28 2000