.muro の全構文
一行が一文である。.muro に書けるのはここに並ぶ行だけで、括弧も終端子も入れ子も無い。各行の詳細はその行の頁が持つ。
キーワード 位置引数… key:value…
非字下げの行
行頭に空白の無い行は、それぞれ独立した宣言である。
| 行 | 何を宣言するか |
|---|---|
koyu 1.0 | このファイルを読む言語の版。入口の層でのみ、一度だけ |
name 街角の複合ビル | 建物の名。残りの行全体が値。一度だけ |
unit mm | 長さの単位。v0 は mm のみ |
grid X 0 6400 12800 | 通り芯の座標。軸ごとに一度だけ。X1 X2 … と自動命名される |
level L1 0 h:3600 slab:600 | レベル — 名・z・天井高・床組み厚。L4..L10 の範囲宣言は pitch: を要する |
space /L5/A/ldk ldk X1..X2 Y1..Y2 | 空間 — パス・型・領域。一次要素 |
band X X1..X3 Y1..Y2 | 帯 — 位置ではなく寸法と並びで空間を割る。要素は字下げした space |
boundary /L5/A/hall /L5/corridor | 境界 — 二つの空間を結ぶ関係。壁は物ではなく関係である |
stack ev L1..L11 type:shaft | 垂直積層の一括宣言。連続するレベル対に垂直境界を張る |
zone /L3..L10/A use:exclusive | 数える集約。幾何を持たず、パス接頭辞で配下の空間を束ねる |
asset SD1 door w:800 h:2000 | 建具アセット — 開口が参照する既定値の束 |
polygon /site -2600,-7000 … | 敷地形状。格子に載らない自由頂点で形を書ける唯一の行 |
column 800 B2..L1 | 柱。位置を書かない — 通り芯の交点のうち床のある所に立つ |
import ./assets.muro | 層を重ねる。並びが強度の宣言であり、後の層ほど強い |
over /L5/A/ldk h:2600 | 上書き。対象が無ければエラー |
drop /L5/A/store | 削除。空間・境界・柱の宣言を消す |
字下げの行
行頭に空白があれば、直前の非字下げ行に従属する。一段だけで、入れ子は無い。
| 行 | 親 | 何を宣言するか |
|---|---|---|
door w:900 at:X4 | boundary / stack | 通行する開口 |
window w:1800 h:1200 edge:S | boundary / stack | 採光する開口。通行しない |
seg w:1800 at:X5 spec:ガラス | boundary / stack | 境界上の数えない分節 |
line X3,Y1 X3+600,Y2-900 | boundary | 描かれた線 — 境界の実現を設計の行為として与える。一つの境界に一本 |
area X1..X2 Y1..Y2 floor:タイル | space | 室内の数えない分節。面積・室数・グラフに影響しない |
space /L1/wet wet w:4800 | band | 帯の要素。領域の代わりに幅 w: を持つ |
+ window w:600 name:W1 | over | 集合への追加。name: が要る |
- door D2 | over | 集合からの削除。名で指す |
= door D1 w:1000 | over | 集合の置換。書いた属性だけを差し替える |
行を横断する規則
どの行にも同じように効く規則が六つある。
| 頁 | 何を書いているか |
|---|---|
| 一行の読まれ方 | トークン・コメント・引用符・字下げ・key:value・値の型 |
| 位置と領域の書き方 | 通り参照 X1・オフセット X2+600・範囲 X1..X3・矩形の合併 |
| 方位と a 側 | N=+Y S=−Y E=+X W=−X。edge: がどの辺を選ぶか |
| 属性の三層 | 構造層・解釈層・運搬層と、名前空間の掟。要素ごとの台帳 |
| 書かなかったとき何が起きるか | 既定値の唯一の表 |
| koyu — 版の宣言 | 受理される版と、旧版が受理される条件 |
宣言の順序
多くの行は前方参照してよいが、三つだけは使う前に宣言しなければならない。
| 先に書かなければならないもの | 書かないと |
|---|---|
grid | Undefined grid line name: X1 |
level (パスやスパンで参照するとき) | レベルが決まらず SUF02、スパンなら The range includes an undeclared level |
asset (開口が参照するとき) | Undefined opening asset: SD1 |
一方、境界は空間を前方参照してよい。boundary /L1/a /L1/b を空間の宣言より前に書いても通る — 参照先の存在は合成が終わってから REF01 が確かめる。
over と drop は例外で、その行に達した時点で対象が存在していなければならない。上書きは定義ではないので、存在しないものへ意見だけを足すことはできない。
一度だけの宣言
koyu name grid X grid Y は、入口の層で一度だけ書かれる。同じ値を二度書いてもエラーである — 合成の順序による黙った上書きを禁じるためで、name だけは同じ文字列の再宣言を許す。
空間パス・ゾーンパス・アセット名・敷地形状・レベル名の重複もエラーであり、どちらの出所も示される。
定義と上書きは別の文である
| 文 | 対象が既にあるとき | 対象が無いとき | |
|---|---|---|---|
| 定義 | space boundary zone asset level polygon | エラー (重複) | 定義する |
| 上書き | over | 上書きする | エラー |
書き方から種別が分かるので、読み手も機械も取り違えない。層をどう重ねるか、どの層の意見が勝つかは 合成 にある。