付録 F: 実装の要件



F.1 概要

この章では SVG 言語の種々の特能に対応する実装に課される要件について述べる。 The following are notes about implementation requirements corresponding to various features in the SVG language.

F.2 エラー処理

SVG 文書片が形式上( technically ) エラー状態 となる,種々の状況がある: There are various scenarios where an SVG document fragment is technically in error:

文書は時経過に伴い,エラー状態になったり, その状態から抜け出すことがあり得る。 例えば,文書は SVG DOMアニメーション により変化してエラー状態になり,更に変化して正常な状態に戻ることがある。 A document can go in and out of error over time. For example, document changes from the SVG DOM or from animation can cause a document to become in error and a further change can cause the document to become correct again.

文書がエラー状態になったときは、次のエラー処理が行われるものとする: The following error processing shall occur when a document is in error:

スクリプトによる一連の変更により, SVG 文書片がエラー状態にされたり, それが解除される状況があり得るので、エラー処理は文書表示(例えばディスプレイ装置への描画)が更新される時点においてのみ,行われるものとする。 特に、 DOM 呼び出し suspendRedraw により再描画が中断されたときは,エラー処理も行わないものとする。 Because of situations where a block of scripting changes might cause a given SVG document fragment to go into and out of error, error processing shall occur only at times when document presentation (e.g., rendering to the display device) is updated. In particular, error processing shall be disabled whenever redraw has been suspended via DOM calls to suspendRedraw.

F.3 バージョン制御

SVG-UA は、文書(または文書片)に指定されている SVG 言語のバージョンを自身がサポートしているかどうかを判断するために, <!DOCTYPE> 文の PUBLIC 識別子の参照先と svg 要素の xmlns 属性の名前空間参照を確認しなければならない。 バージョン情報が無い, あるいはバージョン情報に指示されている SVG 言語のバージョンをサポートしていない場合、 SVG-UA は文書片を描画しなくともよい。 特に、 SVG-UA には,将来版の SVG 言語の描画を試みることは要求されていない。 利用者環境が許すなら、 UA は警告を出すか, あるいは利用者にそのファイルのバージョンがサポートされていないことを通知し、代替処理のオプションがあれば,それを促すべきである(例えば UA の新しいバージョンのインストールなど)。 The SVG user agent must verify the reference to the PUBLIC identifier in the <!DOCTYPE> statement or the namespace reference in the ‘xmlns’ attribute on the ‘svg’ element to ensure that the given document (or document fragment) identifies a version of the SVG language which the SVG user agent supports. If the version information is missing or the version information indicates a version of the SVG language which the SVG user agent does not support, then the SVG user agent is not required to render that document or fragment. In particular, it is not required that an SVG user agent attempt to render future versions of the SVG language. If the user environment provides such an option, the user agent should alert or otherwise notify the user that the version of the file is not supported and suggest an alternate processing option (e.g., installing an updated version of the user agent) if such an option exists.

SVG 勧告をサポートする SVG-UA は、 SVG 文書(または文書片)の <!DOCTYPE> 文, または 対応する xmlns 属性が SVG 仕様の草案版( working draft )を指している場合、利用者に警告または通知すべきである。 この仕様の草案に基づく内容すべては SVG 勧告に更新されるべきである。 An SVG user agent which supports the SVG Recommendation should alert or otherwise notify the user whenever it encounters an SVG document (or document fragment) whose <!DOCTYPE> statement or corresponding ‘xmlns’ attribute corresponds to a working draft version of the SVG specification. All content based on working drafts of this specification should be updated to the SVG Recommendation.

F.4 特定の範囲への値の切り詰め

色成分値など,一部の数値属性の値とプロパティの値は範囲が限定されている。 範囲外の値が与えられた場合、処理の中間段階における値は範囲外であっても,最終結果の値は範囲に収まることがあるので、 UA は結果を表示する時点までエラーチェックを遅延するものとする。 Some numeric attribute and property values have restricted ranges, such as color component values. When out-of-range values are provided, the user agent shall defer any error checking until after presentation time, as composited actions might produce intermediate values which are out-of-range but final values which are within range.

色値は、表示時点における最終結果が範囲外であっても,エラー状態とされない。 UA は範囲外の色値をシステムが処理可能な,最も近い色値に収めることを(単純な値の切り上げ/下げによることもあろう)可能な限り遅延させることが推奨される(例えば表示時点まで)。 もっとも、 UA が構文解析時などの早期に色値を切り詰めることも許容されている。 したがって,範囲外の色値が利用される状況では、実装依存性により,システム間でふるまいが一貫しないことがあり得る。 Color values are not in error if they are out-of-range, even if final computations produce an out-of-range color value at presentation time. It is recommended that user agents clamp color values to the nearest color value (possibly determined by simple clipping) which the system can process as late as possible (e.g., presentation time), although it is acceptable for user agents to clamp color values as early as parse time. Thus, implementation dependencies might preclude consistent behavior across different systems when out-of-range color values are used.

