Skip to main content

Every construct in .muro

One line, one statement. These are all the lines .muro has — no brackets, no terminators, no nesting. Each line's own page holds the detail.

keyword positional… key:value…

Lines with no indentation

A line that starts flush is a declaration in its own right.

LineWhat it declares
koyu 1.0the language version this file is read under. Base layer only, once
name 街角の複合ビルthe name of the building. The rest of the line is the value. Once
unit mmthe unit of length. v0 is mm only
grid X 0 6400 12800grid line coordinates. Once per axis; named X1, X2, … automatically
level L1 0 h:3600 slab:600a level — name, z, ceiling height, slab thickness. A range such as L4..L10 requires pitch:
space /L5/A/ldk ldk X1..X2 Y1..Y2a space — path, type, region. The primary element
band X X1..X3 Y1..Y2a band — divides by dimension and order rather than by position. Members are indented space lines
boundary /L5/A/hall /L5/corridora boundary — the relation joining two spaces. A wall is a relation, not a thing
stack ev L1..L11 type:shafta vertical stack, declared at once. Puts a vertical boundary on each consecutive pair of levels
zone /L3..L10/A use:exclusivea counted aggregation. No geometry; gathers the spaces under a path prefix
asset SD1 door w:800 h:2000a door asset — the bundle of defaults an opening refers to
polygon /site -2600,-7000 …the site shape. The only line that writes a shape from free vertices off the grid
column 800 B2..L1a column. No position is written — it stands where a grid intersection has floor
import ./assets.murolayers another file on. The order is the declaration of strength; later layers are stronger
over /L5/A/ldk h:2600an override. An error if the target does not exist
drop /L5/A/storea removal — of a space, a boundary, or a column declaration

Indented lines

A line beginning with whitespace is subordinate to the non-indented line above it. One level only; no nesting.

LineParentWhat it declares
door w:900 at:X4boundary / stackan opening that is passed through
window w:1800 h:1200 edge:Sboundary / stackan opening that admits light. Not passed through
seg w:1800 at:X5 spec:ガラスboundary / stackan uncounted segmentation of a boundary
line X3,Y1 X3+600,Y2-900boundarya drawn line — the boundary realised as an act of design. One per boundary
area X1..X2 Y1..Y2 floor:タイルspacean uncounted segmentation inside a room. Affects no area, no room count, no graph
space /L1/wet wet w:4800banda band member. Carries a width w: instead of a region
+ window w:600 name:W1overadds to a set. name: is required
- door D2overremoves from a set, by name
= door D1 w:1000overreplaces in a set — only the attributes written are swapped

Rules that cut across every line

Six rules apply to every line alike.

PageWhat it covers
How a line is readtokens, comments, quotes, indentation, key:value, value types
Positions and regionsgrid references X1, offsets X2+600, ranges X1..X3, unions of rectangles
Orientation and the a sideN=+Y, S=−Y, E=+X, W=−X, and which face edge: picks
The three tiers of attributestructure, interpreted and carried, the namespace rule, and the ledger per element
What happens when you write nothingthe one table of defaults
koyu — the version linewhich versions are accepted, and when an older one is

Order of declaration

Most lines may refer forward, but three must be declared before use.

Must come firstOtherwise
gridUndefined grid line name: X1
level (when a path or a span names it)the level is undetermined — SUF02; for a span, The range includes an undeclared level
asset (when an opening refers to it)Undefined opening asset: SD1

By contrast, a boundary may refer to its spaces before they are written. boundary /L1/a /L1/b above the space declarations passes — whether the referents exist is settled after composition, by REF01.

over and drop are the exception: the target must already exist when the line is reached. An override is not a definition, so an opinion cannot be added to something that is not there.

Declared once

koyu, name, grid X and grid Y are written in the base layer, once. Writing the same value twice is still an error — it forbids a silent override decided by composition order — except that name accepts a re-declaration of the identical string.

Duplicate space paths, zone paths, asset names, site shapes and level names are errors too, and both provenances are reported.

Defining and overriding are different statements

StatementWhen the target existsWhen it does not
Definitionspace boundary zone asset level polygonerror (duplicate)defines it
Overrideoveroverrides iterror

The kind is legible from the way the line is written, so neither a reader nor a machine has to guess. How layers stack, and whose opinion wins, is in composition.