HS: add {prop: value; ...} CSS block syntax in add command

Parser:
- Handle brace-open token in parse-add-cmd
- Parse colon-separated property:value pairs until brace-close
- Produces (set-styles ((prop val) ...) target)

Compiler:
- set-styles → (do (dom-set-style target prop1 val1) ...)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-21 05:58:40 +00:00
parent 5a3bae5516
commit b23da3190e
2 changed files with 36 additions and 0 deletions

View File

@@ -856,6 +856,16 @@
(hs-to-sx (nth ast 3))
(nth ast 1)
(nth ast 2)))
((= head (quote set-styles))
(let
((pairs (nth ast 1)) (tgt (hs-to-sx (nth ast 2))))
(cons
(quote do)
(map
(fn
(p)
(list (quote dom-set-style) tgt (first p) (nth p 1)))
pairs))))
((= head (quote multi-add-class))
(let
((target (hs-to-sx (nth ast 1)))

View File

@@ -822,6 +822,32 @@
(let
((tgt (if (match-kw "to") (parse-expr) (list (quote me)))))
(list (quote set-style) prop value tgt))))
((= (tp-type) "brace-open")
(do
(adv!)
(let
((pairs (list)))
(define
collect-pairs!
(fn
()
(when
(and
(not (= (tp-type) "brace-close"))
(not (at-end?)))
(let
((prop (get (adv!) "value")))
(when (= (tp-type) "colon") (adv!))
(let
((val (tp-val)))
(adv!)
(set! pairs (cons (list prop val) pairs))
(collect-pairs!))))))
(collect-pairs!)
(when (= (tp-type) "brace-close") (adv!))
(let
((tgt (if (match-kw "to") (parse-expr) (list (quote me)))))
(list (quote set-styles) (reverse pairs) tgt)))))
(true
(let
((value (parse-expr)))