範囲外の不透明度値はエラー状態にはならず,その値による処理が必要になった時点で(例えば表示時点やフィルタ効果における中間処理で必要になった時点で)、 0 から 1 までの範囲内に切り詰められるべきである。 Opacity values out-of-range are not in error and should be clamped to the range 0 to 1 at the time which opacity values have to be processed (e.g., at presentation time or when it is necessary to perform intermediate filter effect calculations).

F.5 path 要素の実装における注意

適合 SVG-UA はパス描画を次のように実装しなければならない: A conforming SVG user agent must implement path rendering as follows:

F.6 楕円弧の実装における注意

F.6.1 端点パラメタ化

楕円弧は独特なパス命令である。 それ自体は次のパラメタで順に記述される: An elliptical arc is a particular path command. As such, it is described by the following parameters in order:

(x1y1) はパス上の現在の点の絶対座標であり,前のパス命令の最後の2つのパラメタから得られる。 (x1, y1) are the absolute coordinates of the current point on the path, obtained from the last two parameters of the previous path command.

rx, ry は楕円の半径(いわゆる長径と短径 【順不同】)。 rx and ry are the radii of the ellipse (also known as its semi-major and semi-minor axes).

φ は現在の座標系の X 軸から楕円の X 径への角度。 φ is the angle from the x-axis of the current coordinate system to the x-axis of the ellipse.

fA は large arc フラグ。 180 度 以下の弧が選ばれるときは 0 であり, 180 度より大きい弧が選ばれるときは 1 である。 fA is the large arc flag, and is 0 if an arc spanning less than or equal to 180 degrees is chosen, or 1 if an arc spanning greater than 180 degrees is chosen.

fS は sweep フラグ。 弧の進行方向が中心からの角度において減少するときは 0, 増大するときは 1 である。 fS is the sweep flag, and is 0 if the line joining center to arc sweeps through decreasing angles, or 1 if it sweeps through increasing angles.

(x2y2) は弧の終止点の絶対座標。 (x2, y2) are the absolute coordinates of the final point of the arc.

この楕円弧のパラメタ化は端点パラメタ化( endpoint parameterization )と呼ばれる。 端点パラメタ化の利点の一つは、すべてのパス命令が新たな「現在の点」の座標で終わるという点でパス構文が一貫することである。 以下では、実装者が端点パラメタ化を扱うにあたり,参考になる規則と定式化を与える。 This parameterization of elliptical arcs will be referred to as endpoint parameterization. One of the advantages of endpoint parameterization is that it permits a consistent path syntax in which all path commands end in the coordinates of the new "current point". The following notes give rules and formulas to help implementers deal with endpoint parameterization.

F.6.2 範囲外のパラメタ

楕円弧のすべてのパラメタには任意の数値が許されるが,これらの値が無効あるいは範囲外のものである場合、実装は次の様に解釈しなければならない: Arbitrary numerical values are permitted for all elliptical arc parameters, but where these values are invalid or out-of-range, an implementation must make sense of them as follows:

端点 (x1y1) と (x2y2) が同じ場合、楕円弧区分全体を無かったものとする。 If the endpoints (x1, y1) and (x2, y2) are identical, then this is equivalent to omitting the elliptical arc segment entirely.

rx = 0 または ry = 0 の場合、この弧は端点を結ぶ直線区分("lineto")とする。 If rx = 0 or ry = 0 then this arc is treated as a straight line segment (a "lineto") joining the endpoints.

負の rx または ry に対しては、負符号を外して絶対値を利用する。 If rx or ry have negative signs, these are dropped; the absolute value is used instead.

条件を満たす解 rx, ry, φ が存在しない場合(楕円の大きさが (x1y1) から (x2y2)) まで結ぶには足りない)楕円は唯一の解を持つまで(楕円が丁度の大きさになるまで)一様に拡大される。 If rx, ry and φ are such that there is no solution (basically, the ellipse is not big enough to reach from (x1, y1) to (x2, y2)) then the ellipse is scaled up uniformly until there is exactly one solution (until the ellipse is just big enough).

φ は 360 度を法とする。 φ is taken mod 360 degrees.

フラグ fAfS に対する非ゼロ値は 1 とみなされる。 Any nonzero value for either of the flags fA or fS is taken to mean the value 1.

この、寛容でありつつ, 一貫した範囲外の値の扱いにより: This forgiving yet consistent treatment of out-of-range values ensures that:

F.6.3 中心パラメタ化

楕円弧上の任意の点 (xy) は、次の2次行列の等式として記述できる。 An arbitrary point (x, y) on the elliptical arc can be described by the 2-dimensional matrix equation

