diff options
Diffstat (limited to 'vcalendar.scm')
-rw-r--r-- | vcalendar.scm | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/vcalendar.scm b/vcalendar.scm index 03817957..c664c1aa 100644 --- a/vcalendar.scm +++ b/vcalendar.scm @@ -6,7 +6,7 @@ #:use-module (util)) (define (parse-dates! cal) -;;; Parse all start times into scheme date objects. + "Parse all start times into scheme date objects." (for-each-in (children cal 'VEVENT) (lambda (ev) (transform-attr! ev "DTSTART" parse-datetime) @@ -45,8 +45,8 @@ childs))) (export children) -(define-public set-attr! %vcomponent-set-attribute!) -(define-public get-attr %vcomponent-get-attribute) +(define set-attr! %vcomponent-set-attribute!) +(define get-attr %vcomponent-get-attribute) ;; Enables symmetric get and set: ;; (set! (attr ev "KEY") 10) @@ -59,11 +59,6 @@ (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))) - ;; TODO make transform C primitive. ;; Halfing the lookups. (set! (attr ev field) @@ -72,3 +67,14 @@ ;; { (attr ev field) := (transformer (attr ev field)) } (define-public copy-vcomponent %vcomponent-shallow-copy) + +(define-public (search cal term) + (cdr (let ((events (filter (lambda (ev) (eq? 'VEVENT (type ev))) + (children cal)))) + (find (lambda (ev) (string-contains-ci (car ev) term)) + (map cons (map (cut get-attr <> "SUMMARY") + events) + events))))) + +(define-public (extract field) + (cut get-attr <> field)) |