前へ |
目次 |
ボトムへ |
次へ |
XSLでは,フォーマッタへの入力又は指定として動作するフォーマット化オブジェクトの木を生成する。フォーマッタは, フォーマット済み結果を構成する領域の階層的な配列を生成する。ここでは,領域の一般モデルを定義し, どのようにそれらが相互作用するかを定義する。その目的は,フォーマット化オブジェクトのセマンティクスを記述するのに使用される抽象フレームワークを表示することとする。それは, 特定のアルゴリズムを規定することとしてではなく,適合する実装のための一連の制約を記述することとしてみられるのが望ましい。
フォーマッタは, 順序付けされた木,即ち領域木を生成する。この領域木は, 出力メディアの幾何構造を記述する。子, 兄弟, 親, 子孫及び先祖という用語は, この木構造を表す。木には根ノードが存在する。
根以外の各領域木ノードは, 領域と呼ばれ,出力メディアの長方形部分に関連付けされる。領域は, フォーマット化オブジェクトではなく, フォーマット化オブジェクトが,0個以上の長方形領域を生成する。通常,各領域は,フォーマット化オブジェクト木の一意オブジェクトによって生成される。
備考 フォーマット化オブジェクト木の複数の葉ノードが組み合わされて,単一の領域を生成する場合が,唯一の例外とする。例えば,一連の複数の文字が単一のリガチャグリフを生成する場合である。これらのいずれの場合にも,font-family, font-sizeなどの関連特性は,すべての生成フォーマット化オブジェクトついて同一とする([4.7.2 行構築]を参照)。
領域は, その部分にその子領域が割り当てられる内容長方形をもち, オプションのパディング及び境界をもつ。図4.1は,これらの部分が互いにどのように関連するかを示す。境界の外部境界を境界長方形と呼び,パディングの外部境界をパディング長方形と呼ぶ。
図4.1 領域の要素
要素が属性をもち,フォーマット化オブジェクトが特性をもつ方法で,各領域は, 特色の集合, 名前の値への対応付けをもつ。個々の特色は,領域のレンダリング又はフォーマット化の結果に対する制約の定義のどちらか,又はその両方のために使用される。フォーマット化の目的のため又は制約の定義のために厳密に使用される特色を,フォーマット化特色と呼んでよく, レンダリングのために使用される特色をレンダリング特色と呼んでよい。その値がコピーされる特色, 又は同一若しくは対応する名前の特性から派生される特色は,[C 特性の要約]及び[5 特性の洗練及び解決]に列挙される。その他の特性を, 後に示す。
備考 特色は,洗練の処理中,フォーマット化オブジェクトとも関連付けされる。フォーマット化中に割り当てられる特色もあり,洗練後にすでに存在する特色もある。
領域を生成するフォーマット化オブジェクトの各種別のセマンティクスは,それが生成する領域及び領域木階層内のその位置によって与えられる。さまざまな種別のフォーマット化オブジェクト間の対話によって,これがさらに変えられてもよい。フォーマット化オブジェクトの特性は,どんな領域が生成されるかを決定し, フォーマット化オブジェクト内容がそれらの中にどのように配布されるかを決定する。例えば,ハイフン付けされないことばは,二つの別の行領域上の領域に配布されるグリフをもたなくてよい。
領域の特色は, 次のいずれかとする。
a) 直接派生 直接派生特色の値は,生成するフォーマット化オブジェクトに関する同一又は対応する名前の特性の計算値とする。
b) 間接派生 間接派生特色の値は,次の計算の結果とする。この計算は,フォーマット化オブジェクトを生成する一つ以上の特性の計算値,この領域又は他の対話領域に関する他の特色(先祖,親,兄弟及び/又は子),及び/又はフォーマッタが構築する一つ以上の値を含む。計算式は, フォーマット化オブジェクトの種別に依存してよい。
この記述は,結果木のフォーマット化オブジェクトのすべての特性に関して,洗練化された値が計算されたことを前提とする。即ち,[5 特性の洗練及び 解決]で記述するとおり,すべての相対値及び対応値が計算され,継承可能な値が伝播されたことを前提とする。これによって,継承の処理は,1度記述されれば,この記述の計算値に関する情報を繰り返す必要がなくなる。
間接派生特色は,次のとおりとする。block-progression-direction, inline-progression-direction, shift-direction, glyph-orientation, is-reference-area, is-viewport-area, left-position, right-position, top-position, bottom-position, left-offset, top-offset, is-first, is-last, alignment-point, area-class, start-intrusion-adjustment, end-intrusion-adjustment, generated-by, returned-by, page-number, blink, underline-score, overline-score, through-score, underline-score-color, overline-score-color, through-score-color, alignment-baseline, baseline-shift, nominal-font, dominant-baseline-identifier, actual-baseline-table, script。
領域には,ブロック領域及び行内領域という二つの種別がある。これらは,フォーマッタが通常それらをどのようにスタックするかによって異なる。領域は,生成フォーマット化オブジェクトが決定するとおり,ブロック領域の子又は行内領域の子をもつことができる。しかし,与えられる領域の子はすべて, 一つの種別でなければならない。ブロック領域及び行内領域は,通常,スタックされるが,明示的に位置決めすることが可能な領域もある。
行領域は, 特別な種類のブロック領域であり,その子はすべて行内領域とする。グリフ領域は, 特別な種類の行内領域であり,子領域をもたず,その内容としてグリフ像を一つだけもつ。
典型的な領域の例を示す。fo:blockフォーマット化オブジェクトを用いてレンダリングされる段落。これは, ブロック領域を生成する。fo:characterフォーマット化オブジェクトを用いてレンダリングされる文字。これは, 行内領域(実際にはグリフ領域)を生成する。
どの領域にも関連付けられる方向が二つ存在する。これらの方向は,生成フォーマット化オブジェクトのwriting−mode特性及びreference-orientation特性から派生する。ブロック進行方向は,領域のブロック領域子孫をスタックするための方向とする。行内進行方向は,領域の行内領域子孫をスタックするための方向とする。別の特色であるshift-directionは, 行内領域に存在し,ベースライン移動が適用される方向を表す。glyph-orientationも, レンダリング結果のグリフ像の方向を定義する。
領域に関する参照方向が0である場合, 内容の上辺,下辺,左辺及び右辺は,領域の親のそれらに並行であり,それらと一貫性をもつ。それ以外の場合,辺は[7.19.3 "reference-orientation"]で記述されるとおり,領域の親のそれらから循環する。行内進行方向及びブロック進行方向は,[7.26.7"writing-mode"]で記述されるとおり,これらの辺の位置によって決定される。
論理特色であるis-reference-areaは,領域が字下げを指定するための座標系をもつかどうかを決定する。この特色がtrue
である領域を, 参照領域と呼ぶ。参照領域だけが, 親とは異なるブロック進行方向をもってよい。参照領域は,ブロック領域又は行内領域のどちらかであってよい。
論理特色であるis-viewport-areaは,領域が, その子孫領域を見ることができ, 例えば, 裁断し切り取る必要のある印刷アプリケーションにおいて, クリップされたりスクロールされたものを表示するのに使用できるオープンを確立するかどうかを決定する。この特色がtrue
である領域を, 表示領域と呼ぶ。
共通の構造は, 表示域/参照対とする。これは, 表示領域V及びブロック領域参照領域Rとする。ここで, RはVの唯一の子であり,Rの内容長方形の開始辺及び終了辺は,Vの内容長方形の開始辺及び終了辺に並行になる。
各領域は,特色top-position, bottom-position, left-position及びright-positionをもち,これらは,内容長方形の辺から,最も近い先祖の参照領域(又は, 絶対位置がfixed
であるフォーマット化オブジェクトの子孫が生成する領域の場合は, ページ表示領域)の類似した名前をもつ辺までの距離を表示する。left-offset及びtop-offsetは,相対配置付けした領域がレンダリングのために移動される量を決定する。これらの特色は,フォーマット化の処理中にはその値を受け取り,絶対配置付けした領域の場合には,洗練中にその値を受け取る。
領域のブロック進行寸法及び行内進行寸法は,二つの相対寸法のそれぞれので,その領域の内容長方形の範囲を表示する。
他の特色を次に示す。
is-first特色及びis-last特色。これらは論理特色であって,与えられるフォーマット化オブジェクトによって生成さ返却される領域の順序を示す。(6.1.1を参照。)
is-firstは,フォーマット化オブジェクトによって生成され返却される最初の領域について(又は領域だけで)true
であり,is-lastは,最後の領域について(又は領域だけで)true
とする。
境界長方形の外側のスペースの量。つまり, space-before, space-after, space-start及びspace-end。(ただし,これらには,領域のあるクラスにおいてゼロであることが必須となるものもある。)
備考 "前", "後", "開始"及び"終了"は,相対方向を表し,後で定義される。
パディングの4辺それぞれの厚さ。つまり, padding-before, padding-after, padding-start 及びpadding-end。
境界の4辺それぞれのスタイル,厚さ及び色。つまり, border-beforeなど。
領域の背景レンダリング。つまり, background-color, background-image及びその他の背景特色。
領域の生成フォーマットオブジェクトのフォント特性及び文字子孫によって決定される, 領域のnominal-font。([5.5.7 フォント特性]を参照。)
特に指定がない場合は, フォーマット化オブジェクトの特色は,その生成される領域の各々に存在し,同一の値をもつ。(しかし, [4.7.2 行構築] 及び [4.9.4 境界, パディング及び背景]を参照。)
上述のとおり, 内容長方形とは,境界がパディングの内部にある長方形であり,子孫領域の位置に関する制約の記述に使用される。子孫グリフ又は他の領域からのマークは,内容長方形の外側に現れることもある。
領域の割付け長方形はこれに関連している。この長方形は,親領域内にある領域の位置に関する制約の記述に使用される。行内領域の場合,これは正規割付け長方形又は大割付け長方形のいずれかとなる。正規割付け長方形は,ブロック進行方向では内容長方形に拡張し,行内進行方向では境界長方形に拡張する。大割付け長方形は境界長方形である。特に指定がない場合は,領域の割付け長方形は正規割付け長方形である。
図4.2 行内領域の正規割付け長方形
図4.3 行内領域の大割付け長方形
ブロック領域では, 割付け長方形は,ブロック進行方向では境界長方形に拡張し,行内進行方向では,終了字下げと同じだけ,反対方向では開始字下げと同じだけ,内容長方形の外側に拡張する。
備考 行内進行方向では,ブロック領域の境界長方形の外側にスペースがあっても配置制約に影響することはない。これは,CSSボックスモデルとの互換性の促進を意図したものである。
図4.4 ブロック領域の割付け長方形及び内容長方形
長方形の各辺の指定を次に示す。
前辺は,ブロック進行方向で最初に現れる辺であり,進行方向に対して垂直である。
後辺は前辺の反対の辺である。
開始辺は行内進行方向で最初に現れる辺であり,進行方向に対して垂直である。
終了辺は開始辺の反対の辺である。
この定義により,領域の内容長方形は,その領域の行内進行方向及びブロック進行方向を使用する。しかし,境界長方形,パディング長方形,割付け長方形は,親領域の方向を使用する。従って,内容長方形に指定された各辺が,パディング長方形,境界長方形及び割付け長方形上の同一の名前の各辺に対応しないこともある。異なる表記方向で組み込まれたブロック領域の場合,これは重要である。
図4.5は,表記方向が混在している場合の様々な辺名間の対応を示している。
図4.5 さまざまな表記方向をもつ組込み領域
各行内領域には,割付け長方形の開始辺上に,フォーマッタが決定した配置点が存在する。グリフ領域では,この点は配置ベースライン上のグリフの開始辺に存在する(下を参照)。これはスクリプト依存であり,グリフの形状を記述するデータに使用する座標点(0,0)に必ずしも一致しない。
領域木では, 与えられる親をもつ領域の集合は順序付けされる。 最初の, 最後の, 先行する, 及び後続するといった用語はこの順序付けを表す。
順序付けされた木はどれでも, この兄弟関係の順序付けが木全体の順序付けに拡張するが,その方法は,少なくとも二つ存在する。
木の昇順たどりを実行した場合,各ノードの子はそのノードに後続するが,ノード又はその先祖の後続する兄弟のいずれにも優先する。この場合,各ノードの子の順序が互いに関連して変更されることはない。
木の降順たどりを実行した場合, 各ノードの子はそのノードに優先するが,そのノード又は先祖の先行する兄弟のいずれにも後続する。
"先行する"及び"後続する"は, 兄弟以外に適用される場合は,使用される拡張順序に依存することになり,それを指定しなければならない。しかし, これら与えられる順序のうち,いずれかでは,木の葉(子のないノード)は明確に順序付けされる。
ここでは,領域を含むブロックスタック制約及び行内スタック制約の概念を定義する。これらは,順序付けされる関係として定義される。即ち,A及びBがスタック制約をもつ場合,必ずしも,B及びAがスタック制約をもつという意味ではない。これらの定義は本来再帰的であり,同一の定義のうち,より単純なケースに依存することもある。これは循環ではなく,むしろ再帰の結果である。定義は,領域間にスペースしかない木のレベルを問わず,領域を識別することを意図している。
area-class特色は列挙値であり,他の領域とともに連続してスタックされた領域には,xsl-normal
が指定される。この特色の指定がxsl-normal
である領域を正規領域という。行外ページレベル領域の領域クラスは
xsl-footnote
, xsl-before-float
,又はxsl-fixed
である。即ち,これらの領域の配置は,その生成フォーマット化オブジェクトのfo:page-sequenceの先祖によって制御される。
行外参照レベル領域の領域クラスは,xsl-side-float
又はxsl-absolute
である。これらの領域の配置は,関連する参照領域を生成するフォーマット化オブジェクトによって制御される。アンカ領域の領域クラスは,xsl-anchor
である。これらの領域の配置は任意であり,スタックに影響しない。
領域クラスがxsl-normal
, xsl-footnote
, 又はxsl-before-float
のいずれかと同じであれば,その領域はスタック可能であると定義され,領域が適正にスタックされることを示している。
ブロックスタック制約
Pがブロック領域である場合に,Pが参照領域であるか,又はPのborder-before-width又はpadding-before-widthがゼロ以外であれば,先行境界域Pが存在する。同様に,Pが参照領域であるか,又はPのborder-after-width又はpadding-after-widthがゼロ以外であれば,後続境界域Pが存在する。
A及びBがスタック可能な領域であり,Sがスペース指定子のシーケンスである場合([4.3 スペース及び条件つけ]を参照), 次の条件のすべてが適用されるのであれば,A及びBにはブロックスタック制約Sが存在するものと定義される。
Bがブロック領域であり,Aの最初の正規の子であり,かつSがBのspace-beforeから構成されるシーケンスであること。
Aがブロック領域であり,Bの最後の正規の子であり,かつSがAのspace-afterから構成されるシーケンスであること。
AもBもブロック領域であり,かつ次のいずれかであること。
a. BがAの次にくるスタック可能な兄弟領域であり,かつSがAのspace-after及びBのspace-beforeから構成されるシーケンスであること。
b. Bはブロック領域の最初の正規の子であるが,Bは行領域Pではなく, 先行境界域Pが存在せず, A及びPにブロックスタック制約S'が存在し, かつ SはBのspace-beforeが後続するS'から構成される。
c. Aはブロック領域Pの最後の正規の子であり, Aは行領域ではなく,後続境界域Pが存在せず, P及びBにはブロックスタック制約S''が存在し, かつSがS''が後続するAのspace-afterから構成される。
d. Aは, ブロック領域Eのあるブロックスタック制約S'をもち, Eは, Bのあるブロックスタック制約S''をもつ。Eは, 空であり(つまり, それは, ゼロの境界, パディング及びブロック進行寸法をもち, 通常の子どもをもたない。), Sは, S''を後に従えたS'から成る。
備考 上の定義の二つの位置に"スタック可能"という語を使用することにより,ブロックスタック制約は,領域クラスxsl-before-float
又はxsl-footnote
の領域間に適用できる。
図4.6 ブロックスタックのある隣接辺
A及びBにブロックスタック制約が存在する場合,A及びBの隣接辺は順序付けされた対であり,再帰的に次として定義される。
ケース1では, Aの内容長方形の前辺, 及びBの割付け長方形の前辺。
ケース2では, Aの内容長方形の後辺, 及びBの割付け長方形の後辺。
ケース3aでは, Aの割付け長方形の後辺, 及びBの割付け長方形の前辺。
ケース3bでは, A及びPの隣接辺の最初, 並びにBの割付け長方形の前辺。
ケース3cでは, Aの割付け長方形の後辺,並びにP及びBの隣接辺の2番目。
ケース3dでは, A及びEの隣接辺の最初, 並びにE及びBの隣接辺の2番目。
例。図4.7では,各ノードはブロック領域を表す。パディング幅及び境界幅はすべてゼロであり,領域はいずれも参照領域ではないと仮定する。この場合,P及びAにはブロックスタック制約が存在し,A及びB, A及びC, B及びC, C及びD, D及びB, B及びE, D及びE, E及びPにもブロックスタック制約が存在する。これらは,ブロックスタック制約が存在する図で考えられるすべての対である。 Bのpadding-afterがゼロ以外であれば, D及びEにはブロックスタック制約が存在しないことになる。ただし,B及びEのブロックスタック制約は継続する。
図4.7 ブロックスタック制約の例
行内スタック制約
ここでは,先行境界域及び後続境界域の概念とともに,二領域間の行内スタック制約を再帰的に定義する。ここでいう二領域とは,二つの行内領域か,又は一つの行内領域と一つの行領域のいずれかを指す。これらの定義は,互いに絡みあっている。 これはブロックスタック制約の定義に一致しているが,さらに複雑なのは,行内領域間のスタック制約でも,行内進行方向の反対方向へのスタックが可能となる点である。参照領域ではないブロック領域が親とは異なるブロック進行方向をもたないこともあるため,これはブロックスタック制約の問題ではない。
P及びQに行内スタック制約が存在する場合に,Pが参照領域であるか,又はP及びQの最初の隣接辺の境界幅又はパディング幅がゼロ以外であれば,Pには先行境界域Qが存在する。同様に, Qが参照領域であるか,又はP及びQの二番目の隣接辺の境界幅又はパディング幅がゼロ以外であれば,Qには 後続境界域Pが存在する。
A及びBが正規領域であり,Sがスペース指定子のシーケンスである場合に,次の条件のすべてに該当すれば,A及びBには行内スタック制約Sが存在するものと定義される。
Aが行内領域又は行領域であり,BがAの最初の正規の子である行内領域であり, かつSがBのspace-startから構成されたシーケンスであること。
Bが行内領域又は行領域であり, AがBの最後の正規の子である行内領域であり,かつSがAのspace-endから構成されたシーケンスであること。
A及びBがそれぞれ行内領域であるか行領域のいずれかであり,次のいずれかに適合すること。
a. AもBも行内領域であり, BがAの次にくる正規の兄弟領域であり,かつSがAのspace-end及び Bのspace-startから構成されるシーケンスであること。
b. Bが行内領域Pの最初の正規の子である行内領域であり, Pには後続境界域Aが存在せず, A及びPに行内スタック制約S'が存在すること。さらに,Pの行内進行方向がA及びPの最も近い共通の先祖の行内進行方向と同じであり, かつ Sは,Bのspace-startが後続するS'から構成されること。
c. Aが行内領域Pの最後の正規の子である行内領域であり, Pには先行境界域Bが存在せず,P及びBには行内スタック制約S''が存在する。さらにPの行内進行方向がP及びBの最も近い共通の先祖の行内進行方向と同じであり、かつ SがS''が後続するAのspace-end から構成されること。
d. Bは行内領域Pの最後の正規の子である行内領域であり, Pには後続境界域Aがなく, A及びPには行内スタック制約S'が存在する。さらにPの行内進行方向がA及びPの最も近い共通の先祖領域の行内進行方向とは反対であり, かつ SがBのspace-endが後続するS'から構成されること。
e. Aが行内領域Pの最初の正規の子である行内領域であり, Pには先行境界域Bが存在せず, P及びBが行内スタック制約S''が存在する。さらにPの行内進行方向がP及びBの最も近い共通の先祖領域の行内進行方向の反対であり, かつ SがS''が後続するAのspace-startから構成されること。
図4.8 行内スタックをもつ隣接辺
図4.9 行内スタックをもつ隣接辺(続き)
図4.10 行内スタックをもつ隣接辺(続き, 英語とアラビア語との混植)
図4.11 行内スタックをもつ隣接辺(続き, 英語とアラビア語との混植)
A及びBに行内スタック制約が存在する場合,A及びBの隣接辺は,次に定義する順序付けされた対である。
ケース1では, Aの内容長方形の開始辺とBの割付け長方形の開始辺が対となる。
ケース2では, Aの内容長方形の終了辺とBの割付け長方形の終了辺eが対となる。
ケース3aでは, Aの割付け長方形の終了辺とBの割付け長方形の開始辺が対となる。
ケース3bでは, A及びPの最初の隣接辺とBの割付け長方形の開始辺が対となる。
ケース3cでは, Aの割付け長方形の終了辺とP及びBの二番目の隣接辺が対となる。
ケース3dでは, A及びPの最初の隣接辺とBの割付け長方形の終了辺が対となる。
ケース3eでは, Aの割付け長方形の開始辺とP及びBの二番目の隣接辺が対となる。
二つの領域にブロックスタック制約又は行内スタック制約が存在する場合,この二つの領域は隣接する。定義に従うと,同じ型の領域(行内又はブロック)は,最も近い共通先祖を含まないところまで遡って,それらの共通先祖以外の先祖もすべて同じ型である場合に限り,隣接することになる。従って,例えば,異なる行領域に存在する二つの行内領域が隣接することはない。
AがPの子孫であり,P及びAにブロックスタック制約又は行内スタック制約のいずれかが存在する場合,領域Aは領域Pを始める。この場合,P及びAの二番目の隣接辺はPの前縁であると定義される。前縁に適用されるスペース指定子も Pを始めると定義される。
同様に,AがPの子孫であり,A及びPにブロックスタック制約又は行内スタック制約のいずれかが存在する場合,領域Aは領域Pを終了する。この場合,A及びPの最初の隣接辺は,Pの後縁であると定義される。後縁に適用されるスペース指定子もPを終了すると定義される。
各スクリプトには,そのスクリプトからグリフを配置する場合に優先される"ベースライン"が存在する。欧米のスクリプトは,通常"アルファベットの"ベースラインを使用する。このベースラインは大文字の下部に触れるか又はその傍に存在する。さらに,異なるスクリプトから埋込みグリフを配置する方法には,フォントごとに優先的な方法が存在する。例えば,欧米のフォントでは,埋込み表意グリフ又はインド語のグリフを配置する場合,別のベースラインが存在する。
ブロック領域及び行内領域には,それぞれdominant-baseline-identifier特色が存在する。この特色の値はベースライン識別子であり,その領域の行内領域の子孫に適用される配置の型に対応している。さらに,各行内領域には配置ベースラインが存在し,その親に対する領域の配置方法を指定する。これらの特色については,[7.7.1 フォント及びフォントデータ]で解説されている。
各フォント対して, 実ベースライン表がこれらの識別子を領域の開始辺上の点にマップする。用語の乱用になるが,行内進行方向の行で,主要ベースライン識別子に対応する点の初めから終わりまでを"主要ベースライン"と呼ぶ。
スペース指定子は複合データ型であり,最小化,最適化,最大化,条件付き及び優先順位という要素から構成されている。
最小化, 最適化, 及び最大化は長さに適用され,距離に関する制約を定義する場合に使用できる。言い換えれば,距離はむしろ最適化が望ましく,どのような場合であっても,最小化するほどではなく,最大化の適用も適切ではない。これらの値はすべて負であってもよい。例えば,これらの値が負であれば,領域が重なり合うことがあるが,いずれの場合も,最小化の値は,最適化の値よりは小さいか又は同一であり,最適化の値は,最大化の値より小さいか又は同一であることが望ましい。
条件付けは列挙値であり,スペース指定子が参照領域又は行領域の始まり又は終わりに影響するかどうかを制御する。候補となる値はretain
及びdiscard
である。スペース指定子がconditionalである場合,値はdiscard
に指定される。
優先順位の値は,整数か又は特別なトークンforce
のいずれかである。強制スペース指定子の場合,値はforce
に指定される。
シーケンスに現れるスペース指定子は,互いに対話してもよい。スペース指定子のシーケンスが強制する制約は,スペース指定子ごとに,条件付け及び優先順位に従って,関連する解決スペース指定子を計算することによって算出される。これは,後に示すスペース解決規則で解説する。
解決スペース指定子のシーケンスが距離に強制する制約は付加的なものである。即ち,距離では,解決済みの最小値の和よりも大きく,解決済みの最大値の和よりも小さくなる。
与えられるスペース指定子Sの解決スペース指定子は, 次のとおりに計算される。シーケンスの要素としてスペース指定子Sを含むブロックスタック制約S''又は最大の行内スタック制約又を考える。(S''は, スペース指定子のシーケンス。[4.2.5 Stacking Constraints]を参照。) S'を, 次のとおりS''の部分シーケンスであると定義する。
Sが行領域のspace-before又はspace-afterであれば, S'は, Sを含むS''の最大部分シーケンスであるので, S'におけるすべてのスペース指定子は, 行領域の特色とする。
Sが行領域でないブロック領域のspace-before又はspace-afterであれば, S'は, Sを含むS''の最大部分シーケンスであるので, S'におけるすべてのスペース指定子は, 行領域でないブロック領域の特色とする。
Sが行領域のspace-start又はspace-endであれば, S'は, S''のすべてとする。
Sの解決スペース指定子は, そのシーケンスに関して計算される条件付きではない強制スペース指定子とする。
S'内のスペース指定子がいずれも条件付きであり,参照領域又は行領域を開始する場合,このスペース指定子は抑制される。即ち,その解決スペース指定子はゼロとなる。さらに,条件付きスペース指定子がシーケンス内で連続して続く場合も,抑制される。
条件付きスペース指定子が参照領域又は行領域を終わらせる場合,シーケンス内で連続して先行する他のすべての条件付きスペース指定子とともに抑制される。
S'内の残りのスペース指定子がいずれも強制スペース指定子である場合は,強制以外のスペース指定子はすべて抑制され,強制スペース指定子の各値は,その解決値として指定される。
代わりに,S'内の残りのスペース指定子が強制ではない場合は,解決スペース指定子は,その優先順位が数字上最も高く,これらのうち,最適化の値が最も大きいものにより,定義される。他のスペース指定子はすべて抑制される。これらが一つしか存在しない場合は,その値が解決値として指定される。
そうでない場合に, 最高の優先順位をもち,最適化が最大であるスペース指定子が複数存在すれば,シーケンス内にある最後のスペース指定子の解決スペース指定子は,複数存在するスペース指定子の共通の最適化値をその最適化として,最小値のうち最大のものをその最小化として,最大値のうち最小のものをその最大化として指定することにより,これらのスペースから派生する。すべての他のスペース指定子は, 抑制される。
Sが過制約緩和の対象である場合, その最大値は, 包含ブロック領域の実際のブロック進行寸法に設定される。[4.3.2 過制約のスペース指定子]を参照。
例。参照領域の先頭に現れるスペース値のシーケンスを次と仮定する。最初に,値が10ポイント(即ち最小化,最適化及び最大化がすべて10ポイント)であり,条件がdiscard
のスペース。2番目に値が4ポイントで,条件がretain
のスペース。3番目に,値が5ポイントで,条件がdiscard
のスペース。これらのスペースの優先順位はすべてゼロである。最初の10ポイントのスペースは,規則1に従って抑制され,2番目の4ポイントのスペースは規則3によって抑制される。3番目のスペースが,本来条件付きスペースから生じたとしても,その解決値は5ポイントであり,条件はつかない。
ブロック領域のパディングはどのスペース指定子とも対話しない。ただし,定義により,前辺又は後辺にパディングが存在するため,その両側の領域にスタック制約が存在できない場合は例外である。
ブロック領域の前辺又は後辺の境界又はパディングは,条件どおりに指定されてもよい。その場合に,関連する辺が参照領域の前縁又は後縁であれば,その値はゼロに設定される。この場合,境界又はパディングについては,スタック制約定義により,その値はゼロとなる。
行内領域の開始辺又は終了辺の境界又はパディングは,条件どおりに指定されてもよい。その場合に,関連する辺が参照領域又は行領域の前縁又は後縁であれば,その値はゼロに設定される。この場合,境界又はパディングは,スタック制約定義により,その値はゼロとなる。
領域Pが, ブロック進行寸法が"auto"であるフォーマット化オブジェクトによって生成されるとき, Pの内容長方形の前辺及び後辺を伴う制約は, Pのさまざまな子孫の間の制約と共に, ブロック進行寸法の実際値への制約に帰着する。 ブロック進行寸法が代わりに長さとして指定されると, これは, 指定サイズをもつ不完全に満たされたfo:blockなどの過制約領域木に帰着してよい。その場合, Pとその子孫との間のいくつかの制約は緩和されることが望ましい。この扱いをうける資格のあるものは, 過制約緩和の対象であると言われ, 前述のとおり扱われる。
display-align値が"after"又は"center"であり, Pがフォーマット化オブジェクトによって生成された最初の通常領域であると, Pの最初の通常の子のspace-beforeは, 過制約緩和の対象となる。
display-align値が"before"又は"center"であり, Pがフォーマット化オブジェクトによって生成された最後の通常領域であると, Pの最後の通常の子のspace-afterは, 過制約緩和の対象となる。
ブロック領域には複数の特色が存在し,通常,それらの特色は子の配置に影響する。
行の高さは,行配置計算で使用される。
line-stacking-strategy特色は,子孫の行領域にどの割付けが使用されるかを制御し,font-height
, max-height
, 又はline-height
のいずれかの列挙値をもつ。これはすべて後に厳密に記述する。すべての領域にこれらの特色が存在するが,関係するのはスタック行領域の子をもつ領域に限られる。
space-before特色及びspace-after特色は,ブロック領域とその周囲のブロック領域との間の距離を決定する。
行領域ではないブロック領域のサイズは,通常,そのstart-indent並びにend-indent及び最も近い先祖の参照領域のサイズによって,行内進行方向に決定される。行領域ではないブロック領域は,通常,そのブロック進行寸法を変更して,子孫を収容する。代わりに,生成フォーマット化オブジェクトがブロック領域のブロック進行寸法を指定してもよい。
領域のブロック領域の子は,通常,その親領域内でブロック進行方向にスタックされる。これは,ブロック領域の位置を特定するデフォルトメソッドである。しかし,フォーマット化オブジェクトは,リスト項目や表など,生成領域の子領域の位置を特定する他のメソッドを自由に指定することができる。
親領域Pの子がブロック領域である場合に,次の条件のすべてに該当すれば,Pのスタックは適正であると定義される。
各ブロック領域BがPの子孫である場合には,次の条件に該当することになる。
割付け長方形の前辺及び後辺はPの内容長方形の前辺及び後辺に一致する。
割付け長方形の開始辺は,Rの内容長方形の開始辺に一致し,オフセットは,それから,ブロック領域の開始字下げに, 開始割込み調整 (後に定義する)を加算し, そのborder-start値, padding-start値, 及びspace-start値をマイナスしたのと同じ距離だけ内側となる。この場合,RはBの参照領域のうち,最も近い先祖である。
割付け長方形はRの内容長方形の終了辺に一致し,オフセットは, それからブロック領域の終了字下げにその終了割込み調整 (後に定義する)を加え, border-end値, padding-end値, 及びspace-end値をマイナスしたのと同じ距離だけ内側となる。
図4.12 ブロック領域のメトリク(参照領域の内容長方形)
備考 字下げの概念は,内容長方形への適用を意図したものである。しかし,先の[4.2.3 幾何的定義]で述べたとおり,内容長方形の各辺が割付け長方形の名前が類似した各辺に対応しない場合もあるため,制約は割付け長方形によって書き込まれる。
start-intrusion-adjustment特色及びend-intrusion-adjustment特色は,行内進行方向での浮動体からの割込みを扱うために使用される。
Pの下の副木にある正規領域B及びB'の対については, B及びB'にブロックスタック制約Sが存在する場合, Bの隣接辺とB'との間の距離は,Sのスペース指定子の解決値が強制する制約に一致する。
図4.13 スタック領域の例
例。図4.13では, 領域Aのspace-after値が3ポイントであり,
Bのspace-before値が1ポイントであり, さらにCのspace-before値が2ポイントとなっている。これらの優先順位はすべてforce
であり,境界及びパディングはゼロである。この場合,制約は,Bの割付け長方形が, Aの割付け長方形の4ポイント下に配置され, Cの割付け長方形が,A割付け長方形の6ポイント下に配置されることになる。従って,4ポイントのギャップはPの背景色となり,Cの前にある2ポイントのギャップはBの背景色となる。
詰め調整(開始及び終了の両方)は,側浮動体の結果として生じる字下げを説明するために定義される。
A及びBが, 同じ最も近い参照領域の先祖をもつ領域である場合,行内進行方向に平行で,Aの割付け長方形にもBの割付け長方形にも交差する行がいくつか存在すれば,A及びBは行内重複であると定義される。
Aがfloat="start
"をもつクラスxsl-side-float
の領域であり,Bがブロック領域であり,A及びBの最も近い参照領域の先祖が同一である場合に,A及びBが行内重複であって,Bの開始字下げが, Aの開始字下げとAの行内進行寸法との合計より小さいとき, AはBに食い込むと定義される。そこで, AのBへの開始食い込みは, Bの開始字下げが, Aの開始字下げとAの行内進行寸法との合計より小さい量であると定義される。
Aがfloat="end
"をもつクラスxsl-side-float
の領域であり,Bがブロック領域であり,A及びBの最も近い参照領域の先祖が同一である場合に,A及びBが行内重複であって,Bの終了字下げが, Aの終了字下げとAの行内進行寸法との合計より小さいとき, AはBに食い込むと定義される。そこで, AのBへの終了食い込みは, Bの終了字下げが, Aの終了字下げとAの行内進行寸法との合計より小さい量であると定義される。
Bが行領域でないブロック領域である場合, その局所開始詰め調整(local-start-intrusion-adjustment)は, 次の長さの最大として計算される。
ゼロ
Bの親が参照領域でないとき: Bの親の開始詰め調整
Bがfloat-displace="block
"をもつとき,
Aの生成フォーマット化オブジェクトがBの生成フォーマット化オブジェクトの子孫でなく, AがBのある行領域の子に食い込むような,
float="start
"を伴うクラスxsl-side-float
の各領域Aに関して:
Bに対するAの開始食い込み
Bがfloat-displace="block
"をもつとき,
A及びBが行内重複であるような,
float="start
"を伴うクラスxsl-side-float
の各領域Aに関して, 並びに
AがB'の行領域の子に食い込むような,
Bの最も近い参照領域先祖の子孫であるBの各ブロック領域の先祖B'に関して:
B'に対するAの開始食い込み
ブロック領域Bの開始詰め調整は, Bの生成フォーマット化オブジェクトによって生成され返却される通常ブロック領域の局所開始詰め調整の最大であると定義される。
Lが行領域である場合, その開始詰め調整は, 次の長さの最大として計算される。
Lの親の開始詰め調整
AがLに食い込むような,
float="start
"を伴うクラスxsl-side-float
の各領域Aに関して: Lに対するAの開始食い込み
Lの親がfloat-displace = "indent
"をもつとき, A及びLが行内重複であるような, float="start
"を伴うクラスxsl-side-float
の各領域Aに関して, 並びに
AがB'のある行領域の子L'に食い込むように,
Lの最も近い参照領域の先祖の子孫であるLの各ブロック領域の先祖B'に関して:
B'に対するAの開始食い込み
ブロック領域の終了詰め調整は, 次のとおり, 厳密に同様の方法で計算される。
Bが行領域でないブロック領域である場合, その局所終了詰め調整(local-end-intrusion-adjustment)は, 次の長さの最大として計算される。
ゼロ
Bの親が参照領域でないとき: Bの親の終了詰め調整
Bがfloat-displace="block
"をもつとき,
Aの生成フォーマット化オブジェクトがBの生成フォーマット化オブジェクトの子孫でなく, AがBのある行領域の子に食い込むような,
float="end
"を伴うクラスxsl-side-float
の各領域Aに関して:
Bに対するAの終了食い込み
Bがfloat-displace="block
"をもつとき,
A及びBが行内重複であるような,
float="end
"を伴うクラスxsl-side-float
の各領域Aに関して, 並びに
AがB'の行領域の子に食い込むような,
Bの最も近い参照領域先祖の子孫であるBの各ブロック領域の先祖B'に関して:
B'に対するAの終了食い込み
ブロック領域Bの終了詰め調整は, Bの生成フォーマット化オブジェクトによって生成され返却される通常ブロック領域の局所終了詰め調整の最大であると定義される。
Lが行領域である場合, その終了詰め調整は, 次の長さの最大として計算される。
Lの親の終了詰め調整
AがLに食い込むような,
float="end
"を伴うクラスxsl-side-float
の各領域Aに関して: Lに対するAの終了食い込み
Lの親がfloat-displace = "indent
"をもつとき, A及びLが行内重複であるような, float="end
"を伴うクラスxsl-side-float
の各領域Aに関して, 並びに
AがB'のある行領域の子L'に食い込むように,
Lの最も近い参照領域の先祖の子孫であるLの各ブロック領域の先祖B'に関して:
B'に対するAの終了食い込み
行領域は特別な種類のブロック領域であり,親領域を生成した同一のフォーマット化オブジェクトによって生成される。行領域には境界及びパディングが存在しない。即ち, border-before幅, padding-before幅などはゼロである。行内領域は,基底開始点に関連する行領域内にスタックされる。基底開始点は,フォーマッタにより決定され,行領域の内容長方形の開始辺上の点に存在する。
行の割付け長方形は,line-stacking-strategy特色の値により決定される。値がfont-height
である場合, 割付け長方形は,後に定義する定格要求行長方形である。値がmax-height
である場合, 割付け長方形は後に定義する最大行長方形である。さらに, 値がline-height
である場合, 割付け長方形は,後に定義する行内高度別長方形である。line-stacking-strategy特色がfont-height
又はmax-height
である場合,space-before及びspace-afterは両者とも半リーディング値に設定される。それ以外の場合は,両者ともゼロに設定される。
行領域の定格要求行長方形の開始辺及び終了辺は,字下げなど印刷特性によって変更されるため,親ブロック領域の内容長方形の開始辺及び終了辺に対応し,一致する。その前辺はテキストの高さの距離だけ基底開始点から離れており,その後辺はテキストの深さの分だけ基底開始点から離れている。ブロック領域の各行領域の子については,ブロック進行寸法は同一となる。
行領域の最大行長方形の開始辺及び終了辺は,定格要求行長方形の開始辺及び終了辺に平行し,一致する。ブロック進行方向での拡張は,定格要求行長方形,及び,行領域内にスタックされたすべての行内領域の割付け長方形の両方を囲むことが必須となるもののうち,最小のものとなる。 これは,行領域の子孫に応じて変化してもよい。
図4.14 定格行長方形及び最大行長方形
行領域の行内高度別長方形の開始辺及び終了辺は,定格要求行長方形の開始辺及び終了辺に平行し,一致する。ブロック進行寸法の拡張の決定方法を次に示す。
行内領域の拡張長方形は,その開始辺及び終了辺が割付け長方形の開始辺及び終了辺と一致しており,その前辺及び後辺は次のいずれかの距離だけ,割付け長方形の前辺及び後辺から外側に離れている。 (a.) 領域の割付け長方形が生成フォーマット化オブジェクトの記述により定格割付け長方形であると指定される場合は,半リーディング,(b.)領域の割付け長方形が大割付け長方形であると指定される場合は,それぞれspace-before及びspace-after。 拡張定格要求行長方形の開始辺及び終了辺は,定格要求行長方形のものと一致し,その前辺及び後辺は,定格要求行長方形の前辺及び後辺から外側に半リーディングと等しい距離だけ離れている。
ブロック進行方向で行内高度別長方形を拡張すると,拡張定格要求行長方形も,行領域内にスタックされたすべての行内領域の拡張長方形も囲むことが必須である長方形のうち最小のものになると定義される。これは行領域の子孫に応じて変わってもよい。
備考 定格要求行長方形を使用すると,ベースラインからベースラインまでの間隔を等しくすることができる。最大行長方形を使用すると,行領域間の間隔を一定にすることができる。行内高度別長方形を使用し,space-before及びspace-afterをゼロとすると,CSSスタイル行ボックススタックを使用することができる。同様に,半リーディングの値は,条件にかかわらず,拡張長方形に含まれる。そのため,この場合,行の高さの条件が"discard"であれば,影響はない。
行内領域には,それ自体のline-height特色が存在し, これは包含ブロック領域の行の高さとは異なる。line-stacking-strategy特色の値がline-height
の場合,これは先祖の行領域の配置に影響することがある。行内領域には,その通常フォントについて実ベースライン表が存在する。行内領域は,スタック行内領域の子孫がどのように配置されるかを決定する dominant-baseline-identifier 特色をもつ。
行内領域には子領域があってもよいし,なくてもよい。その場合,行内領域は参照領域であってもよいし,なくてもよい。子をもたない行内領域の内容長方形の寸法を計算する場合は,ブロック領域の子をもつ行内領域の場合と同様,生成フォーマット化オブジェクトが指定する。
行内領域が行内領域の子をもつ場合,主要ベースラインから拡張される内容長方形が存在する([4.2.6 フォントベースライン表]を参照)。この場合,ブロック進行方向にはテキストの深さの分だけ拡張され,反対方向にはテキストの高さの分だけ拡張される。即ち,行内進行方向には,最初の子の割付け長方形の開始辺から最後の子の割付け長方形の終了辺まで拡張されることになる。このような行内領域の割付け長方形は,その内容長方形と同一である。
子をもたない行内領域の割付け長方形は,生成フォーマット化オブジェクトの記述で指定されるとおり,正規割付け長方形又は大割付け長方形のいずれかである。
備考 line-stacking-strategy特色の値がline-height
である場合, 割付けは拡張長方形に関して実行される。
子をもつ行内領域の例は,行内数式の一部又は混合筆記体系から生じる領域を含んでもよい。混合筆記体系とは,左向きの書込み中に右向きの書込みが存在する場合などをいう。
領域の行内領域の子は,通常,その親領域内で行内進行方向にスタックされる。これは,行内領域の位置を特定するデフォルトメソッドである。
行内領域は,先の[4.2.6 フォントベースライン表]で定義されたとおり,主要ベースラインに関連してスタックされる。
親領域Pの子が行内領域である場合に,次のすべての条件に該当すれば,Pのスタックは適正であると定義される。
Pの各行内領域の子孫Iについては,Iの割付け長方形の開始辺, 終了辺, 前辺及び後辺は,Iの最も近い先祖参照領域の内容長方形の辺と対応している。
Pの下の副木にある正規領域I及びI'の各対については,I及びI'に行内スタック制約 Sが存在すれば, IとI'の隣接辺間の距離は, Sのスペース指定子の解決値が強制する制約に一致する。
Pの行内領域の子孫Iはいずれについても,Pの主要ベースラインからIの配置点までのシフト方向の距離は,Pの主要ベースラインとIのalignment-baseline特色に対応するPのベースラインとの間のオフセットに,Iのベースライン移動とPの子孫であるそのすべての先祖との和を加算した距離に等しい。
最初の加数は,ベースラインの型が異なる場合の混合筆記体系を補正するために計算される。その他の加数には,肩文字及び添字などについての微妙なベースライン移動が含まれる。
グリフ領域は最も一般的な行内領域であり,特定のフォントで一つ又は複数の文字を表現する。
グリフ領域には関連する通常フォントが存在する。通常フォントは,文字データに適用される領域の印刷特色により決定される。グリフ方向は表記方向及び参照方向により決定され,レンダリングの際のグリフの方向を決定する。
グリフ領域の配置点及び主要ベースライン識別子は,欧米言語のグリフベースラインなど,使用する筆記体系に従って割り当てられ,行領域の行内領域子孫の配置を制御するために,使用される。混合筆記体系の場合,フォーマッタが親とは異なる行内進行方向の行内領域を生成して,適正な行内領域スタックを収容してもよい。
グリフ領域には子が存在しない。グリフ領域のブロック進行寸法及び実ベースライン表は,フォントのすべてのグリフについて同一である。
部分集合内の領域の順序が生成フォーマット化オブジェクトと同じである場合,フォーマット化オブジェクトに返される領域の部分集合Sは適正に順序付けされているという。特に, A1及びA2がSに存在し, 子のフォーマット化オブジェクトF1及びF2によって返され,F1がF2に優先する場合, A1は,領域木の昇順たどりでは,A2に優先しなければならない。F1がF2に等しく,A1がA2に優先して返される場合,領域木を昇順たどりでは,A1はA2に優先しなければならない。
各フォーマット化オブジェクトF及び各領域クラスCについては,領域クラスがCであるFに返される領域から構成される部分集合は,適正に順序付けされなければならない。ただし,別に指定がある場合を除く。
ここでは,fo:blockのフォーマット化又は類似するブロックレベルオブジェクトに適用される順序付け制約を記述する。
ブロックレベルフォーマット化オブジェクトFは,親フォーマット化オブジェクトに返されるブロック領域を構築し,正規領域及び/又はアンカ領域を配置することによって,行を構築する。この場合,子フォーマット化オブジェクトは,ブロック領域の子又はブロック領域の子として構築される行領域の子として,正規領域及び/又はアンカ領域をFに返す。
このような各フォーマット化オブジェクトでは,順序付けされた区分Pを形成できなければならない。このPは,子フォーマット化オブジェクトが返す正規領域又はアンカ領域の順序付けされた部分集合S1, S2, ..., Snから構成され,これにより,次の条件がすべて満たされることになる。
各部分集合は,行内領域のシーケンス又は単一のブロック領域から構成される。
区分の順序付けは,フォーマット化オブジェクト木の順序付けに従う。特に, AがSi内にあり,BがSj内にあり,i< jの関係が成立している場合,又はAもBも同じ 部分集合Si内にあり,部分集合の順序付けでAがBに先行する場合は, AはBの先行する兄弟フォーマット化オブジェクトによって返されるか,又はA及びBは, AがBの前に返される同一のフォーマット化オブジェクトによって返されるかのいずれかである。
区分化は正当な行区切りで現れる。特に, Aが Siの最後の領域であり,BがSi+1の最初の領域である場合, Si及びSi+1の全領域の文脈内では,実質上,言語及びスクリプトの規則がAとBとの間の改行を許容しなければならない。
強制行区切りは優先される。特に, Aが,fo:characterによって生成されるグリフ領域であり,fo:characterのUnicode文字がU+000Aである場合, Aは包含する部分集合Siの最後の領域でなければならない。
区分は,一定のグリフの置換及び削除を除き,領域木の順序付けに従う。特に, B1, B2, ..., Bpが領域の正規の子領域であるか,又はFによってが返される領域である場合に, 領域木の昇順たどりで順序付けされると,これらの子領域と区分の部分集合との間(例えばn = pなど), 及び各iについて,一対一の対応が成立する。
Siが単一のブロック領域から構成される場合,Biはブロック領域である。
Siが行内領域から構成される場合,
Biは行領域であり,その子領域はSiの行内領域と同じであり,順序も同じである。ただし,実質的に,言語及びスクリプトの規則が置換,挿入又は削除されるグリフ領域を呼出す場合は例外であり, その場合,置換又は挿入されるグリフ領域は,対応する位置で領域木に現れ,削除されるグリフ領域は領域木には現れない。削除は,i < n
及びBi+1が行領域である場合に,グリフ領域が部分集合Si,内の最後の領域であり,suppress-at-line-breakの値にsuppress
を指定する場合に現れる。削除は,i > 1及びBi-1が行領域である場合に,グリフ領域が部分集合Si,内の最初の領域であり,suppress-at-line-breakの値にsuppress
を指定する場合にも現れる。挿入及び置換は,ハイフンの追加,ハイフン付けによるスペルの変更,音節分化からのグリフ像の構築,リガチャ形成などにより,現れることもある。
置換とは,グリフ領域のシーケンスを単一のグリフ領域に置き換えることであり,行内進行方向での余白,境界及びパディング(start- 及び end-), ベースライン移動,文字スペーシング値がゼロであり,treat-as-word-space がfalse
であり, かつその他すべての関連特色,即ち,alignment-adjust, alignment-baseline, color, background, dominant-baseline-identifier, font, text-depth, text-altitude, glyph-orientation-horizontal, glyph-orientation-vertical, line-height, line-height-shift-adjustment, text-decoration, text-shadowの各特色がマッチする場合に限り,現れるのが望ましい。
備考 行領域は,その生成フォーマット化オブジェクトの背景特色若しくはテキスト装飾,又はレンダリング中にマークの生成が必須であるその他の特色を受け入れない。
ここでは,fo:inlineのフォーマット化又は類似する行内レベルオブジェクトに適用される順序付け制約を記述する。
行内レベルフォーマット化オブジェクトFは,子フォーマット化オブジェクトが生成される行内領域の子としてFに返す正規の行領域及び/又はアンカ行内領域を配置することによって,一つ以上の行内領域を構築する。
このような各フォーマット化オブジェクトFについては, 順序付けされた区分Pの形成が可能でなければならない。区分Pは,子フォーマット化オブジェクトが返す正規の行内領域及び/又はアンカ行内領域の順序付けされた部分集合 S1, S2, ..., Snから構成され,それにより,次の条件がすべて満たされることになる。
各部分集合は,行内領域のシーケンス,又は単一のブロック領域から構成される。
区分の順序付けは,上で定義するとおり,フォーマット化オブジェクトの順序付けに従う。
区分化は,上で定義するとおり,正当な行区切りで現れる。
強制行区切りは,上で定義するとおり,優先される。
上で定義するとおり,一定のグリフ置換及び削除を除き,区分は領域木の順序付けに従う。
保持条件及び区切り条件は,領域のクラスに適用される。この場合の領域とは,通常ページ参照領域,列領域及び行領域である。一定の条件に対応する適切なクラスは, 文脈として参照され,このクラスの領域を文脈領域という。[6.4.1 導入]で定義されるとおり, ページ参照領域は, fo:page-masterの規定を使用してfo:page-sequenceが生成する領域であり,列領域は,区画本体から生成される正規フロー参照領域,又はその他の型の区画マスタから生成される区画参照領域である。
保持条件又は区切り条件は,フォーマット化オブジェクト及び関連する文脈領域を用いて生成する領域の木関係についての開始文である。これらの木関係は,主に,先行領域又は後続領域により定義される。AがPの子孫である場合に, Aに正規の領域である先行兄弟がないか,又はPまでだが,Pを含まない領域まで遡って,その先祖領域が存在しなければ,AはPにおいて先行していると定義される。同様に,Aに正規の領域である後続兄弟がないか,又はPまでだが,Pを含まない領域まで遡って,その先祖領域が存在しなければ, AはPにおいて後続していると定義される。 与えられるフォーマット化オブジェクトはいずれについても,昇順たどりでは,フロー内の次のフォーマット化オブジェクトが最初の後続するフォーマット化オブジェクトであり,正規領域を生成し,返す。
区切り条件は,break-before条件又はbreak-after条件のいずれかである。 フォーマット化オブジェクトが生成し,返す最初の領域が文脈領域内で先行する場合,break-before条件が満たされる。break-after条件は,フロー内の次のフォーマット化オブジェクトに依存する。即ち,このような次のフォーマット化オブジェクトが存在しないか,又は,そのフォーマット化オブジェクトが生成し,返す最初の正規領域が文脈領域内で先行するかのいずれかの場合に,break-after条件は満たされる。
区切り条件は,break-before特性及びbreak-after特性によって強制される。これらの特色の詳細値がpage
であれば,文脈がページ参照領域から構成される区切り条件が強制され,値がeven-page
又はodd-page
であれば,偶数の番号付けをしたページ参照領域又は奇数の番号付けをしたページ参照領域の文脈をもつ区切り条件をそれぞれ強制する。値がcolumn
であれば,文脈が列領域である区切り条件を強制する。
break-before特色又はbreak-after特色の値がauto
の場合,区切り条件を強制しない。
保持条件とは,keep-with-previous, keep-with-next, 又はkeep-together条件のいずれかをいう。オブジェクト上のkeep-with-previous条件は,フォーマット化オブジェクトが生成し,返す最初の領域が文脈領域内で先行しない場合,又は,領域木の降順たどりで先行する領域が存在しない場合に満たされる。keep-with-next条件は,フォーマット化オブジェクトが生成し,返す最後の領域が文脈領域内で後続しない場合,又は,領域木の昇順たどりで後続する領域が存在しない場合に満たされる。keep-together条件は,フォーマット化オブジェクトが生成し,返すすべての領域が単一の文脈領域の子孫である場合に満たされる。
保持条件は,"keep-with-previous"特性,"keep-with-next"特性及び"keep-together"特性の構成要素である"within-page", "within-column", 及び"within-line"によって強制される。各構成要素の詳細値は,強制される保持条件の強さを指定する。即ち,数値が高い方が低いほうより強く,値always
の強さは最大である。構成要素に値auto
が指定されている場合,保持条件は強制されない。"within-page"構成要素は,文脈がページ参照領域から構成される保持条件を強制する。"within-column"構成要素は, 列領域から構成される文脈をもつ保持条件を,"within-line"構成要素は,文脈が行領域から構成される保持条件を強制する。
領域木は,強制される区切り条件をすべて満たすために制約される。各保持条件も満たされなければならない。ただし,これにより,区切り条件又はより強い保持条件を満たすことができない場合は例外である。同じ強さの保持条件の集合をすべて満たすことができない場合は,その強さの条件のうち,満たすことが可能な最大の部分集合をいくつか満たさなければならない。存在する場合は,すべての区切り条件及びより強い保持条件のうちの最大の部分集合も満たさなければならない。
ここでは,領域木と視覚レンダリング出力との関係を明らかにする。
領域は三種類のマークを生成する。(1) 存在する場合は,領域の背景(2)存在する場合は,グリフ,画像,又は装飾など領域に組みこまれたマーク,及び(3)存在する場合は,領域境界
領域木は,領域木内の領域に従って,出力メディア上にマークを出現させることにより,レンダリングされる。ここでは,このようなマークの幾何的な位置,及び,マーク間の競合の解決方法を記述する。
各領域は,特定の位置でレンダリングされる。フォーマット化オブジェクトのセマンティクスは,内容長方形の左辺,右辺,上辺,及び下辺など,オブジェクトの位置に関連する組込みマークの位置を記述する。ここでは,領域の位置の決定方法を記述し,領域の組込みマークの位置を決定する。
各ページについては, ページ表示領域は,出力メディアに等大に対応する。
ページ参照領域は[4.9.2 表示域幾何]で後に記述されるとおり,ページ表示領域からのオフセットである。
領域のクラスがxsl-fixed
である木内のすべての領域は,内容長方形の左辺,右辺,上辺及び下辺が,left-position,right-position,top-position,及びbottom-positionの各特色が指定する距離だけ,先祖のページ表示領域の内容長方形から内側に相対的にずれるように位置決めされる。
すべての領域が表示領域の子である木内に存在する場合は,[4.9.2 表示域幾何]で記述されるとおりにレンダリングされる。
木内のその他のすべての領域は,内容長方形の左辺,右辺,上辺及び下辺が,left-position, right-position, top-position, 及びbottom-positionの各特色が指定する距離だけ,最も近い先祖の参照領域の内容長方形から内側に相対的にずれるように位置決めされる。領域のrelative-positionがrelative
に指定されている場合,これらは,top-offset特色及びleft-offset特色によって,左下にシフトされる。
表示領域の子である参照領域は,内容長方形の開始辺及び終了辺が親表示領域の内容長方形の開始辺及び終了辺と対応して位置決めされる。内容長方形の開始辺は行内スクロール量だけ,親表示領域の内容長方形の開始辺から相対的にずれ,内容長方形の前辺は,ブロックスクロール量だけ,親表示領域の内容長方形の前辺から相対的にずれる。
参照領域のブロック進行寸法は表示領域のブロック進行寸法よりも大きく,参照領域のoverflow特色がscroll
に指定される場合,行内スクロール量及びブロックスクロール量はスクロール化機構によって決定されるが,利用者エージェントが存在する場合は,利用者エージェントによって提供される。それ以外の場合は,両者ともゼロとなる。
マークの可視性はマークの位置,領域の可視性及びすべての先祖表示領域のオーバフローに依存する。
領域の可視性がhidden
に指定される場合,領域はマークを生成しない。
領域のオーバフローがhidden
に指定される場合, 又は,環境が動的ではなく,オーバフローがscroll
に指定される場合,領域は切取り長方形を決定する。この長方形の定義は,領域のclip特色の値によって決定され,その子孫領域の一つが生成するすべてのマークについて,切取り長方形外にマークの一部が存在する場合は,マークは現れない。
境界長方形及びパディング長方形は,border-before-widthなど, 一般的なパディング幅特色及び境界幅特色の値によって,内容長方形に相対して決定される。
すべての領域について,その領域が表示領域の子でなければ,一般的な境界の色及びスタイル特色に従って,境界は境界長方形とパディング長方形との間にレンダリングされる。表示領域の子の場合,境界はレンダリングされない。
領域が表示域/参照の対の一部ではなければ,背景がレンダリングされる。領域が,表示域/参照の対の表示領域か参照領域のいずれかである場合に,background-attachmentの詳細値がscroll
であり,参照領域のブロック進行寸法が表示領域のブロック進行寸法よりも大きければ,背景は表示領域ではなく,参照領域にレンダリングされる。それ以外の場合,背景は参照領域ではなく,表示領域にレンダリングされる。
パディング長方形が存在する場合,背景はbackground-image, background-color, background-repeat, background-position-vertical, 及び background-position-horizontalの各特色に従って,パディング長方形にレンダリングされる。
フォーマット化オブジェクトの各クラスについては,生成領域に組み込まれたマークは,フォーマット化オブジェクトの記述で指定される。例えば,fo:characterオブジェクトはグリフ領域を生成する。これは,領域のフォント特色,glyph-orientation特色及びblink特色に従って,その領域の内容長方形内にグリフを描くことによって,レンダリングされる。
さらに, 様々なスコア及びスコアカラー特色など,他の特色は他の組込みマークを指定する。underline-score, overline-score及びthrough-scoreなどのスコア特色の場合は,スコアの厚さ及び位置は,実質的に,通常フォントによって指定される。フォントがこれらの数量を指定できない場合は,実装依存である。
マークは,後に記述されるとおり,階層化され,どのマークがどのマークの下にくるかについて,部分的な順序付けを定義する。
二つのマークが出力メディアの同じ点に適用される場合,これらのマークは競合すると定義される。二つのマークが競合する場合,一方のマークの下にあるマークは,両者が適用される出力メディアの点に影響しない。
同じ領域が生成するマークの階層化を次に示す。まず,領域背景は,領域の組込みマークの下にくる。組込みマークは境界の下にくる。領域の組込みマーク間の階層化は,領域の生成フォーマット化オブジェクト及びその特性のセマンティクスによって定義される。 例えば,グリフ領域のグリフ描画は,テキスト装飾のために生成されるマークの下にくる。
領域のスタック階層は,スタック文脈及びそのz指標値によって定義される。領域 Aのancestor-or-selfA'及びBのB'のスタック文脈が同じであり,A'のz指標がB'のz指標より小さい場合,領域Aのスタック階層はBスタック階層よりも小さいと定義される。スタック階層が他のスタック階層ほど小さくない場合は,両者のスタック階層は同じであると定義される。
A及びBが領域であり,Aのスタック階層がBのスタック階層よりも小さい場合,Aが生成するマークはすべて,Bが生成するすべてのマークの下に存在する。
A及びBが同じ階層をもつ領域である場合, A及びBの背景は,A及びBが生成する他のすべてのマークの下にくる。さらに, Aが Bの先祖であり,両者のスタック階層が同じ場合,Aの背景はBのすべての領域の下に存在し,Bのすべての領域はAの組込み領域及び境界の下に存在する。
A及びBのスタック階層が同じであり,いずれも他の領域の先祖ではない場合,それらの背景が競合するか,Aの背景以外のマークがBの背景以外のマークと競合するかのいずれかであれば,エラーとなる。実装は,木の昇順たどりにおいて,最初の領域からのマークが他の領域のマークの下に存在するものとして進むことによって,回復してもよい。
図4.15 典型的な領域木
前へ |
目次 |
トップへ |
次へ |