6.2.1. page-sequence とpage-model

 すでに見たように、simple-page-sequence は本文を表示するための領域コンテナを1 つだけ持っています。これは、ページ区画を 1 つだけ持つ page-model を、やはり 1つだけ持ったページシーケンスと捉えることができます。
 これに対して、page-sequence フロー・オブジェクト・クラスは複数の page-modelを持つことができます。page-sequence は、条件などに応じて page-model の自動切り替えを行います。言いかえると、適切なパターンを指定することで、ページレイアウトの切り替えというわずらわしい作業を DSSSL に委ねることができるわけです。
 さて、page-sequence に対する page-model の指定方法ですが、この指定には特質initial-page-models:repeat-page-models: を用います。これらの特質にはpage-model を要素とするリストを指定します。page-sequence はこれらの特質に従い、次のプロセスでページを生成します。

  1. initial-page-models: が空でなければ、指定されたリストに含まれる page-model を順に使ってページを生成
  2. initial-page-models: が空、もしくは initial-page-models: に指定されたpage-model をすべて使用した後にまだ生成すべきページがある場合は、repeat-page-models: に指定されたリストを使用してページを生成
  3. repeat-page-models: に指定されたリストの最後の要素を使用後、まだ生成すべきページがある場合は repeat-page-models: のリストの先頭の要素に戻る

 page-sequence は、このようにして順繰りにページ生成を行います。
 例として、裏表でデザインの異なる扉ページを持ち、見開きを意識して左右のページで余白サイズが異なるケースについて考えてみます。page-model は次に挙げるような 4 つの定義が必要になります。

  • 扉表ページのための “cover-front” page-model
  • 扉裏ページのための “cover-back” page-model
  • 本文右(表)ページのための “body-front” page-model
  • 本文左(裏)ページのための “body-back” page-model

page-sequence の指定は、これらの定義を使って次のように記述することができます。

例 6.2
(make page-sequence
  ...                             ; その他の特質
  initial-page-models: ’(cover-front cover-back)
  repeat-page-models: ’(body-front body-back))

この指定に従ってページが生成されると、その並び順は先ほど説明したように

cover-front ―― cover-back ―― body-front ―― body-back ―― body-front ―― body-back ―― body-front ―― body-back…

のようになります。

<<prev      next>>