(in-package :kira) (defhandler :raw (:events/ical) (format t "Content-type: text/calendar~%~%") (macrolet ((with-ical-element ((name) &body body) `(progn (write-string ,(format nil "BEGIN:~a~%" name)) ,@body (write-string ,(format nil "END:~a~%" name)))) (field (name value &rest args) (if args `(format t ,(format nil "~a:~a~%" name value) ,@args) `(format t "~a:~a~%" ,name ,value)))) (let ((*print-separators* nil)) (with-ical-element ("VCALENDAR") (do-collection (event (events *root*) :n 31) (with-ical-element ("VEVENT") (let ((uri (uri-to nil nil t event))) (field "UID" uri) (field "DTSTAMP" (posted-time event)) (field "DTSTART" (start-time event)) (field "DTEND" (end-time event)) (field "SUMMARY" (html-output (render-title event))) (field "DESCRIPTION" "See <~a>." uri) (field "URL" uri))))))))