スタイル ルールは、パターン文字列(”セレクター”と呼ばれます。)とオプション バインディングから構成されます。
StyleSheetとスタイル ルールは
StyleManagerによって処理され、保持されます。
StyleManagerが、ルール内のセレクターにマッチするオブジェクトを見つけた時、ルールに関連付けられたオプション バインディングがそのオブジェクトに適用されます。これは
style-managerのノンローカルオプションがオブジェクトにセットされた時に発生します。(恐らく含んでいるオブジェクトからの継承によって発生します。)
ルールは順番に処理され、特定のオプションが記述された最後のルールはもっとも高い優先順位を持ちます。スタイル ルールに関連付けられたオプション バインディングは、オブジェクトに直接設定されたオプションよりも優先順位が低くなりますが、グラフィカル階層から継承されたオプションよりも高い優先順位を持ちます。
セレクター パターン文字列は、ピリオドによって区切られた2つの部分を持ちます。その両方ともオプションです。ですから、空の文字列と文字列"."は、両方の部分が空である有効なパターンになります。典型的なセレクター パターンは、"link"や"TextDisplay.error"です。
セレクター パターンの最初の部分は、オブジェクトの
Visual.style-elementプロパティにマッチした文字列です。このプロパティは、クラスの名前であるか(例えば
"TextDisplay")または、オブジェクトを作成するのに使われるプロシージャの名前です(例えば
link)。空白の
style-elementのオブジェクトは、スタイル システムで不可視であり、いかなるスタイル ルールからも影響を受けません。最初の部分が、空または、"*"の場合、それは、全ての
style-elementにマッチします。
2番目の部分は、
Visual.style-classローカル オプションにマッチする文字列です。パターン"CommandButton" は、全ての
CommandButtonにマッチします。パターン"CommandButton.big"は、
style-class = "big"である
CommandButtonにマッチします。パターン".big"は、
style-elementに関わらず(もちろんブランクでない場合でも)、style-classが"big"である全てのオブジェクトにマッチします。
style-classは、スペースで区切られた文字列のリストになります。ですからstyle-class"urgent warning"は、".urgent" もしくは ".warning"を含むルールにマッチします。
以下は、幾つかのスタイル ルールを適用した"スタイル シート"のサンプルです。任意のCurlコードをスタイル シートに含める事が出来ることに注意して下さい。
例
{StyleSheet
{StyleRule "text.important",
font-style = "italic",
font-weight = "bold"
},
{StyleRule "CalendarControl",
calendar-control-today-background = "yellow",
day-proc =
{proc {cc:CalendarControl, date:DateTime}:(#Graphic, bool)
{return
{if date.info.day-of-week >= 6 then
{text
color = "orange",
{value date.info.day}
}
else
null
},
true
}
}
}
}