第1章:構文

Last-modified: 2017-03-24 (金) 01:06:43

まず最初はWMLの構文を理解しましょう。
言語の"構文"が何であるか分からないという人は、WMLを正しく動かすための書き方を
規定したルールのセットと考えてください。
このコンセプトはちょっと混乱するかもしれませんが、あなたがそれを理解しているかどうかにかかわらず、
あなたは日常生活で構文の概念を使っているのです。
日本語の文章の構造を考えてみましょう。

 

「私はゼリーとチーズのサンドイッチが好きです。」

 

この文は、それを聞いたり読んだ人に理解させるために、ある種の規則や構文を使っています。
あなたが代わりに「好きですチーズが私とサンドイッチゼリー」と言った場合その文章は意味を成さなくなり、誰もあなたが
何を言っているのか理解できません。また、「私はチーズのサンドイッチとゼリーが好きです。」と言ったら、それは文の
全体の意味を変えるでしょう!
日本語の構文と同様に、WML構文では、他の人があなたの言っていることや書くことを理解するために、
適切な大文字、スペル、文法、句読点が必要です。たとえば、日本語の文法を無視して、
「ある日エレファントは、メアリーと動物園を見に行ったので、鼻が長いです」と書いたとしたら、
あなたの文章を正しく理解する人はいません。
その一方、正しい構文を使って、「ある日、メアリーと私は動物園へ象を見に行った。その鼻は本当に長かった!」と
書かれているなら、人々はあなたが書いたことを容易に理解することができます。
日本語の読者が正しい日本語の構文で書かれていないものを理解できないように、Wesnothは正しいWML構文で
書かれていないWMLを理解することができません。ですから、Wesnothにあなたがさせたい事を正しく理解させるために、
正しいWML構文を身につけましょう。
では、WML構文の基本について説明します。後でもっと複雑なWML構文が徐々に登場しますが、
今のところ基本的なことだけを説明します。

 

基本コンポーネント:タグと属性

WMLは「マークアップ言語」の一種です。マークアップ言語の構文は、タグと属性の2つの基本要素で構成されています。

 

タグ
タグは、両端に2つの角括弧で囲まれた小文字の文字列です。

 

これは「キャンペーン」タグの例です:[campaign]

 

タグには、英数字(文字と数字)とアンダースコア( _ )しか含めることができません。
注意しておきますが、数行前に "タグは小文字の文字列です"と述べました。これはWML構文の基本的な部分です。
すべてのタグは常に小文字で書かれています。大文字を使用しようとすると、WMLエンジンは使用しようとしている
タグを理解できず、誤ったタグを読み取ろうとするとエラーが表示されます。

 

ほとんどのマークアップ言語と同様に、WMLタグは常にペアで使用されます。1つの開始タグと1つの終了タグです。
開始タグと終了タグを本の表紙のように考えてください。表紙を開くと、最初にあなたがいることがわかります。
あなたが裏表紙に達すると、その本を読んでいることが分かります。同様に、WMLエンジンが開始タグを見つけると、
それはタスクの開始時に認識されます。終了タグに到達すると、タスクが終了したことを認識します。

 

タグを閉じることは、1つのキーコンポーネントを除いてタグを開くこととまったく同じです。
閉じタグは、最初の角括弧の直後に常にスラッシュ( / )を付けます。このスラッシュは、
このタグが終了タグであり、別の開始タグではないことをWMLエンジンに伝えます。

 

閉じた「キャンペーン」タグの例です:[/campaign]

 

この二つの開閉タグをタグセットと呼びます。タグセットには常に、開始タグと終了タグという2つのタグが
含まれます。たとえば、「キャンペーン」タグセットは次のようになります。

 
[campaign]
[/campaign]
 

WMLエンジンは、タスクの開始点と終了点、およびそれらを記述する際に使用する構文をどのように解釈するのかを
知っています。これらはWMLのタグの基本です。後で、タグのより複雑な側面について説明します。今のところ、
ここで紹介した概念を理解していることを確認してください。次のセクションに進む前に、このセクションでタグに
ついて学んだことを確認しましょう。

 

●タグは、両端に2つの角括弧で囲まれた小文字の文字列です。
●終了タグは、開始タグとまったく同じですが、終了タグには最初の角括弧の直後にスラッシュが付きます。
●開始タグと終了タグをまとめて「タグセット」と呼びます。
●タグセットは、開始タグと終了タグという2つのタグだけで構成できます。

 

