CommuniGate Pro
Version 5.1
アプリケーション
 
 
 
WSSP

WSSP スクリプティング

WSSP ファイルに対する要求は、CommuniGate Pro のWeb Application モジュールによって処理されます。この処理は、コードコンポーネント を呼び出し、そのコードコンポーネントを使ってデータセッ トを作成するという手順で行われます。このデータセットは 辞書 で、中にはキー(文字列) と、そ のキーの値の対が必要な数だけ格納されています。キーの値は、テキスト文字列、値の配列、 辞書 のいずれかです。

例えば、ドメインのデフォルトページが要求されると所定のコードコンポーネントが呼び出され、 そのコードコンポーネントによって要求(HTML FORM) のパラメータが処理され、その後、データ セット(キーと値が格納された辞書) が生成されます。生成されるデータセットの内容は、要求に よって異なります。例えば、ログイン要求の場合、データセットには、canAutoSignup、 hasMailLists、hasCertificate の各キーと値が格納されます。

データセットの生成後、WSSP ファイルに定義されているスクリプトコードを使って、データセット の内容がマークアップ言語(HTML) ページに変換されます。

WSSP ファイルの要素

WSSP ファイルはマークアップ言語(通常、HTML) ファイルで、その要素としては次の2 種類があり ます。

下は、WSSP ファイルの例です。

<html>
<body>

<h1>Welcome to %%server%%. Your ID is %%ID%%.</h1>

<!--%%IF EXISTS(lastLogin)-->
Last time you visited us on %%lastLogin%%
<!--%%ENDIF-->


</body>
</html>

このWSSP ファイルの場合、%%server%%、%%ID%%、%%lastLogin%% がテキスト要素で、 <!--%%IF EXISTS(lastLogin)--><!--%%ENDIF--> が構造要素です。

WSSP ファイルで非ASCII 記号を記述する場合、キャラクタセットとしてUTF-8 を使用しなければ なりません。これで、WSSP ファイルの処理時、データセット(辞書) の文字列charset の内容 (UTF-8) が取り出されます。一方、文字列charset の内容がUTF-8 でなかったときには、WSSP ファイルのテキストは、そのページのキャラクタセットを使って変換されます。


WSSP ファイルのテキスト要素と構造要素には、式を使用できます。ここで式とは、名前と記号の組 み合わせをいい、この組み合わせにしたがって、データセット(データ辞書) や、その他のリソース からデータが取り出されます。

WSSP スクリプティング(WSSP ファイルでのスクリプトコードの定義) で使用できる式としては、次 の種類があります。

データ要素は、英数字文字列(system やid など) だけで表わされる式をいいます。この式(データ要 素) の値は、その名前に関連する値(データセットの中のキーの値) と同じです。その値がデータセッ トにない場合、式の値はNULL になります。
例えば、データセットにsystem という名前(キー) のデータ要素があり、その値が文字列"Sun Solaris" の場合、その式(データ要素) の値は、文字列Sun Solarisです。

データセットの値は大文字と小文字は区別されず、したがって、データ要素の名前も大文字と小文字 は区別されません。

英数字文字列の後に記号[] を記述した場合、その英数字文字列は配列スキャナの名前と解釈されま す。配列スキャナ(英数字文字列と[] の組み合わせ) は、 <!--%%FOREACH name...--> ....<!--%%ENDFOR name--> 構造の内部に記述しなければなりません。また、その内部に[] ( インデック ス) に対応する配列の要素が存在しなければなりません(下記を参照)。配列スキャナの名前は、大文 字と小文字は区別されません。

何らかの式(文字列) を指定し、その後にドット記号(.) と英数字文字列を記述した場合、その要素 はキー付き要素として解釈されます。この場合、式が計算され、その値として辞書が返ります。ドッ トの後の英数字文字列には、キーを指定します。式の計算で出力された辞書から、このキーの値が取 り出されます。式( ドットの前の部分) の値が辞書でなかった場合、または、ドットの後の英数字文 字列で指定したキーが式の値に存在しなかった場合、キー付き要素の値はNULL になります。
キー付き要素のキーは、引用符で囲った文字列でもよく、その場合、英数字以外の記号を指定するこ ともできます。
例えば、データセットに、2 つの要素からなる辞書(例えば、{OS = "Sun Solaris"; CPU="sparc";}) があったとします。この場合、settings.OS というキー付き要素では、その値と して文字列Sun Solaris が返ります。また、settings."OS1" の場合、その値としてNULL が返りま す(辞書にはOS1 というキーはありません)。

