前へ

目次

ボトムへ     

次へ     


6 フォーマット化オブジェクト

6.1 フォーマット化オブジェクトの導入

詳細フォーマット化オブジェクト木は,一つ以上の意図された表示をこの木の内部に記述する。フォーマット化とは,記述を表示に変換する処理である。[3 フォーマット化の導入]を参照のこと。表示は,領域モデルで定義されるとおり,領域木によって抽象的に表現される。[4 領域モデル]を参照のこと。候補となる各表示は,一つ以上の領域木によって表現される。この領域木では,詳細フォーマット化オブジェクト木の情報が,2次元面及び1.5次元面上に位置決めされる。

フォーマット化オブジェクトの種類は,次の三つである。(1) 領域を生成するもの, (2) 領域を返すが,生成しないもの及び(3) 領域の生成で使用されるもの。(1)及び(2)は通常流し込みオブジェクトと呼ばれる。(3)は,レイアウトオブジェクト又は補助オブジェクトのいずれかである。フォーマット化オブジェクトの種類は,オブジェクトとともに使用される用語によって暗示される。(1)のフォーマット化オブジェクトは,"一つ以上の領域を生成する"といわれる。(2)のフォーマット化オブジェクトは,"一つ以上の領域を返す"といわれる。(1)のフォーマット化オブジェクトは,領域の生成及び返却の両方をしてよい。(3)のフォーマット化オブジェクトは,"領域の生成に使用される"。即ち,三種類のフォーマット化オブジェクトは,生成処理に対して,パラメタと同様の動作をする。

6.1.1 多くのフォーマット化オブジェクトに共通する定義

領域と,領域を生成し返却するフォーマット化オブジェクトとの間の関係を特徴づける二つの特色を,このカテゴリ化により定義することになる。これらの特色は,generated-by及びreturned-byである。

generated-by特色の値は,単一のフォーマット化オブジェクトである。フォーマット化オブジェクトFのセマンティクスが一つ以上の領域の生成を指定し,Aがこのように生成された領域の一つであるならば,フォーマット化オブジェクトFは,領域A生成すると定義される。即ち,[4.7.2 行構築]で指定されるとおり,このように生成された領域の一つの置換形式である。

グリフ領域が置換される場合,生成フォーマット化オブジェクトは,置換されたグリフ領域のシーケンスに最初に現れるグリフ領域を生成したフォーマット化オブジェクトであると考えられる。自動生成のハイフンなど,グリフ領域が挿入される場合,生成フォーマット化オブジェクトは,領域木の昇順たどりにおいて,挿入されるグリフ領域より先に現れる最後のグリフ領域の生成フォーマット化オブジェクトであると考えられる。

returned-by特色の値は,ペアの集合である。この場合,各ペアは,フォーマット化オブジェクトと正の整数から構成される。整数は,フォーマット化オブジェクトが返すすべての領域の順序付けにおける領域の位置を表示する。

(F,1)のペアがAreturned-by特色のメンバであり, (F,2)のペアがBreturned-by特色のメンバであり, (F,3)のペアがCreturned-by特色のメンバである場合,フォーマット化オブジェクトFは,ABC,...の領域のシーケンスを返すと定義される。

領域が,フォーマット化オブジェクトが返す領域のシーケンスのメンバである場合,領域は,フォーマット化オブジェクトによって生成されたか又はそのフォーマット化オブジェクトの子が返す領域のシーケンスのメンバであったかのいずれかである。フォーマット化オブジェクトの子が返すすべての領域が,そのフォーマット化オブジェクトによって返される必要はない。フォーマット化オブジェクトは,そのフォーマット化オブジェクトの子が返す領域を子領域としてもつ領域を生成してもよい。生成領域の領域木にあるこれらの子は,それらを返したフォーマット化オブジェクトによって返されない。

木のノードの集合は,次の条件を満たす場合は,系統となる。

一つの領域が返されるフォーマット化オブジェクトの集合は,一つの系統である。

フォーマット化オブジェクトが返す領域は,正規又は行外のいずれかである。正規領域とは,"テキストの正規流し込み"にある領域をいう。即ち,正規領域は,それらを返すフォーマット化オブジェクトが生成する領域の子領域となる。正規領域には,サイズが1であるreturned-by系統が存在する。ただ一種類の正規領域が存在する。

行外領域は,テキストの正規流し込み外で使用される領域である。これは,行外領域が絶対位置決めされているか又はそれらが浮動部分又は脚注のいずれかであるためである。行外領域には,サイズが1より大きいreturned-by系統が存在してもよい。

area-class特色は,領域が正規又は行外のいずれのクラスに属するかを示す。行外領域の場合,この特色は,行外領域のサブクラスも示す。この特色の値は,"xsl-normal", "xsl-absolute", "xsl-footnote", "xsl-side-float"又は"xsl-before-float"である。area-class特色の値が"xsl-normal"である場合及びその場合に限り,領域は,正規である。それ以外の場合,領域は,行外領域である。([4.2.5スタック制約]を参照)

所定のフォーマット化オブジェクトが返す領域は,上記のとおり順序付けされる。この順序付けは,正規領域の部分シーケンスなど,所定の領域クラスである領域の部分シーケンス上の順序付けを定義する。領域Aがフォーマット化オブジェクトが返す領域に存在する領域Bに優先する場合及びその場合に限り,領域Aは,部分シーケンス内の領域Bに優先する。

参照領域連鎖は,参照領域のシーケンスとして定義される。この参照領域は,page-sequenceフォーマット化オブジェクトではない同じフォーマット化オブジェクト が生成するか又は区画参照領域若しくは正規流し込み参照領域([6.4.13 fo:region-body]を参照)から構成される。これらは,同じ流し込み([6.4.1.4 流し込み及び流し込みマッピング]を参照)に割り当てられる区画フォーマット化オブジェクトを使用して生成される。 シーケンス内の参照領域は,参照領域連鎖によって包含されるといわれ,領域木の昇順たどりを使用した場合に領域木内に存在するのと同じ順序付けが,互いに関連して指定されている。

6.2 フォーマット化オブジェクトの内容

フォーマット化オブジェクトの内容は,XML内容モデル構文を使用して記述される。 XML内容モデルでは表現できない追加制約が後に提供される場合もある。

下位の内容モデルにあるパラメタ実体"%block;"は,次のフォーマット化オブジェクトを包含する。

     block
     block-container
     table-and-caption
     table
     list-block

下位の内容モデルにあるパラメタ実体"%inline;"は,次のフォーマット化オブジェクトを包含する。

     bidi-override
     character
     external-graphic
     instream-foreign-object
     inline
     inline-container
     leader
     page-number
     page-number-citation
     basic-link
     multi-toggle

次のフォーマット化オブジェクトは, "中性"コンテナであり,各フォーマット化オブジェクトの下に列挙された追加制約が,#PCDATA, %block;又は%inline;を使用できるすべての場所で満たされる場合に,それらを使用してもよい。

     multi-switch
     multi-properties
     wrapper
     retrieve-marker

次の"行外"フォーマット化オブジェクトは, #PCDATA, %block;又は%inline;が使用できるすべての場所で,使用してよい。ただし,すべての"行外"フォーマット化オブジェクトの子孫として使用される場合を除く。

     float

次の"行外"フォーマット化オブジェクトは, #PCDATA又は%inline;を使用できるすべての場所で使用してよい。ただし,すべての"行外"フォーマット化オブジェクトの子孫として使用される場合を除く。

     footnote

6.3 フォーマット化オブジェクトの要約

basic-link

fo:basic-linkは,単純なリンクの開始資源の表示に使用される。

bidi-override

fo:bidi-override行内フォーマット化オブジェクトは,多言語が混在する文書内の種々の(又は入れ子になった)行内スクリプトに関しては,デフォルトのUnicode双方向アルゴリズムの方向を上書きする必要がある場所で使用される。

block

fo:blockフォーマット化オブジェクトは,一般に,段落,見出し,柱,図題,題の説明文などのフォーマット化に使用される。

block-container

fo:block-container流し込みオブジェクトは,ブロックレベル参照領域の生成に使用される。

character

fo:character流し込みオブジェクトは,表示のグリフにマップされる文字を表す。

color-profile

スタイルシートにカラープロファイルを宣言するために使用する。

conditional-page-master-reference

fo:conditional-page-master-referenceは,使用条件が満たされる際に使用されることになっているページマスタの識別に使用される。

declarations

スタイルシートの包括的宣言のグループ化に使用する。

external-graphic

fo:external-graphic流し込みオブジェクトは,図形データがfo名前空間内のXML結果木外に存在する図形に使用される。

float

fo:floatの使用目的は二つ存在する。一つは,内容を通常に配置をする中で,そのページ(或いは後続するページ)の先頭などの,読者に直接の妨げにならない別個のエリア内に,関連する内容をフォーマット化するために使われる。もう一つは,領域を意図的に片側に寄せて,通常の内容をその横に並行して流し込むときに用いられる。

flow

fo:flowフォーマット化オブジェクトの内容は,ページ内に与えられる流し込みテキスト内容を提供する一連の流し込みオブジェクトである。

footnote

fo:footnoteは,脚注引用及び対応する脚注の生成に使用される。

footnote-body

fo:footnote-bodyは,脚注の内容の生成に使用される。

initial-property-set

fo:initial-property-setは,fo:blockの最初の行にフォーマット化特性を指定する。

inline

fo:inlineフォーマット化オブジェクトは,通常,テキストの一部を背景と共にフォーマッティングしたり,枠で囲むために用いる。

inline-container

fo:inline-container流し込みオブジェクトは,行内参照領域の生成に使用される。

instream-foreign-object

fo:instream-foreign-object流し込みオブジェクトは,行内図形又はオブジェクトデータがfo:instream-foreign-objectの子孫として存在する他の"汎用"オブジェクトに使用される。

layout-master-set

fo:layout-master-setは,文書で使用されるすべてのマスタの周囲のラッパである。

leader

fo:leaderフォーマット化オブジェクトは,二つのテキストフォーマット化オブジェクトを結ぶための,罫又は文字列のどちらかで構成されるリーダの構成に使われる。文字列は,文字の繰り返し又は文字パターンの巡回繰り返しをする。

list-block

fo:list-block流し込みオブジェクトは,リストのフォーマットに使用される。

list-item

fo:list-itemフォーマット化オブジェクトは,リスト内の項目のラベル及び本体を包含する。

list-item-body

fo:list-item-bodyフォーマット化オブジェクトは,リスト項目の本体の内容を包含する。

list-item-label

fo:list-item-labelフォーマット化オブジェクトは,リスト項目のラベルの内容を包含する。主として,リスト項目の本体の列挙,識別又は修飾のいずれかに使用される。

marker

fo:markerは,fo:retrieve-markerと一緒に用いて,柱の生成に使用される。

multi-case

fo:multi-caseは,フォーマット化オブジェクトの代替となる各副木を(fo:multi-switch内に)包含するために使用される。親のfo:multi-switchはこれらの中から一つを選択して表示し,残りは表示しない。

multi-properties

fo:multi-propertiesは,一定の内容に関連する複数の特性集合間の切替えに使用される。

multi-property-set

fo:multi-property-setは,利用者エージェントに依存して,内容に適用されるフォーマット化特性の選択肢集合を指定するために使用される。

multi-switch

fo:multi-switchは,フォーマット化オブジェクトの選択肢副木の規定(各副木は,fo:multi-case内に存在する)をラップし,ある候補から別の候補への切替え(fo:multi-toggleを介して活動化される)を制御する。

multi-toggle

fo:multi-toggleは,fo:multi-case内で,別のfo:multi-caseへの切替えに使用される。

page-number

fo:page-numberフォーマット化オブジェクトは,現ページ番号の表示に使用される。

page-number-citation

fo:page-number-citationは,引用対象のフォーマット化オブジェクトが返す最初の正規領域を包含するページのページ番号を参照するために使用される。

page-sequence

fo:page-sequenceフォーマット化オブジェクトは,レポートの章など,文書内のページのシーケンス(部分シーケンス)の生成方法を指定するために使用される。これらのページの内容は,fo:page-sequenceの流し込みの子から生じる。

page-sequence-master

fo:page-sequence-masterは,ページのシーケンス生成の際に使用されるページマスタのシーケンスを指定する。

region-after

この区画は,fo:region-body区画の"後"側に配置される表示域を定義する。

region-before

この区画は,fo:region-body区画の"前"側に配置される表示域を定義する。

region-body

この区画は,fo:simple-page-masterの"中央"に配置される表示域/参照のペアを指定する。

region-end

この区画は,fo:region-body区画の"終了"側に配置される表示域を定義する。

region-start

この区画は,fo:region-body区画の"開始"側に配置される表示域を定義する。

repeatable-page-master-alternatives

fo:repeatable-page-master-alternativesは,選択肢ページマスタの集合の繰返しインスタンスから構成される部分シーケンスを指定する。繰返しの番号は,連結されることもあれば,連結されないこともある。

repeatable-page-master-reference

fo:repeatable-page-master-referenceは,単一のページマスタの繰返しインスタンスから構成される部分シーケンスを指定する。繰返しの番号は,連結されることもあれば,連結されないこともある。

retrieve-marker

fo:retrieve-markerは,fo:markerと一緒に用いて,柱の生成に使用される。

root

fo:rootノードは,XSL結果木の上位ノードである。この木はフォーマット化オブジェクトから構成される。

simple-page-master

fo:simple-page-masterは,ページの生成で使用され,ページの幾何的構造を指定する。ページを五つの区画まで細分化してもよい。

single-page-master-reference

fo:single-page-master-referenceは,単一のページマスタの単一のインスタンスから構成される部分シーケンスを指定する。

static-content

fo:static-contentフォーマット化オブジェクトは,単独又はページシーケンス内の複数のページ上の類似した名前をもつ区画で,繰り返えし表示されるフォーマット化オブジェクトのシーケンス又は木を保持する。一般的には,通し柱に使われる。

table

fo:table流し込みオブジェクトは,表の材料のフォーマット化に使用される。

table-and-caption

fo:table-and-caption流し込みオブジェクトは,表題付きの表をフォーマット化するために使用される。

table-body

fo:table-bodyフォーマット化オブジェクトは,表本体の内容の包含に使用される。

table-caption

fo:table-captionフォーマット化オブジェクトは,fo:table-and-captionを使用する場合に限り,表の表題を含むブロックレベルフォーマット化オブジェクトを包含するために使用される。

table-cell

fo:table-cellフォーマット化オブジェクトは,表セルに配置される内容のグループ化に使用される。

table-column

fo:table-columnフォーマット化オブジェクトは,同じ列及びスパンを持つ表セルに適用される特性を指定する。

table-footer

fo:table-footerフォーマット化オブジェクトは,表フッタの内容の包含に使用される。

table-header

fo:table-headerフォーマット化オブジェクトは,表ヘッダの内容の包含に使用される。

table-row

fo:table-rowフォーマット化オブジェクトは,表セルを行にグループ化するために使用される。

title

fo:titleフォーマット化オブジェクトは,題と所定のページシーケンスとの関連付けに使用される。対話式の利用者エージェントは,ページを識別するためにこの題を使用してもよい。例えば,fo:titleの内容をフォーマット化し,"題"ウィンドゥ又は"ツールチップ"に表示することもできる。

wrapper

fo:wrapperフォーマット化オブジェクトは,フォーマット化オブジェクトのグループに継承特性を指定するために使用される。追加のフォーマット化セマンティクスは存在しない。

6.4 宣言,ページ付け及びレイアウトフォーマット化オブジェクト

6.4.1 導入

フォーマット化オブジェクト木の根ノードは,fo:rootフォーマット化オブジェクトでなければならない。fo:rootフォーマット化オブジェクトの子は,単一の fo:layout-master-set, 任意のfo:declarations, 及び一つ以上のfo:page-sequencesのシーケンスである。fo:layout-master-setは,ページの幾何的構造及び順序付けを定義する。fo:page-sequencesの子は,流し込みと呼ばれる。これは,fo:flow及びfo:static-contentに含まれ,ページに配布される内容を提供する。fo:declarationsオブジェクトは,内容がフォーマット化処理の資源として使用されるフォーマット化オブジェクトのラッパである。ページ生成の処理は,結果木をフォーマット化するXSLプロセサによって,自動的に実行される。

fo:layout-master-setの子は,ページ付け及びレイアウトを規定する。これらの規定の名前は,"-master"で終わる。ページ付け規定及びレイアウト規定には,二つの型が存在する。ページマスタ及びページシーケンスマスタである。ページマスタの役割は,ページを意図的に分割し,それらの幾何的構造を記述することである。ページシーケンスマスタの役割は,fo:page-sequenceのフォーマット化中にページの生成に使用されるページマスタのシーケンスを記述することである。

6.4.1.1 ページシーケンスマスタ

各fo:page-sequence-masterは,ページマスタの候補となるシーケンスの集合を特徴付ける。所定のすべてのfo:page-sequenceについて,シーケンスの候補となる集合のうちの一つだけが使用されることになる。使用されるシーケンスは,個々のページマスタ,ページマスタからページを生成する流し込み及びfo:page-sequence-master自体が決定する制約を満たすシーケンスすべてがその対象となる。

fo:page-sequence-masterは,どのページマスタをどの順で使用するかを決定するために使用される。fo:page-sequence-masterの子は,部分シーケンス規定のシーケンスである。部分シーケンス内のページマスタは,単一のページマスタへの参照によって,又は一つ以上のページマスタの繰返しとして指定されてもよい。例えば,シーケンスは複数の明示的なページマスタで始まってもよく,その他のページマスタの繰返しが続いてもよい。

fo:single-page-master-referenceは,単一のページマスタから構成される部分シーケンスの指定に使用される。

繰返しである部分シーケンスの指定方法は,二つある。 fo:repeatable-page-master-referenceは,単一のページマスタの繰返しを指定する。 fo:repeatable-page-master-alternativesは,ページマスタの集合の繰返しを指定する。候補となるページマスタのどれが部分シーケンスの所定の点で使用されるかは,条件付きであり,ページ番号が奇数であるか偶数であるか,最初のページか,最後のページか,空白であるかなどに依存する。繰返し規定の"maximum-repeats"特性は,繰返しの数を制御する。この特性が指定されない場合は,繰返しの数に制限はない。

6.4.1.2 ページマスタ

ページマスタは,ページの生成に使用されるマスタである。ページは,表示領域が領域木根の子である表示域/参照のペアである。ページ表示領域は,ページの表示領域として定義され,ページ領域は,ページ表示領域の固有の子として定義される。

ページ表示領域は,出力メディアによって定義される。ページ領域は,ページの内容を保持し,出力メディア上のページ内容の位置決めに影響を及ぼす。

単一のページマスタは複数回使用されてもよい。それを使用する度に,単一のページが生成される。例えば,fo:repeatable-page-master-referenceから参照されるページマスタは,所定の部分シーケンスで参照が現れるたびに一ページを生成するためにfo:page-sequenceによって使用される。

備考

ウェブブラウザなどの利用者エージェントでページを使用する際,一般に各文書は,一ページしかない。ページの表示に使用される表示域は,ページのサイズを決定する。ページが紙など非対話式メディアに配置される場合,ページは,一枚以上の紙面に相当する。紙のサイズは,ページのサイズを決定する。

原規定では,ページマスタの種類は,一つだけ, 即ちfo:simple-page-masterのみである。原規定の今後のバージョンでは,ページマスタの種類が追加される可能性がある。

fo:simple-page-masterは,一つ以上の区画に,規定を子としてもつ。

表示域/参照のペアを生成する際,区画規定は, マスタ,即ち区画マスタとして使用される。このペアは,区画表示領域及び区画参照領域から構成される。区画表示領域は,常に,区画マスタの親を使用して生成されたページ領域の子である。

備考

ページの区画は,HTML文書の"フレーム"に類似する。通常,これらの区画の少なくとも一つがその寸法である長さが不確定である。筆記モードがlr-tb又はrl-tbの言語の場合,この区画は,通常,下向きの長さが不確定である。フレームの一部が表示域に表示される。区画に割り当てられる流し込みは,表示域を通じて区画参照領域をスクロールすることによって,表示される。

各区画は,区画フォーマット化オブジェクトによって定義される。各区画フォーマット化オブジェクトには名前があり,配置には制限がある。さらに,区画の高さ又は幅は,固定されているが,その他の寸法は固定されているか,不確定であるかのいずれかであってもよい。例えば,ウェブページの本体である区画の高さは,不確定であってもよい。

区画の規定は,区画フォーマット化オブジェクトを使用して生成される区画表示領域のサイズ及び位置を決定する。表示域の位置決めは,そのページ領域の親に関連する。

この勧告の1.0版では,ページマスタは,五つの区画から構成されることになっている。即ち,"区画本体" 及び,本体の上下左右にそれぞれ一つ存在する他の四つの区画である。サイド区画を現筆記モードに対応させるため,これらの区画は,それぞれ"region-before" ,"region-after","region-start"及び"region-end"と名前付けされている。"region-before"は"lr-tb"筆記モードの"上小口"に,"region-after"は"lr-tb"筆記モードの"下小口"に,"region-start"は"lr-tb"筆記モードの"左サイドバー"に,"region-end"は"lr-tb"筆記モードの"右サイドバー"にそれぞれ対応する。 勧告の今後の版では,ページマスタが,任意に大きさが決められた区画及び任意に位置決めされた区画の数を任意に包含することができる機構の導入が期待される。

区画の型には,関連する条件付きのサブ区画をもつものもある。関連する区画参照領域は,サブ区画に対応する子領域をもつことによって分割され,区画の"主要参照領域"を含む。column-count特性が適用される区画マスタについては,主要参照領域はは,"スパン参照領域"として指定される子領域をもつことにより,さらに細分化される。"スパン参照領域"の数は,span="all"であるブロック領域など,ページに現れるスパンの数に依存する。これらは,"正規流し込み参照領域"として指定される子領域をもつことによって,順に細分化され,その数は指定された列の数に依存する。

6.4.1.3 ページ生成

ページは,フォーマッタがfo:page-sequencesを処理することによって生成される。上記のとおり,各ページは,表示域/参照のペアであり,その場合,表示領域は,領域木根の子である。各ページは,ページマスタを使用して生成され,そのページマスタが指定する区画に対応する区画表示領域及び区画参照領域を定義する。

各fo:page-sequenceは,fo:page-sequence-master又はページマスタのいずれかを参照する。ページマスタを参照する場合, これは,参照されるページマスタを無限回数繰り返すfo:page-sequence-masterへの参照であるものとして解釈される。fo:page-sequenceが"master-reference"特性を介してページマスタを直接参照するか,又はその特性がページマスタを参照するfo:page-sequence-masterを参照するかのいずれかの場合,fo:page-sequenceはページマスタを参照する。

6.4.1.4 流し込み及び流し込み対応付け

流し込みには二つの型がある。fo:static-content及びfo:flowである。fo:static-content流し込みは,柱となるテキストなど,多くのページで繰り返される内容を保持する。fo:flow流し込みは,連続するページにまたがって配布される内容を保存する。fo:flow流し込みの処理とは,fo:page-sequenceを保持するために生成されるページが何ページであるかを決定することである。fo:page-sequence-masterは,流し込みの子である内容が配布されるページマスタのシーケンスの生成系として使用される。

流し込みの子はブロックレベル流し込みオブジェクトのシーケンスである。各流し込みには "flow-name"特性が提供する名前がある。二つの流し込みが同じ名前をもつことはない。

ページマスタでの流し込みの区画への割当ては,流し込みマップによって決定される。流し込みマップとは,fo:page-sequenceの流し込みの子と,そのfo:page-sequenceが参照するページマスタ内で定義される区画との関係をいう。