さて、WMLエンジンにタスクの開始点と終了点はどこにあるのかを伝えることができましたが、実際にタスクを
行うのは何でしょう?それが属性の役目です。

 

属性
属性は、キーと値という2つの主要な要素で構成され、以下のように記述されます。

 

key = value

 

属性の基本機能は、WMLエンジンが必要とする情報を格納することです。属性のキーは、格納される情報の種類を
指定し、属性の値は格納されている実際のデータです。等号 "="の左にあるテキストはすべてキーとみなされ、
等号の右側にあるすべてのテキストはキーの値とみなされます。
これはむしろ混乱を招くかもしれないので、具体的な例を挙げて説明しましょう。

 

あなたの友人にパン屋さんに行って、パンを買って来てもらうとしましょう。
あなたは彼にタグセット[go][/go]を与えました。
しかし、彼はあなたが彼にしてほしいことを理解しませんでした。つまり、彼は食事のためのパンを持って来ません。
これはちょうどWMLエンジンに [go][/go] と言うタグセットを与えた状態と同じですが、それだけでは不十分です。
あなたは、WMLエンジンが何をすべきかについてより具体的にする必要があります。

 

あなたの友人が人間のWMLエンジンであり、食料品店に行ってパンを手に入れたいと思ったら、彼にこのコードを
渡す必要があります。(注:このコードは実際のWMLではなく、「疑似コード」です。このチュートリアルで擬似
コードを使用した場合は、例を提示する前に擬似コードであることを伝えます。)

 
[go]
    場所 = パン屋
    取得 = パン
[/go]
 

タグはWMLエンジンに一般的に何をすべきかを伝えます(友人に "go"と言っているような)が、何をすべきかを正確に
指定する属性はありません。(友人にいつどこに行けばいいのか、あなたが十分な情報を与えていないので、
あなたの友人は何もできないのです。)その情報を与えるのが key value です。

 

key
キーとは、小文字のアルファベットの文字列で、属性を読み取ったときにどのような情報を扱っているかをゲームに伝えます。
キーは大文字小文字を区別します(大文字は使用できません)。正しく入力する必要があります。

 

value
WMLキーは、文字列と呼ばれるデータをvalueとして扱います。文字列は、ASCII文字のシーケンスであり、キーボードの
ほとんどの文字を含めることができます。文字列は、標準と数値の2つのカテゴリに分類できます。

 

1.標準文字列
標準文字列は、数値文字列でも翻訳可能文字列でもないASCII文字列です。たとえば、下の2行はそれぞれ標準の文字列です。

 
x
blue
 

