1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
|
;; $Id: dbgraph.dsl,v 1.2 2004/05/17 14:55:23 tony2001 Exp $
;;
;; This file is part of the Modular DocBook Stylesheet distribution.
;; See ../README or http://docbook.sourceforge.net/projects/dsssl/
;;
;; ==================== GRAPHICS ====================
(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-attrs imagefile instance-alt)
(let* ((grove (sgml-parse image-library-filename))
(imagelib (node-property 'document-element
(node-property 'grove-root grove)))
(images (select-elements (children imagelib) "image"))
(image (let loop ((imglist images))
(if (node-list-empty? imglist)
#f
(if (equal? (attribute-string
"filename"
(node-list-first imglist))
imagefile)
(node-list-first imglist)
(loop (node-list-rest imglist))))))
(prop (if image
(select-elements (children image) "properties")
#f))
(metas (if prop
(select-elements (children prop) "meta")
#f))
(attrs (if metas
(let loop ((meta metas) (attrlist '()))
(if (node-list-empty? meta)
attrlist
(if (equal? (attribute-string
"imgattr"
(node-list-first meta))
"yes")
(loop (node-list-rest meta)
(append attrlist
(list
(list
(attribute-string
"name"
(node-list-first meta))
(attribute-string
"content"
(node-list-first meta))))))
(loop (node-list-rest meta) attrlist))))
'()))
(width (if prop (attribute-string "width" prop) #f))
(height (if prop (attribute-string "height" prop) #f))
(alttext (if image
(select-elements (children image) "alttext")
(empty-node-list)))
(alt (if instance-alt
instance-alt
(if (node-list-empty? alttext)
#f
(data alttext)))))
(if (or width height alt (not (null? attrs)))
(append
attrs
(if width (list (list "WIDTH" width)) '())
(if height (list (list "HEIGHT" height)) '())
(if (not (node-list-empty? alttext)) (list (list "ALT" alt)) '()))
'())))
(define ($graphic$ fileref
#!optional (format #f) (alt #f) (align #f) (width #f) (height #f))
(let ((img-attr (append
(list (list "SRC" (graphic-file fileref)))
(if align (list (list "ALIGN" align)) '())
(if width (list (list "WIDTH" width)) '())
(if height (list (list "HEIGHT" height)) '())
(if image-library (graphic-attrs fileref alt) '()))))
(make empty-element gi: "IMG"
attributes: img-attr)))
(define ($img$ #!optional (nd (current-node)) (alt #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))
(width (attribute-string (normalize "width") nd))
(height (attribute-string (normalize "depth") 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 format alt align width height)
($graphic$ (system-id-filename entityref)
format alt align width height)))
(empty-sosofo))))
(element graphic
(make element gi: "P"
($img$)))
(element inlinegraphic
($img$))
|