この勧告の1.0版では,流し込みマップは暗黙的である。流し込みの"flow-name"特性は,その流し込みがどの区画に割り当てられるかを指定する。各区画には"region-name"特性がある。暗黙的な流し込みマップは,流し込みを同じ名前をもつ区画に割り当てる。XSLの今後の版では,流し込みマップが明示的なフォーマット化オブジェクトとなることが期待される。

region-nameの生成を利用者に要求するのを回避するため,すべての区画に"region-name"特性のデフォルト値が存在する。region-body, region-before, region-after, region-start, 及びregion-endには,それぞれ,デフォルト名 "xsl-region-body", "xsl-region-before", "xsl-region-after", "xsl-region-start", 及び"xsl-region-end"が存在する。

さらに, fo:static-contentフォーマット化オブジェクトには,"xsl-before-float-separator"又は"xsl-footnote-separator"の"flow-name"特性値が存在してもよい。region-bodyの条件付きサブ区画が,特定のページの参照領域生成に使用される場合,名前が条件付きサブ区画に対応するfo:static-contentは,サブ区画に関連する参照領域にフォーマット化されてもよい。これについては,[6.10.1.3 条件付きサブリージョン]で解説する。

6.4.1.5 ページ生成における制約

ページ領域の子孫である領域は,ページ領域の生成に使用されるページマスタ及びページマスタに指定された区画に割り当てられる流し込みによって制約される。fo:flow流し込みの場合,その流し込みの子孫が生成した領域は,流し込みを割り当てる区画をもつページマスタを使用して生成されたシーケンス内のページに配布される。fo:static-content流し込みの場合,流し込みの処理は,流し込みを割り当てる区画をもつページマスタを使用して生成される各ページに繰り返される。ただし,これには二つの例外がある。一つは,fo:static-contentにxsl-before-float-separator流し込み名がある場合であり,その処理は,xsl-before-floatの領域クラスがある子孫領域をもつページ参照領域にのみ繰り返される。もう一つは,fo:static-contentにxsl-footnote-separator流し込み名がある場合であり,その処理は, xsl-footnoteの領域クラスのある子孫領域をもつページ参照領域にのみ繰り返される。

6.4.1.6 ページ付けの木構造

結果木の構造を次に示す。

図6.1 ページ付けのためのフォーマット化オブジェクトの木表示

6.4.2 fo:root

一般的な使用法:

これは,フォーマット化オブジェクト木の上位ノードであり,文書内で使用されるすべてのマスタを保持するfo:layout-master-setフォーマット化オブジェクト,任意のfo:declarations, 及び一つ以上のfo:page-sequenceオブジェクトを保持する。各fo:page-sequenceは,fo:page-sequenceの内容の子をフォーマット化した結果生じたページのシーケンスを表示する。

備考

文書は複数のfo:page-sequencesを包含することができる。例えば,文書の各章が,個々のfo:page-sequenceであることも可能である。これにより,章題など章固有の内容を柱に配置することができる。

領域:

ページ表示領域は,fo:rootフォーマット化オブジェクトのfo:page-sequenceの子によって返される。fo:rootは,領域を生成しない。

制約:

領域木の根の子は, fo:rootのfo:page-sequenceの子によって返されるページ表示領域からのみ構成される。fo:page-sequenceの子が返すすべての領域の集合は,適正に順序付けされている。( [4.7.1 一般的な順序付け制約]を参照)

内容:

(layout-master-set,declarations?,page-sequence+)

このフォーマット化オブジェクトに適用される特性を次に示す。

6.4.3 fo:declarations

一般的な使用法:

fo:declarationsフォーマット化オブジェクトは,スタイルシートの大域的宣言をグループ化するために使用される。

領域:

fo:declarationsフォーマット化オブジェクトは,いずれの領域も生成せず,返さない。

制約:

なし。

内容:

(color-profile)+

fo:declarations流し込みオブジェクトには,XSL名前空間以外の追加の子要素が存在してもよい。しかし,それらの存在がXSL名前空間オブジェクト及び特性のセマンティクスを変更することはない。これらのXSL名前空間以外の要素に許容される構造は,それらの名前空間に対して定義される。

6.4.4 fo:color-profile

一般的な使用法:

fo:color-profileフォーマット化オブジェクトは,スタイルシートにICCカラープロファイルを宣言するために使用される。カラープロファイルは,"color-profile-name"特性で指定される名前を介して,再度参照される。

カラープロファイルは,"src"特性値で指定されるURIによって識別される。このURIは,内部で認識されるカラープロファイルを識別してもよいし,ロードされ,処理されるのが望ましいICCカラープロファイル符号化を示してもよい。

rgb-icc関数[5.10.2 カラー関数]を介して,カラープロファイルを参照する際,次の規則が使用される。

  1. カラープロファイルが利用できる場合は,カラープロファイルから識別されるカラー値を使用するのが望ましい。

  2. カラープロファイルが利用できない場合,sRGB([sRGB])フォールバックを使用しなければならない。

領域:

fo:color-profileフォーマット化オブジェクトは,いずれの領域も生成せず,返さない。

制約:

なし。

内容:

EMPTY

このフォーマット化オブジェクトに適用される特性を次に示す。

6.4.5 fo:page-sequence

一般的な使用法:

fo:page-sequenceフォーマット化オブジェクトは,例えばリポートの章など,文書内でのページのシーケンス又は部分シーケンスの生成方法を指定するために使用される。これらのページの内容は,fo:page-sequenceの流し込みの子で,単一のfo:flow及びすべてのfo:static-content流し込みオブジェクトから構成されるものから生じる。これらのページのレイアウトは,fo:page-sequenceのmaster-reference特色が参照するfo:page-sequence-master又はpage-masterから生じる。fo:page-sequenceの各流し込みオブジェクトの子が返す領域のシーケンスは,後に記述するとおり,生成されたページの子孫となる。

領域:

fo:page-sequenceフォーマット化オブジェクトは,表示域/参照のペアのシーケンスを生成し,ページ表示領域を返す。各ページ参照領域及びそのページ参照領域の生成に使用されるページマスタで指定される各区画については, fo:page-sequenceオブジェクトは,ページ参照領域の区画の出現に対しても表示域/参照のペアを生成し,前浮動参照領域, 脚注参照領域, 主要参照領域及び一つ以上の正規シーケンス参照領域を生成してもよい。これらのさらなる領域の生成は,fo:simple-page-master及びregion-mastersの記述で解説している。同様に,表題領域を生成してもよい。

fo:page-sequenceが生成するすべての領域には,領域クラス"xsl-absolute"が存在する。

制約:

ページ表示領域/ページ参照領域の各組合せは,ページシーケンスマスタの制約を満たすページマスタを使用して生成される。ページシーケンスマスタは, fo:page-sequenceのmaster-reference特色又はmaster-reference特色が直接識別したページマスタによって識別される。このようなページ参照領域の区画表示領域の子は,そのページマスタの子である区画に対応しなければならない。

fo:page-sequenceが生成する領域は,fo:page-sequenceの子である流し込みが返す領域をそれらの子孫としてもつ。

流し込みがfo:page-sequenceに返す領域は,次の四つの型の制約を満たさなければならない。

表題領域が生成される場合には,次の制約を満たさなければならない。

[4.7.1 一般順序付け制約]で述べた順序付けのデフォルト制約は,fo:page-sequenceには適用されない。順序付けのデフォルト制約は,単一のfo:flow内部にある流し込みオブジェクトの子に適用される。特別な順序付け制約は,子であるfo:static-contentオブジェクトに適用される。

内容:

(title?,static-content*,flow)

このフォーマット化オブジェクトに適用される特性を次に示す。

6.4.6 fo:layout-master-set

一般的な使用法:

fo:layout-master-setは,文書で使用されるすべてのマスタの周囲にあるラッパである。これはページシーケンスマスタ, ページマスタ, 及び区画マスタを含む。

領域:

fo:layout-master-setフォーマット化オブジェクトは,直接領域を生成しない。 fo:layout-master-setの子であるマスタは,fo:page-sequenceによって使用され,ページを生成する。

制約:

fo:layout-master-setの各子のmaster-name特色の値は,その集合内で一意でなければならない。

内容:

(simple-page-master|page-sequence-master)+

6.4.7 fo:page-sequence-master

一般的な使用法:

fo:page-sequence-masterは,ページマスタの所定の集合がページのシーケンスの生成で使用される場合の制約及び順序を指定するために使用される。 fo:page-sequence-masterがfo:page-sequenceのフォーマット化で使用されると,ページは自動生成される。

備考

見込まれるページのシーケンスの指定方法は複数存在する。特定のページマスタに対する参照のシーケンスを指定することもできる。これにより,見込まれるページのシーケンスが結合される。又は一つ以上のページマスタの部分シーケンスの繰返しを指定することができる。この部分シーケンスは,結合されていても,いなくても良い。更に,二種類の部分シーケンス識別子を混合することもできる。

領域:

fo:page-sequence-masterフォーマット化オブジェクトは,直接領域を生成しない。このオブジェクトは,fo:page-sequenceフォーマット化オブジェクトによって使用され,ページを生成する。

制約:

fo:page-sequence-masterの子は,部分シーケンス指定子のシーケンスである。ページシーケンスは, (a)fo:page-sequence-masterの子である部分シーケンス指定子のシーケンスの最初の部分シーケンスに一対一でマップするページの部分シーケンスのシーケンスに分割できる場合及び(b) ページの各部分シーケンスについて,その部分シーケンスが対応する部分シーケンス指定子の制約を満たす場合に,fo:page-sequence-masterが決定する制約を満たす。ページの部分シーケンスのシーケンスは,部分シーケンス指定子のシーケンスよりも短くすることが可能である。

fo:flowが返す領域のいくつかが配置されない場合に,部分シーケンス指定子の子のシーケンスが全て使用されてしまっていれば,エラーである。可能であれば,実装側は,ページの生成に最後に使用された部分シーケンス指定子を再使用することによって,回復してもよい。

内容:

(single-page-master-reference|repeatable-page-master-reference|repeatable-page-master-alternatives)+

このフォーマット化オブジェクトに適用される特性を次に示す。

6.4.8 fo:single-page-master-reference

一般的な使用法:

fo:single-page-master-referenceは最も単純な部分シーケンス指定子である。このオブジェクトは,単一のページマスタの単一のインスタンスから構成される部分シーケンスを指定する。これは,fo:page-sequence-masterを使用して生成されるページのシーケンス内にある所定の点で,特定のページマスタの使用を指定するために使用される。この場合,fo:page-sequence-masterは,fo:single-page-master-referenceの親である。

領域:

fo:single-page-master-referenceフォーマット化オブジェクトは,直接領域を生成しない。これは,fo:page-sequenceフォーマット化オブジェクトによって使用され,ページを生成する。

制約:

fo:single-page-master-referenceには,fo:single-page-master-reference上のmaster-reference特色とマスタ名が同じであるfo:simple-page-masterへの参照が存在する。

この部分シーケンス指定子にマップされたページの部分シーケンスは,(a)ページの部分シーケンスが単一のページから構成され,(b)そのページが fo:single-page-master-referenceが参照するfo:simple-page-masterを使用しての生成を制約される場合,この部分シーケンス指定子の制約を満たす。

内容:

EMPTY

このフォーマット化オブジェクトに適用される特性を次に示す。

6.4.9 fo:repeatable-page-master-reference

一般的な使用法:

fo:repeatable-page-master-referenceは,次に単純な部分シーケンス指定子である。このフォーマット化オブジェクトは,単一のページマスタの繰返しインスタンスから構成される部分シーケンスを指定する。繰返しの数を束縛してもよいし,潜在的に束縛しなくてもよい。

領域:

fo:repeatable-page-master-referenceフォーマット化オブジェクトは,直接領域を生成しない。これは,fo:page-sequenceフォーマット化オブジェクトによって使用され,ページを生成する。

制約:

fo:repeatable-page-master-referenceには,fo:repeatable-page-master-referenceのmaster-reference特色と同じmaster-nameをもつfo:simple-page-masterへの参照が存在する。

この部分シーケンス指定子にマップされるページの部分シーケンスは,次の場合に,この部分シーケンス指定子の制約を満たす。(a) ページの部分シーケンスがゼロ以上のページから構成されること。(b)各ページがfo:repeatable-page-master-referenceが参照するfo:simple-page-masterを使用して生成されること。(c) 部分シーケンスの長さがmaximum-repeatsの値より小さいか又は同じであること。

fo:repeatable-page-masterの区画マスタの子にfo:page-sequenceの流し込みに関連付けられる区画名がない場合,部分シーケンスの長さはゼロに制約される。

内容:

EMPTY

このフォーマット化オブジェクトに適用される特性を次に示す。

6.4.10 fo:repeatable-page-master-alternatives

一般的な使用法:

fo:repeatable-page-master-alternativesフォーマット化オブジェクトは,最も複雑な部分シーケンス指定子である。このフォーマット化オブジェクトは,択一的ページマスタの集合の繰返しインスタンスから構成される部分シーケンスを指定する。繰返しの数を制限してもよいし,潜在的に制限しなくてもよい。シーケンスのあるところで択一的なページマスタのどれを使うかは,選択条件の評価に依存する。選択されたモデルを使用して生成されるページがページシーケンスの最初のページであるか若しくは最後のページであるか,又は空白のページであるかを検査することが標準的な条件に含まれる。条件の完全集合により,異なるページマスタを,最初のページ,奇数及び偶数のページ,空白のページに使用することができる。

備考

条件は,子のシーケンスの最初から,順に検査されるため,通常,シーケンスの最後の選択この選択は,ある特殊なレイアウトを受け取らないすべてのページに使用されるpage-masterを参照する

領域:

fo:repeatable-page-master-alternativesフォーマット化オブジェクトは,直接領域を生成しない。このフォーマット化オブジェクトは,fo:page-sequenceフォーマット化オブジェクトによって使用され,ページを生成する。

制約:

fo:repeatable-page-master-alternativesの子は, fo:conditional-page-master-referencesである。これらの子を代替と呼ぶ。

この部分シーケンス指定子にマップされるページの部分シーケンスは,次の場合に,この部分シーケンス指定子の条件を満たす。(a) ページの部分シーケンスがゼロ以上のページから構成されること。(b) 各ページは,fo:repeatable-page-master-alternativesの子である選択の一つが参照するfo:simple-page-masterを使用して生成されること。(c) その選択の条件がtrueであること。(d) その選択が,すべての条件がtrueである子のシーケンス内の最初の選択であること。(e) 部分シーケンスの長さがmaximum-repeatsの値より小さいか又は同じであること。

内容:

(conditional-page-master-reference+)

このフォーマット化オブジェクトに適用される特性を次に示す。

6.4.11 fo:conditional-page-master-reference

一般的な使用法:

fo:conditional-page-master-referenceは,使用に関する条件を満たす場合に,使用されるページマスタを識別するために使用される。これにより,偶数及び奇数のページ,ページシーケンス内の最初のページ又は空白のページなどに異なるページマスターを使用することが可能となる。この使用法は,本や報告書の章では典型的なもので,最初のページとそれ以外のページでレイアウトが異なり,偶数又は奇数のページの柱も異なる場合がある。

領域:

fo:conditional-page-master-referenceフォーマット化オブジェクトは,直接領域を生成しない。これは,fo:page-sequenceフォーマット化オブジェクトによって使用され,ページを生成する。

制約:

fo:conditional-page-master-referenceには,fo:conditional-page-master-referenceのmaster-reference特色とマスタ名が同じであるfo:simple-page-masterへの参照が存在する。

参照されるページマスタの使用における副条件の指定には,page-position, odd-or-even, 及びblank-or-not-blankという三つの特色が存在する。三つの副条件は,trueであるfo:conditional-page-master-referenceの条件に対して,すべてtrueでなければならない。 これらの特色の派生元である特性が継承されず,すべての特性の初期値が対応する副条件をtrueにするため,これは,値が指定された特性から生じる特色の部分集合が対応する副条件をtrueにしなければならないことを意味している。

fo:conditional-page-master-referenceを使用して生成されるページが,参照するページシーケンスによって生成されるページのシーケンスで位置を指定される場合,page-position特色に対応する副条件は,trueである。位置の指定には"first", "last", "rest" (firstでもlastでもないことを示す) 又は "any" (前述のすべてを示す)という名前を使用する。参照するページシーケンスとは,このfo:conditional-page-master-referenceが子孫であるfo:page-sequence-masterを参照したfo:page-sequenceをいう。

odd-or-even特色に対応する副条件は,odd-or-even特色の値が"any"であるか,又は値がfo:conditional-page-master-referenceを使用して生成されるページのページ番号のパリティと一致する場合に,trueとなる。

blank-or-not-blank特色に対応する副条件は,次の場合にtrueとなる。(1) 特色の値が "not-blank"であり,fo:conditional-page-master-referenceを使用して生成されるページにfo:flowフォーマット化オブジェクトの子孫が生成する領域が存在しない場合。(2) 特色の値が"blank" であり,fo:conditional-page-master-referenceを使用して生成されるページが,そのページ上にfo:flowからの領域が存在しないようなページである場合。(3) 特色の値が"any"である場合。(2)が生じる理由を以下に例示する。(a)は更に次の(i)又は(ii)とする。(i)"偶数ページ"又は"奇数ページ"のbreak-after値又はbreak-before値によるページパリティを適正に維持するため。(ii)ページシーケンスの開始時若しくは終了時のページパリティを適正に維持するため。(b)fo:flowフォーマット化オブジェクトの子孫が生成する領域の条件が,それらがこのページから生じた子孫であった場合に満たされないため。

備考

blank-or-not-blank="true"と指定された条件付きページマスタ参照から参照されるすべてのページマスタが,fo:flowの内容の配置する区画を提供する場合,その区画には内容が配置されない。

内容:

EMPTY

このフォーマット化オブジェクトに適用される特性を次に示す。

6.4.12 fo:simple-page-master

一般的な使用法:

fo:simple-page-masterは,ページの生成に使用され,ページの幾何的構造を指定する。ページを五つの区画に細分化してもよい。五つの区画とは,区画本体, region-before, region-after, region-start, 及びregion-endである。

備考

例えば, fo:simple-page-masterの筆記モードが"lr-tb"である場合,これらの区画は,それぞれ,文書の本体,上小口,下小口,左サイドバー及び右サイドバーに対応する。

備考

単純ページマスタは,機構が単純なページレイアウト機能を提供できることを意図したものである。この勧告の今後の版では,fo:page-masterフォーマット化オブジェクトを使用したより複雑なページレイアウトの構築をサポートすることになる。

領域:

fo:simple-page-masterフォーマット化オブジェクトは,直接領域を生成しない。ページの生成で,fo:page-sequenceにより使用される。

fo:simple-page-masterを使用してページを生成する際,表示域/参照のペアが生成される。これは,ページ表示領域及びページ参照領域から構成される。ページ表示領域は,出力メディアの物理的な制限を意味する。ページ参照領域は,内容が表現されるページの部分,即ち,ページマージン内の領域を表示する。

さらに, fo:simple-page-masterを使用してページを生成する際,fo:simple-page-masterの子である領域に対応する表示域/参照のペアも生成される。(これらの領域の生成に関する詳細については,五つの区画のフォーマット化オブジェクト規定 ([6.4.13 fo:region-body], [6.4.14 fo:region-before], [6.4.15 fo:region-after], [6.4.16 fo:region-start], 及び[6.4.17 fo:region-end])を参照のこと。)

図6.2 区画表示領域

外側の四つの区画とfo:region-bodyとの間の間隔は,fo:region-bodyの"margin-x"特性から,外側の各区画上の関連extent特色を減算することによって決定される。

特色の派生:

この勧告の1.0版では,境界及びパディングは,ページ参照領域とともに使用できない。ページ参照領域のその他の特色は,特色の値を決定する正規の規則に従って設定される。

制約:

ページの生成でページマスタを使用する際,ページ表示領域の内容長方形のブロック進行寸法及び行内進行寸法は,"page-height" 特性及び "page-width"特性の計算値を使用して決定される。

マージン特性から生じた特色は,ページ表示領域の内容長方形のサイズ及び位置を決定する。"margin-top", "margin-bottom", "margin-left" 及び "margin-right"の各特性から生じた特色は,ページ表示領域の内容長方形の対応辺から,ページ参照領域の内容長方形を字下げするために使用される。ここでの"top", "bottom", "left" 及び "right"は,"page-height" 特性及び"page-width"特性の計算値により決定される。用紙メディアの場合,これらの値は用紙の方向を決定する。"ページの高さ"は, "上"から"下"までの長さである。表示メディアの場合,表示ウィンドゥは常に垂直であり,表示画面の最上部が"上"である。

備考

ページ表示領域の内容長方形の参照点には,"before-edge", "after-edge", "start-edge", 及び"end-edge" ではなく,"top","bottom","left"及び"right"を使用する。これは,利用者が見るのがその方向に関連するメディアであり,使用中の筆記モードに関連するメディアではないためである。

図6.3 ページのマージン

fo:page-sequenceが返す最初のページのpage-number特色の値は,initial-page-number特色の値と等しくなければならない。次のページのpage-number特色の値は,直前のページの値より一つ大きくなければならない。

format, letter-value, grouping-separator, grouping-size, country, 及びlanguageの各特色は,XSLTの7.7.1.で指定されるとおり,数値を文字列形式にフォーマットするために使用される。このフォーマットされた番号は, fo:page-number流し込みオブジェクトの値として使用される。

区画に適用できる制約:

所定のfo:simple-page-master内で指定される区画のすべてに適用される制約は,数多く存在する。

図6.4 ページモデルの2つの例

適正にスタックされた区画参照領域のブロック進行寸法が,その親である区画表示領域のブロック進行寸法より大きい場合,区画表示領域及び区画参照領域間の関係における制約は,区画マスタ及び領域に割り当てられる流し込みの種類におけるover-flow特色の値に依存する。

対応する領域に割り当てられた流し込みがfo:static-content流し込みオブジェクトである場合,区画参照領域のブロック進行寸法に制約は,存在しない。

対応する領域に割り当てられた流し込みがfo:flowフォーマット化オブジェクトである場合は,次となる。

内容:

(region-body,region-before?,region-after?,region-start?,region-end?)

このフォーマット化オブジェクトに適用される特性を次に示す。

6.4.13 fo:region-body

一般的な使用法:

単純ページマスタの構築に使用される。この区画は,fo:simple-page-masterの"center"に配置される表示域/参照のペアを指定する。overflow特色は,下にある区画参照領域の可視程度,即ち,区画参照領域がその親である区画表示領域によって切り取られるかどうかを制御する。

備考

通常, ページ付けしたメディアの場合, fo:page-sequenceのfo:flowフォーマット化オブジェクトが返す領域は,区画本体に対応する区画参照領域のシーケンスの子孫となる。これらの区画参照領域は,どのページマスタがfo:region-bodyを含むかを指定するページ領域のすべての領域の子孫である。fo:flow流し込みがその他の区画に割り当てられる場合,fo:flowが返す領域は,割り当てられた区画マスタを使用して生成される区画参照領域の子孫でなければならない。

備考

本体区画は,fo:simple-page-master内にサイズ化され,位置決めされるのが望ましい。それにより,fo:region-bodyに割り当てられる流し込みが返す領域及び適切なサイド区画のすべてに空間が生まれる。この場合のサイド区画とは,同じページに配置されるfo:region-before, fo:region-after, fo:region-start及びfo:region-endをいう。これらのサイド区画は,ページ参照領域の内容長方形内に位置決めされる。fo:region-bodyのマージンは,fo:region-bodyに区画表示領域を位置決めし,fo:region-bodyを囲む他の区画にスペースを残すために使用される。