equation F.6.3.1 (F.6.3.1)

(cxcy) は楕円の中心座標。 (cx, cy) are the coordinates of the center of the ellipse.

rx, ry は楕円の2つの半径(いわゆる長径と短径)。 rx and ry are the radii of the ellipse (also known as its semi-major and semi-minor axes).

φ は現在の座標の X 軸から楕円の X 径までの角度。 θ is the angle from the x-axis of the current coordinate system to the x-axis of the ellipse.

θ の範囲を次の二つの角度で表す: θ ranges from:

楕円を真円を引き延ばして回転させたものと考えれば、 θ1, θ2, Δθ は,それぞれ,引き延ばしと回転演算の前における,弧の開始角度, 終止角度, 弧のなす角度になる。 これらから、 中心パラメタ化( center parameterization )と呼ばれる,グラフィックス API で一般的に利用される別のパラメタ化を導き出すことができる。 次の2節に 中心パラメタ化から端点パラメタ化, あるいはその逆変換を行う公式を示す。 If one thinks of an ellipse as a circle that has been stretched and then rotated, then θ1, θ2 and Δθ are the start angle, end angle and sweep angle, respectively of the arc prior to the stretch and rotate operations. This leads to an alternate parameterization which is common among graphics APIs, which will be referred to as center parameterization. In the next sections, formulas are given for mapping in both directions between center parameterization and endpoint parameterization.

F.6.4 中心パラメタ化から端点パラメタ化への変換

与えられた次の変数: Given the following variables:

cx cy rx ry φ θ1 Δθ

に対し、求めるものは: the task is to find:

x1 y1 x2 y2 fA fS

これは次の公式から得られる: This can be achieved using the following formulas:

Equation F.6.4.1 (F.6.4.1)
Equation F.6.4.2 (F.6.4.2)
Equation F.6.4.3 (F.6.4.3)
Equation F.6.4.4 (F.6.4.4)

F.6.5 端点パラメタ化から中心パラメタ化への変換

与えられた次の変数: Given the following variables:

x1 y1 x2 y2 fA fS rx ry φ

に対し、求めるものは: the task is to find:

cx cy θ1 Δθ

公式では、原点を (x1y1) から (x2y2) を結ぶ線分の中点に移動させる並進と, 座標軸を楕円の軸に揃える回転を施すことにより,単純化を行う。 変換後のすべての座標はプライムを付けて表記され,目的の中心パラメタ化の変数を求める過程における途中の値を表す。 この手続きは次の段階を経る: The equations simplify after a translation which places the origin at the midpoint of the line joining (x1, y1) to (x2, y2), followed by a rotation to line up the coordinate axes with the axes of the ellipse. All transformed coordinates will be written with primes. They are computed as intermediate values on the way toward finding the required center parameterization variables. This procedure consists of the following steps:

F.6.6 範囲外の径の修正

この節では F.6.2 における範囲外の rx, ry に対する調整を定式化する。 アルゴリズムとしては,これらの調整は次の段階を経る: This section formalizes the adjustments to out-of-range rx and ry mentioned in F.6.2. Algorithmically these adjustments consist of the following steps:

F.7 テキスト選択の実装における注意

テキスト選択 処理の間にどの文字が選択されるかを決めるためのアルゴリズムを以下に述べる。 The following implementation notes describe the algorithm for deciding which characters are selected during a text selection operation.

テキスト選択処理の過程で(例えば利用者によるマウスのクリックとドラッグ操作で選択部分を特定する間)、 UA は選択開始位置選択終止位置を決定する。 それぞれ、テキスト文字列内の(文字の隙間の)位置を表現する。 選択開始位置と選択終止位置の決定後、 UA は適切な文字を選択する。 結果における選択部分は次のいずれかになる: As the text selection operation occurs (e.g., while the user clicks and drags the mouse to identify the selection), the user agent determines a start selection position and an end selection position, each of which represents a position in the text string between two characters. After determining start selection position and end selection position, the user agent selects the appropriate characters, where the resulting text selection consists of either:

ポインタ装置を有するシステムの下での選択開始位置の決定においては、 SVG-UA は、選択処理を誘発するイベント(例えばマウスボタン押下イベント)が生じた時点で,現在のポインタの位置に基づき,描画されたどのグリフに対応する文字の隙間が 最良の対象(例えば、最も近いもの)になるかを決定する。 UA は、選択処理の完了(例えばマウスのドラッグに続くボタンの解放)まで追跡する。 選択処理終了時には、 UA は,どの文字の隙間が選択終止位置として最良の対象(例えば、最も近いもの)になるかを決定する。 On systems with pointer devices, to determine the start selection position, the SVG user agent determines which boundary between characters corresponding to rendered glyphs is the best target (e.g., closest) based on the current pointer location at the time of the event that initiates the selection operation (e.g., the mouse down event). The user agent then tracks the completion of the selection operation (e.g., the mouse drag, followed ultimately by the mouse up). At the end of the selection operation, the user agent determines which boundary between characters is the best target (e.g., closest) for the end selection position.

