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
mode spatialleaves unwritten boundaries unresolved. Base layer only, once; requires muro 1.6
muro 1.6the 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 lease.category:exclusivea counted aggregation. No geometry; gathers the spaces under a path prefix
asset SD1 door w:800 h:2000a reusable opening definition, or a component footprint and plan SVG reference
polygon /site -2600,-7000 …the site shape. The only line that writes a shape from free vertices off the grid
origin epsg:6677 easting:… northing:…where the model's (0,0,0) sits in a coordinate reference system. In metres. Once
azimuth Y 347.5the true bearing of the +Y axis, clockwise from true north. Once
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 or component host inside a room. Affects no counted area, room count or 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
muro — the version linewhich versions are accepted, how the line is spelled, and when an older version 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. An area's asset: reference to a component is also settled after composition and may point forward; an opening asset is still needed when its opening line is read.

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 is written in the base layer (the entry), once — the version alone cannot be moved by another layer. name, grid X, grid Y, origin and azimuth are written once across all layers, and may sit in the entry or in an imported layer. 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.

origin and azimuth are the two halves of the model's frame, and a model has one frame. Like polygon they belong in the layer that holds what a survey gave.

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.