;;; sxml-shortcuts.scm ; ; Copyright (c) 2004-2010 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 shortcut-rules*) (import chicken scheme) (require-extension srfi-1 uri-common sxml-transforms sxml-fu) (define shortcut-rules* `((url *macro* . ,(lambda (tag contents) (let ((href (if (uri-reference? (car contents)) (uri->string (car contents)) (car contents)))) `(a (@ (href ,href)) ,@(if (not (null? (cdr contents))) (cdr contents) (list href)))))) (pic *macro* . ,(lambda (tag contents) (let ((src (if (uri-reference? (car contents)) (uri->string (car contents)) (car contents))) (alt (cadr contents)) (rest (cddr contents))) (let-optionals* rest ((title alt) more) `(img (@ ,@(append `((src ,src) (alt ,alt) (title ,title) ,@more)))))))) ;; Maybe this one should be deprecated in favor of video? ;; It's too quicktime-specific anyway... (movie *macro* . ,(lambda (tag contents) (let ((src (if (uri-reference? (car contents)) (uri->string (car contents)) (car contents))) (title (cadr contents)) (rest (cddr contents))) `(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*)) (define shortcut-rules (normal->starred-transformation-rules shortcut-rules*)) )