何らかの式を記述し、その後に角カッコで囲んだインデックス式([ インデックス]) を記述した場 合、その要素はインデックス付き要素として解釈されます。インデックス付き要素は、処理時、まず インデックス式の前の式が計算され、その値として配列が返ります。続いて、インデックス式が処理 され、その値として数値を表す文字列が出力されます。この数値は、配列の要素の位置(つまり配列 のインデックス) で、このインデックスで指定される要素の値が、このインデックス付き要素の値と して使われます。インデックス式の値が0 の場合、配列の最初の要素が取り出されます(配列のイン デックスの開始値は0 です)。
インデックス式の前の式の値が配列でなかった場合、または、インデックス式の値が文字列(数値を 表す文字列) でなかった場合、もしくは、インデックス式の値が文字列であっても、その値がマイナ スまたは配列の要素の数以上の場合、インデックス付き要素の値としてNULL が返ります。
英数字文字列があり、その後に開きカッコ(() が続く場合、その要素は関数と解釈されます。開き カッコ(() の後の要素は関数パラメータで、パラメータの後には閉じカッコ()) が続きます。

関数名は、大文字と小文字は区別されません。

下記は、WSSP スクリプティングで使用できる関数とパラメータの一覧です。

SESSION(key)
この関数は、セッションベースの要求でのみ使用できます。パラメータkey は、キーです。この関数 では、セッションのデータセットの値のうち、パラメータkey (文字列) に関連する値が返ります。 パラメータkey としては、英数字文字列または引用符付き文字列を指定できます。
例えば、式 SESSION(accountName) では、CommuniGate Pro のアカウントのうち、このセッション ( このWSSP ファイルに関連するセッション) でオープンされているアカウントの名前が返ります。
セッションのデータセットの文字列は、大文字と小文字は区別されません。下は、関数で指 定できるキーと、その値の一覧です。
キー
ID文字列。このセッションの一意の識別子。
accountName文字列。このセッションに関連するアカウントの名前。
domainName文字列。このセッションに関連するアカウントが属するドメインの名前。
filesRef文字列で、URL 接頭辞。この接頭辞を使って、セッションで使われるスキンのファイルが取り出されます。
fullAccountName文字列。このセッションに関連するアカウントの正式名( アカウント名@ ドメイン名)。
loginAddress文字列。ユーザーが、このセッションを開始したときに使われたネットワーク(IP) アドレス。
loginTime文字列。セッションの開始時刻(ACAP フォーマット)。
mailboxes「選択可能」メールボックスの名前を格納した配列。
selectedMailbox文字列。最後にコピー/ 移動処理(選択) が実行されたメールボックスの名前。
webFoldersパーソナルWeb サイトフォルダの名前を格納した配列。
selectedWebFolder文字列。Web サイトフォルダのうち、最後にファイル保存処理が実行されたフォルダの名前。
webSiteEnabledパーソナルWeb サイトのスペース制限(サイズ上限) の設定が0以外であるかどうかを示すキーです。
SETTINGS(key)
この関数は、セッションベースの要求でのみ使用できます(ステートレス要求では無効です)。 パラメータkey は、キーです。この関数では、パラメータkeyに関連する有効なWebUser 設 定の値が返ります。パラメータkeyの値としては、英数字文字列または引用符付き文字列を指 定できます。
ACCOUNTSETTINGS(key)
この関数は、セッションベースの要求でのみ使用できます。パラメータkey は、キーです。こ の関数では、パラメータkeyに関連する有効なアカウント設定の値が返ります。パラメータ keyの値としては、英数字文字列または引用符付き文字列を指定できます。
INCLUDEARG(number)
この関数は、インクルードファイルの中でのみ使用できます。パラメータnumberは10 進数値 で、 <!--%%INCLUDE--> 要素のパラメータナンバーです。この <!--%%INCLUDE--> 要素によっ て、このインクルードファイル( この関数を定義したインクルードファイル) が呼び出されま す。
<!--%%INCLUDE-->要素のパラメータが不足していた場合、この関数からはNULL が返ります。
EXISTS(expression)
The パラメータexpression は式です。この式の値が計算されます。式の値がNULL でなかっ た場合、この関数から文字列"YES" が返ります。式の値がNULL だったときには、この関数から "NO" が返ります。
DOESNOTEXIST(expression)
パラメータexpression は、式です。この式の値が計算され、その値がNULL でなかった場 合、文字列"NO" が返ります。計算後の値がNULL だったときには、文字列"YES" が返ります。
YESNO(expression)
パラメータexpressionは、式です。この式の値(ブール値) が計算され、その値が真(TRUE) だった場合、文字列"YES" が返ります。そうでない場合、文字列"NO" が返ります
BOOLARRAY()
The value is a 2-element array, containing the strings "NO" and "YES".
NOT(expression)
パラメータexpression は、式です。この式の値が計算され、その値(文字列) の先頭の文 字がN、n、-、0 のいずれでもなかった場合、NULL が返ります。N、n、-、0 のいずれかだっ たときには、文字列"YES" が返ります。
EQUALS(expression1 AND expression2)
expression1 とexpression2 の2 つのパラメータはどちらも式です。関数の実行時、両方の 式が計算されます。計算後、2 つの値が同じであれば(両方がNULL の場合も含む)、関数から 文字列"YES" が返ります。そうでない場合、NULL が返ります。
EQUALSNOCASE(expression1 AND expression2)
expression1 とexpression2 の2 つのパラメータはどちらも式です。関数の実行時、両方の 式が計算されます。計算後、両方の値がNULL だった場合、または、両方の値が文字列で、しかも両方の文字列がASCII 比較処理(大文字と小文字の区別なし) で一致した場合、文字列 "YES" が返ります。そうでない場合、NULL が返ります。
EQUALS(expression AND string)
パラメータexpression は式、パラメータstring は引用符付き文字列(引用符で囲んだ文字 列) です。関数の実行時、パラメータexpression の式が計算され、その結果とパラメータ string の文字列が比較されます。式の値と文字列が同じだった場合、文字列"YES" が返ります。 そうでない場合、NULL が返ります。
EQUALSNOCASE(expression AND string)
パラメータexpression は式、パラメータstring は引用符付き文字列です。関数の実行時、 パラメータexpression の式が計算され、その結果とパラメータstring の文字列がASCII 比 較(大文字と小文字の区別なし) されます。このASCII 比較で、式の値と文字列が同じだった 場合、文字列"YES" が返ります。そうでない場合、NULL が返ります。
ISINDEX(expression IN scanner)
パラメータexpression は式、パラメータscanner は <!--%%FOREACH scanner IN ...--> コンストラクト(スクリプトコードのカレントの部分を囲むコンストラクト) の名前です。 関数の実行時、パラメータexpression の値が計算され、その値が文字列で、しかも、その値 が、パラメータscannerで示されるスキャナの処理対象の配列のカレントのインデックスと同 じだった場合、文字列"YES" が返ります。そうでない場合、NULL が返ります。
ISFIRST(scanner)
パラメータscanner は <!--%%FOREACH scanner IN ...--> コンストラクト(スクリプト コードのカレントの部分を囲むコンストラクト) の名前です。この関数では、配列のカレント のインデックスの値が0 だった場合、文字列"YES" が返ります。そうでない場合、NULL が返り ます。
ISEVEN(scanner)
パラメータscanner は <!--%%FOREACH scanner IN ...--> コンストラクト(スクリプト コードのカレントの部分を囲むコンストラクト) の名前です。この関数では、配列のカレント のインデックスの値が偶数だった場合、文字列"YES" が返ります。そうでない場合、NULL が返 ります。
ISHALF(scanner)
The scanner should be the name of the <!--%%FOREACH scanner IN ...--> construct surrounding the current portion of the script code. If the current value of the index is equual to the number of array or dictionary elements divided by 2, the function returns the string "YES". Otherwise the function returns a null-value.
CHECKED(expression)
パラメータexpression は、式です。関数の実行時、この式の値が計算され、その値(文字 列) の先頭の文字がN、n、-、0 のいずれでもなかった場合、"checked" が返ります。そうでな い場合、文字列NULL が返ります。
HASPARENTMAILBOX(expression)
パラメータexpression は、式です。関数の実行時、この式の値が計算され、その値(文字 列) が階層メールボックスの名前だった場合、文字列"YES" が返ります。そうでない場合、文字 列NULL が返ります。
ISSTRING(expression)
パラメータexpression は、式です。関数の実行時、この式の値が計算され、その値がNULL ではなく、何らかの文字列だった場合、文字列"YES" が返ります。そうでない場合、文字列 NULL が返ります。
ISNUMBER(expression)
パラメータexpression は、式です。関数の実行時、この式の値が計算され、その値が数値 だった場合、文字列"YES" が返ります。そうでない場合、文字列NULL が返ります。
ISARRAY(expression)
パラメータexpression は、式です。関数の実行時、この式の値が計算され、その値がNULL ではなく、何らかの配列だった場合、文字列"YES" が返ります。そうでない場合、文字列NULL が返ります。
ISDICTIONARY(expression)
パラメータexpression は、式です。関数の実行時、この式の値が計算され、その値がNULL ではなく、何らかの辞書だった場合、文字列"YES" が返ります。そうでない場合、文字列NULL が返ります。
ISDATE(expression)
パラメータexpression は、式です。関数の実行時、この式の値が計算され、その値がNULL ではなく、何らかのデータタイプのオブジェクトだった場合、文字列"YES" が返ります。そうで ない場合、文字列NULL が返ります。
ISDATA(expression)
パラメータexpression は、式です。関数の実行時、この式の値が計算され、その値がNULL ではなく、何らかのバイナリデータタイプのオブジェクトだった場合、文字列"YES" が返りま す。そうでない場合、文字列NULL が返ります。
NULL()
この関数では、NULL が返ります。
EMPTYSTRING()
この関数では、空白の文字列が返ります。
EMPTYARRAY()
この関数では、要素の数が0 の配列(空白の配列) が返ります。
EMPTYDICTIONARY()
この関数では、空白の辞書が返ります。
CURRENTTIME()
この関数の値は、タイムスタンプ(現在の時刻) です。
STRING(key)
パラメータkey は、キーです。この関数では、スキンテキストデータセットのオブジェクトの うち、パラメータkey に関連するオブジェクトが返ります。このオブジェクトは文字列でなけ ればならず、文字列でなかった場合、NULL が返ります。パラメータkey のキーとしては、引 用符付き文字列リテラルまたは式を指定できます。式を指定した場合、関数の実行時、その式 の値が計算され、その値がキーとして使われます。
DICTIONARY(key)
パラメータkey は、キーです。この関数では、スキンテキストデータセットのオブジェクトの うち、パラメータkey に関連するオブジェクトが返ります。このオブジェクトは辞書でなけれ ばならず、辞書でなかった場合、NULL が返ります。パラメータkey のキーとしては、引用符 付き文字列リテラルまたは式を指定できます。式を指定した場合、関数の実行時、その式の値 が計算され、その値がキーとして使われます。
ARRAY(key)
パラメータkey は、キーです。この関数では、スキンテキストデータセットのオブジェクトの うち、パラメータkey に関連するオブジェクトが返ります。このオブジェクトは配列でなけれ ばならず、配列でなかった場合、NULL が返ります。パラメータkey のキーとしては、引用符 付き文字列リテラルまたは式を指定できます。式を指定した場合、関数の実行時、その式の値 が計算され、その値がキーとして使われます。
TRANSLATE(string USING dictionary)
パラメータstring は、値として文字列が返る式です。パラメータdictionary は、値とし て辞書が返る式です。この関数では、パラメータstring で得られた文字列がパラメータdictionary で得られた辞書に存在した場合、その文字列が取り出されます。そうでない場 合、パラメータstring の値が返ります(つまり、置き換えは実行されません)。
例えば、データセットに要素boxName (文字列) があり、その値がINBOX で、また、要素 boxNames (辞書) があり、その値が{INBOX = Incoming; Trash = "Trash Can";} だっ たとします。この場合、関数TRANSLATE(boxName USING boxNames) では、値として文字 列"Incoming" が返ります。
CONTAINS(string IN array)
パラメータstring は文字列、パラメータarray は配列です。この関数では、パラメータ string で示される文字列がパラメータarray で示される配列のいずれかの要素と同じであれ ば(つまり、その文字列が配列に存在する場合)、文字列"YES" が返ります。そうでない場合、 NULL が返ります。
RANDOMELEMENT(array)
パラメータarray は、配列が返る式です。この関数では、パラメータarray で得られる配列 の要素のうち、いずれか1 つがランダムに選択され、その要素が返ります。
MONTHNAMES()
この関数では、要素の数が12 の固定配列 ("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec") が返ります。
WEEKDAYS() and WEEKDAYS(expression)
パラメータexpression は、式です。式を指定しなかった場合、要素の数が7 (Sun,Mon,Tue,Wed,Thu,Fri,Sat) の固定配列が返ります
パラメータexpression を指定するときには、いずれかの曜日の名前が文字列で返るような 式を指定しなければなりません。その場合、式で返った曜日で始り、要素(曜日の名前) の数 が7 の配列が返ります。
WEEKDAYS(startOfWeek)
上の関数では、パラメータexpression に変数startOfWeek を指定しており、この変数の 値が"Tue" の場合、("Tue","Wed","Thu","Fri","Sat","Sun","Mon") が返ります(火曜日で始まる一週間)。
KNOWNCHARSETS()
この関数では、要素(文字列) が、システムで認識可能なキャラクタセットの名前("ISO-8059-1","ISO-2022-jp","KOI8-R", ...) である固定配列が返ります。
KNOWNTIMEZONES()
この関数では、要素(文字列) が、システムで認識可能なタイムゾーンの名前("NorthAmerica/Pacific","Europe/Central","(+0900) Japan/Korea", ...) である固定配列が返ります。
REQUESTSECURE()
カレントのHTTP 要求が保護されている場合(つまり、HTTPS プロトコルで送信される場合)、 この関数から文字列が"YES" 返ります。そうでない場合、NULL が返ります。


論理式とは、2 つの式(expression1 とexpression2) で構成される式をいいます。2 つの式は、 | (OR) 記号または& (AND) 記号で区切ります。また、カッコで式を囲うこともできます。
expression1 | expression2
expression1 & expression2
(expression1 & expression2) | expression3

テキスト要素

テキスト要素とは、先頭と末尾がそれぞれ、2 つのパーセント記号(%%) で囲まれた要素をいいま す。テキスト要素の本体は式で、式にはオプションで接頭辞を付加できます。以下、テキスト要素に ついて説明します。

%%expression%%
処理時、式(expression) が計算されます。その結果が文字列でなかった場合、このテキス ト要素は削除され、したがって、その後に生成されるマークアップ(HTML) コードには使用 されません。一方、計算結果が文字列だったときには、その文字列がマークアップコードのテ キスト要素として使用されます。
%%HTML:expression%%
処理時、式(expression) が計算されます。その結果が文字列でなかった場合、このテキス ト要素は削除され、その後に生成されるマークアップ(HTML) コードには使用されません。 一方、計算結果が文字列だったときには、その文字列のキャラクタセット(UTF-8) が必要な キャラクタセットに変換され、その後、そのキャラクタセットの文字列とHTML エスケープ記 号を使ってテキスト要素が作成され、マークアップコードで使用されます。
例:
例えば、式の結果が文字列 ">=GO=>" の場合、テキスト要素は、文字列
>=GO=>
に置換されます。
%%HTMLUTF8:expression%%
処理時、式(expression) が計算されます。その結果が文字列でなかった場合、このテキス ト要素は削除され、その後に生成されるマークアップ(HTML) コードには使用されません。 一方、計算結果が文字列だったときには、その文字列とHTML エスケープ記号を使ってテキス ト要素が作成され、そのテキスト要素がマークアップコードで使用されます( この場合、 UTF-8 は別のキャラクタセットには変換されません)。
例:
例えば、式の結果が文字列 >=GO=> の場合、テキスト要素は、文字列
>=GO=>
に置換 されます。
%%URL:expression%%
処理時、式(expression) が計算されます。その結果が文字列でなかった場合、このテキス ト要素は削除され、その後に生成されるマークアップ(HTML) コードには使用されません。 計算結果が文字列だったときには、その文字列とURL エスケープ記号を使ってテキスト要素 が作成され、そのテキスト要素がマークアップコードで使用されます。
例:
例えば、式の結果が文字列 "Stop It?" の場合、このテキスト要素は、文字列
Stop%20It%3F
に置換されます。
%%MAILBOXRAWNAME:expression%%
処理時、式(expression) が計算されます。その結果が文字列でなかった場合、このテキス ト要素は削除され、その後に生成されるマークアップ(HTML) コードには使用されません。 計算結果が文字列(IMAP のメールボックス名) だったときには、そのメールボックス名のエ ンコーディングがUTF-8 キャラクタセットに変換され、さらにUTF-8 キャラクタセットが必 要なキャラクタセットに変換されます。最後に、変換後の文字列とHTML エスケープ記号を 使ってテキスト要素が作成され、そのテキスト要素がマークアップコードで使用されます。
%%MAILBOXNAME:expression%%
処理時、式(expression) が計算されます。その結果が文字列でなかった場合、このテキス ト要素は削除され、その後に生成されるマークアップ(HTML) コードには使用されません。 計算結果が文字列X だった場合、式TRANSLATE(X USING DICTIONARY("MailboxNames")) が実行されます。その後、上記のテキスト要素%%MAILBOXRAWNAME:expression%% と同じ処理が行われます。
%%MAILBOXLASTNAME:expression%%
処理時、式(expression) が計算されます。その結果が文字列でなかった場合、このテキス ト要素は削除され、その後に生成されるマークアップ(HTML) コードには使用されません。計算結果が文字列X だった場合、その文字列はメールボックス名と解釈されます。ここで、そ のメールボックスが階層メールボックスだったときには、その名前の最後の部分だけが使われ ます。そうでない場合、名前全部が使用されます。その後、名前(最後の部分または全部) が 上記のテキスト要素%%MAILBOXNAME:expression%% と同じように処理されます。
%%URLMAILBOXPARENT:expression%%
処理時、式(expression) が計算されます。その結果が文字列でなかった場合、このテキス ト要素は削除され、その後に生成されるマークアップ(HTML) コードには使用されません。 計算結果が文字列X だった場合、その文字列はメールボックス名と解釈されます。ここで、そ のメールボックスが階層メールボックスだったときには、そのメールボックスの親のメール ボックスの名前が使われます。その後、テキスト要素%%URL:expression%% と同じように処 理されます。メールボックスが階層メールボックスでなかったときには、このテキスト要素は 削除され、マークアップ(HTML) コードには使用されません。
%%JAVASCRIPT:expression%%
処理時、式(expression) が計算されます。その結果が文字列でなかった場合、このテキス ト要素は削除され、その後に生成されるマークアップ(HTML) コードには使用されません。 計算結果が文字列だった場合、その文字列とJavaScript 文字列の表現に必要なエスケープ記号 を使って、テキスト要素が作成されます。さらに、そのテキスト要素のキャラクタセットが Unicode に変換されると同時に、非ASCII 記号が\uhhhh エスケープシーケンスで表現され、 その結果がマークアップ(HTML) コードで使用されます。
注意: this prefix does not put any quotation marks around the string.
例:
このテキスト要素によって、文字列の前後に引用符が付加されることはありません。  例えば、式の結果が文字列'What do "they" think?' の場合、このテキスト要素は、文字列
What do \"they\" think
に置換されます。
%%SIZE:expression%%
処理時、式(expression) が計算されます。その結果が文字列でなかった場合、このテキス ト要素は削除され、その後に生成されるマークアップ(HTML) コードには使用されません。 計算結果が文字列だった場合、その文字列が数値(バイト数) に変換されます。
計算結果の文字列は数値(値文字列) でなければなりませんが、オプションの接尾辞としてk またはK ( この場合、数値が1024 倍されます)、もしくは、m またはM (数値が1048576 倍さ れます) も許されます。また、文字列は、文字u またはU で始まっていてもよく、この場合、 変換後の数値(バイト数) は-1 と解釈されます。
文字列が数値(バイト数) に変換された後、式DICTIONARY("SizePictures") を使って辞 書が取り出されます。この辞書を使って、数値(バイト数) が「サイズ文字列」に変換されま す。ここで、数値が負の値だったときには、辞書を使って文字列unlimited が変換され、その結果がテキスト要素として使われます。この場合の変換処理は、接頭辞がHTML: のテキス ト要素(%%HTML:expression%%) と同じです。
数であるかどうか、さらに、倍数だった場合、その値が1 より大きい(2 以上) かどうかが確 認されます。計算後の数値が倍数で、その倍数の値が1 より大きかったときには、辞書の"M""K""" (空白の文字列) のいずれかのキーの値が取り出されます。このキーの値には記号の 組み合わせ(^0、マクロ) が格納されており、単位に応じて、マクロがメガバイト、キロバイ ト、バイトのいずれの値に置換されます。その後、接頭辞がHTML: のテキスト要素 (%%HTML:expression%%) と同じ方法で処理が行われます。
式DICTIONARY("SizePictures") の結果がNULL だった場合、または、必要なキーに値が 存在しなかった場合、数値とキー名を使ってテキスト要素が作成されます(例えば、20M, 1345K, 182345777 などとなります)。
%%ROUNDSIZE:expression%%
このテキスト要素は、上記の接頭辞がSIZE: のテキスト要素と同じように機能します。ただ し、式(expression) の値が自動的に変換されます。つまり、数値(バイト数) が10000 以 上のときには単位がキロ(値= 値/ 1024 * 1024)、10240000 以上のときには単位がメガ(値= 値/ 1048576 * 1048576) に変換されます。
%%TIME:expression%%
処理時、式(expression) が計算されます。その結果が文字列でなかった場合、このテキス ト要素は削除され、その後に生成されるマークアップ(HTML) コードには使用されません。 計算結果が文字列だった場合、その文字列が数値(秒数) に変換されます。
計算結果の文字列は数値でなければなりませんが、オプションの接尾辞としてs またはS、m またはM ( この場合、数値が60 倍されます)、h またはH (数値が3600 倍されます)、d また はD (数値が86400 倍されます) も許されます。
文字列が数値(秒数) に変換された後、式DICTIONARY("TimePictures") を使って辞書が 取り出されます。この辞書を使って、数値(秒数) が「時間文字列」に変換されます。
また、計算後の数値(秒数) がチェックされ、その値が週、日、時間、分の倍数(例えば、2 週、3 日、6 時間など) であるかどうか、さらに、倍数だった場合、その値が1 より大きい(2 以上) かどうかが確認されます。計算後の数値が倍数で、その値が1 より大きかったときに は、その単位に応じて、辞書のweeks、days、hours、minutes のいずれかのキーの値が取 り出されます。このキーの値には記号の組み合わせ(^0、マクロ) が格納されており、単位に 応じて、マクロが週、日、時、分のいずれかの数に置換されます。その後、この数のキャラク タセットがUTF-8 から必要なキャラクタセットに変更されます。最後に、その数(文字列) とHTML エスケープ記号を使ってテキスト要素が作成されます。
式DICTIONARY("TimePictures") の結果がNULL だった場合、または、必要なキーに値が 存在しなかった場合、計算後の数値、スペース、キー名を使ってテキスト要素が作成されます (例えば、3 weeks、11 hours、5 seconds などとなります)。
例:
データ要素elapsedTime の値(文字列) が2400 だった場合、テキスト要素
%%TIME:elapsedTime%%
は、文字列
40 minutes
に置換されます。
DICTIONARY("TimePictures") で辞書が取り出され、この辞書にminutes の値として文 字列 "^0mins" aが定義されている場合、テキスト要素
%%TIME:elapsedTime%%
は文字列
40mins
に置換されます。
%%DATETIME(formatName):expression%%
処理時、式(expression) が計算されます。その結果が日付タイプのデータでなかった場 合、このテキスト要素は削除され、その後に生成されるマークアップコードには使用されませ ん。計算結果が日付タイプのデータだった場合、そのデータがパラメータformatName の フォーマットにしたがってテキスト文字列に変換されます。 
英数字文字列または引用符付き文字列を指定できます。
パラメータformatName の値としては、式DICTIONARY("DatePictures").formatName の結果が格納されます。この式の結果が文字列でなかったときには、パラメータformatName の値として、代わりに文字列((^h:^m:^s ^W ^D-^M-^Y)) が使われます。
上記の記号の組み合わせ(マクロ) はそれぞれ、次の実データに置換されます。
記号置換後のデータ
^D月の日(2 桁)
^d月の日(1 桁または2 桁)
^M月の名前(関数MONTHNAMES() から返った名前で、その後、DICTIONARY("DatePictures") で変換)
^Nthe month number (2-digit, from 01 to 12)
^Y年(2 桁)
^y年(4 桁)
^s秒(2 桁)
^m分(2 桁)
^H時(2 桁、00 から23)
^h時(1 桁または2 桁、1 から12)
^t接尾辞AM またはPM (DICTIONARY("DatePictures") で変換)
^wthe weekday number (Sun - 0)
^W曜日(関数WEEKDAYS() で返った名前で、その後、DICTIONARY("DatePictures") で変換)

結果文字列は、HTML: 接頭辞処理によりマークアップコードに配置されます。
%%LOCALDATETIME(formatName):expression%%
このテキスト要素の処理は、上記の%%DATETIME(formatName):expression%% と基本的 に同じですが、日付データは、ローカルタイムに変換されます。
%%DATETIMEAS(format):expression%%
式expression が計算されます。その値が日付タイプでなかったときには、処理後のマーク アップコードからテキスト要素全体が削除されます。値が日付タイプだったときには、「日付」 要素がテキスト文字列に変換されます。変換は、format で指定したフォーマットを使って実 行されます。
パラメータformat は、引用符付き文字列、または値が文字列の式でなければなりません。こ の文字列がフォーマット文字列として使用されます。
%%LOCALDATETIMEAS(format):expression%%
このテキスト要素は、接頭辞がDATETIMEAS(format) のテキスト要素と同じですが、まず日 付の値がローカル時刻に変換されます。
%%DATE:expression%%
このテキスト要素は、接頭辞がDATETIME("dateOnly") のテキスト要素と同じです。
%%LOCALDATE:expression%%
このテキスト要素は、接頭辞がLOCALDATETIME("dateOnly") のテキスト要素と同じです。
%%DATEWEEK:expression%%
このテキスト要素は、接頭辞がDATETIME("dayAndDate") のテキスト要素と同じです。
%%DATETIME:expression%%
このテキスト要素は、接頭辞がDATETIME("dateAndTime") のテキスト要素と同じです。
%%LOCALDATETIME:expression%%
このテキスト要素は、接頭辞がLOCALDATETIME("dateAndTime") のテキスト要素と同じで す。
%%DATETIMESHORT:expression%%
処理は、次のテキスト要素の処理と同じです。
  • 式で指定される日付がカレントの日付に「非常に近い」(絶対差が22 時間未満) 場合 のDATETIME("timeOnly")。
  • 式で指定される日付がカレントの日付に「近い」(絶対差が180 日未満) 場合の DATETIME("monthDate")。
  • 上記以外の場合のDATETIME("dateOnly")。
%%LOCALDATETIMESHORT:expression%%
式(expression) で指定される日付がカレントの日付に「近い」場合、このテキスト要素の 処理は、接頭辞がLOCALDATETIME("timeOnly") のテキスト要素と同じです。そうでない 場合、処理は、接頭辞がLOCALDATETIME("dateOnly") のテキスト要素と同じです。
%%HTMLTRUNCATED(number):expression%%
処理時、式(expression) が計算されます。その結果が文字列でなかった場合、このテキス ト要素は削除され、マークアップコードには使用されません。計算結果が文字列だった場合、 文字列がパラメータnumber で指定される数の長さまで切り取られます。その後、キャラクタ セットがUTF-8 から必要なキャラクタセットに変換され、その文字列とHTML エスケープ記 号を使ってテキスト要素が作成されます。文字列の長さがパラメータnumber で指定された数 より短かった場合、.. が追加されます。
例えば、式(expression) の結果が文字列"Test Subject" で、テキスト要素の接頭辞が HTMLTRUNCATED(10) の場合(10 英数字まで)、そのテキスト要素は
Test Subje..
に置換 されます。
%%HTMLTRUNCATED(expression1):expression%%
このテキスト要素は、基本的には上記の%%HTMLTRUNCATED(number):expression%% と同 じですが、まず、パラメータexpression1 が計算され、その後、パラメータexpression が計算されます。expression1 の計算結果は、数値でなければなりません。この数値で示さ れる数の文字が、式expression から返った文字列から取り出されます。
例: HTMLTRUNCATED(STRING("FieldLength")):theField
%%HTMLSUBST(parameter0,parameter1,...):expression%%
すべてのパラメータparameterN (parameter0,parameter1,...) とパラメータ expression が計算されます。パラメータexpression の計算結果が文字列でなかった場合、 このテキスト要素は削除され、マークアップコードには使用されません。パラメータ expression の計算結果が文字列だった場合、その文字列のうち^N で示されるサブ文字列がそ れぞれパラメータparameterN で返った文字列に置換されます(つまり、^0 で示されるサブ文 字列がparameter0 の値に、^1 で示されるサブ文字列がparameter1 の値に、というふうに置換 されます)。パラメータparameterN のうち、いずれかのパラメータの値が文字列でなかった場 合、そのパラメータの値は使用されません。
上のようにして得られた文字列は、そのキャラクタセットがUTF-8 から必要なキャラクタ セットに変換され、その後、その文字列とHTML エスケープ記号を使ってテキスト要素が作成 されます。
例えば、 テキストデータセットの要素text1 の値が文字列"My String1"、結果データセット の要素var2 の値がMy Var2、テキストデータセットの要素text2 の値が文字列 "comparing ^0 & ^1" だった場合、次のテキスト要素は、
%%HTMLSUBST(STRING("text1"),var2):STRING("text2")%%
comparing My String1 &amp; My Var2
に置換されます。
%%URLSUBST(parameter0,parameter1,...):expression%%
上記と同じです。ただし、HTML エスケープ記号ではなくURL エスケープ記号を使って、テキ スト要素が結果の文字列に置き換えられます。
%%INDEX:scanner%%
パラメータscanner の値は、 <!--%%FOREACH scanner IN ...--> コンストラクト(スク リプトコードのカレントの部分を囲むコンストラクト) の名前でなければなりません。処理 時、このテキスト要素は、配列スキャナの値(配列のインデックス) に置換されます。このテ キスト要素では、インデックスの開始値として0 が使われます。
%%INDEX1:scanner%%
パラメータscanner の値は、 <!--%%FOREACH scanner IN ...--> コンストラクト(スク リプトコードのカレントの部分を囲むコンストラクト) の名前でなければなりません。処理 時、このテキスト要素は、配列スキャナの値(配列のインデックス) に置換されます。このテ キスト要素では、インデックスの開始値として1 が使われます。
%%DUMP:expression%%
式expression が計算されます。その後、テキスト要素が結果のテキスト表現 に置き換えら れます。

構造要素

構造要素は、 <!--%% マーカーで始まり、 --> マーカーで終わります。構造要素は、生成されるマー クアップ(HTML) コードに挿入されることはありません。

<!--%%IF expression-->
この構造要素の後ろには、次の構造要素
<!--%%ELIF expression-->
を定義できます(省略可能)。この構造要素
<!--%%ELSE-->
の後には、次の構造要素
<!--%%ENDIF-->
が定義されていなければなりません。

The boolean value of the expression in the IF element is calculated, then the values of the expressions in the ELIF elements (if any exists) are calculated, till one of those values is postive (true).
If an element with such a value is found, the portion of the script between this element and the following ELIF, ELSE, or ENDIF element is processed.
If an element is not found, and there is no ELSE element, the script between the IF and ENDIF elements is removed completely, otherwise the portion between the ELSE and ENDIF elements is processed.
例:
<!--%%IF EXISTS(lastLogin)-->We have not seen you since <i>%%HTML:lastLogin%%<iI>
<!--%%ELSE-->Welcome, new user!
<!--%%ENDIF-->
上の例で、データセットの要素lastLogin の値が20-Apr-2001 だった場合、次の文字列が生成さ れます。
We have not seen you since <i>20-Apr-2007</i>

一方、データセットの要素lastLogin がなかったときには、次の文字列が生成されます。
Welcome, new user!
<!--%%FOREACH scanner in expression-->

<!--%%FORALL scanner in expression-->
この構造要素の後には、次の構造要素
<!--%%EMPTYFOR scanner-->
を定義できます(省略可能)。また、この後には、次の構 造要素を定義しなければなりません。
<!--%%ENDFOR scanner-->
上の3 つの構造要素にはいずれも、scanner (英数字文字列) を指定しなければなりません。

処理時、式expression が計算されます。計算の結果は、配列でなければなりません。
<!--%%FOREACH scanner ...--><!--%%EMPTYFOR scanner--> の間のスクリプトが処 理されます。 <!--%%EMTPYFOR scanner--> がない場合、 <!--%%FOREACH scanner ...--><!--%%ENDFOR scanner--> の間のスクリプトが処理されます。この場合、配列の各要 素についてそれぞれ、処理が繰り返されます。

処理対象のスクリプトの中では、式を使って配列スキャナ(scanner[ ]、scanner =配列ス キャナの名前) への参照を定義できます。この参照を介して、パラメータexpression で 返った配列のカレントの要素にアクセスが可能です。
<!--%%EMPTYFOR scanner--> が定義されている場合、パラメータexpression の値が配 列でないか、または、配列であっても内容が空だったときには、 <!--%%EMPTYFOR scanner--><!--%%ENDFOR scanner--> の間のスクリプトが処理されます。一方、パラ メータexpression の値が配列で、その配列の要素が1 つ以上の場合、<!--%%EMPTYFOR scanner--> と<!--%%ENDFOR scanner--> の間のスクリプトは処理されません。
例:
<table border="1">
<tr><td>File Name</td><td>File Size</td></tr>
<!--%%FOREACH elem in fileList-->
<tr><td>%%HTML:elem[].name%%</td><td>%%elem[].size%%</td></tr>
<!--%%EMPTYFOR elem-->
<tr><td colspan="0">&nbsp;</td></tr>
<!--%%ENDFOR elem-->
</table>

この例で、データ要素fileList は配列で、配列の要素は辞書です。辞書にはいずれも、 name とsize という名前の2 つのキーがあり、値はどちらも文字列です。elem[].name と elem[].size はどちらも、配列スキャナとキー付き要素の組み合わせです。
例えば、配列fileList の値が次のようだったとします。
({name=MyReport; size=2300;},{name="My Old Report"; size=4000;})
この場合、スクリプトの処理後、次のようなHTML コードが生成されます。
<table border="1">
<tr><td>File Name</td><td>File Size</td></tr>
<tr><td>MyReport</td><td>2300</td></tr>
<tr><td>My Old Report</td><td>4000</td></tr>
</table>


The <!--%%IF ...--> ...<!--%%ELSE--> ...<!--%%ENDIF--> コンストラクトと <!--%%FOREACH ...--> ... <!--%%ENDFOR ...--> コンストラクトはどちらも、入れ子にで きます。
<!--%%FOREACHINC scanner in expression-->
The same as the <!--%%FOREACH construct, but it repeats the "loop body" code portion one time more than the number of elements in the expression value array or dictionary.
For this additional run, the scanner[*] and scanner[] values are null-values.
If the expression value is not an array or a dictionary, the loop body is not repeated, and the portion between the <!--%%EMPTYFOR scanner--> and <!--%%ENDFOR scanner--> elements (if any) is processed.
<!--%%FOREACHREV scanner in expression-->
The same as the <!--%%FOREACH construct, but it repeats the "loop body" code portion for each element in the expression value array or dictionary, taken in the reversed order (the last element first).
<!--%%INCLUDE filename[( parameter1 [, parameter2 ... ])]-->
パラメータfilename にはファイル名を指定し、そのファイルがスキン(スキンファイルの セットが格納されている場所) から取り出されます( インクルードされます)。このファイル は、このスクリプト(WSSP ファイル) と同じスキンの中に存在しなければなりません。また、 内部にはWSSP コードが定義されていなければなりません。このファイルは、カレントのコン テキストで実行されます(同じデータセットが使われます)。<!--%%INCLUDE filename--> 構造要素は、このファイルで生成されるマークアップ(HTML) コードに置換されます。
パラメータfilename のファイル名には、拡張子.wssi を付加します。これで、そのファイ ルが確実に<!--%%INCLUDE filename--> 構造要素で使用されるようになります。

このINCLUDE 構造要素(<!--%%INCLUDE filename-->) は、入れ子にすることができま す。つまり、.wssi ファイルの中に別の.wssi ファイルを定義できます。

C/C++ 言語の#include オペレーターはプリプロセッサですが、それとは異なり、INCLUDE 構造要素は実処理オペレーターです。つまり、<!--%%FORALL ...--> ... <!--%%ENDFOR ...--> コンストラクトに配列があり、そのコンストラクトの中に<!--%%INCLUDE filename--> 構造要素を定義した場合、パラメータfilename のファイルは、そ の配列の要素についてそれぞれ一回ずつ実行されます。
<!--%%NUMERICMENU selected [デフォルトselectedDefault ] IN (number1,number2,....,numberN) [ DISPLAY dictionary]-->
この構造要素は、文字列構造要素である <option value="value">presentation のシー ケンス(シリーズ) に置換されます。
パラメータ(number1,number2,....,numberN) はN 個の要素のリストで、要素はいずれ も数値です。各要素(数値) は、昇順で定義します。また、数値は-1 以上でなければなりま せん。
処理時、式selected が計算されます。この式から返る値は、文字列でなければなりません。 <option value="value"> 要素のうち、その値("value") が、式selected から返った 文字列と同じ<OPTION VALUE="value"> 要素にキーワードSELECTED が挿入されます。
キーワードDISPLAY とパラメータdictionary は省略できます。省略した場合、文字列パラ メータpresentation の内容は、<OPTION VALUE="value"> のパラメータ"value" の内 容と同じ(つまり数値) になります。
例:
データセットの要素sizeLimit の値が文字列200 だったとします。
その場合、次の構造要素は、
<!--%%NUMERICMENU sizeLimit IN (-1,0,100,200,300)-->
次のマークアップ(HTML) テキストに置換されます。
<option value="-1">-1<option value="0">0
<option value="100">100<option value="200" selected>200<option value="300">300


キーワードDISPLAY とパラメータ(式) dictionary を指定した場合、式dictionary が計 算されます。式の値が辞書だった場合、文字列パラメータpresentation の内容は、辞書の キーの値(例えば、下記の例では"-1" = Unlimited) で表現されます。その後、キーの値 (文字列) のキャラクタセットが必要なキャラクタセットに変換され、最後に、その文字列が HTML エスケープ記号を使って出力されます。
例:
データセットの要素sizeLimit の値が文字列200 だったとします。
また、スキンテキストデータセットに辞書Limits があり、その内容が{"-1" = Unlimited; 0 = "Off & Shut";} だったとします。
この場合、次の構造要素は、
<!--%%NUMERICMENU sizeLimit IN (-1,0,100,200,300) DISPLAY DICTIONARY("Limits")-->
次のマークアップ(HTML) テキストに置換されます。
<option value="-1">Unlimited<option value="0">Off &amp; Shut
<option value="100">100<option value="200" selected>200<option value="300">300


キーワードDEFAULT と式selectedDefault を指定したときには、<OPTION VALUE="value">presentation のシーケンス(シリーズ) の前に文字列<OPTION VALUE="-2">defaultPresentation が追加されます。その場合、式selected の値が NULL だったときには、この文字列<OPTION VALUE="-2">defaultPresentation にキー ワードSELECTED が追加されます。 

文字列defaultPresentation の内容は、スキンテキストデータセットの文字列 DefaultValuePicture の値です。この文字列には、記号の組み合わせ(マクロ) である^0 が格納されています。このマクロが、式selectedDefault の値(下記の例では、文字列-1) に置き換えられます。なお、キーワードDISPLAY とパラメータ(式) dictionary が指定 されている場合、まず、式selectedDefault の値が変換され(下記の例では、Unlimited に変換)、その後、マクロが式selectedDefault の値(つまり、Unlimited) に置換され ます。
例:
データセットの要素sizeLimit の値が文字列200 だったとします。
また、データセットの要素defLimit の値が文字列-1 だったとします。
スキンテキストデータセットに文字列DefaultValuePicture があり、その値が default(^0) だったとします。
さらに、スキンテキストデータセットに辞書Limits があり、その内容が{"-1" = Unlimited; 0 = "Off & Shut";} だったと仮定します。
この場合、次の構造要素は、 
<!--%%NUMERICMENU sizeLimit DEFAULT defLimit IN (-1,0,100,200,300) DISPLAY DICTIONARY("Limits")-->
次のマークアップ(HTML) テキストに置換されます。
<option value="-2">default(Unlimited)
<option value="-1">Unlimited<option value="0">Off &amp; Shut
<option value="100">100<option value="200" selected>200<option value="300">300
<!--%%TIMEMENU selected [デフォルトselectedDefault ] IN (time1,time2,....,timeN) [ DISPLAY dictionary]-->
この構造要素は、上記のNUMERICMENU と基本的に同じですが、 (number1,number2,....,numberN) にはそれぞれ、時間の長さ(秒数) を指定します。
式selected と式selectedDefault からは、どちらも文字列が返らなければなりません。 返った文字列はいずれも、接頭辞が
TIME: であるテキスト要素(%%TIME:expression%%) のアルゴリズムを使って数値(秒数) に変換されます。
キーワードDISPLAY とパラメータdictionary を指定した場合、その辞書(dictionary) を使って値が変換されます。キーワードDISPLAY とパラメータdictionary を指定しなかっ たとき、または、辞書のキーに必要な文字列が格納されていなかったときには、接頭辞が TIME: のテキスト要素(%%TIME:expression%%) の方法を使って、文字列パラメータ presentation の内容(時間) が作成されます。
<!--%%SIZEMENU selected [デフォルトselectedDefault ] IN (size1,size2,....,sizeN) [ DISPLAY dictionary]-->
この構造要素は、上記のNUMERICMENU と基本的に同じですが、 (number1,number2,....,numberN) にはそれぞれ、データのサイズ(バイト数) を指定し ます。
式selected と式selectedDefault からは、どちらも文字列が返らなければなりません。 返った文字列はいずれも、接頭辞がSIZE: であるテキスト要素(%%SIZE:expression%%) のアルゴリズムを使って数値(秒数) に変換されます。
キーワードDISPLAY とパラメータdictionary を指定した場合、その辞書(dictionary) を使って値が変換されます。キーワードDISPLAY とパラメータdictionary を指定しなかっ たとき、または、辞書のキーに必要な文字列が格納されていなかったときには、接頭辞が SIZE: のテキスト要素の方法を使って、文字列パラメータpresentation の内容(サイズ) が 作成されます。
<!--%%ENUMMENU selected [デフォルトselectedDefault ] IN valueSet [ DISPLAY dictionary]-->
この構造要素は、文字列要素 <option value="value">presentation のシーケンスに置 換されます。

パラメータ(式) valueSet は要素のセット(配列) で、その要素は文字列でなければなりま せん。この構造要素では、配列の各要素のインデックスがそれぞれ、<OPTION VALUE="value">presentation のパラメータ"value" の値として使われます。

処理時、式selected が計算されます。この場合、値として文字列が返らなければなりませ ん。<option value="value"> 要素のうち( この要素は、配列の各要素についてそれぞれ 作成されます)、パラメータ"value" の値が式selected の値と同じである要素にキーワードSELECTED が追加されます。

キーワードDISPLAY とパラメータ(式) dictionary は省略できます。省略した場合、文字 列パラメータpresentation の内容は、パラメータvalue の結果要素、つまり要素の実デー タ(下記の例では、Blue など) で出力されます。
例:

データセットに要素color があり、その値が文字列"Green" だったとします。
また、データセットに配列colors があり、その値が("Blue", "Green", "Red") だったとし ます。
この場合、次の構造要素は、
<!--%%ENUMMENU color IN colors-->
次のマークアップ(HTML) テキストに置換されます。
<option value="0">Blue<option value="1" selected>Green<option value="2">Red


キーワードDISPLAY とパラメータ(式) dictionary を指定した場合、式dictionary が計 算されます。式の値が辞書だったときには、その辞書を使って、配列valueSet の各要素(文 字列、それぞれ辞書のキーに対応) が辞書のキーの値に変換されます。その後、キーの値(文 字列) のキャラクタセットが必要なキャラクタセットに変換され、最後に、文字列がHTML エ スケープ記号を使って出力されます。
例:

データセットに要素color があり、その値が文字列"Green" だったとします。
また、データセットに配列colors があり、その値が("Blue", "Green", "Red") だったとします。
さらに、スキンテキストデータセットに辞書Colors があり、その内容が{Blue = "Night Blue"; Green = "Grass Green";} だったとします。
この場合、次の構造要素は、
<!--%%ENUMMENU color IN colors DISPLAY DICTIONARY("Colors")-->
次のマークアップ(HTML) テキストに置換されます。
<option value="0">Night Blue<option value="1" selected>Grass Green<option value="2">Red


キーワードDEFAULT と式selectedDefault を指定したときには、<OPTION VALUE="value">presentation のシーケンスの前に文字列<OPTION VALUE="- 1">defaultPresentation が追加されます。その場合、式selected の値がNULL だったと きには、この文字列<OPTION VALUE="-1">defaultPresentation にキーワード SELECTED が追加されます。 

文字列defaultPresentation の内容は、スキンテキストデータセットの文字列 DefaultValuePicture の値です。この文字列には、記号の組み合わせ(マクロ) である^0 が格納されています。このマクロが、式selectedDefault の値(下記の例では、文字列 Blue) に置き換えられます。なお、キーワードDISPLAY とパラメータ(式) dictionary が指定されている場合、まず、式selectedDefault の値が変換され(下記の例では、Night Blue に変換)、その後、マクロが式selectedDefault の値(つまり、Night Blue) に置換 されます。
例:
データセットに要素color があり、その値が文字列"Green" だったとします。
データセットに要素defColor があり、その値が文字列"Blue" だったとします。
また、データセットに配列colors があり、その値が("Blue", "Green", "Red") だったとします。
スキンテキストデータセットに文字列DefaultValuePicture があり、その値がデフォルト(^0) だったとします。
さらに、スキンテキストデータセットに辞書Colors があり、その内容が{Blue = "Night Blue"; Green = "Grass Green";} だったとします。
この場合、次の構造要素は、
<!--%%ENUMMENU color DEFAULT defColor IN colors DISPLAY DICTIONARY("Colors")-->
次のマークアップ(HTML) テキストに置換されます。
<option value="-1">default(Night Blue)<option value="0">Night Blue
<option value="1" selected>Grass Green<option value="2">Red
<!--%%BOOLMENU selected [デフォルトselectedDefault ] [ DISPLAY dictionary]-->
この構造要素は、文字列要素 <option value="value">presentation のシーケンスに置 換されます。処理は、ENUMMENU 構造要素と同じです。
この構造要素の場合、ENUMMENU 構造要素とは異なり、IN valueSet の部分はありません。 IN valueSet の部分としては、内蔵の配列である("NO","YES") が使われます。
<!--%%MAILBOXMENU selected [デフォルトselectedDefault ] IN mailboxList [NOINBOX ]-->
この構造要素は、文字列要素 <option value="value">presentation のシーケンスに置 換されます。処理は、ENUMMENU 構造要素と同じです。
式selected と式selectedDefault から返った値はどちらも、接頭辞がMAILBOXNAME: であるテキスト要素(%%MAILBOXNAME:expression%%) と同じ方法、つまり、スキンテキストデータセットの辞書MailboxNames を使って変換されます。これは、この構造要素には、 DISPLAY 部がないためです(DISPLAY 部がないため、辞書を指定できません)。
<!--%%DAYTIMEMENU selected [デフォルトselectedDefault ] [PERIOD timePeriod ] -->
この構造要素は、文字列要素 <option value="value">presentation (内容は、時刻表 示メニュー) のシーケンスに置換されます。パラメータ"value" の値は単位が秒の時刻、文 字列パラメータpresentation の値はHH:MM フォーマット(HH は時、MM は分) の時刻で す。
時刻の値は、真夜中(00:00) から23:59 までの範囲で、かつパラメータtimePeriod で指定 したステップ(増分、単位は分) を使って生成されます。キーワードPERIOD とパラメータ timePeriod を指定しなかった場合、ステップの値としては30 分(1800 秒) が使われます。 キーワードPERIOD を指定する場合、パラメータtimePeriod には、数値定数(単位が分の 時間の長さ) または式のいずれかを指定できます。パラメータtimePeriod に式を指定した 場合、その式が計算され、その結果が数値に変換されます。この数値は、単位が秒の時間の長 さです。
式selected と式selectedDefault の値はどちらも数値でなければなりません。具体的に は、式selected の値は、現在選択されている時刻(真夜中からの秒数)、式 selectedDefault の値は、デフォルトの時刻(真夜中からの秒数) でなければなりません。
<!--%%CALENDARTIMEMENU selected [PERIOD timePeriod ] -->
この構造要素では、上記のDAYTIMEMENU 構造要素の時刻メニューがHTML メニューとして 作成されます。
式selected の値は、日付タイプの値でなければなりません。この値の時間の部分が、現在選 択されている時刻の値として使われます。
<!--%%LOCALCALENDARTIMEMENU selected [PERIOD timePeriod ] -->
この構造要素では、上記のDAYTIMEMENU 構造要素の時刻メニューがHTML メニューとして 作成されます。
式selected の値は、日付タイプの値でなければなりません。この値がローカルの時刻に変換 されます。また、変換後の値の時間の部分が、現在選択されている時刻の値として使われま す。
<!--%%STRINGMENU selected [デフォルトselectedDefault ] IN valueSet [ DISPLAY dictionary]-->
この構造要素の処理は、基本的にはENUMMENU 構造要素と同じです。ただし、ENUMMENU 構造要素では、値として数値が使われますが、この構造要素の場合、値として実際のデータ値 が使用されます。デフォルト値は、文字列default に格納されています。
<!--%%CALENDARDATECONTROL selected NAME name [DAYSBEFORE before] [DAYSAFTER after] [CANNEVER ] -->
この構造要素では、式selected で指定されている日付に関連するコントロール(カレンダー コントロール) を作成できます。式selected の値は、日付タイプのオブジェクトでなければ なりません。そうでない場合、この構造要素は、全体が削除され、したがってマークアップ コードには挿入されません。

式selected の日付が本日より前で、その日付がパラメータbefore で指定した日数の範囲 より前の日付だった場合、または、式selected の日付が本日より後で、その日付がパラメー タafter で指定した日数の範囲より後の日付だった場合、この構造要素は、複数のテキスト コントロールで構成されるテキストに置換されます。そうでない場合、この構造要素によっ て、メニューコントロールが作成されます。

パラメータbefore とパラメータafter の値はどちらも数値でなければなりません。値は、 省略することもできます。
パラメータbefore の値を指定しなかったときには、その値は7 に設定されます。
パラメータafter の値を指定しなかったときには、その値は31 に設定されます。
テキストコントロールが作成される場合(上記の式selected の条件を参照)、辞書 DatePictures からフォーマット文字列dateOnly が取り出されます。その後、^D、^M、^Y、 ^y の各記号の組み合わせ(マクロ) がそれぞれテキストコントロールコードに置き換えられま す。この場合、テキストコントロールの名前としては、パラメータname で指定した名前に接 尾辞が付加された名前が使われます。つまり、日のコントロールはname-D、月のコントロー ルはname-M、2 桁の年のコントロールはname-Y 、4 桁の年のコントロールはname-y とい う名前になります( したがって識別が可能です)。

一方、メニューが作成される場合(上記の式selected の条件を参照)、マークアップ言語要 素SELECT が生成されます。この要素SELECT には、パラメータname で指定した名前が格納 されており、この名前を使ってメニューが作成されます。作成されたメニューには、要素とし て、本日のほか、本日より前の日(パラメータbefore で指定)、本日より後の日(パラメー タafter で指定) が格納されます。要素はいずれも、フォーマット文字列 dayAndMonthDate を使ってフォーマットされます。このフォーマット文字列は、辞書 DatePictures に格納されています。
パラメータafter の値+ 1 の日付を考慮し、追加の要素(...) が表示されます。この要素を ユーザーが選択すると、現在選択されている日付が「メニューの範囲外」に変更されます。つ まり、ユーザーは、任意の日付を選択できるようになります。
<!--%%LOCALCALENDARDATECONTROL selected NAME name [DAYSBEFORE before] [DAYSAFTER after] -->
この構造要素では、上記のCALENDARDATECONTROL 構造要素と同じようにしてマークアッ プコードが生成されます。
式selected の値は、日付タイプの値でなければなりません。処理では、この値はグローバル (GMT) 時刻と解釈され、したがって、値はローカル時刻に変換されます。

CommuniGate® Pro Guide. Copyright © 1998-2007, Stalker Software, Inc.