GD::Text::Wrapモジュール(日本語チョウ訳) Ver.1

by Hippo2000(2001/2/10)

GD::Text::Wrapモジュールなのです。

原本の著作権はMartien Verbruggen 氏がお持ちです(詳しくは著作権情報を見てください)。Martien Verbruggen 氏からは、メールで了解をいただきました。Thank you, Mr Verbruggen!

内容等が間違っていたら修正します。ご連絡ください。



名前

GD::Text::Wrap - 領域で文字列を折り返す


概要

  use GD;
  use GD::Text::Wrap;
  my $gd = GD::Image->new(800,600);
  # 他のことをするために色を占有する
  
  my $text = <<EOSTR;
  Lorem ipsum dolor sit amet, consectetuer adipiscing elit, 
  sed diam nonummy nibh euismod tincidunt ut laoreet dolore 
  magna aliquam erat volutpat.
  EOSTR
  
  my $wrapbox = GDTextWrap->new( $gd,
      line_space  => 4,
      color       => $black,
      text        => $text,
  );
  $wrapbox->set_font(gdMediumBoldFont);
  $wrapbox->set_font('cetus.ttf', 12);
  $wrapbox->set(align => 'left', width => 120);
  $wrapbox->draw(10,140);
  $gd->rectangle($wrap_box->get_bounds(10,140), $color);

説明

GD::Text::Wrap はテキストのフォーマットされた一節をGD::Imageキャンバス上の領域に、GDフォントまたはTrueTypeフォントを使って描画するオブジェクトを提供します。


メソッド

このクラスはGD::Textから直接継承しません。しかしそのほとんどの機能をそれに委任しています。(実際にはGD::Text::Alignオブジェクトに。つまりGD::Text::Alignメソッドのほとんど、特にset_fontとfont_pathがこのクラスに使うことができます。他のメソッドと異なるインターフェースをもつメソッドを以下に説明します:


GD::Text::Wrap->new( $gd_object, attribute => value, ... )

新しいオブジェクトを作成します。最初の引数は適切なGD::Imageオブジェクトでなければなりません。他の引数は属性の初期化のためにset()メソッドに渡されます。


$wrapbox->set( attribute => value, ... )

属性に値を設定します。適切な属性には以下のものがあります:

width
テキストを描画する領域の幅。指定されなければ、GD::Imageオブジェクトの幅がデフォルトになります。
line_space
線と線の間のピクセル数。デフォルトは2。
color, colour
同じ物。フォントを描画するために使われる色。GDオブジェクトのパレットでの最後の色で初期化されます。
align, alignment
同じ物。'justified'(デフォルト)、'left', 'right' または 'center'.のいずれか。
text
描画されるテキスト。これだけが絶対に設定しなければならない属性です。

このメソッドでは、このクラスが知らない属性はGD::Text::Alignクラスに委任されます。


$wrapbox->get( attribute );

属性の現在の値を取得します。set()メソッドの下で記述された全ての属性が取り出すことができます。


$wrapbox->get_bounds()

現在の属性設定で描画される領域の範囲をリストで返します。返される値は左上と右下の角の座標になります。

        ($left, $top, $right, $bottom) = $wrapbox->get_bounds();

エラーの場合には空のリストを返します。

注意:このメソッドによって返されるリストは、角度付きの領域を許すような将来の実装では変更されるかもしれません。


$wrapbox->draw(x, y)

(x,y)を右上の角とした領域を描画します。getbounds()メソッドと同じ値を返します。

注意:このメソッドによって返されるリストは、角度付きの領域を許すような将来の実装では変更されるかもしれません。


注意

すべてのPerlためのモジュールに:インタフェースを守って使うようにしてください。このモジュールの内部の知識を使ってもて遊びすぎると痛い目にあうでしょう。いつかはこれを変更するかもしれません。

TrueTypeフォントはGDのバージョン>1.20で、これをサポートするようにコンパイルしたときにのみ利用できます。それでもやろうとすると、エラーになります。

このモジュールはGD::Text名前空間にありますが、これはGD::Textではありません。しかしこれはその機能の多くを、それが含んでいるオブジェクト(GD::Text::Align)に委任しています。


バグ

私は知りませんが、それはあまり意味がありません。私が慣れていないエキゾチックなフォント、ロケール、文字エンコーディングでは問題があるかも知れません。


やるべきこと

角度付きの領域。

現時点では未指定である領域についてはほんの少ししか許していません。実際には未指定でよいのは底だけです。もし十分にニーズがあるのならば、領域の4つ側面のうちの3つだけを指定することを必要とし、4番目は計算されるようにより多くの柔軟性を実装します。

4つの側面が指定されているときに、TrueTypeフォントを領域の内側にあうように自動的に大きさの変更すること。あるいは何か他の気の利いたこと。

インターフェースにより柔軟性を持たせる。特にdrawについては考える必要あり。

より多くの、よりよいエラーハンドリング。

1.20以前、以後のGDバージョンのよりよいハンドリング。これはGD::Textに委任されるかも。

領域に入れるのに長すぎる行への警告。空の行への警告は?


著作権(COPYRIGHT)

copyright 1999 Martien Verbruggen (mgjv@comdyn.com.au)


参考資料

GD, GD::Text, GD::Text::Align


ホーム Perlの小技

ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。