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