図6.5 図7.4 の最初の例の詳細

先の四つの区画とfo:region-body間の間隔は,fo:region-bodyの"margin-x"特性に対応する特色から,サイド区画の関連extent特色を減算することにより,決定される。

同様に,fo:region-bodyを使用して,複数の列を提供してもよい。 column-count特色が1より大きいと,区画本体は複数の列に細分化されることになる。

領域:

fo:region-bodyを子としてもつfo:simple-page-masterを使用してページを生成する場合は,必ずfo:region-bodyフォーマット化オブジェクトを使用して,一つの区画表示領域と一つの区画参照領域を生成する。overflow特色の値が"scroll"であれば,スクロール機構が実装定義の方法で提供されることになる。

区画表示領域の位置及びサイズは,fo:simple-page-masterが生成するページ参照領域の内容長方形に関連して指定される。区画表示領域の内容長方形は,ページ参照領域の内容長方形から,"margin-top", "margin-bottom", "margin-left" 及び "margin-right"の各特性の値の分だけ字下げされる。原規定の1.0版では,padding及びborder-width特色の値は"0"でなければならない。

fo:region-bodyを使用して生成される区画参照領域は,区画表示領域の子である。fo:region-bodyのreference-orientation特色を使用して,fo:region-bodyが生成する区画参照領域の座標系機構を方向付けることができる。この座標系機構は,fo:simple-page-masterが生成するページ参照領域の座標系機構に関連しており,その結果,後者の座標系機構で位置決めされる表示域に関連することになる。

表示域/参照のペアのほかに,区画本体を使用して領域を生成する場合,少なくとも一つ,最大で三つまで,追加の参照領域が生成される。これらの参照領域は,任意の前浮動参照領域, 任意の脚注参照領域, 及び 主要参照領域である。主要参照領域は,他の二つの参照領域にスペースが割り当てられた後に残ったスペースから構成される。主要参照領域にはパディング,境界又はそれに関連するスペースが存在しない。

備考

区画参照領域に前浮動参照領域又は脚注参照領域の子が存在しない場合,主要参照領域の内容長方形は, 区画参照領域の内容長方形と完全に重なり合う。

主要参照領域は,スパン参照領域のシーケンスを子としてもつ。これらは,境界及びパディングがゼロの参照領域ブロック領域であり,その行内進行寸法は,主要参照領域の行内進行寸法と同一で,主要参照領域内に正規にスタックされる。

各スパン参照領域には,正規流し込み参照領域として指定される参照領域の子が一つ以上存在する。スパン参照領域の子の数及び配置は,スパン参照領域のcolumn-count特色に依存する。フォーマッタは,順番に,スパン参照領域を正確に生成し, そのcolumn-count特色を設定しなければならない。それにより,spanが"all"であるfo:flowから返されるブロック領域は,column-countが1に等しいスパン参照領域の子となり,spanが"none"であるfo:flowから返されるブロック領域は,column-countが関連する区画参照領域のcolumn-count特性の詳細値に等しいスパン参照領域の子となる。

各スパン参照領域の場合, 正規流し込み参照領域の子の数Nは,column-count特質の値に等しい。

"overflow"特性の値が"scroll"である場合に,column-countの指定を1以外にするのは,エラーである。実装側は, "1"が指定されているものとして振舞うことにより,エラーから回復してもよい。

これらの各正規流し込み参照領域の行内進行寸法は,主要参照領域の行内進行寸法から,column-gap特色を(N-1)回減算し,その結果をNで除算することによって決定される。スパン参照領域の行内進行寸法の名前に"body-in-size"を使用し,行内進行方向での正規流し込み参照領域のサイズの名前に"column-in-size"を使用した場合の式を次に示す。

column-in-size = (body-in-size - (N - 1)*column-gap)/N

正規流し込み参照領域の ブロック進行寸法は,親であるスパン参照領域のブロック進行寸法と同じである。

備考

上述のとおり, スパン参照領域のブロック進行寸法は,前浮動参照領域又は脚注参照領域が存在する場合,又は 主要参照領域のスパン参照領域の子が一つ以上存在する場合は,区画参照領域のサイズより小さくてもよい。

正規流し込み参照領域はスパン参照領域内に位置決めされる。最初の列は,その内容長方形の前辺及び開始辺に位置決めされる。この場合の前辺及び開始辺は,スパン参照領域の内容長方形の前辺及び開始辺に一致する。スパン参照領域のJ番目の正規流し込み参照領域の子の内容長方形の場合,その前辺は,スパン参照領域の内容長方形の前辺に一致し,開始辺は,行内進行方向で((J-1)*(column-in-size + column-gap))により計算されて,位置決めされる。これにより,N番目の正規流し込み参照領域の内容長方形の終了辺は,スパン参照領域の内容長方形の終了辺と一致することになる。

備考

筆記モードが"rl-tb"である場合, 上記は,期待どおり配列が左向きになることを意味する。これは,筆記モードが"rl-tb"であれば,開始辺が右にくるためである。

fo:region-bodyを使用してすべての領域が生成される場合,その領域クラスは"xsl-absolute"となる。

特色の派生:

区画表示領域の 参照方向は,区画を指定する区画マスタのreference-orientation特色の値から生じる。区画参照領域のreference-orientationは"0"に設定される。そのため,区画表示領域が設定した方向と同じになる。

区画表示領域及び区画参照領域の残りの特色は,特色の値を決定する正規の規則に従って,設定される。

スパン参照領域及び正規流し込み参照領域の特色の決定方法は,[5 特性の詳細化/解決]で記述された方法と同じであり,各特性に初期値が指定される特性の集合から生じる。ただし,reference-orientation,writing-mode及びdisplay-alignは例外であり,それらの値はfo:region-bodyから指定される。

制約:

すべての区画に適用される制約([6.4.12 fo:simple-page-master]を参照)がすべて適用される。

区画表示領域の行内進行寸法は,ページ参照領域の内容長方形の行内進行寸法から,区画マスタのstart-indent及びend-indent特色の値を減算して決定される。区画表示領域の内容長方形の開始辺及び終了辺は,ページマスタのreference-orientation特色により決定される。

区画表示領域のブロック進行寸法は,ページ参照領域の内容長方形のブロック進行寸法から,区画マスタのspace-before及びspace-after特色の値を減算することにより決定される。区画表示領域の内容長方形の前辺及び後辺は,ページマスタのreference-orientation特色によって決定される。

space-before及びstart-indent特色の値を使用して,ページ参照領域の内容長方形の前辺及び開始辺に関連する区画表示領域の位置を決める。

fo:region-bodyを使用して生成される区画参照領域のサイズ及び位置に関する制約は,[6.4.12 fo:simple-page-master]の"区画に適用できる制約"で解説している。

内容:

EMPTY

このフォーマット化オブジェクトに適用する特性を次に示す。

6.4.14 fo:region-before

一般的な使用法:

単純ページマスタの構築に使用される。この区画は,ページ参照領域の"前"側に配置される表示域/参照のペアを指定する。筆記モードがlr-tbである場合, この区画は上小口区画に対応する。overflow特色は,下にある区画参照領域がどの程度見えるかを制御する。即ち,区画参照領域がその親である区画表示領域によって切り取られるかどうかを制御する。

領域:

fo:region-beforeフォーマット化オブジェクトを使用して,一つの区画表示領域及び一つの区画参照領域を生成する。

原規定の1.0版では, padding及びborder-width特色の値は"0"でなければならない。

この区画区画表示領域の内容長方形の前辺の位置は,親のfo:simple-page-masterを使用して生成されるページ参照領域の内容長方形の前辺に一致する。区画表示領域のブロック進行寸法は,fo:region-beforeフォーマット化オブジェクトのextent特色によって決定される。

区画表示領域の行内進行寸法は,fo:region-beforeのprecedence特色によって決定される。 precedence特色の値がtrueである場合, 行内進行寸法は,ページ参照領域の内容長方形の開始辺及び後辺まで拡張される。この場合,区画表示領域のregion-beforeの動作は,region-start及びregion-endが生成する区画への浮動体に類似する。fo:region-beforeのprecedenceの値がfalseである場合, これら隣接する区画は,fo:region-beforeが生成する区画に浮動し,fo:region-beforeの拡張は,隣接する区画の侵入により,事実上減少される。

区画参照領域は,区画表示領域の下の描画域に存在する。reference-orientation特色を使用して,ページ参照領域に対する区画参照領域の位置関係を決定するために使われる。

区画参照領域のサイズは,区画のoverflow特色の設定に依存する。その特色の値が"auto","hidden", "error-if-overflow", "paginate" 又は"visible"である場合,参照領域のサイズは,表示域のサイズと同じになる。overflow特色の値が"scroll"である場合, 参照領域のサイズは,区画の筆記モードが行内進行方向である場合の表示域のサイズと同じになる。ブロック進行方向での制約はない。即ち,区画に結合される内容のすべてを配布するために,拡張されるということである。

特色の派生:

区画表示領域のreference-orientationは,区画を指定する区画マスタのreference-orientation特色の値から生じる。区画参照領域のreference-orientationは"0"に設定される。その結果,区画表示領域が設定する方向と同じになる。

区画表示領域及び区画参照領域の残りの特色は,特色の値を決定する正規の規則に従って,設定される。

制約:

fo:region-beforeを使用して生成される区画参照領域のサイズ及び位置に関する制約は,[6.4.12 fo:simple-page-master]の"区画に適用できる制約"で解説している。

内容:

EMPTY

このフォーマット化オブジェクトに適用される特性を次に示す。

6.4.15 fo:region-after

一般的な使用法:

このフォーマット化オブジェクトは,単純ページマスタの構築に使用される。この区画は,ページ参照領域の"後"側に配置される表示域/参照のペアを指定する。筆記体系がlr-tbである場合,この区画は,下小口区画に対応する。overflow特色は,下にある区画参照領域がどの程度見えるかを制御する。区画参照領域が親である区画表示領域によって切り取られるかどうかを制御する。

領域:

fo:region-afterフォーマット化オブジェクトを使用して,一つの区画表示領域及び一つの区画参照領域を生成する。

原規定の1.0版では,padding及びborder-width特色の値は"0"でなければならない。

この区画表示領域の内容長方形の後辺の位置は,親のfo:simple-page-masterを使用して生成されるページ参照領域の内容方形長方形の後辺に一致する。区画表示領域のブロック進行寸法は,fo:region-afterフォーマット化オブジェクトのextent特色によって決定される。

区画表示領域の行内進行寸法は, fo:region-afterのprecedence特色によって決定される。precedence特色の値がtrueの場合, 行内進行寸法は,ページ参照領域の内容長方形の開始辺及び後辺まで拡張される。この場合, the region-after 区画表示領域のregion-afterの動作は,region-start及びregion-endが生成する区画への浮動体に類似する。fo:region-afterのprecedence特色の値がfalseである場合,これらの隣接する区画は,fo:region-afterが生成する区画に浮動し,fo:region-afterの拡張は,隣接する区画の侵入により,事実上減じられる。

区画参照領域は, 区画表示領域の下の描画域に存在する。reference-orientation特色は,ページ参照領域に関連した区画参照領域の位置関係を決定するために使われる。

区画参照領域のサイズは,区画のoverflow特色の設定に依存する。その特色の値が"auto", "hidden", "error-if-overflow", "paginate"又は"visible"である場合,参照領域のサイズは,表示域のサイズと同じになる。overflow特色の値が"scroll"である場合, 参照領域のサイズは,区画の筆記モードが行内進行方向である場合の表示域のサイズと同じになるが,ブロック進行方向の場合の制約はない。即ち,この領域に結合される内容のすべてを配布するまで,拡張されるということである。

特色の派生:

区画表示領域のreference-orientationは,区画を指定する区画マスタのreference-orientation特質の値から生じる。区画参照領域のreference-orientationは,"0"に設定される。それにより,区画表示領域が設定する方向と同じになる。

区画表示領域及び区画参照領域の残りの特色は,特色の値を決定する正規の規則に従って設定される。

制約:

fo:region-afterを使用して生成される区画参照領域のサイズ及び位置に関する制約は,[6.4.12 fo:simple-page-master]の"区画に適用できる制約"で解説している。

内容:

EMPTY

このフォーマット化オブジェクトに適用される特性を次に示す。

6.4.16 fo:region-start

一般的な使用法:

このフォーマット化オブジェクトは,単純ページマスタの構築に使用される。この区画は,ページ参照領域の"開始"側に配置される表示域/参照のペアを指定する。筆記モードがlr-tbである場合, この区画は,左サイドバーに対応する。overflow特色は,下にある区画参照領域がどの程度見えるかを制御する。即ち,区画参照領域がその親の区画表示領域によって切り取られるかどうかを制御する。

領域:

fo:region-startフォーマット化オブジェクトを使用して,一つの区画表示領域及び一つの区画参照領域を生成する。

原規定の1.0版では,padding及びborder-width特色の値は,"0"でなければならない。

この区画表示領域の内容長方形の開始辺の位置は,親のfo:simple-page-masterを使用して生成されるページ参照領域の内容長方形の開始辺に一致する。区画表示領域の行内進行寸法は,fo:region-afterフォーマット化オブジェクトのextent特質によって決定される。

区画表示領域のブロック進行寸法は,隣接するfo:region-before及びfo:region-afterが存在すれば,これらのprecedence特色によって決定される。それ以外の場合,precedence特色の値がfalseであるものとして決定される。fo:region-before又はfo:region-afterのprecedence特色の値がそれぞれfalseである場合, ブロック進行寸法は,ページ参照領域の内容長方形の前辺又は後辺までそれぞれ拡張される。この場合,region-startの動作は,region-before,region-afterそれぞれが生成する区画への浮動体に類似する。隣接する区画のprecedence特色の値がtrueである場合, これらの隣接する区画は,fo:region-startが生成する区画に浮動し,fo:region-startの拡張は,precedence特色の値がtrueと等しい隣接する区画の侵入により有効に減じられる。

区画参照領域は,区画表示領域の下の描画域に存在する。reference-orientation特色は,ページ参照領域に関連する区画参照領域の位置関係を決定するために使われる。

区画参照領域のサイズは,区画のoverflow特色の設定に依存する。その特色の値が"auto", "hidden", "error-if-overflow", "paginate"又は"visible"である場合,参照領域のサイズは,表示域のサイズと同じになる。 overflow特色の値が"scroll"である場合, 参照領域のサイズは,区画の筆記モードが行内進行方向である場合の表示域のサイズに等しくなる。ブロック進行方向での制約はない。即ち,区画に結合されるすべての内容を配布するために,拡張されるということである。

特色の派生:

区画表示領域の参照方向は,区画を指定する区画マスタのreference-orientation特色の値から生じる。区画参照領域のreference-orientationは,"0"に設定される。それにより,区画表示領域が設定する方向と同じになる。

区画表示領域及び区画参照領域の残りの特色は,特色の値を決定する正規の規則に従って設定される。

制約:

fo:region-startを使用して生成される区画参照領域のサイズ及び位置に関する制約は,[6.4.12 fo:simple-page-master]の"区画に適用できる制約"で解説している。

内容:

EMPTY

このフォーマット化オブジェクトに適用される特性を次に示す。

6.4.17 fo:region-end

一般的な使用法:

このフォーマット化オブジェクトは,単純ページマスタの構築に使用される。この区画は,ページ参照領域の"終了"側に配置される表示域/参照のペアを指定する。筆記体系がlr-tbである場合, この区画は,右サイドバーに対応する。overflow特色は,下にある区画参照領域がどの程度見えるかを制御する。即ち,区画参照領域がその親の区画表示領域によって切り取られるかどうかを制御する。

領域:

fo:region-endフォーマット化オブジェクトを使用すると,一つの区画表示領域及び一つの区画参照領域を生成する。

原規定の1.0版では,padding及びborder-width特色の値は"0"でなければならない。

この区画表示領域の内容長方形の終了辺の位置は,親のfo:simple-page-masterを使用して生成されるページ参照領域の内容長方形の終了辺に一致する。区画表示領域の行内進行寸法は,fo:region-afterフォーマット化オブジェクトのextent特色によって決定される。

区画表示領域のブロック進行寸法は,隣接するfo:region-before及びfo:region-afterが存在する場合には,これらのprecedence特色によって決定される。それ以外の場合は,precedence特色の値がfalseであるものとして決定される。fo:region-before又はfo:region-afterのそれぞれの precedence特色の値がfalseである場合, ブロック進行寸法は,ページ参照領域の内容長方形の前辺又は後辺までそれぞれ拡張される。この場合,region-endの動作は,region-before,region-afterのそれぞれが生成する区画への浮動体に類似する。隣接区画のprecedence特色の値がtrueである場合, これらの隣接区画は,fo:region-endが生成する領域に浮動し,fo:region-endの拡張は,precedence特色の値がtrueに等しい隣接区画の侵入によって,事実上減じられる。

区画参照領域は,区画表示領域の下にある描画域に存在する。reference-orientation特色は,ページ参照領域に関連する区画参照領域の位置関係を決定するために使われる。

区画参照領域のサイズは,区画のoverflow特質の設定に依存する。その特色の値が"auto", "hidden", "error-if-overflow", "paginate"又は"visible"である場合,参照領域のサイズは,表示域のサイズと同じになる。overflow特色の値が"scroll"である場合, 参照領域のサイズは,区画の筆記モードが行内進行方向である場合の表示域のサイズに等しくなるが,ブロック進行方向での制約はない。即ち,区画に結合されるすべての内容の配布するために拡張されるということである。

特色の派生:

区画表示領域の参照方向は,区画を指定する区画マスタのreference-orientation特色の値から生じる。区画参照領域のreference-orientationは,"0"に設定される。それにより,区画表示領域が設定する方向と同じになる。

区画表示領域及び区画参照領域の残りの特色は,特色の値を決定する正規の方法に従って設定される。

制約:

fo:region-endを使用して生成される区画参照領域のサイズ及び位置に関する制約は,[6.4.12 fo:simple-page-master]の"区画に適用できる制約"で解説している。

内容:

EMPTY

このフォーマット化オブジェクトに適用する特性を次に示す。

6.4.18 fo:flow

一般的な使用法:

fo:flowフォーマット化オブジェクトの内容は,ページに配布されるテキストの内容を流す流し込みオブジェクトのシーケンスである。

領域:

fo:flowフォーマット化オブジェクトは領域を生成しない。fo:flowフォーマット化オブジェクトは,fo:flowの各子が返す領域のシーケンスを連結して生成される領域のシーケンスを返す。連結の順序は,fo:flowの下での子の順序付けと同じになる。

制約:

暗黙の流し込みマップは,fo:flowの内容の区画への割当てを決定する。

内容:

(%block;)+

さらに,このフォーマット化オブジェクトは,最初の子として,ゼロ以上のfo:markerのシーケンスをもってもよい。

このフォーマット化オブジェクトに適用される特性を次に示す。

6.4.19 fo:static-content

一般的な使用法:

fo:static-contentフォーマット化オブジェクトは,単一の区画で表示されるか又はページシーケンス内の1ページ以上の類似した名前をもつ区画で繰り返されるフォーマット化オブジェクトのシーケンス又は木を保持する。 これは,一般的には,柱に使用される。

この内容は,割当ての対象となるすべてのページにそのまま繰り返される。

領域:

fo:static-contentフォーマット化オブジェクトは,領域を生成しない。 fo:static-contentフォーマット化オブジェクトは, fo:static-contentの各子が返す領域のシーケンスを連結して生成される領域のシーケンスを返す。連結順は,fo:static-contentの下での子の連結順と同じになる。

制約:

間接的な流し込みマップは,fo:static-contentの内容の区画への割当てを決定する。

fo:static-contentは,複数回処理されてもよい。従って, [4.7.1一般的な順序付け制約]で解説したデフォルトの順序付け制約は,fo:static-contentには適用されない。代わりに,1ページごとに制約を満たさなければならない。特に, Pがページ参照領域であり, Cが領域クラスであり,Sが,fo:static-contentの子孫に返される領域クラスCPのすべての子孫の集合である場合,Sは適正に順序付けされなければならない。

内容:

(%block;)+

このフォーマット化オブジェクトに適用される特性を次に示す。

6.4.20 fo:title

一般的な使用法:

fo:titleフォーマット化オブジェクトは,表題と所定のpage-sequenceとを関連付けるために使用される。この表題は,対話式利用者エージェントによる文書の識別に使用されてもよい。例えば,fo:titleの内容をフォーマットして"表題"ウィンドゥ又は"ツールチップ"に表示することができる。

領域:

このフォーマット化オブジェクトは,その流し込みの子が返す領域のシーケンスを返す。

制約:

返された領域のシーケンスは,fo:titleフォーマット化オブジェクトの各流し込みの子が,子の出現順に返す領域の部分シーケンスの連結でなければならない。

内容:

