From 46cd27874938d7d859dab8ef4a442ccd786b5795 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Mon, 4 Mar 2019 18:40:24 +0100 Subject: Add attr as generalized setter for vcomponent attributes. --- vcalendar.scm | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'vcalendar.scm') diff --git a/vcalendar.scm b/vcalendar.scm index b61c6140..603aefea 100644 --- a/vcalendar.scm +++ b/vcalendar.scm @@ -36,6 +36,11 @@ (define-public set-attr! %vcomponent-set-attribute!) (define-public get-attr %vcomponent-get-attribute) + +;; Enables symmetric get and set: +;; (set! (attr ev "KEY") 10) +(define-public attr (make-procedure-with-setter get-attr set-attr!)) + (define-public type %vcomponent-type) (define-public parent %vcomponent-parent) (define-public push-child! %vcomponent-push-child!) @@ -43,6 +48,16 @@ (define-public (transform-attr! ev field transformer) "Apply transformer to field in ev, and store the result back." + #; (set-attr! ev field (transformer - (get-attr ev field)))) + (get-attr ev field))) + + ;; TODO make transform C primitive. + ;; Halfing the lookups. + (set! (attr ev field) + (transformer (attr ev field)))) + + + + -- cgit v1.2.3