;; $Id: dbgraph.dsl,v 1.3 2003/03/25 19:53:55 adicarlo Exp $ ;; ;; This file is part of the Modular DocBook Stylesheet distribution. ;; See ../README or http://docbook.sourceforge.net/projects/dsssl/ ;; ;; ==================== GRAPHICS ==================== ;; NOTE: display #f doesn't seem to work right in the RTF back end... (define (graphic-file filename) (let ((ext (file-extension filename))) (if (or (not filename) (not %graphic-default-extension%) (member ext %graphic-extensions%)) filename (string-append filename "." %graphic-default-extension%)))) (define ($graphic$ fileref #!optional (display #f) (format #f) (scale #f) (align #f)) (let ((graphic-format (if format format "")) (graphic-scale (if scale (/ (string->number scale) 100) 1)) (graphic-align (cond ((equal? align (normalize "center")) 'center) ((equal? align (normalize "right")) 'end) (else 'start)))) (make external-graphic entity-system-id: (graphic-file fileref) notation-system-id: graphic-format scale: graphic-scale display?: display display-alignment: graphic-align))) (define ($img$ #!optional (nd (current-node)) (display #f)) ;; This function now supports an extension to DocBook. It's ;; either a clever trick or an ugly hack, depending on your ;; point of view, but it'll hold us until XLink is finalized ;; and we can extend DocBook the "right" way. ;; ;; If the entity passed to GRAPHIC has the FORMAT ;; "LINESPECIFIC", either because that's what's specified or ;; because it's the notation of the supplied ENTITYREF, then ;; the text of the entity is inserted literally (via Jade's ;; read-entity external procedure). ;; (let* ((fileref (attribute-string (normalize "fileref") nd)) (entityref (attribute-string (normalize "entityref") nd)) (format (if (attribute-string (normalize "format") nd) (attribute-string (normalize "format") nd) (if entityref (entity-notation entityref) #f))) (align (attribute-string (normalize "align") nd)) (scale (attribute-string (normalize "scale") nd))) (if (or fileref entityref) (if (equal? format (normalize "linespecific")) (if fileref (include-file fileref) (include-file (entity-generated-system-id entityref))) (if fileref ($graphic$ fileref display format scale align) ($graphic$ (entity-generated-system-id entityref) display format scale align))) (empty-sosofo)))) (element graphic (make paragraph space-before: %block-sep% space-after: %block-sep% ($img$ (current-node) #t))) (element inlinegraphic ($img$)) ;; ====================================================================== ;; MediaObject and friends... (define preferred-mediaobject-notations (list "EPS" "PS" "JPG" "JPEG" "PNG" "linespecific")) (define preferred-mediaobject-extensions (list "eps" "ps" "jpg" "jpeg" "png")) (define acceptable-mediaobject-notations (list "GIF" "GIF87a" "GIF89a" "BMP" "WMF")) (define acceptable-mediaobject-extensions (list "gif" "bmp" "wmf")) (element mediaobject (make paragraph ($mediaobject$))) (element inlinemediaobject (make sequence ($mediaobject$))) (element mediaobjectco (error "MediaObjectCO is not supported yet.")) (element imageobjectco (error "ImageObjectCO is not supported yet.")) (element objectinfo (empty-sosofo)) (element videoobject (process-children)) (element videodata (empty-sosofo)) (element audioobject (process-children)) (element audiodata (empty-sosofo)) (element imageobject (process-children)) (element imagedata (if (have-ancestor? (normalize "mediaobject")) ($img$ (current-node) #t) ($img$ (current-node) #f))) (element textobject (make display-group (process-children))) (element caption (process-children))