Phase 3b+3c: ui props use ':'; drop dead needs/uses synonyms (Rule A)

3b: widget props go from key=value to key: value (parse_widget). emit_ui and
ludic-fmt unchanged (AST-identical; ':' formats correctly by default). Chose the
colonized form over parenthesized named-args — minimal churn, no new grammar.
Migration: tools/ludic-tools/migrate_ui.c. menu golden byte-identical.

3c: removed the undocumented, unused 'needs'/'uses' clause synonyms from
parse_system; reads/writes stay.

Reseeded, fixpoint holds, test.sh 14/14, check-docs + check-vocabulary green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Orkun ÇAKILKAYA 2026-08-27 16:03:35 +03:00
parent 39bd430ce8
commit b643037d8f
6 changed files with 2687 additions and 2651 deletions

View file

@ -105,18 +105,18 @@ TrueType text, focus highlight) and keyboard focus + activation.
```ludic
ui MainMenu {
panel id=Root w=288 pad=16 gap=6 skin="assets/ui/panel.png" inset=10 align=center {
label text="CHRONO RIFT" font=reg(R_FONT) size=26 fg=0xffe060 align=center
button id=NewGame text="New Game" font=reg(R_FONT) size=16 w=236
button id=Quit text="Quit" font=reg(R_FONT) size=16 w=236
panel id: Root w: 288 pad: 16 gap: 6 skin: "assets/ui/panel.png" inset: 10 align: center {
label text: "CHRONO RIFT" font: reg(R_FONT) size: 26 fg: 0xffe060 align: center
button id: NewGame text: "New Game" font: reg(R_FONT) size: 16 w: 236
button id: Quit text: "Quit" font: reg(R_FONT) size: 16 w: 236
}
}
```
Widget types: `panel` (container + optional skin/bg/border), `col` / `row`
(pure stacks), `label`, `button` (focusable), `image`, `spacer`. Props are
evaluated at build time, so `font=reg(R_FONT)` reads a value the game set first.
Each `id=Name` mints a `UI_Name` handle (the `ui` block name too), used from
evaluated at build time, so `font: reg(R_FONT)` reads a value the game set first.
Each `id: Name` mints a `UI_Name` handle (the `ui` block name too), used from
systems:
```ludic