エスケープとは、RBML で特別な意味を持つ文字を無効化し、単なる文字列として扱うことができる仕組みです。RBML2 ではバックスラッシュ(\) (※日本語フォントでは半角円記号で表示されます) をエスケープ文字 として使用し、エスケープ文字の直後の特殊文字を無効化します。
RBML2 でのエスケープの実装は一般的なプログラミング言語での実装とは少し異なり、使用用途および使用可能箇所が限定されています。エスケープ可能な特殊文字は引用符("') とセミコロン(;) と改行で、CONFIG ブロック内でのみ使用できます。ただし、セミコロン(;) に限っては特定のプロパティ の値内でのみエスケープが可能です。
1. 引用符のエスケープ
プロパティ を設定する際に値をダブルクォーテーション(") で囲みますが、値の一部としてダブルクォーテーション(") を使用したい場合に、値として使用するダブルクォーテーション(") の直前にエスケープ文字を記述してエスケープします。同じようにシングルクォーテーション(') もエスケープすることができます。
Example
! 引用符をエスケープすると引用符自体を値として使用することができます
× DATA.NEW.mark = "<b style="color: red;">NEW</b>"
○ DATA.NEW.mark = "<b style=\"color: red;\">NEW</b>"
2. セミコロンのエスケープ
セミコロン(;) はいくつかのプロパティ において、複数の値を指定する際の区切り記号として用いられています。セミコロン(;) を区切り記号ではなく、値の一部として扱いたい場合にセミコロン(;) の直前にエスケープ文字を記述してエスケープします。
セミコロン(;) のエスケープが使用可能なプロパティ は、値の区切り記号としてセミコロン(;) を使用している DATA.EMIAL.mark , DATA.URL.mark , FORM.COLOR.color , FORM.FREE.label , FORM.FREE.value , FORM.ICON.label , FORM.ICON.file の7つで、それ以外のプロパティ ではエスケープ文字を記載してもエスケープ文字として扱われず、そのまま \; が値として使用されます。
FORM.FORM.position でも区切り記号としてセミコロン(;) が使用されていますが、値にセミコロン(;) を指定することはありませんのでエスケープは使用できません。
Example
! 以下の例ではセミコロンをエスケープして
! アイコンの表示名として (^-^) (;_;) (-.-;) を設定しています。
FORM.ICON.label = "(^-^);(\;_\;);(-.-\;)"
FORM.ICON.file = "face1.png;face2.png;face3.png"
! 以下はエスケープとして扱われない悪い例です。
! 値は "top\" と "other" として認識されます。
FORM.FORM.position = "top\;other"
3. 改行のエスケープ
改行の直前にエスケープ記号を記述することで、その改行がないものとして、つまり単一の行として扱われます。値に長い文字列を指定しなければならない時、改行をエスケープすることで複数の行にまたがって値を記述することが可能になります。
エスケープ文字は必ず改行の直前、つまり行末に記述しなれければならず、記号の後ろに空白などが入らないよう注意を払わなければなりません。
Example
! 長い値は改行をエスケープすることで複数行で記述可能です。
HTML.DOCTYPE.value = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" \
"http://www.w3.org/TR/html4/loose.dtd">'
! エスケープは値の中でなくても構いませんし、3行以上になっても構いません
HTML.DOCTYPE.value = \
'<!DOCTYPE HTML PUBLIC \
"-//W3C//DTD HTML 4.01 Transitional//EN" \
"http://www.w3.org/TR/html4/loose.dtd">'
! 上の例はいずれも以下のように認識されます。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
上の例では2行目以降を見栄えのために空白でインデントしていますが、RBML の仕様では行頭の空白はインデントと見なされ、全て無視されます。たとえそれが値の中であっても、行頭の空白は全てインデントと解釈されますから、このような指定が可能になっています。値に空白を含めたいときは、空白が行頭にこないように改行位置を調整します。
次の例はセミコロン(;) と改行の両方をエスケープした応用例で、FORM.FREE を使用して色選択欄を定義しています。
Example
FORM.FREE.type = "radio"
FORM.FREE.value = "#FF0000;#0000FF;#FFFF00;#009900;#FF9900"
FORM.FREE.label = '<span style="color: #FF0000\;">■</span>;\
<span style="color: #0000FF\;">■</span>;\
<span style="color: #FFFF00\;">■</span>;\
<span style="color: #009900\;">■</span>;\
<span style="color: #FF9900\;">■</span>'
↓↓↓
■ ■ ■ ■ ■