;;; sxml-shortcuts.scm ; ; Copyright (c) 2004-2008 Peter Bex (Peter.Bex@xs4all.nl) ; All rights reserved. ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions ; are met: ; 1. Redistributions of source code must retain the above copyright ; notice, this list of conditions and the following disclaimer. ; 2. Redistributions in binary form must reproduce the above copyright ; notice, this list of conditions and the following disclaimer in the ; documentation and/or other materials provided with the distribution. ; 3. Neither the name of Peter Bex nor the names of any contributors may ; be used to endorse or promote products derived from this software ; without specific prior written permission. ; ; THIS SOFTWARE IS PROVIDED BY PETER BEX AND CONTRIBUTORS ``AS IS'' AND ANY ; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ; DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE ; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR ; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER ; CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ; LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ; OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ; SUCH DAMAGE. (module sxml-shortcuts (shortcut-rules) (import chicken scheme) (require-extension srfi-1 uri-common sxml-transforms) (define shortcut-rules `((url *macro* . ,(lambda (tag href . contents) (let ((href (if (uri-reference? href) (uri->string href) href))) `(a (@ (href ,href)) ,@(if (not (null? contents)) contents (list href)))))) (pic *macro* . ,(lambda (tag src alt . rest) (let ((src (if (uri-reference? src) (uri->string src) src))) (let-optionals* rest ((title alt) more) `(img (@ ,@(append `((src ,src) (alt ,alt) (title ,title) ,@more)))))))) (movie *macro* . ,(lambda (tag src title . rest) (let ((src (if (uri-reference? src) (uri->string src) src))) `(object (@ (type "video/quicktime")) (param (@ (name "src") (value ,src))) (param (@ (name "controller") (value "true"))) ,@rest ;; Fallback if no viewer (url ,src ,title))))) ,@alist-conv-rules)) )