標準文字列に空白が含まれる場合は、二重引用符( " )で囲む必要があります。

 
" この二重引用符の中のすべてが単一の文字列です。これはNo.1です:1. Hooray!:)
今この文字列の最後に来ています。"
 

参考までに原文を載せておきます、下の1行がまとめて全部一つの文字列です。

 
"Everything in these double quotes is a single string. This is the number one: 1. Hooray! :)
We are now coming to the end of this string."
 

二重引用符(コロンと括弧の絵文字も含む)内のすべては、ゲームによって1つの長い文字列とみなされます。
標準の文字列を翻訳可能にして、他の言語に翻訳できるようにすることもあります。翻訳可能な文字列と
翻訳できないものとの唯一の違いは、文字列の前に「翻訳可能マーク」が付いているか、付いていないかの
差があるだけです。
文字列を翻訳可能としてマークするには、文字列の先頭を示す最初の二重引用符の前に
アンダースコアを追加するだけです。

 

翻訳可能な文字列の例:_ "これは翻訳可能な文字列です。"

 

WMLエンジンが文字列の前にアンダースコアを見つけなかった場合、文字列は翻訳不可能であるとみなされます。
厳密には必要ではないのですが、文字列を翻訳可能とマークするアンダースコアの前後にスペースを入れるのが
一般的です。たとえば、「Hello World!」を翻訳可能な文字列とする場合は、次のように書けば
有効な構文と見なされます。

 
key=_"Hello World!"
 

そして、こっちも有効です。

 
key = _ "Hello World!"
 

要素の間に隙間があるほうが見やすいですね。
ゲームは上記の文字列の両方を同等に翻訳可能な文字列として認識します。つまり空白を追加するのは、私たち人間に
とってのWMLコードの読みやすさが向上するテクニックなわけです。

 

2.数値ストリング
当然のことながら、数値文字列は、数字、小数点、またはマイナス記号 " - "のみを含む文字列です。
文字列に数字、小数点、および/またはマイナス記号以外のものが含まれている場合はその文字列は数字の代わりに
標準文字列になります。数字の文字列には、次のような例があります。

 

単純に数字

 
2
230001
 

浮動小数点値(小数点を含むことができるという単純な表現方法)です。

 
2.6
395667.49382345
 

マイナス記号の付いた数字

 
-49
-594.932
 

WMLはこれらの値を実際の数字と同じように扱うことができます。追加、分割、数学的計算でそれらを数学的に
使用することができます。(数字、小数点、またはマイナス記号以外の文字を含めると、文字列は数値文字列で
なくなり、標準文字列になります。つまり、数学的計算では使用できません。これについては、
[FIXME HERE]の章を参照してください。)※まだ訳してないから気になる人は原文を当たってね。

 

さらにタグの詳細

もう少し、タグと属性についての基礎を理解する必要があります。私が以前に約束したように、
タグのより複雑な側面についていくつか紹介します。

 

入れ子タグ:親子
マークアップ言語の基本的な側面は、他のタグセット内でタグセットを使用できることです。
他のタグセット内にあるタグセットは、ネストされたタグセットと呼ばれます。
以下の例では、「サイド」タグセットは「シナリオ」タグセット内にネストされています。

 
[scenario]
    [side]
    [/side]
[/scenario]
 

ネストされたタグセットを参照するとき、他のタグセット内にあるタグセットは子タグセットと呼ばれ、
子タグセットを囲むタグセットは親タグセットと呼ばれています。
擬似コードで説明すると

 
[親]
    [子]
    [/子]
[/親]
 

他のタグセットの子タグセットではないタグセットは、トップレベルタグセットと呼ばれます。
次の例では、[シナリオ]タグセットは、他のタグセットの子タグセットではないため、
トップレベルタグセットです。
[event]タグセットは、[scenario]タグセット内にあるため、[scenario]の子タグセットです。
[message]タグセットは[event]タグセット内にあるため、[event]の子タグセットです。
ついでに、[scenario]は[event]の親で、[event]は[message]の親なので、
[message]は[scenario]の孫タグセットです。

 
[scenario]
    [event]
        [message]
        [/message]
    [/event]
[/scenario]
 

インデントとレベル
上記の例では、子タグセットは、親タグセットよりも4つ右にインデントされていることに
気づいたかもしれません。これはなぜでしょう?適切な字下げ
(WMLエンジンでは技術的に要求されていませんが)によってコードの読み込みと保守が
非常に簡単になるためです。(人間にとってね)これは原稿用紙に段落の頭で字下げして
書くようなものです。

 
I.
    A.
    B.
    C.
II.
    A.
        1.
        2.
    B.
    C.
 

インデントにより、タグセットが他のタグセットの子か親かをより簡単に確認できます。インデントの量で
タグセットがタグセットのどのレベルにあるかを決定します。タグセットがトップレベルのタグセット
(つまり、他のタグセットの子ではないため、その前に空白がない)の場合、そのタグセットは
レベル1にあります。
手前に4つの空白があるタグセットは、トップレベル(レベル1)のタグセットの子であるため、
レベル2に配置されます。レベル2のタグセットの子であるタグセットはレベル3のタグセットと呼ばれ、
8つのインデントされ、レベル3のタグセット内のタグセットはレベル4のタグセットと呼ばれ、
12個インデントされます。
タグセットは、そのタグセットの任意の子タグセットと共に、そのタグセットよりも
1つ下のレベルでインデントされる。
これを擬似コードで説明すると

 
[トップレベルタグセット]
    レベル2のキー = 値
    [レベル2タグセット]
        レベル3のキー = 値
        [レベル3タグセット]
            レベル4のキー =値
        [/レベル3タグセット]
    [/レベル2タグセット]
[/トップレベルタグセット]
 

このようにタグセットと属性をレベルにインデントすると、コードを読んだり修正したり
維持したりするのがずっと楽になります。新しいレベルごとに正確に4つのスペースを
インデントすることを強くお勧めしますが、スペースキーを4回押すのではなくタブを
使用することもできます。
※インデントの量は人によって好みがあるようです、要は自分が見やすければ問題無いのでしょう。

 

第1章はここまでです。
とりあえず、WMLの基本中の基本はマスターしたと思っていいでしょう。

 

第2章へ進む
目次に戻る