双方向性 による文字の再配列が生じていない場合、選択開始位置選択終止位置の間のすべての文字が選択部分になる。 例えば, text 要素が文字列 "abcdef" を含んでいて,選択開始位置が 0, 選択終止位置が 3 ならば("a" の左側の位置を 0 とみなす)、選択部分は "abc" である。 If no character reordering has occurred due to bidirectionality, then the selection consists of all characters between the start selection position and end selection position. For example, if a ‘text’ element contains the string "abcdef" and the start selection position and end selection positions are 0 and 3 respectively (assuming the left side of the "a" is position zero), then the selection will consist of "abc".

UA が双方向テキストの選択を実装している場合、選択開始(または終止)位置が論理順序において不連続な文字の隙間であるとき,複数組の文字組が選択部分の候補となり得る。 選択部分の複数の候補から選び出すアルゴリズムでは、テキスト文字列の視覚的描画順序に最も近く一致するものを選ぶものとする。 When the user agent is implementing selection of bidirectional text, and when the selection starts (or ends) between characters which are not contiguous in logical order, then there might be multiple potential combinations of characters that can be considered part of the selection. The algorithms to choose among the combinations of potential selection options shall choose the selection option which most closely matches the text string's visual rendering order.

複数個の文字が一つ以上のグリフからなる集合に不可分に対応している場合、 UA はグリフ集合の中途からの選択は開始させないか, あるいは グリフ集合に対応する文字をまとめて選択するか のいずれを選んでもよい。 When multiple characters map inseparably to a given set of one or more glyphs, the user agent can either disallow the selection to start in the middle of the glyph set or can attempt to allocate portions of the area taken up by the glyph set to the characters that correspond to the glyph.

マウスなどのポインタ装置をサポートするシステムの下では、イベントハンドラやリンクがテキストに結び付けられている場合、イベント処理優先順位規則( ポインタイベント を見よ)から,テキスト選択が妨げられ得る。 しかしながら、そのような状況においても,テキストの選択の仕組みを提供することが UA に要求される。 実装の一例として、文字セルの周囲に小さな追加領域を与え,そこではテキスト選択処理は誘発されるがイベントハンドラやリンクは誘発されないようにする,などが考えられる。 For systems which support pointer devices such as a mouse, the user agent is required to provide a mechanism for selecting text even when the given text has associated event handlers or links, which might block text selection due to event processing precedence rules (see Pointer events). One implementation option: For platforms which support a pointer device such as a mouse, the user agent may provide for a small additional region around character cells which initiates text selection operations but does not initiate event handlers or links.

F.8 印刷の実装における注意

ディスプレイ装置におけるズームおよび印刷の両方をサポートする UA においては、印刷時の既定の動作としては,ディスプレイ装置における現在の SVG 文書片の現在の表示(但しメディア固有のスタイル付けは施されていないとする)を反映する出力の生成が推奨される。 すなわち、利用者によるズームとパン, アニメーションの状態, DOM とスクリプトによる文書への変更を考慮に入れる。 利用者が図面の特定の領域をディスプレイ装置に拡大表示させて印刷したときの印刷出力は、ディスプレイ装置に現れている図面の表示そのままになるべきである。 利用者がアニメーションを休止させて印刷したときの印刷出力は、ディスプレイ装置で休止状態にされた画像と同じグラフィックになるべきである。 スクリプトにより要素が文書に追加されたり, 文書から削除された場合、印刷出力はディスプレイに現れるものと同じ変化を反映すべきである。 For user agents which support both zooming on display devices and printing, it is recommended that the default printing option produce printed output that reflects the display device's current view of the current SVG document fragment (assuming there is no media-specific styling), taking into account any zooming and panning done by the user, the current state of animation, and any document changes due to DOM and scripting. Thus, if the user zooms into a particular area of a map on the display device and then requests a hardcopy, the hardcopy should show the same view of the map as appears on the display device. If a user pauses an animation and prints, the hardcopy should show the same graphics as the currently paused picture on the display device. If scripting has added or removed elements from the document, then the hardcopy should reflect the same changes that would be reflected on the display.

SVG 文書が SVG のアニメーションやスクリプトの仕組みをサポートしないプリンタなどの静的装置に描画される際には、 UA は文書のすべてのアニメーションとスクリプト要素を無視し,この仕様の規則に従って残りのグラフィックス要素を描画するものとする。 When an SVG document is rendered on a static-only device such as a printer which does not support SVG's animation and scripting and facilities, then the user agent shall ignore any animation and scripting elements in the document and render the remaining graphics elements according to the rules in this specification.