(#PCDATA|%inline;)*

fo:titleは,fo:float, fo:footnote又はfo:markerを子孫としてもってはならない。

さらに, fo:titleは,絶対配置付けした領域を生成するfo:block-containerを子孫としてもってはならない。

このフォーマット化オブジェクトに適用される特性を次に示す。

6.5 ブロックレベルフォーマット化オブジェクト

6.5.1 導入

fo:blockフォーマット化オブジェクトは,段落,題,図題,表題などをフォーマット化するために使用される。スタイルシートでのfo:blockの使用法を次に示す。

6.5.1.1 例
6.5.1.1.1 章及びセクションの題,段落

入力サンプル:

<doc>
  <chapter>
    <title>Chapter title</title>
    <section>
      <title>First section title</title>
      <paragraph>Section one's first paragraph.</paragraph>
      <paragraph>Section one's second paragraph.</paragraph>
    </section>
    <section>
      <title>Second section title</title>
      <paragraph>Section two's only paragraph.</paragraph>
    </section>
  </chapter>
</doc>

この例では,章題は,ページの先頭に現れる。ページの"space-before"は廃棄される。

章題と第一セクションの題との間の空間は,(8pt,8pt,8pt)である。章題の"space-after"は,初期値が0であるセクションの題の"space-before" よりも優先順位が高い。そのため,"space-before"は廃棄される。

第一セクションの題と,セクション1の第一段落との間の空間は,(6pt,6pt,6pt)である。セクションの題の"space-after"は,段落の"space-before"より優先順位が高い。そのため,"space-before"は廃棄される。

二つの段落間の空間は,(6pt,8pt,10pt)である。第一段落の"space-after"は,その優先順位が次の段落の"space-before"の優先順位と同じであるため,廃棄される。第一段落の"space-after"の最適値は,第二段落の"space-before"の最適値よりも大きい。

第一セクションの第二段落と第二セクションの題との間の空間は, (12pt,12pt,12pt)である。段落の"space-after"は,その優先順位がセクションの題の"space-before"の優先順位と同じであるため,廃棄される。段落の"space-after"の最適値は,セクションの題の"space-before"の最適値よりも小さい。

セクション1の第一段落の第一行の字下げ及びセクション2の唯一の段落の字下げは,ゼロである。セクション1の第二段落の第一行の字下げは,2pcである。

XSL スタイルシート:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:fo="http://www.w3.org/1999/XSL/Format">

<xsl:template match="chapter">
  <fo:block break-before="page">
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="chapter/title">
  <fo:block text-align="center" space-after="8pt"
            space-before="16pt" space-after.precedence="3">
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="section">
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match="section/title">
  <fo:block text-align="center" space-after="6pt"
            space-before="12pt" space-before.precedence="0"
            space-after.precedence="3">
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="paragraph[1]" priority="1">
  <fo:block text-indent="0pc" space-after="7pt"
            space-before.minimum="6pt" space-before.optimum="8pt"
            space-before.maximum="10pt">
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="paragraph">
  <fo:block text-indent="2pc" space-after="7pt"
            space-before.minimum="6pt" space-before.optimum="8pt"
            space-before.maximum="10pt">
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

</xsl:stylesheet>

結果インスタンス: fo: 名前空間内の要素及び属性

<fo:block break-before="page">

  <fo:block text-align="center" space-after="8pt"
    space-before="16pt"
    space-after.precedence="3">Chapter title
  </fo:block>

  <fo:block text-align="center" space-after="6pt"
    space-before="12pt" space-before.precedence="0"
    space-after.precedence="3">First section title
  </fo:block>

  <fo:block text-indent="0pc" space-after="7pt"
    space-before.minimum="6pt" space-before.optimum="8pt"
    space-before.maximum="10pt">Section one's first paragraph.
  </fo:block>

  <fo:block text-indent="2pc" space-after="7pt"
    space-before.minimum="6pt" space-before.optimum="8pt"
    space-before.maximum="10pt">Section one's second paragraph.
  </fo:block>

  <fo:block text-align="center" space-after="6pt"
    space-before="12pt" space-before.precedence="0"
    space-after.precedence="3">Second section title
  </fo:block>

  <fo:block text-indent="0pc" space-after="7pt"
    space-before.minimum="6pt" space-before.optimum="8pt"
    space-before.maximum="10pt">Section two's only paragraph.
  </fo:block>

</fo:block>

6.5.2 fo:block

一般的な使用法:

fo:blockフォーマット化オブジェクトは,通常,段落,見出し,柱,図題,表題の説明文などをフォーマットするために使用される。

領域:

fo:blockフォーマット化オブジェクトは,一つ以上の正規ブロック領域を生成する。fo:blockは,これらの領域,すべての行外ページレベル領域及びfo:blockの子が返すすべての行外参照レベル領域を返す。fo:blockは,[4.7.2 行構築]に従って,fo:blockが返す正規ブロック領域の子として,ゼロ個以上の行領域も生成する。

特色の派生:

half-leading特色の構成要素.minimum, .optimum 及び .maximumは, line-height特性の計算値とtext-altitude及びtext-depth特性の合計の計算値の差が1/2になるように設定される。構成要素 .precedence 及び.conditionalityは,line-height特性からコピーされる。

備考

半リーディングの使用法は,[4.5 行領域]で解説している。

制約:

同じfo:blockフォーマット化オブジェクトが返す正規の子領域は,領域に一つ以上存在しない。

fo:blockが生成する各正規領域の子は,[4.7.2 行構築]で指定されている制約を満たさなければならない。

さらに,このフォーマット化オブジェクトに適用できる特性から派生した特質が強制する制約を満たさなければならない。幾何的構成の制約は,[4 領域モデル]で厳密に定義されている。

内容:

(#PCDATA|%inline;|%block;)*

さらに,このフォーマット化オブジェクトは,ゼロ以上のfo:markerのシーケンスをその最初の子としてもってもよい。fo:initial-property-setが後続することもある。

このフォーマット化オブジェクトに適用される特性を次に示す。

6.5.3 fo:block-container

一般的な使用法:

fo:block-container流し込みオブジェクトは,ブロックレベル参照領域を生成するために使用される。通常,ブロックレベル参照領域には,異なる筆記モードのテキストブロックが包含される。さらに,この流し込みオブジェクトは,その内容を異なる参照方向で回転するために使用される。

備考

この流し込みオブジェクトの使用は,行内進行方向のみを変更する場合は必須ではない。その場合は,Unicode bidiアルゴリズム及びfo:bidi-overrideで十分である。

領域:

fo:block-containerフォーマット化オブジェクトは, 表示域/参照のペアを一つ以上生成する。fo:block-containerは,これらの領域及びfo:block-containerの子が返すすべての行外ページレベル領域を返す。

特色の派生:

fo:block-containerフォーマット化オブジェクトが生成する領域は,is-reference-areaに対して"true"の値をもつ。

表示領域及び参照領域のサイズは,行内進行方向では固定されていなければならない。行内進行方向が,この流し込みオブジェクトが生成する領域が配置される参照領域の行内進行方向と同方向ではない場合は,サイズを指定しなければならない。

制約:

fo:block-containerフォーマット化オブジェクトが生成する各参照領域の子は,fo:block-containerの子が返す正規ブロック領域でなければならず, 適正にスタックされ, 適正に順序付けされなければならない。

fo:block-containerの子が返すすべての行外参照レベル領域は,[6.10.2 fo:float]での記述のとおりに取り扱われる。

内容:

(%block;)+

さらに,絶対配置付けされる領域を生成しないfo:block-containerは,その最初の子として,ゼロ以上のfo:markerのシーケンスをもってもよい。

このフォーマット化オブジェクトに適用される特性を次に示す。

6.6 行内レベルフォーマット化オブジェクト

6.6.1 導入

行内レベルフォーマット化オブジェクトは,テキストの一部をフォーマットしたり,罫線又はリーダを生成するために一般的に使用される。他にも多くの使用法がある。次の例は,行内レベルフォーマット化オブジェクトのこれらの使用法をいくつか示している。

6.6.1.1 例
6.6.1.1.1 段落の第一行のスモールキャップ化

入力サンプル:

<doc>
<p>This is the text of a paragraph that is going to be
presented with the first line in small-caps.</p>
</doc>

XSL スタイルシート:

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:template match="p">
  <fo:block>
    <fo:initial-property-set font-variant="small-caps"/>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

</xsl:stylesheet>

結果インスタンス: fo: 名前空間内の要素及び属性

<fo:block>
  <fo:initial-property-set font-variant="small-caps">
  </fo:initial-property-set>This is the text of a paragraph that is going to be
presented with the first line in small-caps.
</fo:block>
6.6.1.1.2 写真付きの図

入力サンプル:

<doc>
  <figure>
    <photo image="TH0317A.jpg"/>
    <caption>C'ieng Tamlung of C'ieng Mai</caption>
  </figure>
</doc>

この例では,画像(fo:external-graphic)は,中央に寄せられたブロックレベルオブジェクトとして配置される。表題は10mm字下げして,中央に配置される。

XSL スタイルシート:

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:template match="figure">
  <fo:block>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="photo">
  <fo:block text-align="center">
    <fo:external-graphic src="{@image}"/>
  </fo:block>
</xsl:template>

<xsl:template match="caption">
  <fo:block space-before="3pt" text-align="center"
    start-indent="10mm" end-indent="10mm">
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

</xsl:stylesheet>

fo: 要素及び属性木:

<fo:block>
  <fo:block text-align="center">
    <fo:external-graphic src="TH0317A.jpg"/>
  </fo:block>

  <fo:block space-before="3pt" text-align="center" start-indent="10mm"
    end-indent="10mm">C'ieng Tamlung of C'ieng Mai</fo:block>
</fo:block>
6.6.1.1.3 ページ番号付け及びページ番号参照

入力サンプル:

<!DOCTYPE doc SYSTEM "pgref.dtd">
<doc>
  <chapter id="x"><title>Chapter</title>
    <p>Text</p>
  </chapter>
  <chapter><title>Chapter</title>
    <p>For a description of X see <ref refid="x"/>.</p>
  </chapter>
</doc>

この例では,ページ番号が後続する"Page"という単語を包含する下の柱が各ページに存在する。"ref"要素は,"refid"属性による参照が配置されたページの"Page"という単語を生成する。"Page"という単語の後にはページ番号が続く。

XSL スタイルシート:

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:template match="doc">
  <fo:root>
    <fo:layout-master-set>
      <fo:simple-page-master master-name="page"
        page-height="297mm" page-width="210mm"
        margin-top="20mm" margin-bottom="10mm"
        margin-left="25mm" margin-right="25mm">
        <fo:region-body
          margin-top="0mm" margin-bottom="15mm"
          margin-left="0mm" margin-right="0mm"/>
        <fo:region-after extent="10mm"/>
      </fo:simple-page-master>
    </fo:layout-master-set>
    <fo:page-sequence master-reference="page">
      <fo:static-content flow-name="xsl-region-after">
        <fo:block>
          <xsl:text>Page </xsl:text>
          <fo:page-number/>
        </fo:block>
      </fo:static-content>
      <fo:flow flow-name="xsl-region-body">
        <xsl:apply-templates/>
      </fo:flow>
    </fo:page-sequence>
  </fo:root>
</xsl:template>

<xsl:template match="chapter/title">
  <fo:block id="{generate-id(.)}">
    <xsl:number level="multiple" count="chapter" format="1. "/>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="p">
  <fo:block>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="ref">
  <xsl:text>page </xsl:text>
  <fo:page-number-citation refid="{generate-id(id(@refid)/title)}"/>
</xsl:template>

</xsl:stylesheet>

結果インスタンス: fo: 名前空間内の要素及び属性

<fo:root>
  <fo:layout-master-set>
    <fo:simple-page-master master-name="page"
      page-height="297mm" page-width="210mm"
      margin-top="20mm" margin-bottom="10mm"
      margin-left="25mm" margin-right="25mm">
      <fo:region-body margin-top="0mm" margin-bottom="15mm"
        margin-left="0mm" margin-right="0mm"/>
      <fo:region-after extent="10mm"/>
    </fo:simple-page-master>
  </fo:layout-master-set>
  <fo:page-sequence master-reference="page">
    <fo:static-content flow-name="xsl-region-after">
      <fo:block>Page <fo:page-number/>
      </fo:block>
    </fo:static-content>
    <fo:flow flow-name="xsl-region-body">
      <fo:block id="N5">1. Chapter</fo:block>
      <fo:block>Text</fo:block>
      <fo:block id="N13">2. Chapter</fo:block>
      <fo:block>For a description of X see page <fo:page-number-citation refid="N5"/>
      </fo:block>
    </fo:flow>
  </fo:page-sequence>
</fo:root>
6.6.1.1.4 リーダのある目次入力サンプル

入力サンプル:

<doc>
  <chapter><title>Chapter</title>
    <p>Text</p>
    <section><title>Section</title>
    <p>Text</p>
    </section>
    <section><title>Section</title>
    <p>Text</p>
    </section>
  </chapter>
  <chapter><title>Chapter</title>
    <p>Text</p>
    <section><title>Section</title>
    <p>Text</p>
    </section>
    <section><title>Section</title>
    <p>Text</p>
    </section>
  </chapter>
</doc>

この例では,柱テキストとページ番号との間に点線リーダを用いて目次がフォーマットされる。

XSLスタイルシート:

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:template match="doc">
  <!-- create the table of contents -->
  <xsl:apply-templates select="chapter/title" mode="toc"/>
  <!-- do the document -->
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match="chapter/title" mode="toc">
  <fo:block text-align-last="justify">
    <fo:simple-link internal-destination="{generate-id(.)}">
      <xsl:number level="multiple" count="chapter" format="1. "/>
      <xsl:apply-templates/>
    </fo:simple-link>
    <xsl:text> </xsl:text>
    <fo:leader leader-length.minimum="12pt" leader-length.optimum="40pt"
               leader-length.maximum="100%" leader-pattern="dots"/>
    <xsl:text> </xsl:text>
    <fo:page-number-citation ref-id="{generate-id(.)}"/>
  </fo:block>
  <xsl:apply-templates select="../section/title" mode="toc"/>
</xsl:template>

<xsl:template match="section/title" mode="toc">
  <fo:block start-indent="10mm" text-align-last="justify">
    <fo:simple-link internal-destination="{generate-id(.)}">
      <xsl:number level="multiple" count="chapter|section" format="1.1 "/>
      <xsl:apply-templates/>
    </fo:simple-link>
    <xsl:text> </xsl:text>
    <fo:leader leader-length.minimum="12pt" leader-length.optimum="40pt"
               leader-length.maximum="100%" leader-pattern="dots"/>
    <xsl:text> </xsl:text>
    <fo:page-number-citation ref-id="{generate-id(.)}"/>
  </fo:block>
</xsl:template>

<xsl:template match="chapter/title">
  <fo:block id="{generate-id(.)}">
    <xsl:number level="multiple" count="chapter" format="1. "/>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="section/title">
  <fo:block id="{generate-id(.)}">
    <xsl:number level="multiple" count="chapter|section" format="1.1 "/>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="p">
  <fo:block>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

</xsl:stylesheet>

結果インスタンス:fo:namespace内の要素及び属性

<fo:block text-align-last="justify">
  <fo:simple-link internal-destination="N4">1. Chapter
  </fo:simple-link>
  <fo:leader leader-length.minimum="12pt" leader-length.optimum="40pt"
    leader-length.maximum="100%" leader-pattern="dots">
  </fo:leader>
  <fo:page-number-citation ref-id="N4">
  </fo:page-number-citation>
</fo:block>
<fo:block start-indent="10mm" text-align-last="justify">
  <fo:simple-link internal-destination="N11">1.1 Section
  </fo:simple-link>
  <fo:leader leader-length.minimum="12pt" leader-length.optimum="40pt"
    leader-length.maximum="100%" leader-pattern="dots">
  </fo:leader>
  <fo:page-number-citation ref-id="N11">
  </fo:page-number-citation>
</fo:block>
<fo:block start-indent="10mm" text-align-last="justify">
  <fo:simple-link internal-destination="N19">1.2 Section
  </fo:simple-link>
  <fo:leader leader-length.minimum="12pt" leader-length.optimum="40pt"
    leader-length.maximum="100%" leader-pattern="dots">
  </fo:leader>
  <fo:page-number-citation ref-id="N19">
  </fo:page-number-citation>
</fo:block>
<fo:block text-align-last="justify">
  <fo:simple-link internal-destination="N28">2. Chapter
  </fo:simple-link>
  <fo:leader leader-length.minimum="12pt" leader-length.optimum="40pt"
    leader-length.maximum="100%" leader-pattern="dots">
  </fo:leader>
  <fo:page-number-citation ref-id="N28">
  </fo:page-number-citation>
</fo:block>
<fo:block start-indent="10mm" text-align-last="justify">
  <fo:simple-link internal-destination="N35">2.1 Section
  </fo:simple-link>
  <fo:leader leader-length.minimum="12pt" leader-length.optimum="40pt"
    leader-length.maximum="100%" leader-pattern="dots">
  </fo:leader>
  <fo:page-number-citation ref-id="N35">
  </fo:page-number-citation>
</fo:block>
<fo:block start-indent="10mm" text-align-last="justify">
  <fo:simple-link internal-destination="N43">2.2 Section
  </fo:simple-link>
  <fo:leader leader-length.minimum="12pt" leader-length.optimum="40pt"
    leader-length.maximum="100%" leader-pattern="dots">
  </fo:leader>
  <fo:page-number-citation ref-id="N43">
  </fo:page-number-citation>
</fo:block>

<fo:block id="N4">1. Chapter
</fo:block>

<fo:block>Text
</fo:block>

<fo:block id="N11">1.1 Section
</fo:block>

<fo:block>Text
</fo:block>

<fo:block id="N19">1.2 Section
</fo:block>

<fo:block>Text
</fo:block>

<fo:block id="N28">2. Chapter
</fo:block>

<fo:block>Text
</fo:block>

<fo:block id="N35">2.1 Section
</fo:block>

<fo:block>Text
</fo:block>

<fo:block id="N43">2.2 Section
</fo:block>

<fo:block>Text
</fo:block>

6.6.2 fo:bidi-override

一般的な使用法:

fo:bidi-overrideフォーマット化オブジェクトを使用するのは,Unicode-BIDIアルゴリズムが使用できない場合である。このフォーマット化オブジェクトは,テキストの文字列を固有の方向で書き込ませる。

領域:

fo:bidi-overrideフォーマット化オブジェクトは,一つ以上の正規行内領域を生成する。fo:bidi-overrideはこれらの領域, すべての行外ページレベル領域, 及びfo:bidi-overrideの子が返すすべての行外参照レベル領域を返す。

特色の派生:

方向特色は,"writing-mode", "direction", 及び"unicode-bidi"特質から派生する。これは[5.5.3 筆記モード及び方向特性]で解説している。

制約:

同じfo:bidi-overrideフォーマット化オブジェクトが返す正規の子領域は領域に一つ以上存在しない。

fo:bidi-overrideが返す各正規領域の子は,[4.7.3 行内構築]で指定される制約を満たさなければならない。

内容:

(#PCDATA|%inline;|%block;)*

さらに,このフォーマット化オブジェクトは,ゼロ以上のfo:markerのシーケンスを最初の子としてもってもよい。

fo:leaderの子孫又はfo:footnoteのfo:inlineの子の子孫であるfo:bidi-overrideは, fo:inline-containerである先祖がより近くに存在しない場合,ブロックレベルの子をもたないこともある。

このフォーマット化オブジェクトに適用される特性を次に示す。

6.6.3 fo:character

一般的な使用法:

fo:character流し込みオブジェクトは,表示のグリフにマップされる文字を表す。これは,フォーマッタに対する最小の単位である。

結果木がフォーマット化オブジェクトの木として解釈される場合,結果木の文字は,文字属性が文字のUnicode表示に等しい型fo:characterの空要素であるものとして取り扱われる。通常初期値である文字特性の"auto"値のセマンティクスは,Unicodeコードポイントに基づいている。実装固有の方法で上書きを指定してもよい。

備考

スタイルシートでは,デフォルトのマッピングを明示的に上書きするために,fo:characterの明示的な生成を使用してもよい。

Unicode タグ文字をサポートする必要はない。

備考

Unicode3.1版では,実際に,HTML,XMLなど,言語タグ付けのための代替方法を提供するすべてのプロトコルでUnicodeタグ文字を使用しないことになっている。Unicode TR20 ([UNICODE TR20])も,Unicodeタグ文字をマーク付けで使用するのは適切ではないことを極めて明確に宣言している。

領域:

fo:characterフォーマット化オブジェクトは,一つ以上の正規行内領域を生成し,返す。

備考

単一の文字が,他のある文字に対して,接頭辞のグリフも接尾辞のグリフも生成するスクリプト内では,一つ以上の行内領域が生成されることがある。

制約:

領域の寸法は,グリフのフォントメトリックによって決定される。

"treat-as-wordspace"の値が"true"であるfo:characterをフォーマットする場合,利用者エージェントは,領域の行内進行寸法の決定に異なるメソッドを使用してもよい。

備考

このようなメソッドは,通常,フォントに格納されるword-space値又はフォーマッタ定義のword-space値を使用する。

内容:

EMPTY

このフォーマット化オブジェクトに適用される特性を次に示す。

6.6.4 fo:initial-property-set

一般的な使用法:

fo:initial-property-set補助フォーマット化オブジェクトは,fo:blockの第一行にフォーマット化特性を指定する。

備考

このフォーマット化オブジェクトは,CSSのfirst-line擬似要素に類似している。

原規定の今後の版では,行数を制御する特性又はこれらの初期特性が適用される"深さ"が追加される可能性がある。

領域:

fo:initial-property-setフォーマット化オブジェクトは,領域を生成せず,返さない。これは,is-first特色の値が"true"である領域及びfo:initial-property-setの親のfo:blockが生成した領域の最初の行領域に適用できる特色の集合を保持するに過ぎない。

特色の派生:

fo:initial-property-setの特色は,第一行に制約を加える特色として考慮される。即ち,fo:blockの子行内フォーマット化オブジェクト又は行区切りの場合におけるそれらの一部が,第一行のフォーマット化に使用され,それらの特色を用いて,fo:wrapperにfo:blockの直接の子として囲まれるものとされる。

制約:

なし。

内容:

EMPTY

このフォーマット化オブジェクトに適用される特性を次に示す。

6.6.5 fo:external-graphic

一般的な使用法:

fo:external-graphic流し込みオブジェクトは,画像データがfo:element木の外部に存在する画像に使用される。

領域:

fo:external-graphicフォーマット化オブジェクトは,一つの行内レベル表示領域及び外部画像を包含する一つの参照領域を生成し,返す。行内レベル領域は,[4.2.3 幾何的定義]で定義するとおり,大割付け長方形を使用する。

備考

fo:blockで囲むことによって,fo:external-graphicをブロックレベルに配置してもよい。

"max-height"又は"line-height"の"行スタック化方策"は,通常,fo:external-graphicの内容で行を一つ以上スタックするために使用される。

制約:

表示域のサイズは,block-progression-dimension特色及びinline-progression-dimension特色によって決定される。 値が"auto"であれば, 画像の内容サイズが使用される。

画像の内容サイズは,画像の組込みサイズをとり,content-height, content-width, 及びscalingの各特色が指定するとおりに基準化することによって決定される。content-height又はcontent-widthのうち,一つが"auto"ではない場合,指定されたauto以外の値から計算されるのと同じ倍率が両方向に等しく適用される。

一旦基準化されると,参照領域は,text-align及びdisplay-align特色を使用して,表示領域に相対して位置調整される。参照領域が表示領域に対して大きすぎる場合,画像が領域に適合しているものとして位置調整され,overflow特色が切取り,スクロールバーなどを制御する。

画像フォーマットが画像の組込みサイズを指定しない場合,サイズは実装定義の方法で決定される。

備考

例えば,ラスタ化された画像には,1ピクセルのサイズとして,1/96"のサイズを使用してもよい。

内容:

EMPTY

このフォーマット化オブジェクトに適用される特性を次に示す。

6.6.6 fo:instream-foreign-object

一般的な使用法:

fo:instream-foreign-object流し込みオブジェクトは,行内画像又はその他の"汎用"オブジェクトに使用される。この場合,オブジェクトデータは,通常,XSL以外の名前空間内にあるXML要素の副木など,fo:instream-foreign-objectの子孫として存在する。

備考

一般的なフォーマットはSVGである。

領域:

fo:instream-foreign-objectフォーマット化オブジェクトは,インストリーム外部オブジェクトを包含する一つの行内表示領域及び一つの参照領域を生成し,返す。行内レベル領域は,[4.2.3 幾何的定義]で定義されているとおり,大割付け長方形を使用する。

制約:

表示域のサイズは,block-progression-dimension及びinline-progression-dimension特色によって決定される。値が"auto"の場合, インストリーム外部オブジェクトの内容サイズが使用される。

インストリーム外部オブジェクトの内容サイズは,オブジェクトの組込みサイズをとり, content-height, content-width, 及びscalingの各特色が指定するとおりに基準化することによって決定される。content-height又はcontent-widthのうち,一つが"auto"ではない場合,指定されたauto以外の値から計算されるのと同じ倍率が両方向に等しく適用される。

一旦基準化されると, 参照領域は,text-align及びdisplay-align特色を使用して,表示領域に相対して位置調整される。参照領域が表示域に対して大きすぎる場合,インストリーム外部オブジェクトは適合しているものとして位置調整され, overflow特色が切取り,スクロールバーなどを制御する。

instream-foreign-objectがオブジェクトの組込みサイズを指定しない場合,サイズは実装定義の方法で決定される。

内容:

fo:instream-foreign-object流し込みオブジェクトは,XSL以外の名前空間から生じる子をもつ。この子の許容される構造はその名前空間に対して定義されたものである。

fo:instream-foreign-object流し込みオブジェクトは,XSL以外の名前空間にある追加属性をもってもよい。xsl定義の特性と同様,これらは流し込みオブジェクトの内容のプロセサに利用できる。それらのセマンティクスはその名前空間によって定義される。

このフォーマット化オブジェクトに適用される特性を次に示す。

6.6.7 fo:inline

一般的な使用法:

fo:inlineフォーマット化オブジェクトは,通常,背景のあるテキストの一部をフォーマットするか,境界内にそれを囲むために使用される。

領域:

fo:inlineフォーマット化オブジェクトは,一つ以上の正規行内領域を生成する。fo:inlineは,これらの領域,すべての行外ページレベル領域及びfo:inlineの子が返すすべての行外参照レベル領域を返す。

制約:

同一のfo:inlineフォーマット化オブジェクトが返す正規の子領域を一つ以上もつ領域は,存在しない。

fo:inlineが返す各正規領域の子は,[4.7.3 行内構築]で指定される制約を満たさなければならない。

さらに,このフォーマット化オブジェクトに適用できる特性から派生する特色が強要する制約も満たさなければならない。幾何的制約は,[4 領域モデル]で厳密に定義されている。

内容:

(#PCDATA|%inline;|%block;)*

さらに,このフォーマット化オブジェクトは,ゼロ以上の fo:markerのシーケンスをその最初の子としてもってもよい。

fo:footnoteの子であるfo:inlineは,ブロックレベルの子をもたなくてもよい。 fo:leaderの子孫又はfo:footnoteのfo:inlineの子の子孫であるfo:inlineは, fo:inline-containerである先祖がより近くにない場合は,ブロックレベルの子をもたなくてもよい。

このフォーマット化オブジェクトに適用される特性を次に示す。

6.6.8 fo:inline-container

一般的な使用法:

fo:inline-container流し込みオブジェクトは,通常,筆記モードが異なるテキストブロックを包含する行内参照領域の生成に使用される。

備考

双方向性テキストにこの流し込みオブジェクトを必ず使用しなければならないわけではない。この場合は,Unicode BIDIアルゴリズム及びfo:bidi-overrideで十分対応できる。

領域:

fo:inline-containerフォーマット化オブジェクトは,表示域/参照のペアを一つ以上生成する。 fo:inline-containerが生成する表示域は,正規行内レベル領域であり,[4.2.3 幾何的定義]で定義されるとおり,大割付け長方形を使用する。fo:inline-containerは,これらの領域及びfo:inline-containerの子が返すすべての行外ページレベル領域を返す。

特色の派生:

fo:inline-containerフォーマット化オブジェクトが生成する領域は,is-reference-areaに"true"を指定する。

表示領域及び参照領域のサイズは,行内進行方向で固定されなければならない。行内進行方向が,この流し込みオブジェクトが生成する領域が配置される参照領域の行内進行方向と同じではない場合,このサイズを指定しなければならない。

このオブジェクトのベースライン表の値の計算方法を次に示す。

baseline

筆記モードのブロック進行方向が親のブロック進行方向と同じである場合,配置点は,最初の子孫の行領域の主要ベースラインの位置に存在する。このような行領域が存在しない場合,配置点は,割付け長方形の後辺の位置に存在する。

筆記モードのブロック進行方向が親のブロック進行方向と同じではない場合,配置点は,内容長方形の前辺と後辺間の半分の位置に存在する。

before-edge

配置点は,割付け長方形の前辺の位置に存在する。

text-before-edge

配置点は,候補となる二つの辺から選択された割付け長方形の前辺に最も近い位置に存在する。筆記モードのブロック進行方向が親のブロック進行方向と同じである場合,候補となる辺は,内容長方形の前辺及び後辺である。そうでない場合,候補となる辺は,内容長方形の開始辺及び終了辺である。

middle

配置点は,割付け長方形の前辺と後辺間の半分の位置に存在する。

after-edge

配置点は,割付け長方形の後辺の位置に存在する。

text-after-edge

配置点は,候補となる二つの辺から選択された割付け長方形の後辺に最も近い位置に存在する。筆記モードのブロック進行方向が親のブロック進行方向と同じである場合,候補となる辺は,内容長方形の前辺及び後辺である。そうでない場合,候補となる辺は,内容長方形の開始辺及び終了辺である。

ideographic

配置点は,割付け長方形の前辺から割付け長方形の後辺までの距離の7/10の位置に存在する。

alphabetic

配置点は,割付け長方形の前辺から割付け長方形の後辺までの距離の6/10の位置に存在する。

hanging

配置点は,割付け長方形の前辺から割付け長方形の後辺までの距離の2/10の位置に存在する。

mathematical

配置点は,割付け長方形の前辺から割付け長方形の後辺までの距離の5/10の位置に存在する。

制約:

同一のfo:inline-containerフォーマット化オブジェクトが返す正規の子領域を一つ以上もつ領域は存在しない。

fo:inline-containerフォーマット化オブジェクトが生成する各参照領域の子は, fo:inline-containerの子が返す正規ブロック領域でなければならず,適正にスタックされ, 適正に順序付けされなければならない。

fo:inline-containerの子が返すすべての行外参照レベル領域は,[6.10.2 fo:float]で解説しているとおりに扱われる。

内容:

(%block;)+

さらに,このフォーマット化オブジェクトは,ゼロ以上の fo:markerのシーケンスを最初の子としてもってもよい。

このフォーマット化オブジェクトに適用される特性を次に示す。

6.6.9 fo:leader

一般的な使用法:

fo:leaderフォーマット化オブジェクトは:

領域:

fo:leaderフォーマット化オブジェクトは,単一の正規行内領域を生成し,返す。

特色の派生:

leader-patternの値が"use-content"である場合,内容長方形の ブロック進行寸法は,行領域の場合と同じ方法で決定される。それ以外の場合,rule-thickness特色によって決定される。

制約:

リーダの最小の長さが長すぎて,行領域内に配置できない場合は,リーダは新しい行となる。リーダの最小の長さが長すぎて,それだけで行に配置できない場合,そのコンテナのoverflow特色に従って,行からはみ出し,場合によっては,参照領域をはみ出すことになる。

fo:leaderフォーマット化オブジェクトは,fo:leadersが入れ子になっていないときを除いて,すべての行内フォーマット化オブジェクト及び文字を子供としてもつことができる。leader-pattern特色の値が"use-content"ではない場合,その子は,無視される。

備考

leader-pattern特色の値が"use-content"であり,fo:leaderに子がない場合,リーダは,空白で埋められることになる。

fo:leaderが生成する行内領域の寸法は,行内進行方向で,最小ではleader-length.minimumとなり,最大ではleader-length.maximumとなる。

行領域に行頭行末揃えの指定がされている行領域に対しては,行頭行末揃えされた行領域は,fo:leadersが生成したすべての行内領域のleader-alignment特色に従わなければならない。

leader-pattern特色の値が"dots" 又は "use-content"である場合, 次の制約が適用される。

fo:leaderが生成する行内領域は,fo:leaderの子が返す領域又はleader-pattern特色で指定されるパタンをフォーマット化することによって獲得され,整数回繰り返される領域を子としてもつ。たった一度の繰り返しによる幅が行内進行方向の行内領域の寸法よりも大きい場合,行内領域は空白で埋められることになる。子領域のspace-start及びspace-endは,leader-pattern-width及びleader-alignment特色で指定される制約を考慮して設定される。

備考

リーダを広げて行のすべての利用可能なスペースを埋めたい場合,リーダの最大の長さの指定は,少なくとも列幅と同じになる。

備考

リーダの揃えは,スクリプトのデフォルト揃えとは異なるため,スクリプト固有であってもよく,どの揃え点が必須であるかの指示を必須としてもよい。例えば,インド語のスクリプトを使用する場合,リーダはアルファベットのベースラインに配置される。

備考

fo:leader はfo:block内にラップすることができ,リーダを含む行領域を用いてブロック領域を生成して,ブロック領域を分離したり装飾する罫線を生成する。

内容:

(#PCDATA|%inline;)*

内容は,直接の子としても,子孫としても,fo:leader, fo:inline-container, fo:block-container, fo:float, fo:footnote又はfo:markerを包含してはならない。

このフォーマット化オブジェクトに適用される特性を次に示す。

6.6.10 fo:page-number

一般的な使用法:

fo:page-numberフォーマット化オブジェクトは,その内容が行内領域が配置されるページのページ番号である行内領域を獲得するために使用される。

領域:

fo:page-numberフォーマット化オブジェクトは,単一の正規行内領域を生成し,返す。

制約:

この行内領域の子領域は,fo:character流し込みオブジェクトから構成される結果木素片をフォーマットした結果と同じである。これは,ページ番号の文字列の各文字に対して一つ存在し,"character"特性のみが指定される。

ページ番号の文字列は,番号に従って,行内領域が配置されるページのページ番号を先祖のfo:page-sequenceの文字列変換特性に変換することによって,獲得される。

備考

変換特性は,: [7.24.1 "format"], [7.24.2 "grouping-separator"], [7.24.3 "grouping-size"], [7.24.4 "letter-value"], [7.9.1 "country"], and [7.9.2 "language"]. である。

内容:

EMPTY

このフォーマット化オブジェクトに適用される特性を次に示す。

6.6.11 fo:page-number-citation

一般的な使用法:

fo:page-number-citationは,引用されたフォーマット化オブジェクトが返す最初の正規領域を包含するページのページ番号を参照するために使用される。

備考

これを使用して,目次,相互参照及び索引入力のページ番号を提供してもよい。

領域:

fo:page-number-citationフォーマット化オブジェクトは,単一の正規行内領域を生成し,返す。

制約:

引用ページ番号とは,fo:page-number-citation(参照フォーマット化オブジェクト)のref-id特色に対応するid特色を伴うフォーマット化オブジェクトにより返される最初の正規領域を子孫として含むページの番号をいう。

引用ページ番号文字列は,引用ページ番号を,番号に従って,参照フォーマット化オブジェクトの先祖fo:page-sequenceの文字列変換特性に変換することによって獲得される。

備考

変換特性は: [7.24.1 "format"], [7.24.2 "grouping-separator"], [7.24.3 "grouping-size"], [7.24.4 "letter-value"], [7.9.1 "country"], and [7.9.2 "language"]. である。

生成された行内領域の子領域は,fo:character流し込みオブジェクトから構成される結果木素片をフォーマットした結果と同じになる。即ち,引用ページ番号文字列の各文字に一つ存在し,"character"特質のみが指定されている。

内容:

EMPTY

このフォーマット化オブジェクトに適用される特性を次に示す。

6.7 表対応のフォーマット化オブジェクト

6.7.1 導入

表の構築に使用されるフォーマット化オブジェクトは,fo:table-and-caption, fo:table, fo:table-column, fo:table-caption, fo:table-header, fo:table-footer, fo:table-body, fo:table-row 及びfo:table-cellである。結果木構造を次に示す。

図6.6 表のフォーマット化オブジェクトの木表現

6.7.1.1 例
6.7.1.1.1 中央揃え及び字下げのある簡単な表

Input sample:

<doc>
<table>
<caption><p>Caption for this table</p></caption>
<tgroup cols="3" width="325pt">
<colspec colwidth="100pt"/>
<colspec colwidth="150pt"/>
<colspec colwidth="75pt"/>
<tbody>
<row>
<entry><p>Cell 1</p></entry>
<entry><p>Cell 2</p></entry>
<entry><p>Cell 3</p></entry>
</row>
</tbody>
</tgroup>
</table>
</doc>

表及び見出しは,start-indent="100pt"及びend-indent="0pt"という字下げ間で利用可能なスペースの中央に揃えられる。中央揃え及び字下げを,見出し及びセルの内容に適用するのは望ましくない。

XSLスタイルシート:

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:attribute-set name="inside-table">
  <xsl:attribute name="start-indent">0pt</xsl:attribute>
  <xsl:attribute name="text-align">start</xsl:attribute>
</xsl:attribute-set>

<xsl:template match="p">
  <fo:block>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="table">
  <fo:table-and-caption text-align="center" start-indent="100pt">
    <xsl:apply-templates/>
  </fo:table-and-caption>
</xsl:template>

<xsl:template match="caption">
  <fo:table-caption xsl:use-attribute-sets="inside-table">
    <xsl:apply-templates/>
  </fo:table-caption>
</xsl:template>

<xsl:template match="tgroup">
  <fo:table width="{@width}" table-layout="fixed">
    <xsl:apply-templates/>
  </fo:table>
</xsl:template>

<xsl:template match="colspec">
  <fo:table-column column-width="{@colwidth}">
    <xsl:attribute name="column-number">
      <xsl:number count="colspec"/>
    </xsl:attribute>
  </fo:table-column>
</xsl:template>

<xsl:template match="tbody">
  <fo:table-body xsl:use-attribute-sets="inside-table">
    <xsl:apply-templates/>
  </fo:table-body>
</xsl:template>

<xsl:template match="row">
  <fo:table-row>
    <xsl:apply-templates/>
  </fo:table-row>
</xsl:template>

<xsl:template match="entry">
  <fo:table-cell>
    <xsl:apply-templates/>
  </fo:table-cell>
</xsl:template>

</xsl:stylesheet>

結果インスタンス:fo:namespace内の要素及び属性結果インスタンス:fo:namespace内の要素及び属性

<fo:table-and-caption text-align="center" start-indent="100pt">

  <fo:table-caption start-indent="0pt" text-align="start">
    <fo:block>Caption for this table
    </fo:block>
  </fo:table-caption>

  <fo:table width="325pt" table-layout="fixed">

    <fo:table-column column-width="100pt" column-number="1">
    </fo:table-column>
    <fo:table-column column-width="150pt" column-number="2">
    </fo:table-column>
    <fo:table-column column-width="75pt" column-number="3">
    </fo:table-column>

    <fo:table-body start-indent="0pt" text-align="start">

    <fo:table-row>

    <fo:table-cell>
    <fo:block>Cell 1
    </fo:block>
    </fo:table-cell>
    <fo:table-cell>
    <fo:block>Cell 2
    </fo:block>
    </fo:table-cell>
    <fo:table-cell>
    <fo:block>Cell 3
    </fo:block>
    </fo:table-cell>

    </fo:table-row>

    </fo:table-body>

  </fo:table>

</fo:table-and-caption>
6.7.1.1.2 相対列幅規定のある単純な表

この例は,表要素に,単純な"Oasis-table-model-like"のマーク付けを使用している。列幅は,完全相対列幅規定を使用して,指定されている。

入力サンプル:

<doc>
<table>
<tgroup cols="3">
<colspec colname="col1" colwidth="1*"/>
<colspec colname="col2" colwidth="2*+2pi"/>
<colspec colname="col3" colwidth="72"/>
<tbody>
<row>
<entry colnum="1" valign="top"><p>Cell 1</p></entry>
<entry colnum="2" valign="middle" align="center"><p>Cell 2</p></entry>
<entry colnum="3" align="center"><p>Cell 3</p></entry>
</row>
</tbody>
</tgroup>
</table>
</doc>

XSL スタイルシート:

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:template match="p">
  <fo:block>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="table">
  <fo:table width="12cm" table-layout="fixed">
    <xsl:apply-templates/>
  </fo:table>
</xsl:template>

<xsl:template match="colspec">
  <fo:table-column>
    <xsl:attribute name="column-number">
      <xsl:number count="colspec"/>
    </xsl:attribute>
    <xsl:attribute name="column-width">
      <xsl:call-template name="calc.column.width">
        <xsl:with-param name="colwidth">
          <xsl:value-of select="@colwidth"/>
        </xsl:with-param>
      </xsl:call-template>
    </xsl:attribute>
  </fo:table-column>
</xsl:template>

<xsl:template match="tbody">
  <fo:table-body>
    <xsl:apply-templates/>
  </fo:table-body>
</xsl:template>

<xsl:template match="row">
  <fo:table-row>
    <xsl:apply-templates/>
  </fo:table-row>
</xsl:template>

<xsl:template match="entry">
  <fo:table-cell column-number="{@colnum}">
    <xsl:if test="@valign">
      <xsl:choose>
        <xsl:when test="@valign='middle'">
          <xsl:attribute name="display-align">center</xsl:attribute>
        </xsl:when>
        <xsl:otherwise>
          <xsl:attribute name="display-align">
            <xsl:value-of select="@valign"/>
          </xsl:attribute>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:if>
    <xsl:if test="@align">
      <xsl:attribute name="text-align">
        <xsl:value-of select="@align"/>
      </xsl:attribute>
    </xsl:if>
    <xsl:apply-templates/>
  </fo:table-cell>
</xsl:template>


<xsl:template name="calc.column.width">
<!-- **
     * <p>Calculate an XSL FO table column-width specification from a
     * full relative table column-width specification.</p>
     *
     * <p>Table column-widths are in the following basic
     * forms:</p>
     *
     * <ul>
     * <li><b>99.99units</b>, a fixed length-specifier.</li>
     * <li><b>99.99</b>, a fixed length-specifier without any units.</li>
     * <li><b>99.99*</b>, a relative length-specifier.</li>
     * <li><b>99.99*+99.99units</b>, a combination of both.</li>
     * </ul>
     *
     * <p>The units are points (pt), picas (pi), centimeters (cm),
     * millimeters (mm), and inches (in). These are the same units as XSL,
     * except that XSL abbreviates picas "pc" instead of "pi". If a length
     * specifier has no units, the default unit (pt) is assumed.</p>
     *
     * <p>Relative length-specifiers are represented in XSL with the
     * proportional-column-width() function.</p>
     *
     * <p>Here are some examples:</p>
     *
     * <ul>
     * <li>"36pt" becomes "36pt"</li>
     * <li>"3pi" becomes "3pc"</li>
     * <li>"36" becomes "36pt"</li>
     * <li>"3*" becomes "proportional-column-width(3)"</li>
     * <li>"3*+2pi" becomes "proportional-column-width(3)+2pc"</li>
     * <li>"1*+2" becomes "proportional-column-width(1)+2pt"</li>
     * </ul>
     *
     * @param colwidth The column width specification.
     *
     * @returns The XSL column width specification.
     * -->
  <xsl:param name="colwidth">1*</xsl:param>

  <!-- Ok, the colwidth could have any one of the following forms: -->
  <!--        1*       = proportional width -->
  <!--     1unit       = 1.0 units wide -->
  <!--         1       = 1pt wide -->
  <!--  1*+1unit       = proportional width + some fixed width -->
  <!--      1*+1       = proportional width + some fixed width -->

  <!-- If it has a proportional width, translate it to XSL -->
  <xsl:if test="contains($colwidth, '*')">
    <xsl:text>proportional-column-width(</xsl:text>
    <xsl:value-of select="substring-before($colwidth, '*')"/>
    <xsl:text>)</xsl:text>
  </xsl:if>

  <!-- Now get the non-proportional part of the specification -->
  <xsl:variable name="width-units">
    <xsl:choose>
      <xsl:when test="contains($colwidth, '*')">
        <xsl:value-of
             select="normalize-space(substring-after($colwidth, '*'))"/>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="normalize-space($colwidth)"/>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:variable>

  <!-- Now the width-units could have any one of the following forms: -->
  <!--                 = <empty string> -->
  <!--     1unit       = 1.0 units wide -->
  <!--         1       = 1pt wide -->
  <!-- with an optional leading sign -->

  <!-- Get the width part by blanking out the units part and discarding -->
  <!-- whitespace. -->
  <xsl:variable name="width"
       select="normalize-space(translate($width-units,
                                         '+-0123456789.abcdefghijklmnopqrstuvwxyz',
                                         '+-0123456789.'))"/>

  <!-- Get the units part by blanking out the width part and discarding -->
  <!-- whitespace. -->
  <xsl:variable name="units"
       select="normalize-space(translate($width-units,
                                         'abcdefghijklmnopqrstuvwxyz+-0123456789.',
                                         'abcdefghijklmnopqrstuvwxyz'))"/>

  <!-- Output the width -->
  <xsl:value-of select="$width"/>

  <!-- Output the units, translated appropriately -->
  <xsl:choose>
    <xsl:when test="$units = 'pi'">pc</xsl:when>
    <xsl:when test="$units = '' and $width != ''">pt</xsl:when>
    <xsl:otherwise><xsl:value-of select="$units"/></xsl:otherwise>
  </xsl:choose>
</xsl:template>

</xsl:stylesheet>

結果インスタンス: fo: 名前空間内の要素及び属性

<fo:table width="12cm" table-layout="fixed">
  <fo:table-column column-number="1" column-width="proportional-column-width(1)">
  </fo:table-column>
  <fo:table-column column-number="2" column-width="proportional-column-width(2)+2pc">
  </fo:table-column>
  <fo:table-column column-number="3" column-width="72pt">
  </fo:table-column>
  <fo:table-body>
    <fo:table-row>
      <fo:table-cell column-number="1" display-align="top">
        <fo:block>Cell 1
        </fo:block>
      </fo:table-cell>
      <fo:table-cell column-number="2" display-align="center" text-align="center">
        <fo:block>Cell 2
        </fo:block>
      </fo:table-cell>
      <fo:table-cell column-number="3" text-align="center">
        <fo:block>Cell 3
        </fo:block>
      </fo:table-cell>
    </fo:table-row>
  </fo:table-body>
</fo:table>

6.7.2 fo:table-and-caption

一般的な使用法:

fo:table-and-caption流し込みオブジェクトは,表題とともに表をフォーマットするために使用される。

備考

fo:table-and-captionは,fo:inline-container内に囲むことによって,行内に 配置されてもよい。

備考

このフォーマット化オブジェクトは,表題及び表を囲むCSS匿名ボックスに対応する。

領域:

fo:table-and-captionフォーマット化オブジェクトは,正規ブロック領域を一つ以上生成する。fo:table-and-captionはこれらの領域,すべての行外ページレベル領域及びfo:table-and-captionの子が返すすべての行外参照レベル領域を返す。

制約:

同じfo:table-and-captionフォーマット化オブジェクトが返す正規の子領域が一つ以上存在する領域はない。

fo:table-and-captionが生成する領域の子は,一つ又は二つである。一つは表題の領域であり,一つは表自体の領域である。これらは,caption-side特色が指定するとおりに,互いに相対して配置される。その配置は,text-align特色が指定するとおりに,生成領域の内容長方形に関連する。

内容:

(table-caption?,table)

さらに,このフォーマット化オブジェクトは,ゼロ以上の fo:markerのシーケンスをその最初の子としてもってもよい。

このフォーマット化オブジェクトに適用される特性を次に示す。

6.7.3 fo:table

一般的な使用法:

fo:table流し込みオブジェクトは,表の材料をフォーマットするために使用される。

fo:table流し込みオブジェクト及びその子流し込みオブジェクトは,"行優先"の方法で表の視覚レイアウトを作成する。完成した表が,行進行方向及び列進行方向で,各セルがグリッド単位を一つ以上占有する行及び列のグリッドから構成されるようにみられる。

表の内容は,ヘッダ(任意),フッタ(任意)及び一つ以上の本体に分割される。特性は,ヘッダ及びフッタを表の区切りで繰り返すのがよいかどうかを指定する。これらの各部分は,表のグリッド内の行を一つ以上占有する。

領域:

fo:tableフォーマット化オブジェクトは,一つ以上の正規 ブロック領域を生成し,返す。さらに,fo:tableはすべての行外ページレベル領域及びfo:tableの子が返す行外参照レベル領域を返す。

fo:tableフォーマット化オブジェクトが生成し,返す領域が子としてもつ領域は:

これらの領域には,CSS2規定の17.5.1に従って決定されるレンダリング順を制御するz指標が存在する。(http://www.w3.org/TR/REC-CSS2/tables.html#table-layers)

備考

跨いだ先のセルが,占有された各グリッド単位で,異なる背景をもってもよい。

特色の派生:

fo:tableフォーマット化オブジェクトが生成し,返す領域は,is-reference-areaの値を"true"に指定する。

列進行方向及び行進行方向は,writing-mode特色により決定される。列に,行内進行方向を使用し,行に,ブロック進行方向を使用する。

表の境界特質を派生するメソッドは,"border-collapse"特性によって指定される。

"border-collapse"特性の値が"separate"である場合,境界は,二つの構成要素から成る。最初のものは,最外部の表グリッドの境界線に一致する内部辺を用いて配置され,"border-separation"特性の値の半分の幅をもち,fo:tableの"background"特性に従って,埋められる。第二のものは,表の各側については,表に指定された境界に基づいた境界が,最外部の表グリッド境界線の外側に配置される。

"border-collapse"特性の値が"collapse" である場合,境界は,各区分について,セルレベルで決定される。

備考

"collaspe-with-precedence"を指定し,fo:tableの境界規定に高い優先順位を適切に指定することによって,原規定をすべての境界区分で確実に使用するようにしてもよい。

制約:

同一のfo:tableフォーマット化オブジェクトが返す正規の子領域を一つ以上もつ領域はない。

表の内容長方形の行内進行寸法は,表グリッドの列の行内進行寸法の合計である。これらの行内進行寸法の決定に使用されるメソッドは,table-layout 及びinline-progression-dimension特色の値によって,次の方法で決定される。

inline-progression-dimension="auto" table-layout="auto"

自動表組みを使用する。

inline-progression-dimension="auto" table-layout="fixed"

自動表組みを使用する。

inline-progression-dimension=<length> or <percentage> table-layout="auto"

自動表組みを使用する。

inline-progression-dimension=<length> or <percentage> table-layout="fixed"

固定表組みを使用する。

自動表組み及び固定表組みは,CSS2規定の17.5.2で定義される。(http://www.w3.org/TR/REC-CSS2/tables.html#width-layout)

表のブロック進行寸法の決定メソッドは,block-progression-dimension特色による。

備考

CSS2規定は,明示的に指定された表のブロック進行寸法と内容のブロック進行寸法との間にミスマッチが存在する場合,どのように振舞うのがよいかを明示的に指定していない。

備考

固定表組みを使用する場合は,"proportional-column-width()"関数しか使用できない。

明示的な幅が未知である表にプロポーショナル列幅を使用したい場合,行内進行寸法を "auto"に指定することはできない。代わりに, 幅をパーセントで指定しなければならない。例えば,table-layout="fixed"及びinline-progression-dimension="100%"と設定することにより,現文脈でできる限り大きい表を生成できると同時に,プロポーショナル列幅を使用できることになる。

備考

特に自動表組みを使用する場合,幅にパーセントを使用した結果の予測ができないこともある。

二つの表セルが重なる場合は,エラーである。

備考

このように表セルが重なるのは,同じ列番号が同じ行の異なる二つのセルに割り当てられるため,又は列若しくは行の跨りによって表セルが重なるためである。

内容:

(table-column*,table-header?,table-footer?,table-body+)

さらに,このフォーマット化オブジェクトは,ゼロ以上のfo:markerのシーケンスをその最初の子としてもってもよい。

このフォーマット化オブジェクトに適用される特性を次に示す。

6.7.4 fo:table-column

一般的な使用法:

fo:table-column補助フォーマット化オブジェクトは,同一の列及びスパンをもつ表セルに適用できる特徴を指定する。最も重要な特性は,"column-width"特性である。

領域:

fo:table-columnフォーマット化オブジェクトは,領域を生成せず,返さない。このフォーマット化オブジェクトは,列幅,背景など,fo:tableが生成する領域に影響を与えるものについて,表示の特徴の規定に関する制約を提供する特色の集合を保持する([6.7.3 fo:table]参照)。fo:table-columnには,継承可能な特性も指定してよい。式のfrom-table-column()関数により,これらを参照することができる。

備考

特に,number-columns-spannedの値が1より大きいfo:table-columnの使用についての詳細は,fo:table及びfrom-table-column()関数の記述を参照のこと。

制約:

なし。

内容:

EMPTY

このフォーマット化オブジェクトに適用される特性を次に示す。

6.7.5 fo:table-caption

一般的な使用法:

fo:table-captionフォーマット化オブジェクトは,fo:table-and-captionを使用する場合に限り,表題を含むブロックレベルフォーマット化オブジェクトを包含するために使用される。

領域:

fo:table-captionフォーマット化オブジェクトは,一つ以上の正規参照領域を生成する。fo:table-captionはこれらの参照領域及び,fo:table−captionの子が返すすべての行外ページレベル領域を返す。

特色の派生:

fo:table-captionフォーマット化オブジェクトが生成する領域は,is-reference-areaの値に"true"を指定する。

制約:

caption-side特色の値が"before"又は "after"である場合については,生成参照領域の内容長方形の行内進行寸法は,それを囲む参照領域の内容長方形の行内進行寸法と等しくなる。

値が"start"又は"end"である場合,生成参照領域の行内進行寸法は,inline-progression-dimension特色の値によって制約される。

値が"top", "bottom", "left"又は"right"である場合,その値は,対応する特性の場合と同じ方法でマップされ([5.3 対応特性の値の計算]参照),特性は,対応値が指定されたものとして取り扱われる。

表題が表の前に配置付けされる場合,fo:table-captionが生成する領域は,fo:table-captionの"keep-with-next"特性の値が"always"であるものとして,領域木に配置される。

表題が表の後に配置付けされる場合,fo:table-captionが生成する領域は, fo:table-captionの"keep-with-previous"特性の値が "always"であるものとして,領域木に配置される。

同じfo:table-captionフォーマット化オブジェクトが返す正規の子領域が一つ以上存在する領域はない。

fo:table-captionフォーマット化オブジェクトが返す各正規領域の子は,fo:table-captionの子が返す正規ブロック領域でなければならず,適正にスタックされ, かつ適正に順序付けされなければならない。

fo:table-captionの子が返すすべての行外参照レベル領域は,[6.10.2 fo:float]で解説するとおりに扱われる。

内容:

(%block;)+

さらに,このフォーマット化オブジェクトは,ゼロ以上のfo:markerのシーケンスをその最初の子としてもってもよい。

このフォーマット化オブジェクトに適用される特性を次に示す。

6.7.6 fo:table-header

一般的な使用法:

fo:table-headerフォーマット化オブジェクトは,表ヘッダの内容を包含するために使用される。

領域:

fo:table-headerフォーマット化オブジェクトは,領域を生成しない。 fo:table-headerフォーマット化オブジェクトが返すのは, fo:table-headerの各子が返す領域のシーケンスを連結することによって生成される領域のシーケンスである。

制約:

fo:table-headerの子が返す領域のシーケンスの連結順は,fo:table-headerの下で子が順序付けされる順序と同じである。

内容:

(table-row+|table-cell+)

fo:table-headerは,一つ以上のfo:table-rowを子としてもつか,代わりにfo:table-cellを一つ以上もつ。後者の場合,セルは,starts-row及びends-row特性を使用する行にグループ化される。

さらに,このフォーマット化オブジェクトは,ゼロ以上のfo:markerのシーケンスをその最初の子としてもってもよい。

このフォーマット化オブジェクトに適用される特性を次に示す。

6.7.7 fo:table-footer

一般的な使用法:

fo:table-footerフォーマット化オブジェクトは,表フッタの内容を包含するために使用される。

領域:

fo:table-footerフォーマット化オブジェクトは,領域を生成しない。 fo:table-footerフォーマット化オブジェクトが返すのは, fo:table-footerの各子が返す領域のシーケンスを連結することによって生成される領域のシーケンスである。

制約:

fo:table-footerの子が返す領域のシーケンスの連結順は,fo:table-footerの下で子が順序付けされる順序と同じである。

内容:

(table-row+|table-cell+)

fo:table-footerは一つ以上のfo:table-rowをその子としてもつか,代わりに fo:table-cellを一つ以上もつ。後者の場合,セルは, starts-row及びends-row特性を使用する行にグループ化される。

さらに,このフォーマット化オブジェクトは,ゼロ以上のfo:markerのシーケンスをその最初の子としてもってもよい。

このフォーマット化オブジェクトに適用される特性を次に示す。

6.7.8 fo:table-body

一般的な使用法:

fo:table-bodyフォーマット化オブジェクトは,表本体の内容を包含するために使用される。

領域:

fo:table-bodyフォーマット化オブジェクトは,領域を生成しない。 fo:table-bodyフォーマット化オブジェクトが返すのは, fo:table-bodyの各子が返す領域のシーケンスを連結することによって生成される領域のシーケンスである。

制約:

fo:table-bodyの子が返す領域のシーケンスの連結順は,子がfo:table-bodyの下で順序付けされる順序と同じである。

内容:

(table-row+|table-cell+)

fo:table-bodyは一つ以上のfo:table-rowを子としてもつか,代わりに fo:table-cellを一つ以上もつ。後者の場合,セルは,starts-row及びends-row特性を使用する行にグループ化される。

さらに,このフォーマット化オブジェクトは,ゼロ以上のfo:markerのシーケンスを子としてもってもよい。

このフォーマット化オブジェクトに適用される特性を次に示す。

6.7.9 fo:table-row

一般的な使用法:

fo:table-rowフォーマット化オブジェクトは,表セルを行にグループ化するために使用される。表の行内のすべての表セルは,表グリッドの同じ形状の行で始まる。

領域:

fo:table-rowフォーマット化オブジェクトは,領域を生成しない。 fo:table-rowフォーマット化オブジェクトが返すのは, fo:table-rowの各子が返す領域のシーケンスを連結することによって生成される領域のシーケンスである。fo:table-rowは,背景など, fo:tableが生成する領域に影響を与える表示の特徴の規定を保持する( [6.7.3 fo:table]参照)。

制約:

fo:table-rowの子が返す領域のシーケンスの連結順は,fo:table-rowで子が順序付けされる順序と同じである。

グリッドの行の高さを決定する方法は,row-height特色によって決められる。

内容:

(table-cell+)

このフォーマット化オブジェクトに適用される特性を次に示す。

6.7.10 fo:table-cell

一般的な使用法:

fo:table-cellフォーマット化オブジェクトは,表セルに配置される内容をグループ化するために使用される。

入力データに各行のセルを含む要素はないが,その代わりに,例えば,各行が特定の型の要素で始まるなどといった場合に,"starts-row"特性及び"ends-row"特性を使用することができる

領域:

fo:table-cellフォーマット化オブジェクトは,一つ以上の正規参照領域を生成する。fo:table-cellはこれらの参照領域及び,fo:table-cellの子が返すすべての行外ページレベル領域を返す。

特色の派生:

fo:table-cellフォーマット化オブジェクトが生成する領域は,is-reference-areaに"true"の値を指定する。.

セルの境界を派生する方法は,border-collapse特色によって指定される。

border-collapse特色の値が"separate"である場合,境界は二つの構成要素から成る。最初の構成要素は,表グリッド境界線に一致する外辺で配置され,その幅は border-separation特色に指定された値の半分であり,fo:tableの background特色に従って埋められる。セルの各側については,セルの各側の境界は,この境界の内部に配置されるか継承される。

border-collapse特色の値が"collapse-with-precedence"である場合,セルの各側の境界は,境界の各区分について,その区分に対するすべての境界規定から,最も優先順位が高い境界を選択することによって決定される。同じ優先順位の境界が二つ存在し,それらが同一ではない場合は,エラーである。境界の一つを選択することによって回復してもよい。各境界区分は,表グリッド境界線の中央に配置される。副画素のレンダリングをサポートしない装置では,有効な境界幅が奇数画素となるように決定する場合,実装が格子境界線のどの側に奇数画素を配置するかを定義する。

border-collaspe特色の値が"collaspe"である場合,セルの各側の境界は,境界の各区分について,その区分に対するすべての境界規定から,最も目を引く境界スタイルをもつ境界を選択することによって決定される。詳細については後述を参照のこと。各境界区分は,表格子境界線の中央に寄せられる。副画素のレンダリングをサポートしない装置では,有効な境界幅が奇数画素となるように決定する場合,実装が格子境界線のどの側に奇数画素を配置するかを定義する。重なる境界区分のスタイル間に競合がある場合は,次の規則により,どの境界スタイルが"優先する"かが決定される。

  1. 境界の'border-style'が'hidden'である場合は,競合する他のすべての境界に優先する。この値をもつすべての境界は,この位置ですべての境界を抑制する。

  2. スタイルが'none'である境界の優先順位は最も低い。この辺に集まるすべての要素の境界特性が'none'である場合に限り,境界を省略することになる。しかし,'none'は,境界スタイルのデフォルト値である点に注意すること。

  3. スタイルがいずれも'hidden'ではなく,それらのうち少なくとも一つが'none'でない場合,狭い境界は廃棄され,広い境界が選択される。

  4. 残りの境界スタイルの'border-width'が同じである場合,スタイルの優先順位は,高い方から,'double','solid','dashed','dotted','ridge','outset','groove','inset'となる。最も優先順位が低いのが'inset'である。

  5. 境界スタイルで,色のみが異なる場合,セルのスタイル集合は行のスタイル集合に優先し,行グループ,列,列グループ及び表にも優先する。

制約:

表セルは,行進行方向及び列進行方向で,一つ以上のグリッド単位を占有する。セルの内容長方形のサイズは,四方それぞれについて,セルが占有するグリッドの一部から次をマイナスしたものとなる。

グリッド内のセルのブロック進行寸法の決定方法は,row-height特色によって決まる。

同じfo:table-cellフォーマット化オブジェクトが返す正規の子領域が一つ以上存在する領域はない。

fo:table-cellフォーマット化オブジェクトが返す各正規領域の子は, fo:table-cellの子が返す正規ブロック領域でなければならず,適正にスタックされ, かつ適正に順序付けされなければならない。

fo:table-cellの子が返すすべての行外参照レベル領域は,[6.10.2 fo:float]で解説されているとおりに扱われる。

内容:

(%block;)+

さらに,このフォーマット化オブジェクトは,ゼロ以上のfo:markerのシーケンスをその最初の子としてもってもよい。

このフォーマット化オブジェクトに適用される特性を次に示す。

6.8 リスト対応のフォーマット化オブジェクト

6.8.1 導入

リストの構築に使用されるフォーマット化オブジェクトは,fo:list-block, fo:list-item, fo:list-item-label及びfo:list-item-bodyの四つである。

図6.7 リスト対応のフォーマット化オブジェクトの木表現

fo:list-blockには,完全なリストを包含し,行内進行方向でリストの幾何形状に使用される値を指定する役割がある。詳細は後に示す。

fo:list-blockの子は一つ以上のfo:list-itemであり, それぞれにfo:list-item-label及びfo:list-item-bodyのペアが包含される。

fo:list-itemには,リスト内の各項目を包含する役割がある。

fo:list-item-labelには,リスト項目のラベルの内容,ブロックレベルフォーマット化オブジェクトを包含する役割がある。通常は,数字,記号又は用語を包含するfo:blockを包含する。

fo:list-item-bodyには,リスト項目の本体の内容,ブロックレベルフォーマット化オブジェクトを包含する役割がある。通常は,一つ以上のfo:blockを包含する。

ブロック進行方向で,本体に関連してラベルを配置する場合は,fo:list-itemの"vertical-align"特性に従って行われる。

図6.8 リストにより生成される領域

行内進行方向におけるリストの幾何形状の規定の達成方法を次に示す。

リスト項目ラベルの開始字下げ及びリスト項目本体の終了字下げは,必要であれば,通常, 長さとして指定される。

6.8.1.1 例
6.8.1.1.1 列挙リスト

リスト項目は"ol"要素に包含される。項目は"item"要素に包含され,段落とは全く異なるテキストを包含する。

スタイルは,文字の後に点をつけて,アルファベット順に項目を列挙するものである。

入力サンプル:

<ol>
<item>List item 1.</item>
<item>List item 2.</item>
<item>List item 3.</item>
</ol>

XSL スタイルシート:

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:template match="ol">
  <fo:list-block provisional-distance-between-starts="15mm"
   provisional-label-separation="5mm">
    <xsl:apply-templates/>
  </fo:list-block>
</xsl:template>

<xsl:template match="ol/item">
  <fo:list-item>
    <fo:list-item-label start-indent="5mm" end-indent="label-end()">
      <fo:block>
        <xsl:number format="a."/>
      </fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>
        <xsl:apply-templates/>
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>
</xsl:template>

</xsl:stylesheet>

結果インスタンス: fo:名前空間内の要素及び属性

<fo:list-block provisional-distance-between-starts="15mm"
  provisional-label-separation="5mm">

  <fo:list-item>
    <fo:list-item-label start-indent="5mm" end-indent="label-end()">
      <fo:block>a.
      </fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>List item 1.
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>

  <fo:list-item>
    <fo:list-item-label start-indent="5mm" end-indent="label-end()">
      <fo:block>b.
      </fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>List item 2.
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>

  <fo:list-item>
    <fo:list-item-label start-indent="5mm" end-indent="label-end()">
      <fo:block>c.
      </fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>List item 3.
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>

</fo:list-block>
6.8.1.1.2 HTMLスタイル "dl"リスト

この例では,スタイルシートはHTMLスタイルの"dl"リストを処理し,"dt"要素及び"dd"要素のラップされないペアを包含し,それらをfo:list-blockに変換する。

"dt"/"dd"のペアが平衡する場合は,fo:list-itemに変換される。"dt"/"dd"が平衡しない場合は, スタイルシートは次を試行する。

言い換えれば, 次の構造となる。

<doc>
<dl>
  <dt>term</dt>
  <dd>definition</dd>
  <dt>term</dt>
  <dt>term</dt>
  <dd>definition</dd>
  <dt>term</dt>
  <dd>definition</dd>
  <dd>definition</dd>
</dl>
</doc>

$allow-naked-ddtrueである場合の結果インスタンス: fo:名前空間内の要素及び属性は,次となる。

<fo:list-block provisional-distance-between-starts="35mm"
  provisional-label-separation="5mm">
  <fo:list-item>
    <fo:list-item-label end-indent="label-end()">
      <fo:block>term
      </fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>definition
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>
  <fo:list-item>
    <fo:list-item-label end-indent="label-end()">
      <fo:block>term
      </fo:block>
      <fo:block>term
      </fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>definition
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>
  <fo:list-item>
    <fo:list-item-label end-indent="label-end()">
      <fo:block>term
      </fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>definition
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>
  <fo:list-item>
    <fo:list-item-label end-indent="label-end()">
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>definition
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>
</fo:list-block>

$allow-naked-ddfalseである場合の結果インスタンス: fo:名前空間内の要素及び属性は,次となる。

<fo:list-block provisional-distance-between-starts="35mm"
  provisional-label-separation="5mm">
  <fo:list-item>
    <fo:list-item-label end-indent="label-end()">
      <fo:block>term
      </fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>definition
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>
  <fo:list-item>
    <fo:list-item-label end-indent="label-end()">
      <fo:block>term
      </fo:block>
      <fo:block>term
      </fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>definition
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>
  <fo:list-item>
    <fo:list-item-label end-indent="label-end()">
      <fo:block>term
      </fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
      <fo:block>definition
      </fo:block>
      <fo:block>definition
      </fo:block>
    </fo:list-item-body>
  </fo:list-item>
</fo:list-block>

XSL スタイルシート:

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:include href="dtdd.xsl"/>

<xsl:template match="doc">
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match="dl">
  <xsl:call-template name="process.dl"/>
</xsl:template>

<xsl:template match="dt|dd">
  <fo:block>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

</xsl:stylesheet>

取込まれるスタイルシート"dtdd.xsl"

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:variable name="allow-naked-dd" select="true()"/>

<xsl:template name="process.dl">
  <fo:list-block provisional-distance-between-starts="35mm"
   provisional-label-separation="5mm">
    <xsl:choose>
      <xsl:when test="$allow-naked-dd">
        <xsl:call-template name="process.dl.content.with.naked.dd"/>
      </xsl:when>
      <xsl:otherwise>
        <xsl:call-template name="process.dl.content"/>
      </xsl:otherwise>
    </xsl:choose>
  </fo:list-block>
</xsl:template>

<xsl:template name="process.dl.content.with.naked.dd">
  <xsl:param name="dts" select="./force-list-to-be-empty"/>
  <xsl:param name="nodes" select="*"/>

  <xsl:choose>
    <xsl:when test="count($nodes)=0">
      <!-- Out of nodes, output any pending DTs -->
      <xsl:if test="count($dts)>0">
        <fo:list-item>
          <fo:list-item-label end-indent="label-end()">
            <xsl:apply-templates select="$dts"/>
          </fo:list-item-label>
          <fo:list-item-body start-indent="body-start()"/>
        </fo:list-item>
      </xsl:if>
    </xsl:when>

    <xsl:when test="name($nodes[1])='dd'">
      <!-- We found a DD, output the DTs and the DD -->
      <fo:list-item>
        <fo:list-item-label end-indent="label-end()">
          <xsl:apply-templates select="$dts"/>
        </fo:list-item-label>
        <fo:list-item-body start-indent="body-start()">
          <xsl:apply-templates select="$nodes[1]"/>
        </fo:list-item-body>
      </fo:list-item>
      <xsl:call-template name="process.dl.content.with.naked.dd">
        <xsl:with-param name="nodes" select="$nodes[position()>1]"/>
      </xsl:call-template>
    </xsl:when>

    <xsl:when test="name($nodes[1])='dt'">
      <!-- We found a DT, add it to the list of DTs and loop -->
      <xsl:call-template name="process.dl.content.with.naked.dd">
        <xsl:with-param name="dts" select="$dts|$nodes[1]"/>
        <xsl:with-param name="nodes" select="$nodes[position()>1]"/>
      </xsl:call-template>
    </xsl:when>

    <xsl:otherwise>
      <!-- This shouldn't happen -->
      <xsl:message>
        <xsl:text>DT/DD list contained something bogus (</xsl:text>
        <xsl:value-of select="name($nodes[1])"/>
        <xsl:text>).</xsl:text>
      </xsl:message>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

<xsl:template name="process.dl.content">
  <xsl:param name="dts" select="./force-list-to-be-empty"/>
  <xsl:param name="dds" select="./force-list-to-be-empty"/>
  <xsl:param name="output-on"></xsl:param>
  <xsl:param name="nodes" select="*"/>

  <!-- The algorithm here is to build up a list of DTs and DDs, -->
  <!-- outputing them only on the transition from DD back to DT -->

  <xsl:choose>
    <xsl:when test="count($nodes)=0">
      <!-- Out of nodes, output any pending elements -->
      <xsl:if test="count($dts)>0 or count($dds)>0">
        <fo:list-item>
          <fo:list-item-label end-indent="label-end()">
            <xsl:apply-templates select="$dts"/>
          </fo:list-item-label>
          <fo:list-item-body start-indent="body-start()">
            <xsl:apply-templates select="$dds"/>
          </fo:list-item-body>
        </fo:list-item>
      </xsl:if>
    </xsl:when>

    <xsl:when test="name($nodes[1])=$output-on">
      <!-- We're making the transition from DD back to DT -->
      <fo:list-item>
        <fo:list-item-label end-indent="label-end()">
          <xsl:apply-templates select="$dts"/>
        </fo:list-item-label>
        <fo:list-item-body start-indent="body-start()">
          <xsl:apply-templates select="$dds"/>
        </fo:list-item-body>
      </fo:list-item>

      <!-- Reprocess this node (and the rest of the node list) -->
      <!-- resetting the output-on state to nil -->
      <xsl:call-template name="process.dl.content">
        <xsl:with-param name="nodes" select="$nodes"/>
      </xsl:call-template>
    </xsl:when>

    <xsl:when test="name($nodes[1])='dt'">
      <!-- We found a DT, add it to the list and loop -->
      <xsl:call-template name="process.dl.content">
        <xsl:with-param name="dts" select="$dts|$nodes[1]"/>
        <xsl:with-param name="dds" select="$dds"/>
        <xsl:with-param name="nodes" select="$nodes[position()>1]"/>
      </xsl:call-template>
    </xsl:when>

    <xsl:when test="name($nodes[1])='dd'">
      <!-- We found a DD, add it to the list and loop, noting that -->
      <!-- the next time we cross back to DT's, we need to output the -->
      <!-- current DT/DDs. -->
      <xsl:call-template name="process.dl.content">
        <xsl:with-param name="dts" select="$dts"/>
        <xsl:with-param name="dds" select="$dds|$nodes[1]"/>
        <xsl:with-param name="output-on">dt</xsl:with-param>
        <xsl:with-param name="nodes" select="$nodes[position()>1]"/>
      </xsl:call-template>
    </xsl:when>

    <xsl:otherwise>
      <!-- This shouldn't happen -->
      <xsl:message>
        <xsl:text>DT/DD list contained something bogus (</xsl:text>
        <xsl:value-of select="name($nodes[1])"/>
        <xsl:text>).</xsl:text>
      </xsl:message>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

</xsl:stylesheet>

"dtdd.xsl"スタイルシートを次の方法でカスタマイズしてもよい。

"dtdd.xsl"スタイルシートを使用するスタイルシートでは, "dl"をリストのラッパである要素の名前に変換する。

6.8.2 fo:list-block

一般的な使用法:

fo:list-block流し込みオブジェクトは,リストをフォーマットするために使用される。

領域:

fo:list-blockフォーマット化オブジェクトは,一つ以上の正規ブロック領域を生成する。fo:list-blockはこれらの領域,すべての行外ページレベル領域及びfo:list-blockの子が返すすべての行外参照レベル領域を返す。

制約:

同じfo:list-blockフォーマット化オブジェクトが返す正規の子領域が一つ以上存在する領域はない。

fo:list-blockフォーマット化オブジェクトが返す各正規領域の子は,fo:list-blockの子が返す正規ブロック領域でなければならず,適正にスタックされ, 適正に順序付けされなければならない。

内容:

(list-item+)

さらに,このフォーマット化オブジェクトは,ゼロ以上のfo:markerのシーケンスをその最初の子としてもつ。

このフォーマット化オブジェクトに適用される特性を次に示す。

6.8.3 fo:list-item

一般的な使用法:

fo:list-itemフォーマット化オブジェクトは,リストの項目のラベル及び本体を包含する。

領域:

fo:list-itemフォーマット化オブジェクトは,一つ以上の正規ブロック領域を生成する。fo:list-itemは,これらの領域,すべての行外ページレベル領域及びfo:list-itemの子が返すすべての行外参照レベル 領域を返す。

制約:

同じfo:list-itemフォーマット化オブジェクトが返す正規の子領域が一つ以上存在する領域はない。

fo:list-blockフォーマット化オブジェクトが返す各正規領域の子は,fo:list-item-label及びfo:list-item-body流し込みオブジェクトが返す正規ブロック領域でなければならず,適正に順序付けされなければならない。 fo:list-item-labelが返す正規ブロック領域は,適正にスタックされなければならず,fo:list-item-bodyが返す正規ブロック領域も,適正にスタックされなければならない。

fo:list-item-label及びfo:list-item-bodyオブジェクトがfo:list-blockフォーマット化オブジェクトを返す場合に,fo:list-blockフォーマッ化オブジェクトが返す各正規領域の子は,relative-align特色に従って,ブロック進行方向で互いに関連して配置付けされる。

行内進行方向では,これらの領域は,領域が適正にスタックされる通常の方法で,配置付けされる。領域の内容長方形が重なる場合は,エラーである。

fo:list-itemが生成する領域の内容長方形のブロック進行寸法は,そのすべての子領域の割付け長方形が中に丁度包含される大きさである。特に,子領域のspace-before及びspace-afterは,リスト項目の間隔に影響を及ぼさない。ブロックスタック化制約の目的により,fo:list-itemが生成する領域は,その前後にフェンスが存在するものとして取り扱われる。

備考

これらの領域は参照領域ではなく,そのため,その領域内のすべてのオブジェクトの字下げは,fo:list-blockの内容を保持する参照領域に相対して,調整される。

内容:

(list-item-label,list-item-body)

さらに,このフォーマット化オブジェクトは,ゼロ以上のfo:markerのシーケンスをその最初の子としてもってもよい。

このフォーマット化オブジェクトに適用される特性を次に示す。

6.8.4 fo:list-item-body

一般的な使用法:

fo:list-item-bodyフォーマット化オブジェクトは,リスト項目の本体の内容を包含する。

領域:

fo:list-item-bodyフォーマット化オブジェクトは,領域を生成しない。 fo:list-item-bodyフォーマット化オブジェクトが返すのは,fo:list-item-bodyの各子が返す領域のシーケンスを連結して生成される領域のシーケンスである。

制約:

fo:list-item-bodyの子が返す領域のシーケンスの連結順は, fo:list-item-bodyの下で子が順序付けされる順序と同じである。

内容:

(%block;)+

さらに,このフォーマット化オブジェクトは,ゼロ以上のfo:markerのシーケンスをその最初の子としてもってもよい。

このフォーマット化オブジェクトに適用される特性を次に示す。

6.8.5 fo:list-item-label

一般的な使用法:

fo:list-item-labelフォーマット化オブジェクトは,リスト項目のラベルの内容を包含し,通常,リスト項目の本体の列挙,識別,装飾のいずれかに使用される。

領域:

fo:list-item-labelフォーマット化オブジェクトは,領域を生成しない。 fo:list-item-labelフォーマット化オブジェクトが返すのは,fo:list-item-labelの各子が返す領域のシーケンスを連結して生成される領域のシーケンスである。

制約:

fo:list-item-labelの子が返す領域のシーケンスの連結順は,fo:list-item-labelの下で子が順序付けされる順序と同じである。

内容:

(%block;)+

さらに,このフォーマット化オブジェクトは,ゼロ以上のfo:markerのシーケンスをその最初の子としてもってもよい。

このフォーマット化オブジェクトに適用される特性を次に示す。

6.9 動的な効果: リンク及び多重フォーマット化オブジェクト

6.9.1 導入

動的な効果とは,利用者エージェントの状態を含む利用者の処理が,一部の文書の振舞い及び/又は表示にどのような影響を及ぼすことができるかをいい,ここで解説するフォーマット化オブジェクトによって,実現可能となる。:

fo:multi-switch, fo:multi-case及びfo:multi-toggleの三つのフォーマット化オブジェクトを使用することによって,副木間の移動が可能となる。結果木構造を次に示す。

図6.9 マルチフォーマット化オブジェクトの木表現

fo:multi-switchの役割は,それぞれが副木を一つ包含するfo:multi-caseフォーマット化オブジェクトをラップすることである。各副木には,fo:multi-caseフォーマット化オブジェクトの名前がある。クリックとして実装されるなど,fo:multi-toggleを活性化することにより,名前付けされた副木,その前の副木,その次の副木又は"すべて"の副木を表示することができる。これらは,"switch-to"特性によって制御される。"すべて"の副木を表示する場合,実装は,通常,fo:multi-caseの"case-title"特性を使用してそれぞれラベル付けされた選択のリストを表示することになる。最初に表示された副木は,fo:multi-caseの"starting-state"特性によって制御される。

fo:multi-propertiesフォーマット化オブジェクト,fo:multi-property-setフォーマット化オブジェクト及びmerge-property-values()関数を使用することによって,様々な特性値間を移動することができる。例えば,fo:multi-property-setを使用すると, active-state特性値のうち,候補となる各値に様々な特性を指定することができ,merge-property-values()関数を使用すると,それらに所定のフォーマット化オブジェクトを適用することができる。

6.9.1.1 例
6.9.1.1.1 展開可能な/折り畳みが可能な目次

入力サンプル:

<doc>
  <chapter><title>Chapter</title>
    <p>Text</p>
    <section><title>Section</title>
    <p>Text</p>
    </section>
    <section><title>Section</title>
    <p>Text</p>
    </section>
  </chapter>
  <chapter><title>Chapter</title>
    <p>Text</p>
    <section><title>Section</title>
    <p>Text</p>
    </section>
    <section><title>Section</title>
    <p>Text</p>
    </section>
  </chapter>
</doc>

この例では,章及び節の題は,結果の前に配置される目次に抽出される。章の題の前には,折り畳み状態又は展開状態のいずれかを示すアイコンがある。節の題が現れるのは,拡張状態の場合に限られる。さらに,目次の題から文書の本体の対応する題にリンクすることができる。

二つの状態は,各状態にfo:multi-caseを指定するfo:multi-switchを各章の題に使用することによって,実現される。fo:multi-case"switch-to"特性が適正であるfo:multi-toggle内には,その他の状態を選択するためのアイコンが包含される。

目次内のリンクは,文書の本体の題テキスト上に一意のidを追加し,そのidを参照するfo:basic-linkの目次の題テキストをラップすることによって,実現される。

XSL スタイルシート:

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:template match="doc">
  <!-- create the table of contents -->
  <xsl:apply-templates select="chapter/title" mode="toc"/>
  <!-- do the document -->
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match="chapter/title" mode="toc">
  <fo:multi-switch>
    <fo:multi-case case-name="collapsed" case-title="collapsed"
    starting-state="show">
      <fo:block>
        <fo:multi-toggle switch-to="expanded">
          <fo:external-graphic href="plus-icon.gif"/>
        </fo:multi-toggle>
        <fo:basic-link internal-destination="{generate-id(.)}">
          <xsl:number level="multiple" count="chapter" format="1. "/>
          <xsl:apply-templates mode="toc"/>
        </fo:basic-link>
      </fo:block>
    </fo:multi-case>
    <fo:multi-case case-name="expanded" case-title="expanded"
    starting-state="hide">
      <fo:block>
        <fo:multi-toggle switch-to="collapsed">
          <fo:external-graphic href="minus-icon.gif"/>
        </fo:multi-toggle>
        <fo:basic-link internal-destination="{generate-id(.)}">
          <xsl:number level="multiple" count="chapter" format="1. "/>
          <xsl:apply-templates mode="toc"/>
        </fo:basic-link>
      </fo:block>
      <xsl:apply-templates select="../section/title" mode="toc"/>
    </fo:multi-case>
  </fo:multi-switch>
</xsl:template>

<xsl:template match="section/title" mode="toc">
  <fo:block start-indent="10mm">
    <fo:basic-link internal-destination="{generate-id(.)}">
      <xsl:number level="multiple" count="chapter|section" format="1.1 "/>
      <xsl:apply-templates/>
    </fo:basic-link>
  </fo:block>
</xsl:template>

<xsl:template match="chapter/title">
  <fo:block id="{generate-id(.)}">
    <xsl:number level="multiple" count="chapter" format="1. "/>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="section/title">
  <fo:block id="{generate-id(.)}">
    <xsl:number level="multiple" count="chapter|section" format="1.1 "/>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="p">
  <fo:block>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

</xsl:stylesheet>

結果インスタンス: fo: 名前空間内の要素及び属性

<fo:multi-switch>
  <fo:multi-case case-name="collapsed" case-title="collapsed" starting-state="show">
    <fo:block>
      <fo:multi-toggle switch-to="expanded">
        <fo:external-graphic href="plus-icon.gif">
        </fo:external-graphic>
      </fo:multi-toggle>
      <fo:basic-link internal-destination="N4">1. Chapter
      </fo:basic-link>
    </fo:block>
  </fo:multi-case>
  <fo:multi-case case-name="expanded" case-title="expanded" starting-state="hide">
    <fo:block>
      <fo:multi-toggle switch-to="collapsed">
        <fo:external-graphic href="minus-icon.gif">
        </fo:external-graphic>
      </fo:multi-toggle>
      <fo:basic-link internal-destination="N4">1. Chapter
      </fo:basic-link>
    </fo:block>
    <fo:block start-indent="10mm">
      <fo:basic-link internal-destination="N11">1.1 Section
      </fo:basic-link>
    </fo:block>
    <fo:block start-indent="10mm">
      <fo:basic-link internal-destination="N19">1.2 Section
      </fo:basic-link>
    </fo:block>
  </fo:multi-case>
</fo:multi-switch>
<fo:multi-switch>
  <fo:multi-case case-name="collapsed" case-title="collapsed" starting-state="show">
    <fo:block>
      <fo:multi-toggle switch-to="expanded">
        <fo:external-graphic href="plus-icon.gif">
        </fo:external-graphic>
      </fo:multi-toggle>
      <fo:basic-link internal-destination="N28">2. Chapter
      </fo:basic-link>
    </fo:block>
  </fo:multi-case>
  <fo:multi-case case-name="expanded" case-title="expanded" starting-state="hide">
    <fo:block>
      <fo:multi-toggle switch-to="collapsed">
        <fo:external-graphic href="minus-icon.gif">
        </fo:external-graphic>
      </fo:multi-toggle>
      <fo:basic-link internal-destination="N28">2. Chapter
      </fo:basic-link>
    </fo:block>
    <fo:block start-indent="10mm">
      <fo:basic-link internal-destination="N35">2.1 Section
      </fo:basic-link>
    </fo:block>
    <fo:block start-indent="10mm">
      <fo:basic-link internal-destination="N43">2.2 Section
      </fo:basic-link>
    </fo:block>
  </fo:multi-case>
</fo:multi-switch>

<fo:block id="N4">1. Chapter
</fo:block>
<fo:block>Text
</fo:block>
<fo:block id="N11">1.1 Section
</fo:block>
<fo:block>Text
</fo:block>
<fo:block id="N19">1.2 Section
</fo:block>
<fo:block>Text
</fo:block>
<fo:block id="N28">2. Chapter
</fo:block>
<fo:block>Text
</fo:block>
<fo:block id="N35">2.1 Section
</fo:block>
<fo:block>Text
</fo:block>
<fo:block id="N43">2.2 Section
</fo:block>
<fo:block>Text
</fo:block>
6.9.1.1.2 活性状態ベースのXLinkのスタイル化

入力サンプル:

<p>Follow this <xlink:mylink xmlns:xlink="http://www.w3.org/1999/xlink"
        xlink:href="http://www.w3.org/TR"
        xlink:title="An Example"
        xlink:show="new"
        xlink:actuate="onRequest">link</xlink:mylink> to access all
TRs of the W3C.</p>

この例では,fo:basic-linkは,一連のfo:multi-property-set及びfo:basic-linkを囲むラッパを包含する。この場合,一連のfo:multi-property-setは,活性状態に依存する様々なカラー又はテキスト装飾を指定し,ラッパは,適切なfo:multi-property-setの特性をもつfo:multi-propertiesの特性のマージに使用できる。

XSLスタイルシート:

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:template match="p">
    <fo:block>
        <xsl:apply-templates/>
    </fo:block>
</xsl:template>

<xsl:template match="xlink:mylink" xmlns:xlink="http://www.w3.org/1999/xlink">
    <xsl:variable name="show"><xsl:value-of select="@xlink:show"/>
    </xsl:variable>
     <fo:multi-properties text-decoration="underline">
        <fo:multi-property-set active-state="link" color="blue"/>
        <fo:multi-property-set active-state="visited" color="red"/>
        <fo:multi-property-set active-state="active" color="green"/>
        <fo:multi-property-set active-state="hover" text-decoration="blink"/>
        <fo:multi-property-set active-state="focus" color="yellow"/>
        <fo:wrapper color="merge-property-values()"
                    text-decoration="merge-property-values()">
              <fo:basic-link external-destination="http://www.w3.org/TR"
                              show-destination="{$show}">
                  <xsl:attribute name="role">
                      <xsl:value-of select="@xlink:title"/>
                  </xsl:attribute>
                  <xsl:apply-templates/>
              </fo:basic-link>
        </fo:wrapper>
      </fo:multi-properties>
</xsl:template>

</xsl:stylesheet>

結果インスタンス: fo: 名前空間内の要素及び属性

<fo:block">Follow this
  <fo:multi-properties text-decoration="underline">
    <fo:multi-property-set active-state="link" color="blue">
    </fo:multi-property-set>
    <fo:multi-property-set active-state="visited" color="red">
    </fo:multi-property-set>
    <fo:multi-property-set active-state="active" color="green">
    </fo:multi-property-set>
    <fo:multi-property-set active-state="hover" text-decoration="blink">
    </fo:multi-property-set>
    <fo:multi-property-set active-state="focus" color="yellow">
    </fo:multi-property-set>
    <fo:wrapper color="merge-property-values()"
      text-decoration="merge-property-values()">
      <fo:basic-link external-destination="http://www.w3.org/TR"
        show-destination="new" role="An Example">link
      </fo:basic-link>
    </fo:wrapper>
  </fo:multi-properties> to access all
TRs of the W3C.
</fo:block>

6.9.2 fo:basic-link

一般的な使用法:

fo:basic-linkは,単純な一方向単一ターゲットリンクの開始資源を表示するために使用する。オブジェクトを使用すると,通常,包含するあらゆる領域をクリックすることにより,リンク先の資源をたどることができる。

領域:

fo:basic-linkフォーマット化オブジェクトは,一つ以上の正規行内領域を生成する。fo:basic-linkはこれらの領域,すべての行外ページレベル領域及び,fo:basic-linkの子が返すすべての行外参照レベル領域を返す。

備考

fo:basic-linkをfo:block内に囲むと,表示領域を生成することができる。

制約:

同じfo:basic-linkフォーマット化オブジェクトが返す正規の子領域を一つ以上もつ領域はない。

fo:basic-linkが返す各正規領域の子は,[4.7.3 行内構築]で指定されている制約を満たさなければならない。

内容:

(#PCDATA|%inline;|%block;)*

さらに,このフォーマット化オブジェクトは,ゼロ以上のfo:markerのシーケンスをその最初の子としてもってもよい。

このフォーマット化オブジェクトに適用される特性を次に示す。

6.9.3 fo:multi-switch

一般的な使用法:

fo:multi-switchは,フォーマット化オブジェクトの代替となる副木,即ちfo:multi-case内にある各副木の規定をラップし,fo:multi-toggleを介して活性化されるある代替から別の代替への切替を制御する。

fo:multi-switchオブジェクトの直系の子はfo:multi-caseオブジェクトである。一時に見えるのが単一のfo:multi-caseのみであってもよい。利用者は,利用可能なmulti-case間を移動してもよい。

各fo:multi-caseは,一つ以上のfo:multi-toggleオブジェクトを包含してもよく,fo:multi-switchのfo:multi-case移動を制御する。

備考

目次ビュー,リンクターゲットの埋込み,汎用化(階層的に多階層化されていても次/前ビューなど,多くの対話式タスクにfo:multi-switchを使用することができる。今日,次/前ビューは,通常,別文書への次/前リンクによりHTMLで扱われ,利用者が移動したいときにはいつでも,必ず全文書を置換する。

領域:

fo:multi-switchフォーマット化オブジェクトは,領域を生成しない。 fo:multi-switchフォーマット化オブジェクトは,現時点で目に見えるfo:multi-caseが返す領域のシーケンスを返す。現時点で目に見えるfo:multi-caseがない場合は,返される領域はない。

特色の派生:

currently-visible-multi-case特色は,starting-state特色の値が"show"である最初のfo:multi-caseの子への参照をその初期値としてもつ。このような子が存在しない場合,この特色は,現時点で目に見えるfo:multi-caseが存在しないことを示す値をもつ。fo:multi-toggleが活動化される際,その最も近い先祖のfo:multi-switchのcurrently-visible-multi-case特色値は変化して,fo:multi-toggleの"switch-to"特性値が選択するfo:multi-caseを参照する。現時点で目に見えるfo:multi-caseが存在しないことを示す値をcurrently-visible-multi-case特色が一度獲得すると,このfo:multi-switchのfo:multi-toggleを活動化させることができなくなる。

制約:

fo:multi-switchが返す領域のシーケンスの順序は,現時点で目に見えるfo:multi-caseが返す領域の順序と同じである。

内容:

(multi-case+)

このフォーマット化オブジェクトに適用される特性を次に示す。

6.9.4 fo:multi-case

一般的な使用法:

fo:multi-caseは,fo:multi-switch内に,親のfo:multi-switchが一つを選択して見せ,残りを隠蔽するフォーマット化オブジェクトの代替となる各副木を包含するために使用される。

領域:

fo:multi-caseフォーマット化オブジェクトは,領域を生成しない。 fo:multi-caseフォーマット化オブジェクトが返すのは,fo:multi-caseの各子が返す領域のシーケンスを連結することによって生成される領域のシーケンスである。

制約:

fo:multi-caseの子が返す領域のシーケンスの連結順は,fo:multi-caseの下で子が順序付けされる順序と同じである。

内容:

(#PCDATA|%inline;|%block;)*

fo:multi-caseが子としてもつことができるのは,fo:multi-caseの親であるfo:multi-switchの親の子に限られる。ただし,fo:multi-caseがfo:markerの子を包含しない場合は例外である。特に,このオブジェクトは,深さを問わず,fo:multi-toggleオブジェクトを包含でき,fo:multi-case移動を制御する。

この制限は繰り返し適用される。

備考

例えば, 親であるfo:multi-switchが別のfo:multi-caseの子となっているfo:multi-caseは,外部のfo:multi-caseの親であるfo:multi-switchの代わりとなることができる子のみをもってもよい。

このフォーマット化オブジェクトに適用される特性を次に示す。

6.9.5 fo:multi-toggle

一般的な使用法:

fo:multi-toggleは,通常,"クリック"として実装される場合など,活動化の際に, あるfo:multi-caseから別のfo:multi-caseに移動する効果のある領域を確立するために使用される。fo:multi-toggleの"switch-to"特性値は,通常,移動するfo:multi-caseの"case-name"特性値に対応する。

領域:

fo:multi-toggleフォーマット化オブジェクトは,領域を生成しない。 fo:multi-toggleフォーマット化オブジェクトが返すのは,fo:multi-toggleの各子が返す領域のシーケンスを連結して生成される領域のシーケンスである。fo:multi-toggleが返す各領域は,switch-to特色をもち,その値はfo:multi-toggleを返す場合と同じである。

制約:

fo:multi-toggleの子が返す領域のシーケンスの連結順は,fo:multi-toggleの下で子が順序付けされる順序と同じである。

fo:multi-toggleが返す領域を活性化することにより,値は,最も近い先祖のfo:multi-switchのcurrently-visible-multi-caseの値に変更される。(switch-toの値のfo:multi-caseの選択方法については[7.21.11 "switch-to"]を参照のこと。)

内容:

(#PCDATA|%inline;|%block;)*

fo:multi-toggleを使用できるのは,fo:multi-caseの子孫である場合に限られる。

このフォーマット化オブジェクトに適用される特性を次に示す。

6.9.6 fo:multi-properties

一般的な使用法:

fo:multi-propertiesは,内容の一部と関連付けされる複数の特性集合間を移動するために使用される。

備考

fo:multi-propertiesフォーマット化オブジェクトを使用すると,内容の一部の見かけを違うものにすることができる。例えば,リンクが未巡回状態から巡回状態に変化する際,これは,内容のフォーマットに使用される特性の集合を変更することができる。特性が何度も変更されると,多くの状況で必要ではないテキストの再流し込みが生じるため,設計者は,どの特性を変更するかを慎重に選択するのが望ましい。 "color","text-decoration"などの特性の変更は,テキストの再流し込みを必須としないほうがよい。

fo:multi-propertiesフォーマット化オブジェクトの直系の子は,単一のfo:wrapperフォーマット化オブジェクトが後続するfo:multi-property-setフォーマット化オブジェクトの順序付けされた集合である。fo:wrapperに指定された特性は,値が"merge-property-values()"と指定されており,fo:multi-propertiesの値を併合した値及び適用されるfo:multi-property-setフォーマット化オブジェクトの指定値をとることになる。

領域:

fo:multi-propertiesフォーマット化オブジェクトは,領域を生成しない。 fo:multi-propertiesフォーマット化オブジェクトが返すのは, fo:multi-propertiesの各子が返す領域のシーケンスを連結して生成される領域のシーケンスである。

制約:

fo:multi-propertiesの子が返す領域のシーケンスの連結順は,fo:multi-propertiesの下で子が順序付けされる順序と同じである。

内容:

(multi-property-set+,wrapper)

併合値をとる特性は,値が"merge-property-values()"と指定されることになる。この関数は,fo:multi-propertiesの直系の子であるfo:wrapperに適用される際,fo:multi-property-setの兄弟の適用可能な特性定義を併合する。

このフォーマット化オブジェクトに適用される特性を次に示す。

6.9.7 fo:multi-property-set

一般的な使用法:

fo:multi-property-set補助フォーマット化オブジェクトを使用すると,このfo:multi-property-setの親のfo:wrapperの子の子流し込みオブジェクトの代替となる表示を提供するために使用できるフォーマット特性の代替集合を指定することができる。

領域:

fo:multi-property-setフォーマット化オブジェクトは,領域を生成せず,返さない。単に,式によってアクセスされる特質の集合を保持するだけである。

制約:

なし。

内容:

EMPTY

このフォーマット化オブジェクトに適用される特性を次に示す。

6.10 行外フォーマット化オブジェクト

6.10.1 導入

6.10.1.1 浮動体

fo:floatフォーマット化オブジェクトは,二つの異なる目的に使用される。まず,内容を正規に配置する間に,関連する内容をページの先頭で読者に直接の妨げにならない別の領域にフォーマット化するために使用される。この種のfo:floatが生成する領域を前浮動体と呼ぶ。fo:floatは,"float"特性値が"before"である場合,前浮動体を生成するものとして指定される。ページ上に前浮動体を配置する場合の制約は,この導入の[6.10.1.3 条件付きサブ区画]及びfo:floatフォーマット化オブジェクトの記述で解説されている。

第二に, fo:floatフォーマット化オブジェクトは,領域が片側に流れることを意図されている場合に使用され,正規の内容は浮動領域に沿って流れる。この種のfo:floatが生成する領域を側浮動体と呼ぶ。側浮動体は,常に,最も近い先祖の子を参照領域にする。側浮動体が浮動する参照領域の辺は,"float"特性の値によって制御される。

側浮動体に沿って流れる正規の内容の流れは,側浮動体の親参照領域の正規の子領域の開始割込み調整又は終了割込み調整を増加することによって,認識される。

"clear"特性はすべてのブロックレベルフォーマット化オブジェクトに適用される。特定のフォーマット化オブジェクトに指定されたこの特性の値が"none"以外の値である場合,ブロックが生成する領域は,"clear"特性値が決定する場合と同様に,その境界長方形が適用可能な側浮動体の割付け長方形に確実に重ならないように配置されることになる。

6.10.1.2 脚注

fo:footnoteフォーマット化オブジェクトは,脚注とその引用の両方を生成するために使用される。fo:footnoteには二つの子があり,両者とも必ず存在する。最初の子は,fo:inlineフォーマット化オブジェクトであり,フォーマット化されて脚注の引用を生成する。二番目の子はfo:footnote-bodyフォーマット化オブジェクトであり,脚注の内容又は本体を生成する。

fo:footnote-body フォーマット化オブジェクトの子孫が生成する実際の領域は,子孫の副木を構成するフォーマット化オブジェクトによって決定される。例えば, fo:footnote-body内のfo:list-blockフォーマット化オブジェクトを使用することにより,ラベル及び意図された本体とともに脚注をフォーマットすることができる。

6.10.1.3 条件付きサブ区画

区画本体には二つの条件付きサブ区画が存在し,暗黙に対応する参照領域を指定する。これらを前浮動参照領域及び脚注参照領域と呼ぶ。これらの参照領域は,区画参照領域の子として条件付きで生成される。前浮動参照領域が生成されるのは,領域クラスが"xsl-before-float"である領域がページに一つ以上包含される場合のみである。脚注参照領域が生成されるのは,領域クラスが"xsl-footnote"である領域がページに一つ以上包含される場合のみである。

条件付きで生成された領域は,主要参照領域を犠牲にして,区画参照領域内でブロック進行寸法 (筆記モードが"lr-tb"である場合,これは"高さ"となる)のスペースを借りる。条件付きで生成された領域が実際に生成されるか否かは,さらに,主要参照領域に十分なスペースが残っているかどうかに依存する。

条件付きで生成された領域がどの程度のスペースを区画参照領域から借りることができるかについて,制限が存在する場合もある。これらの制限を決めるのは利用者エージェントである。

主要参照領域のブロック進行寸法の設定は,区画参照領域の割付け長方形のブロック進行寸法から,実際に生成された条件付き生成参照領域の割付け長方形のブロック進行方向のサイズの合計を引いたものと等しくなる。 主要参照領域は,前浮動参照領域の割付け長方形の後辺の直後に配置される。この場合,主要参照領域の後辺が,脚注参照領域の割付け長方形の前辺に一致するように配置される。通常,区画参照領域が決定する制約の他に,条件付き生成参照領域の行内進行寸法(筆記モードが"lr-tb"の場合,これは"幅"である)は,主要参照領域の行内進行寸法に一致するように制約される。

それぞれの条件付き生成参照領域は,さらに,主要参照領域からの参照領域の分離に使用する領域のシーケンスを包含する。領域のシーケンスは,fo:static-contentをフォーマットすることによって返されるシーケンスである。fo:static-contentは,ページのフォーマットに使用されるページシーケンスで指定される。

ページシーケンスにfo:static-contentが存在し,ページシーケンスの"flow-name" 特性値が"xsl-before-float-separator"である場合,fo:static-contentをフォーマットして返される領域は,ページ上の主要参照領域が空でなければ,同じページマスタを使用して生成される前浮動参照領域の最後の子として,適切な順序で挿入される。

"flow-name"特性値が"xsl-footnote-separator"であるfo:static-contentが存在する場合, fo:static-contentをフォーマットして返される領域は,同じpage-masterを使用して生成される脚注参照領域の最初の子として,適切な順で挿入される。

対話式の利用者エージェントは,条件付きのサブ区画を認識する代わりに,脚注引用から脚注に"ホットリンク"を生成するか,暗黙の引用から前浮動体に"ホットリンク"を生成することを選択してもよい。

領域クラスが "xsl-before-float" 又は"xsl-footnote"である領域の生成は,それらの領域クラスを使用して最初に領域を返すフォーマット化オブジェクトの記述の中で指定される。

6.10.1.4 例
6.10.1.4.1 浮動図

入力サンプル:

<doc>
  <p>C'ieng pieces were made in northern towns, such as C'ieng Mai.
They were typically of tamlung weight.</p>
  <figure>
    <photo image="TH0317A.jpg"/>
    <caption>C'ieng Tamlung of C'ieng Mai</caption>
  </figure>
</doc>

この例では,図は浮動体として,前側(表記方法がlr-tbの場合の上部)に配置される。

XSL スタイルシート:

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:template match="p">
  <fo:block>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="figure">
  <fo:float float="before">
    <xsl:apply-templates/>
  </fo:float>
</xsl:template>

<xsl:template match="photo">
  <fo:block text-align="center">
    <fo:external-graphic src="{@image}"/>
  </fo:block>
</xsl:template>

<xsl:template match="caption">
  <fo:block space-before="3pt" text-align="center"
    start-indent="10mm" end-indent="10mm">
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

</xsl:stylesheet>

結果インスタンス:fo:namespace内の要素及び属性

<fo:block>C'ieng pieces were made in northern towns,
such as C'ieng Mai. They were typically of tamlung weight.
</fo:block>

<fo:float float="before">

  <fo:block text-align="center">
    <fo:external-graphic src="TH0317A.jpg">
    </fo:external-graphic>
  </fo:block>

  <fo:block space-before="3pt" text-align="center" start-indent="10mm"
    end-indent="10mm">C'ieng Tamlung of C'ieng Mai
  </fo:block>

</fo:float>
6.10.1.4.2 脚注

入力サンプル:

<doc>
  <p>Some Pod Duang were restruck<fn>Berglund, A., Thai Money, from
Earliest Times to King Rama V, p. 203.</fn> during the reign of King Rama V.</p>
</doc>

この例では,脚注は,文書の全体を通して連続して番号付けされる。脚注の合い印は,脚注の番号であり,番号の後に上付きとして")"が付く。脚注自体は,ラベルとしての脚注番号及び本体としての脚注テキストをもつリストフォーマット化オブジェクトを使用して,フォーマットされる。

XSL スタイルシート:

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:template match="p">
  <fo:block>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="fn">
  <fo:footnote>
    <fo:inline font-size="0.83em" baseline-shift="super">
      <xsl:number level="any" count="fn" format="1)"/>
    </fo:inline>
    <fo:footnote-body>
      <fo:list-block provisional-distance-between-starts="20pt"
          provisional-label-separation="5pt">
        <fo:list-item>
          <fo:list-item-label end-indent="label-end()">
            <fo:block  font-size="0.83em"
                       line-height="0.9em">
              <xsl:number level="any" count="fn" format="1)"/>
            </fo:block>
          </fo:list-item-label>
          <fo:list-item-body start-indent="body-start()">
            <fo:block  font-size="0.83em"
                       line-height="0.9em">
              <xsl:apply-templates/>
            </fo:block>
          </fo:list-item-body>
        </fo:list-item>
      </fo:list-block>
    </fo:footnote-body>
  </fo:footnote>
</xsl:template>

</xsl:stylesheet>

結果インスタンス:fo:namespace内の要素及び属性

<fo:block>Some Pod Duang were restruck
  <fo:footnote>
    <fo:inline font-size="0.83em" baseline-shift="super">1)
    </fo:inline>
    <fo:footnote-body>
    <fo:list-block provisional-distance-between-starts="20pt"
      provisional-label-separation="5pt">
    <fo:list-item>
    <fo:list-item-label end-indent="label-end()">
    <fo:block font-size="0.83em" line-height="0.9em">1)
    </fo:block>
    </fo:list-item-label>
    <fo:list-item-body start-indent="body-start()">
    <fo:block font-size="0.83em" line-height="0.9em">Berglund, A.,
Thai Money, from Earliest Times to King Rama V, p. 203.
    </fo:block>
    </fo:list-item-body>
    </fo:list-item>
    </fo:list-block>
    </fo:footnote-body>
  </fo:footnote> during the reign of King Rama V.
</fo:block>

6.10.2 fo:float

一般的な使用法:

fo:floatフォーマット化オブジェクトが使用されるのは,通常,画像をページの先頭で分離領域に配置する場合,又は画像を片側に配置し,正規の内容が画像の周囲及び画像に沿って流れるようにする場合のいずれかである。

領域:

fo:floatは,領域クラスが"xsl-anchor"である単一の任意の領域及びすべてが同じ領域クラスを共有する一つ以上のブロック領域を生成する。共有の対象となる領域クラスは,"float"特性によって指定されるとおり,"xsl-before-float", "xsl-side-float" 又は "xsl-normal"のいずれかである。ただし,"float"特性値が"none"である場合,xsl:floatは,正規のブロック領域を生成する。

領域クラスが"xsl-side-float"である領域は,参照領域である。

領域クラスが"xsl-before-float"である領域は,前浮動参照領域の子として配置される。

領域クラスが"xsl-anchor"である任意の領域は,"float"特性値が"none"であるか,制約に関する記述のとおり,エラーのために,"float" 特性が"none"であったものとしてfo:floatがフォーマットされる場合は,生成されない。それ以外の場合は,領域クラスが"xsl-anchor"である領域は生成される。

領域クラスが"xsl-anchor"である領域には,子は存在せず,かつ行内領域である。ただし,これが次の制約を破る場合は例外である。(a.)すべての領域の子がブロック領域又は行内領域のいずれかでなければならず,領域の混合がない及び(b.)行領域の子がアンカ領域のみから構成されない。行内領域がこれらの制約を破る場合,fo:floatは代わりにブロック領域を生成しなければならない。

制約:

fo:floatが生成する正規の行内領域は,fo:floatの"keep-with-previous"特性値が"always"であったものとして,領域木内に配置される。行内領域の長さは,行内進行寸法についてもブロック進行寸法についてもゼロである。

アンカ領域という用語は,ここでは,fo:floatが生成する領域クラスが"xsl-anchor"である領域を意味するために使用される。領域クラスが"xsl-side-float"である領域は,側浮動体である。

同じfo:floatフォーマット化オブジェクトが返す領域クラスが同じブロック領域の子が一つ以上存在する領域はない。

領域クラスが"xsl-before-float"である領域は,同じ領域クラスの他の領域に関連して,領域木内で適正に順序付けされなければならない。

fo:floatが生成するブロック領域のパディング長方形,境界長方形及び内容長方形は,すべて一致する。即ち,パディング及び境界は,領域のすべての辺でゼロとなる。

次の制約は,領域クラスが"xsl-before-float"である領域を生成するfo:floatフォーマット化オブジェクトに適用される。

次の制約は,領域クラスが"xsl-side-float"である領域を生成するfo:floatフォーマット化オブジェクトに適用される。

内容:

(%block;)+

fo:floatは,fo:float, fo:footnote又はfo:markerを子孫としてもつことはできない。

さらに, fo:floatは,絶対配置付けされた領域を生成するfo:block-containerを子孫としてもつことはできない。

このフォーマット化オブジェクトに適用される特性を次に示す。

6.10.3 fo:footnote

一般的な使用法:

fo:footnoteは,通常,ページのregion-body内の脚注引用及びページの後辺に近い分離領域内の対応脚注を生成するために使用される。

領域:

fo:footnoteフォーマット化オブジェクトは,領域を生成しない。 fo:footnoteフォーマット化オブジェクトが返すのは,その子のfo:inlineフォーマット化オブジェクトが生成し,返す領域である。

さらに,fo:footnoteフォーマット化オブジェクトは,そのfo:footnote-bodyの子が生成する領域クラスが"xsl-footnote"であるブロック領域を返す。領域クラスが"xsl-footnote"である領域は,脚注参照領域の子として配置される。

制約:

アンカ領域という用語は,fo:footnoteのfo:inlineの子が生成し,返す最後の領域を意味するものとして定義される。.

fo:footnoteが返すブロック領域は,次のいずれにもあてはまる脚注参照領域の子孫としてのみ使用できる。(a)脚注参照領域が,fo:footnoteを子孫としてもつ流し込みが割り当てられる区画について,区画区画参照領域" の子孫であること及び(b)脚注参照領域がアンカ領域を包含する同一のページ又はアンカ領域を包含するページの次のページの子孫であること。

fo:footnoteが返す二番目のブロック領域及び追加ブロック領域は, fo:footnoteが返す最初のブロック領域を包含するページの直後のページに,その他の内容が配置される前に配置されなければならない。連続するページが区画本体を包含しない場合,利用者エージェントは,区画本体を包含した最後のページの区画マスタを使用して,追加のブロック領域を保持しなければならない。

fo:footnoteがregion-bodyに割り当てられない流し込みの子孫又は絶対配置付けされた領域を生成するfo:block-containerの子孫として現れる場合は,エラーである。いずれの場合も,fo:footnoteのfo:footnote-bodyの子が生成するブロック領域は, fo:footnoteの親に返され,正規のブロックレベル領域であるものとして,領域木に配置される。

内容:

(inline,footnote-body)

fo:footnoteは,fo:float, fo:footnote又はfo:markerを子孫としてもつことはできない。

さらに, fo:footnoteは,絶対配置付けされた領域を生成するfo:block-containerを子孫としてもつことはできない。

このフォーマット化オブジェクトに適用される特性を次に示す。

6.10.4 fo:footnote-body

一般的な使用法:

fo:footnote-bodyは,脚注の内容を生成するために使用される。

領域:

fo:footnote-bodyは,領域クラスが"xsl-footnote"であるブロックレベル領域を一つ以上生成し,返す。

制約:

fo:footnote-bodyは,fo:footnoteの子としてのみ使用できる。

同じfo:footnote-bodyフォーマット化オブジェクトが返すブロック領域の子が一つ以上存在する領域はない。

領域クラスが"xsl-footnote"である領域は,同じ領域クラスである他の領域に関連して,領域木内に適正に順序付けされなければならない。

内容:

(%block;)+

このフォーマット化オブジェクトに適用される特性を次に示す。

6.11 その他のフォーマット化オブジェクト

6.11.1 導入

次の例では,セマンティクスはないが,継承値に"carrier"を指定したものとして動作するfo:wrapperフォーマット化オブジェクトの使用を示す。

6.11.1.1 例

入力サンプル:

<doc>
<p>This is an <emph>important word</emph> in this
sentence that also refers to a <code>variable</code>.</p>
</doc>

"emph"要素は,太字フォントを使用して表示され,"code"要素は,Courierフォントを使用している。

XSLスタイルシート:

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                version='1.0'>

<xsl:template match="p">
  <fo:block>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="emph">
  <fo:wrapper font-weight="bold">
    <xsl:apply-templates/>
  </fo:wrapper>
</xsl:template>

<xsl:template match="code">
  <fo:wrapper font-family="Courier">
    <xsl:apply-templates/>
  </fo:wrapper>
</xsl:template>

</xsl:stylesheet>

fo: 要素及び属性木:

<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format">This is an
<fo:wrapper font-weight="bold">important word</fo:wrapper>
in this sentence that also refers to a
<fo:wrapper font-family="Courier">variable</fo:wrapper>.
</fo:block>

6.11.2 fo:wrapper

一般的な使用法:

fo:wrapperフォーマット化オブジェクトは,フォーマット化オブジェクトのグループに継承特性を指定するために使用される。

領域:

fo:wrapperフォーマット化オブジェクトは,領域を生成しない。fo:wrapperフォーマット化オブジェクトが返すのは,fo:wrapperの各子が返す領域のシーケンスを連結して生成される領域のシーケンスである。

特色の派生:

"id"を除き, fo:wrapperにはそれによって直接使用される特性は存在しない。しかし,fo:wrapperは,その子が利用する継承可能特性を保持する手段として働く。

制約:

fo:wrapperの子が返す領域のシーケンスの連結順は,fo:wrapperの下で子が順序付けされる順序と同じである。

内容:

(#PCDATA|%inline;|%block;)*

fo:wrapperがもつことができるのは,fo:wrapperの親の子であることが可能な子のみである。ただし,例外が二つある。

この制限は,繰返し適用される。

備考

例えば,別のfo:wrapperの子であるfo:wrapperは,親fo:wrapperの子であることが可能な子のみをもってもよい。

このフォーマット化オブジェクトに適用される特性を次に示す。

6.11.3 fo:marker

一般的な使用法:

fo:markerをfo:retrieve-markerと組み合わせて使用すると,柱を生成することができる。典型的な例を次に示す。

fo:markerは,その親フォーマット化オブジェクトの最初の子でなければならない。

領域:

fo:markerは,直接領域を生成しない。その子は,fo:static-content内から検索され,フォーマットされてもよい。その場合,"retrieve-class-name"特性値がこのfo:markerの "marker-class-name"特性値と同じfo:retrieve-markerを使用する。

制約:

fo:markerは,fo:flowの子孫としてのみ使用できる。

備考

fo:marker又はその先祖に設定される特性値は,fo:retrieve-markerが検索する場合には,fo:markerの子によって継承されないことになる。

同一の親を共有する二つ以上のfo:markerが同じ"marker-class-name"特性値をもつ場合は,エラーである。

内容:

(#PCDATA|%inline;|%block;)*

fo:markerは,fo:markerの子を検索するすべてのfo:retrieve-markersの置換として使用できるフォーマット化オブジェクトをすべて包含してもよい.

このフォーマット化オブジェクトに適用される特性を次に示す。

6.11.4 fo:retrieve-marker

一般的な使用法:

fo:retrieve-markerをfo:markerと組み合わせて使用すると,柱を生成することができる。典型的な例を次に示す。

領域:

fo:retrieve-markerは直接領域を生成しない。このフォーマット化オブジェクトは,検索対象となるfo:markerの子によって,概念上置換される。

特色の派生:

fo:retrieve-markerの先祖に指定される特性及び特色は,検索されるfo:markerの子をフォーマットする際,子がfo:retrieve-markerと同じ先祖をもつものとして考慮される。

制約:

fo:retrieve-markerは,fo:static-contentの子孫としてのみ使用できる。

fo:retrieve-markerは,選択されたfo:markerの子が,フォーマット木内のfo:retrieve-markerを置換するものとして,フォーマットされると指定する。

fo:retrieve-markerの特性は,領域木の領域上で優先的な階層を強要する。各fo:markerは,fo:markerの親のフォーマット化オブジェクトが返す各正規領域に概念上付加される。さらに, fo:markerは,fo:markerの親のフォーマット化オブジェクトが直接生成する正規以外の各領域に概念上付加される。逆に,fo:flowのすべての子孫が生成する領域は,概念上付加されるfo:markerをゼロ以上もってもよい。fo:markerの子が検索される場合,そのfo:markerは,この階層の上部にある領域に概念上付加される。

階層のすべての領域は,階層内のそれより下にあるすべての領域に"好ましい"ものとして考えられる。二つの領域を比較して,どちらが好ましいかを決定する場合, "first"及び"last"という用語は,領域木の昇順たどりの順序を表す。

"ページの包含"という用語を使用する場合,ここでは,検索されるfo:markerの子が生成し又は返す最初の領域を包含するページを意味する。

付加されたfo:markerの"marker-class-name"特性値が fo:retrieve-markerの"retrieve-class-name"特性値と同じである領域は,修飾領域であると定義される。階層内に配置されるのは修飾領域のみである。

ページ内の修飾領域は,先行するページ内のすべての修飾領域に優先する。ただし,領域が包含ページの次のページ内に存在する場合に,階層内に領域が配置されない場合は例外である。"retrieve-boundary"特性の値が"page-sequence"である場合, 包含ページのページシーケンスに先行するページシーケンスからのページ上に領域が存在すれば,領域は階層内に配置されない。"retrieve-boundary" 特性の値が"page"である場合に,領域が包含するページに存在しなければ,領域は階層内に配置されない。

"retrieve-position" 特性の値が"first-starting-within-page"である場合, "is-first"特色の値が"true"である包含ページ内の最初の修飾領域は,その他のすべての領域に優先する。このような領域が存在しない場合は,包含ページ内の最初の修飾領域は,その他のすべての領域に優先する。

"retrieve-position"特性の値が"first-including-carryover"である場合は,包含ページ内の最初の修飾領域は,その他のすべての領域に優先する。

"retrieve-position"特性の値が"last-starting-within-page"である場合は, "is-first"特色の値が"true"である包含ページ内の最後の修飾領域は,その他のすべての領域に優先する。このような領域が存在しない場合,包含ページ内の最後の修飾領域はその他のすべての領域に優先する。

"retrieve-position"特性の値が"last-ending-within-page"である場合,"is-last"特色の値が"true"である包含ページ内の最後の修飾領域は,その他のすべての領域に優先する。このような領域が存在しない場合,包含ページ内の最後の修飾領域はその他のすべての領域に優先する。

領域の階層が空である場合,フォーマット化オブジェクトは検索されない。

内容:

EMPTY

このフォーマット化オブジェクトに適用される特性を次に示す。


       

前へ

目次

トップへ          

次へ