(a) ヘッダ部
<!DOCTYPE style-sheet system “style-sheet2.dtd”> <style-sheet> <style-specification> <style-specification-body>
スタイル言語スクリプトの最初の5行はヘッダ部となっています。
スタイルスクリプトによる指定自体もSGML文書であるためにスタイル指定であることを示すタグが付けられています。どのDTDを使用するかなどの指定もここで行います。
(b) 定義部
(define *a4-width* 210mm) (define *a4-height* 297mm) (define *a3-width* 297mm) (define *a3-height* 420mm) (define *b4-width* 257mm) (define *b4-height* 364mm)
7行目から12行目まで、define式による定数の定義が行われています。よく使う定数はあらかじめ定義しておくことによって、全体の見通しがよくなります。また、定数の値を変更する必要が出てきた場合などにも柔軟に対処できます。ここではA3、B4およびA4の高さと幅について、mm単位で定義しています。
(c) 構成規則 ( element式 )
スタイルシートの記述の中心となるのは構成規則、すなわちelement式です。構成規則とは、SGML文書の各タグに対するスタイルの定義と考えることができます。element式の構造は次のようになっています。
( element [gi] [sosofo] )
giはグローブにおける共通識別子で、SGML文書のタグと1対1に対応します。
sosofoは流し込みオブジェクトを指す型で、スタイルを表します。
例えば、
( element head [sosofo] )
のように書くとSGML文書のタグ
に対してsosofoで示されるスタイルを付加することになります。sosofoは具体的には次に示すmake式などによって定義されます。
(d) make式
make式はsosofoを返す代表的な式です。構造は以下のようになります。
( make [流し込みオブジェクトクラス名] [特質名: 特質値] [sosofo] )
この式によって、流し込みクラスに対応したsosofoが返されます。流し込みオブジェクトクラスは特質を持っているので、各特質を指定する必要があります。具体的な指定方法をサンプルスクリプトに基づいて説明します。
[17-24行目]
make simple−page−sequence によってページの大きさの指定しています。この例では、特質が以下の値に設定されています。
;ページの大きさ。A4 に設定。 page-width: *a4-width* page-height: *a4-height* ;各マージン。上下左右とも3cmに設定。 top-margin: 3cm bottom-margin: 3cm left-margin: 3cm right-margin: 3cm
[29-39行目]
make paragraphによって、パラグラフの設定をしています。この例では、特質が以下の値に設定されています。
;スペースの設定。前に40pt,後ろに24pt のスペースをとる。 space-before: 40pt space-after: 24pt ;fontの設定。”Helvetica”,24pt,bold に設定。 font-family-name:"Helvetica" font-size: 24pt font-weight: 'bold ;行間36ptに設定。 line-spacing: 36pt ;行揃えを行の先頭に設定。 quadding: 'start
(e) style型
(define *paragraph-style* ; 段落のスタイルを定義 (style font-family-name:"Times Roman" font-size: 12pt font-weight: 'medium line-spacing: 18pt quadding: 'justify))
[58-64行目]によってstyle型である*paragraph−style*を定義しています。
style型とは、流し込みオブジェクトクラスの特質の値を定義したものです。特性集合(プロパティセット)のようなものと考えることもできます。予め代表的な特質の値をstyleとして定義しておくことで、すっきりとした簡潔な記述ができます。
定義したstyleを使用するときは
use: [style]
のように書きます。
スクリプトでは[71行目]および[74行目]で実際に使用しています。
[70-71行目]での記述をみると、以下のようになっています。
(make paragraph use: *paragraph-style*)
これは次の文と同様の意味を持ちます。
(make paragraph font−family−name: "Times Roman" font−size: 12pt font−weight: ’medium line−spacing: 18pt quadding: ’justify)
(f) let式
[53行目]で、let式によって局所変数section−numが定義されています。
この変数のスコープは次の[54行目]までとなります。
(let ((section-num (child-number (parent (current-node))))) (literal (number->string section-num) “.”))
[53行目]ではsection−numに、section番号が代入されています。
section番号の求めかたを見てみましょう。
まず、カレントノードは<subhead>ノードですから
(parent (current−node))
は親ノードである<section>ノードを示します。したがって
(child−number (parent (current−node)))
によって<section>の子番号、即ち、section番号が示されます。
[54行目]では、number−>stringによってsection−numを文字列に変換し、literalによって文字列を表す sosofoとしています。literalは文字列をsosofoとして返すプロシージャです。このとき、文字列”.”を追加しています。たとえばsection−numが4だった場合、文字列”4.”を表すsosofoが返されることになります。
(g) process−children
[55行目]で (process−children) の記述があります。この式はカレントノードの子を順に処理した結果の型sosofoを返します。
実は構成規則のelement式では暗黙のうちに (process−children) が呼ばれています。このように現在のノードに子ノードのsosofoが追加されていくことによって、全体としてグローブの木構造と同様の木構造をもったsosofoが構築されます。
make文などにより何らかのsosofo ( literalなど )が指定された場合には明示的に (process−children) を指定する必要がありますので注意してください。
[55行目]では前行でliteralによってsosofo が指定されているため、明示的に (process−children)を指定しています。