01 / PROGRAM
文と区切り
sourceは宣言や式からなる文の並びです。文は改行またはsemicolonで区切り、閉じbraceやsource末尾の直前では区切りを省略できます。括弧内では改行できますが、括弧外で式を次行へ継続する一般規則はありません。
let title = "Hello"
fn label(value) {
strong { value }
}01 / PROGRAM
sourceは宣言や式からなる文の並びです。文は改行またはsemicolonで区切り、閉じbraceやsource末尾の直前では区切りを省略できます。括弧内では改行できますが、括弧外で式を次行へ継続する一般規則はありません。
let title = "Hello"
fn label(value) {
strong { value }
}02 / NODE
関数・constructor callは任意のvalueを返す式です。文書nodeはtagの後にclass shorthand、括弧内の属性を置き、本文braceでchildを構築します。属性は完全な式を値にでき、同じkeyは後の値で上書きされます。
article.card#intro(title="Welcome") {
h1 { "Hello" }
p { "A Matra document." }
}03 / CONTROL
if/else_if/else、for、while、do-untilを使えます。ifは選択したblockの値、forは各反復blockの値のlistを返します。node本文の各式はchildを1つ追加し、...expressionはarrayを一段だけ展開します。nullも値モデル上は保持されます。
let rows = for (item in ["one", "two"]) {
li { item }
}
ul { ...rows }04 / MARKUP
文書profileではXML-style markupを式として書けます。属性値は引用符付きstringで、本文textと子要素は保持され、標準文字参照は復号されます。Matra式の本文補間は行いません。完全なXML/HTML互換ではなく、終了tagや不正属性などは厳密に拒否します。
<img src="image.png" />
<p>Hello <strong>Matra</strong>!</p>05 / EXPRESSION
literal、reference、array/object、member access、call、単項・二項演算、制御式が使えます。blockはlexical scopeを持ち、関数は宣言時scopeを捕捉します。v0.3の文書profileにはmodule import、型推論、複数行string、一般的な後置block call、括弧外の改行継続は含まれません。
区別すること
このページは要約です。規範的な定義、全API契約、検証fixtureはリンク先のMatra仕様書を参照してください。