=encoding euc-jp =head1 名前 SVG - Scalable Vector Graphics (SVG)ドキュメントを生成するためのPerl拡張 =head2 バージョン Version 2.25 (22.07.02) =head1 概要 #!/usr/bin/perl -w use strict; use SVG; # SVGオブジェクトの生成 my $svg= SVG->new(width=>200,height=>200); # group要素を生成するための明示的な要素コンストラクタの利用 my $y=$svg->group( id => 'group_y', style => { stroke=>'red', fill=>'green' } ); # グループに円(circle)を追加 $y->circle(cx=>100, cy=>100, r=>50, id=>'circle_in_group_y'); # あるいは名前によってgroup要素を生成するよう汎用的な'tag'メソッドを利用 my $z=$svg->tag('g', id => 'group_z', style => { stroke => 'rgb(100,200,50)', fill => 'rgb(10,100,150)' } ); # 汎用的な'tag'メソッドを使って円(circle)を作成し追加 $z->tag('circle', cx=>50, cy=>50, r=>100, id=>'circle_in_group_z'); # group zというグループでの四角にアンカーを作成 my $k = $z->anchor( id => 'anchor_k', -href => 'http://test.hackmare.com/', -target => 'new_window_0' )->rectangle( x => 20, y => 50, width => 20, height => 30, rx => 10, ry => 5, id => 'rect_k_in_anchor_k_in_group_z' ); # SVGオブジェクトの描画。暗黙のうちにsvg名前空間を利用。 print $svg->xmlify; # あるいはオブジェクト全体を描画することなく、SVGオブジェクトの子供ノードを描画 print $k->xmlify; #$kの祖先ノードを何も描画することなく、 #上記の四角が入ったアンカー$kを描画 # あるいは明示的にsvg名前空間を使用し、それ自身のDTDを持ったドキュメントを生成 print $svg->xmlify(-namespace=>'svg'); # あるいは明示的にsvg名前空間を使用し、インラインのドキュメントを生成 print $svg->xmlify( -namespace => "svg", -pubid => "-//W3C//DTD SVG 1.0//EN", -inline => 1 ); =head1 説明 SVGは、SVG(Scalable Vector Graphics)イメージのDOM表現を含むネストしたデータ構造を 生成する100% Perlのモジュールです。SVGを使って、SVGオブジェクトを生成したり、 それに別のSVGインスタンスを埋め込んだり、DOMオブジェクトにアクセスしたり、 javascriptを作成し、アクセスしたり、SMILアニメージョン・コンテンツを生成すると いったことができます。 メモリ256K RAM (訳者注:いくらなんでも256Mの間違いでしょう)500MHz Linux RH7マシン では、SVG.pmは1秒間に12,000を超える要素を超えます。 =head2 SVGドキュメントを生成するための一般的なステップ SVGを生成することは簡単な3つのステップの処理になります: =over 4 =item 1 最初のステップはSVGオブジェクトをL<"new">で組み立てます。 =item 2 2番目のステップはSVG要素を作成するために要素コンストラクタを呼ぶことです。 要素コンストラクタの例としてはL<"circle"> や L<"path">があります。 =item 3 3番目、最後のステップはSVGオブジェクトをL<"xmlify">メソッドを使ってXMLに 描画することです。 =back L<"xmlify"> メソッドは、SVGがXMLオブジェクトを描画することを制御する いくつかのオプションの引数を取ります。 特にスタンドアロンのSVGドキュメントかSVGドキュメントの一部が生成されるかを決定します: =over =item -stand-alone それ自身の関連するDTDを持った完全なSVGドキュメント。オプションでSVG要素の名前空間を 指定することができます。 =item -in-line DTDを持たないインライン(in-line)のSVGドキュメントの一部です。それは他のXML コンテンツに埋め込まれます。スタンドアロンのドキュメントと同様、代わりの名前空間を 指定することが出来ます。 =back 3番目のステップになるまでXMLコンテンツは生成されません。ここの時点まで、 全ての構築された要素の定義は、アクセスや変更をすることができる DOMライクなデータ構造体にあります。 =head2 EXPORTS 何もありません。しかし、オプションと追加の要素メソッドがインポート・リストに 指定されることを許しています。これらのオプションと要素は、L<"new">コンストラクタで 作成された全てのSVGインスタンスで利用することができます。例えば、 インデントの文字列をレベルごとに2つのスペースに変更するためには、以下のようにします: use SVG qw(-indent => " "); -autoの例外を除けば、すべてのオプションはL<"new">コンストラクタでも指定することができます。 現在サプートされているオプションは以下の通りです: -auto 全ての理解されないメソッド呼び出しの自動ロードを可能にします(0) -indent SVGがXMLに描画されるときのインデント("\t")。xmlifyメソッドには、そのままにしておくのが一番です。 -elsept 要素間の区切り("\n")。xmlifyメソッドには、そのままにしておくのが一番です。 -dtd このドキュメントのために使いたいDTDの名前 -inline SVGがスタンドアロンであるかインラインであるか(0) -printerror SVG生成エラーを標準エラー出力に出力するか(1) -raiseerror 生成エラーがあったらdieするか(1) -nostub 何も要素がない空のSVGドキュメントへのハンドルを返すだけ SVGはインポート・リストで指定された追加の要素生成メソッドも許します。 例えば'star'と'planet'要素メソッドを生成するためには以下のようにします: use SVG qw(star planet); あるいは: use SVG ("star","planet"); これはSVG.pmによりサポートされる要素のリストに'star'を追加します(しかし、もちろん 他のSVGパーザーへは、そうではありません...)。 もう1つの方法して'-auto'オプションが、同じ名前の要素を生成するために呼ばれる、 わからないメソッドを可能にします: use SVG (-auto => 1, "star", "planet"); (ここでは'star'や'planet'のように)明示的に指定された全ての要素は、 あらかじめ宣言されます;他の要素はPerlで現れたとき、そのように定義されます。 '-auto'を有効にすることは、適切なメソッド名のコンパイル時の文法チェック を実質上、無効にするということに注意してください。 B use SVG ( -auto => 0, -indent => " ", -raiserror => 0, -printerror => 1, "star", "planet", "moon" ); =head1 参考資料(SEE ALSO) perl(1), L, L, L, L http://roasp.com/ http://www.w3c.org/Graphics/SVG/ =head1 AUTHOR Ronan Oger, RO IT Systemms GmbH, ronan@roasp.com =head1 CREDITS Peter Wainwright, peter@roasp.com Excellent ideas, beta-testing, SVG::Parser =head1 EXAMPLES http://roasp.com/ このディストリビューションでのexamplesディレクトリをご覧ください。そこには十分にドキュメントが入った 例がいくつか入っています。 =head1 WINDOWS DISTRIBUTION http://roasp.com/ppm/ =head1 METHODS SVGは明示的および汎用的の両方の要素コンストラクタメソッドを提供します。 明示的なジェネレータは一般的に(2、3の例外を除けば)、それが生成する要素の名前が つけられます。もしtagメソッドがハイフンが入っているタグのために必要であれば、 メソッド名はハイフンをアンダースコアに置換されます。つまり:タグ を生成するためには、$svg->column_heading(id=>'new')を使います。 すべての要素コンストラクタが要素属性とオプションのハッシュを取ります; 'id'や'border'のような要素属性は名前で渡されます。一方、メソッドのための (複数の代わりの形式をサポートする要素のタイプのような)オプションは 前にハイフンがつけられて渡されます。例えば'-type'。両方のタイプは自由に 混ぜることが出来ます;より多くの例については、L<"fe">メソッドとドキュメントに 入っているコードサンプルをご覧ください。 =head2 new (constructor) $svg = SVG->new(%attributes) 新しいSVGオブジェクトを生成します。ドキュメントSVG要素の属性は、キーと値のペアの オプションのリストとして渡されます。さらに(前にハイフンがついた)SVGオプションを オブジェクト単位に設定することが出来ます; B my $svg1=new SVG; my $svg2=new SVG(id => 'document_element'); my $svg3=new SVG(s -printerror => 1, -raiseerror => 0, -indent => ' ', -docroot => 'svg', #default document root element (SVG specification assumes svg). Defaults to 'svg' if undefined -sysid => 'abc', #optional system identifyer -pubid => "-//W3C//DTD SVG 1.0//EN", #public identifyer default value is "-//W3C//DTD SVG 1.0//EN" if undefined -namespace => 'mysvg', -inline => 1, -dtd => 'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd', #the dtd you want to use (this is the default one) -elsep => "\n", #the separation between elements (New line in this case) id => 'document_element', width => 300, height => 200, ); デフォルトのSVGオプションはインポート・リストで設定することも出来ます。 利用できるオプションの詳細については上記のL<"EXPORTS">をご覧ください。 さらに、以下のオプションがあります: -version -encoding -standalone -namespace ドキュメントや要素レベルの名前空間を定義します。設定の優先順位は要素,ドキュメントです。 -inline -identifier -nostub -elsep これらはxmlifyで、SVG->new宣言で設定した値をすべて上書きして、設定することもできます。 =head2 xmlify (alias: to_xml render) $string = $svg->xmlify(%attributes); svgドキュメントのxml表現を返します。 B 名前 デフォルト値 -version '1.0' -encoding 'UTF-8' -standalone 'yes' -namespace 'svg' - 要素の名前空間 -inline '0' - '1'であれば、インライン・ドキュメント -pubid '-//W3C//DTD SVG 1.0//EN'; -dtd (standalone) 'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd' =head2 tag (alias: element) $tag = $svg->tag($name, %attributes) 汎用的な要素ジェネレータ。$nameという名前、%attributesで指定された属性を持った 要素を作成します。このメソッドは、ほとんどの明示的な要素ジェネレータの 基本となります。 B my $tag = $svg->tag('g', transform=>'rotate(-45)'); =head2 anchor $tag = $svg->anchor(%attributes) anchor要素を生成します。anchorはオブジェクトを'ライブ'(つまりクリッカブル)に します。そのため描画されるオブジェクトあるいはグループ要素を子供として 必要とします。 B # anchorの生成 $tag = $svg->anchor( -href=>'http://here.com/some/simpler/svg.svg' ); # anchorに円を追加。その円はクリックできます。 $tag->circle(cx=>10,cy=>10,r=>1); # URLとターゲットを持つ、より複雑なanchor $tag = $svg->anchor( -href => 'http://somewhere.org/some/other/page.html', -target => 'new_window' ); =head2 circle $tag = $svg->circle(%attributes) (cx,cy)に半径rの円を描きます。 B my $tag = $svg->circle(cx=>4, cy=>2, r=>1); =head2 ellipse $tag = $svg->ellipse(%attributes) (cx,cy)に半径rx, ryの楕円を描きます。 B my $tag = $svg->ellipse( cx=>10, cy=>10, rx=>5, ry=>7, id=>'ellipse', style=>{ 'stroke'=>'red', 'fill'=>'green', 'stroke-width'=>'4', 'stroke-opacity'=>'0.5', 'fill-opacity'=>'0.2' } ); =head2 rectangle (alias: rect) $tag = $svg->rectangle(%attributes) (x,y)に幅'width'、高さ'height'で、角の丸みの径が'rx'と'ry'の四角を描きます。 B $tag = $svg->rectangle( x=>10, y=>20, width=>4, height=>5, rx=>5.2, ry=>2.4, id=>'rect_1' ); =head2 image $tag = $svg->image(%attributes) (x,y)に幅'width'、高さ'height'で、'-href'で結び付けられたイメージ・リソースを 描きます。L<"use">もご覧ください。 B $tag = $svg->image( x=>100, y=>100, width=>300, height=>200, '-href'=>"image.png", #SVGを埋め込むことも出来ます。例えば "image.svg" id=>'image_1' ); B =head2 use $tag = $svg->use(%attributes) SVGドキュメントに入っているエンティティからコンテンツを取り出し、それを (x,y)に幅'width'、高さ'height'で、'-href'で結び付けられたイメージ・リソースに 適用します。 B $tag = $svg->use( x=>100, y=>100, width=>300, height=>200, '-href'=>"pic.svg#image_1", id=>'image_1' ); B SVGの仕様に従い、SVGでの'use'要素は外部のSVGファイルの中の1つの要素を示すことが 出来ます。 =head2 polygon $tag = $svg->polygon(%attributes) 'x1,y1,x2,y2,x3,y3,... xy,yn'という形式の文字列によって定義される頂点で n角の多角形を描きます。座標データから適切な文字列を生成するために便利な L<"get_path">メソッドが提供されます。 B # 五画形 my $xv = [0,2,4,5,1]; my $yv = [0,0,2,7,5]; $points = $a->get_path( x=>$xv, y=>$yv, -type=>'polygon' ); $c = $a->polygon( %$points, id=>'pgon1', style=>\%polygon_style ); SEE ALSO: L<"polyline">, L<"path">, L<"get_path">. =head2 polyline $tag = $svg->polyline(%attributes) 'x1,y1,x2,y2,x3,y3,... xy,yn'という形式の文字列によって定義される点を 持つn点の折れ線を描きます。座標データから適切な文字列を生成するために便利な L<"get_path">メソッドが提供されます。 B # 10点のノコギリ状のパターン my $xv = [0,1,2,3,4,5,6,7,8,9]; my $yv = [0,1,0,1,0,1,0,1,0,1]; $points = $a->get_path( x=>$xv, y=>$yv, -type=>'polyline', -closed=>'true' #その折れ線が閉じるかどうかを指定 ); my $tag = $a->polyline ( %$points, id=>'pline_1', style=>{ 'fill-opacity'=>0, 'stroke-color'=>'rgb(250,123,23)' } ); =head2 line $tag = $svg->line(%attributes) (x1,y1) と (x2,y2)という2点の直線を描きます。 B my $tag = $svg->line( id=>'l1', x1=>0, y1=>10, x2=>10, y2=>0 ); 複数の結び付けられた線を描くためには、L<"polyline">を使ってください。 =head2 text $text = $svg->text(%attributes)->cdata(); $text_path = $svg->text(-type=>'path'); $text_span = $text_path->text(-type=>'span')->cdata('A'); $text_span = $text_path->text(-type=>'span')->cdata('B'); $text_span = $text_path->text(-type=>'span')->cdata('C'); イメージに描かれるテキスト文字列のためのコンテナを定義します。 B -type = path type (path | polyline | polygon) -type = text element type (path | span | normal [default]) B my $text1 = $svg->text( id=>'l1', x=>10, y=>10 )->cdata('hello, world'); my $text2 = $svg->text( id=>'l1', x=>10, y=>10, -cdata=>'hello, world'); my $text = $svg->text( id=>'tp', x=>10, y=>10 -type=>path) ->text(id=>'ts' -type=>'span') ->cdata('hello, world'); SEE ALSO: L<"desc">, L<"cdata">. =head2 title $tag = $svg->title(%attributes) イメージのタイトルを生成します。 B my $tag = $svg->title(id=>'document-title')->cdata('This is the title'); =head2 desc $tag = $svg->desc(%attributes) イメージの説明(=description)を生成します。 B my $tag = $svg->desc(id=>'document-desc')->cdata('This is a description'); =head2 comment $tag = $svg->comment(@comments) イメージの説明を生成します。 B my $tag = $svg->comment('comment 1','comment 2','comment 3'); =head2 pi (Processing Instruction) $tag = $svg->pi(@pi) 処理命令(processing instruction)の集合を生成します。 B my $tag = $svg->pi('instruction one','instruction two','instruction three'); returns: ?instruction one? ?instruction two? ?instruction three? =head2 script $tag = $svg->script(%attributes) Javascriptあるいはその他の互換性のあるスクリプト言語であるECMAscriptを使った、 動的な(クライアント側)スクリプトのためのスクリプト・コンテナを生成します。 B my $tag = $svg->script(-type=>"text/ecmascript"); # javascriptの行末を管理するよう注意して、 # cdtaを持ったscriptタグを入れてください # qq|text| あるいは qq/text/ (このtextがスクリプト) # が、このためにうまく機能します。 $tag->cdata(qq|function d(){ //簡単な表示関数 for(cnt = 0; cnt < d.length; cnt++) document.write(d[cnt]);//ループの終わり document.write("
");//改行の出力 }| ); =head2 path $tag = $svg->path(%attributes) path要素を描画します。pathの頂点はパラメータあるいはL<"get_path">メソッドを 使って求められたものになります。 B # path定義で描画される 10点のノコギリ状パターン my $xv = [0,1,2,3,4,5,6,7,8,9]; my $yv = [0,1,0,1,0,1,0,1,0,1]; $points = $a->get_path( x => $xv, y => $yv, -type => 'path', -closed => 'true' #折れ線が閉じるように指定 ); $tag = $svg->path( %$points, id => 'pline_1', style => { 'fill-opacity' => 0, 'fill-color' => 'green', 'stroke-color' => 'rgb(250,123,23)' } ); SEE ALSO: L<"get_path">. =head2 get_path $path = $svg->get_path(%attributes) 複数の点を持つSVG描画オブジェクト定義(path、polyline、polygon)に合うように 形式が正しく整えられた点のテキスト文字列を返します。 B 以下の属性があります: -type = パスの種類(path | polyline | polygon) x = X座標の配列へのリファレンス y = Y座標の配列へのリファレンス B 以下のキー-値のペアで構成されるハッシュのリファレンス: points = 適切なポイント定義文字列 -type = path|polygon|polyline -relative = 1 (絶対位置ではなく相対位置で定義) -closed = 1 (曲線を閉じる- path と polygon のみ) B #pathのためのパス定義を生成 my ($points,$p); $points = $svg->get_path(x=>\@x,y=>\@y,-relative=>1,-type=>'path'); #pathにSVGドキュメントを追加 my $p = $svg->path(%$path, style=>\%style_definition); #polylineのための閉じられたpath定義を生成 $points = $svg->get_path( x=>\@x, y=>\@y, -relative=>1, -type=>'polyline', -closed=>1 ); # polylineのための閉じられたpath定義を生成 # polylineをSVGドキュメントに追加 $p = $svg->polyline(%$points, id=>'pline1'); B get_path set_path =head2 animate $tag = $svg->animate(%attributes) SMILアニメーション・タグを生成します。これは何か空でないタグが入っていることが 許されます。アニメーションSMILコマンドの細かい点に関する詳細な情報は W3Cを参照してください。 B -method = Transform | Motion | Color my $an_ellipse = $svg->ellipse( cx=>30,cy=>150,rx=>10,ry=>10,id=>'an_ellipse', stroke=>'rgb(130,220,70)',fill=>'rgb(30,20,50)'); $an_ellipse-> animate( attributeName=>"cx",values=>"20; 200; 20",dur=>"10s", repeatDur=>'indefinite'); $an_ellipse-> animate( attributeName=>"rx",values=>"10;30;20;100;50", dur=>"10s", repeatDur=>'indefinite'); $an_ellipse-> animate( attributeName=>"ry",values=>"30;50;10;20;70;150", dur=>"15s", repeatDur=>'indefinite'); $an_ellipse-> animate( attributeName=>"rx",values=>"30;75;10;100;20;20;150", dur=>"20s", repeatDur=>'indefinite'); $an_ellipse-> animate( attributeName=>"fill",values=>"red;green;blue;cyan;yellow", dur=>"5s", repeatDur=>'indefinite'); $an_ellipse-> animate( attributeName=>"fill-opacity",values=>"0;1;0.5;0.75;1", dur=>"20s",repeatDur=>'indefinite'); $an_ellipse-> animate( attributeName=>"stroke-width",values=>"1;3;2;10;5", dur=>"20s",repeatDur=>'indefinite'); =head2 group $tag = $svg->group(%attributes) 共通のプロパティを持つオブジェクトのグループを定義します。groupは style,animation,filter,transformation、そしてそれらに結び付けられた マウス・アクションを持つことができます。 B $tag = $svg->group( id => 'xvs000248', style => { 'font' => [ qw( Arial Helvetica sans ) ], 'font-size' => 10, 'fill' => 'red', }, transform => 'rotate(-45)' ); =head2 defs $tag = $svg->defs(%attributes) 定義セグメントを定義します。defsはSVG.pmを使って定義されるとき、子供を必要とします。 B $tag = $svg->defs(id => 'def_con_one',); =head2 style $svg->tag('style', %styledef); 生成される以下のオブジェクトのためのスタイル定義を設定/追加します。 そのプロパティの値が子供により再定義されない全てのプロパティのために スタイル定義はオブジェクトとすべてのその子供に適用します。 =head2 mouseaction $svg->mouseaction(%attributes) タグのためのマウス・アクション定義を設定/追加します。 =head2 attrib $svg->attrib($name, $value) $svg->attrib $name, $value $svg->attrib $name, \@value $svg->attrib $name, \%value タグのための属性を設定/置換します。 =head2 cdata $svg->cdata($text) $textにcdataを設定します。SVG.pmはすべてのタグにcdataを設定することを可能にしています。 タグが空タグの場合、SVG.pmは文句をいいませんが、描画エージョントはコケるでしょう。 SVG DTDでは、cdataは一般にテキストやスクリプトの内容を追加することだけを意味します。 B $svg->text( style => { 'font' => 'Arial', 'font-size' => 20 })->cdata('SVG.pm is a perl module on CPAN!'); my $text = $svg->text(style=>{'font'=>'Arial','font-size'=>20}); $text->cdata('SVG.pm is a perl module on CPAN!'); B Etext style="font: Arial; font-size: 20" ESVG.pm is a perl module on CPAN!E/text E SEE ALSO: L<"CDATA"> L<"desc">, L<"title">, L<"text">, L<"script">. =head2 CDATA $script = $svg->script(); $script->CDATA($text); 与えられたもの、そのままで描画される$textの内容を持ったタグを生成します。 SVG.pmはすべてのタグにcdataを設定することを可能にしています。 タグが空タグの場合、SVG.pmは文句をいいませんが、描画エージョントはコケるでしょう。 SVG DTDでは、cdataは一般にテキストやスクリプトの内容を追加することだけを意味します。 B my $text = qqァ var SVGDoc; var groups = new Array(); var last_group; /***** * * init * * Find this SVG's document element * Define members of each group by id * *****/ function init(e) { SVGDoc = e.getTarget().getOwnerDocument(); append_group(1, 4, 6); // group 0 append_group(5, 4, 3); // group 1 append_group(2, 3); // group 2 }ァ; $svg->script()->CDATA($text); B Escript E ![CDATA[ var SVGDoc; var groups = new Array(); var last_group; /***** * * init * * Find this SVG's document element * Define members of each group by id * *****/ function init(e) { SVGDoc = e.getTarget().getOwnerDocument(); append_group(1, 4, 6); // group 0 append_group(5, 4, 3); // group 1 append_group(2, 3); // group 2 } ]]E SEE ALSO: L<"cdata">, L<"script">. =head2 filter $tag = $svg->filter(%attributes) filterを生成します。filter要素はL<"fe">というfilterサブ要素を持ちます。 B my $filter = $svg->filter( filterUnits=>"objectBoundingBox", x=>"-10%", y=>"-10%", width=>"150%", height=>"150%", filterUnits=>'objectBoundingBox' ); $filter->fe(); SEE ALSO: L<"fe">. =head2 fe $tag = $svg->fe(-type=>'type', %attributes) filterサブ要素を生成します。L<"filter">要素の子供でなければなりません。 B my $fe = $svg->fe( -type => 'DiffuseLighting' # 必須 - 要素名が省略 'fe' id => 'filter_1', style => { 'font' => [ qw(Arial Helvetica sans) ], 'font-size' => 10, 'fill' => 'red', }, transform => 'rotate(-45)' ); 以下のfilter要素が現在サポートされています: =over 4 =item * feBlend =item * feColorMatrix =item * feComponentTransfer =item * feComposite =item * feConvolveMatrix =item * feDiffuseLighting =item * feDisplacementMap =item * feDistantLight =item * feFlood =item * feFuncA =item * feFuncB =item * feFuncG =item * feFuncR =item * feGaussianBlur =item * feImage =item * feMerge =item * feMergeNode =item * feMorphology =item * feOffset =item * fePointLight =item * feSpecularLighting =item * feSpotLight =item * feTile =item * feTurbulence =back SEE ALSO: L<"filter">. =head2 pattern $tag = $svg->pattern(%attributes) urlによって後で参照されるパターンを定義します。 B my $pattern = $svg->pattern( id => "Argyle_1", width => "50", height => "50", patternUnits => "userSpaceOnUse", patternContentUnits => "userSpaceOnUse" ); =head2 set $tag = $svg->set(%attributes) 必要にあわせて他のセクションでも参照できるよう、1つのセクションでの SVGオブジェクトのための定義を設定します。 B my $set = $svg->set( id => "Argyle_1", width => "50", height => "50", patternUnits => "userSpaceOnUse", patternContentUnits => "userSpaceOnUse" ); =head2 stop $tag = $svg->stop(%attributes) L<"gradient">のためのストップ・バウンダリを定義します。 B my $pattern = $svg->stop( id => "Argyle_1", width => "50", height => "50", patternUnits => "userSpaceOnUse", patternContentUnits => "userSpaceOnUse" ); =head2 gradient $tag = $svg->gradient(%attributes) 色の傾斜(=gradient)を定義します。B あるいは Bのタイプにすることができます。 B my $gradient = $svg->gradient( -type => "linear", id => "gradient_1" ); =head1 GENERIC ELEMENT METHODS 以下の要素がSVGによって汎用的にサポートされます: =over 4 =item * altGlyph =item * altGlyphDef =item * altGlyphItem =item * clipPath =item * color-profile =item * cursor =item * definition-src =item * font-face-format =item * font-face-name =item * font-face-src =item * font-face-url =item * foreignObject =item * glyph =item * glyphRef =item * hkern =item * marker =item * mask =item * metadata =item * missing-glyph =item * mpath =item * switch =item * symbol =item * tref =item * view =item * vkern =back これらのメソッドの使い方の例についてはL<"pattern">をご覧ください。 =head1 METHODS IMPORTED BY SVG::DOM 以下のL要素がSVGを通してアクセスすることが出来ます: =over 4 =item * getChildren =item * getFirstChild =item * getLastChild =item * getParent =item * getSiblings =item * getElementByID =item * getElementID =item * getElements =item * getElementName =item * getParentElement =item * getType =item * getAttributes =item * getAttribute =item * flowText (SVG 1.1) =back =head1 SEE ALSO perl(1),L,L,L,L,L, L http://www.roasp.com/ http://www.perlsvg.com/ http://www.roitsystems.com/ http://www.w3c.org/Graphics/SVG/