7.4.2. 処理モードの指定

 「処理モード」というくらいですから、モードによって処理を切り替えるわけですが、モードにはモード・コンストラクション・ルール・グループによって指定された名前付き処理モードと、初期状態の無名処理モードとがあります。
 無名処理モードというのは、これまで見てきたモード指定のないデフォルトの処理モードのことを言い、文書全体の処理は必ず無名処理モードで開始されます。名前付き処理モードは無名処理モードから呼び出しますから、役割上では無名処理モードは主モードであると考えることができます。
 もう一方の名前付き処理モードは、次の構文で定義するモード・コンストラクション・ルール・グループを他の処理モードから呼び出すことによって実行されます。

(mode mode-name construction-rule ...)

 名前付き処理モードでは、定義したグループに処理対象となる要素のスタイル指定(コンストラクション・ルール)が含まれていればそれを適用し、そうでない場合は無名処理モードの指定を適用します。
 なお、名前付き処理モードに含められるフロー・オブジェクト・クラスはscroll,page-sequence またはsimple-page-sequence に属する(子になり得る)もので、かつラベルなしsosofo に限定されていることに注意してください。
 それでは簡単な例を示してみましょう。例7.5のようなDTD があるとします。このDTD にある要素の内、chapter, section を目次に載せることにします。目次のための処理モードの名前をtoc-mode とすると、スタイル指定は例7.6のようになります。

例 7.5
<!ELEMENT book      (title,chapter*)>
<!ELEMENT chapter   (title,(para|section)*)>
<!ELEMENT section   (title,para*)>
<!ELEMENT title     (#PCDATA)>
<!ELEMENT para      (#PCDATA)>
例 7.6
(mode toc-mode
  (element chapter
    (make display-group
      (make paragraph
        ...
        (literal (chapter-number (current-node)) " ")
        (process-matching-children "title"))
      (process-matching-children "section")))
  (element section
    (make paragraph
      ...
      (literal (section-number (current-node)) " ")
      (process-matching-children "title")))
  (element title
    (make sequence)))

<<prev      next>>