diff options
author | Hugo Hörnquist <hugo@lysator.liu.se> | 2019-03-04 18:40:24 +0100 |
---|---|---|
committer | Hugo Hörnquist <hugo@lysator.liu.se> | 2019-03-04 18:40:24 +0100 |
commit | 46cd27874938d7d859dab8ef4a442ccd786b5795 (patch) | |
tree | 7ff9165d82cce85ac0cb46c2b53d93b336bfafdb /vcalendar.scm | |
parent | set-attr! can now add new keys. (diff) | |
download | calp-46cd27874938d7d859dab8ef4a442ccd786b5795.tar.gz calp-46cd27874938d7d859dab8ef4a442ccd786b5795.tar.xz |
Add attr as generalized setter for vcomponent attributes.
Diffstat (limited to 'vcalendar.scm')
-rw-r--r-- | vcalendar.scm | 17 |
1 files changed, 16 insertions, 1 deletions
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)))) + + + + |