;; $Id: dbblock.dsl,v 1.11 2003/05/28 16:48:47 adicarlo Exp $
;;
;; This file is part of the Modular DocBook Stylesheet distribution.
;; See ../README or http://docbook.sourceforge.net/projects/dsssl/
;;
(element highlights ($block-container$))
(element revhistory ($book-revhistory$))
(element blockquote
(let ((id (element-id))
(attrib (select-elements (children (current-node))
(normalize "attribution")))
(startc (list (list "WIDTH" %blockquote-start-col%)))
(endc (list (list "WIDTH" %blockquote-end-col%)))
(paras (node-list-filter-by-not-gi
(children (current-node))
(list (normalize "attribution")))))
(make sequence
(if id
(make element gi: "A"
attributes: (list (list "NAME" id))
(empty-sosofo))
(empty-sosofo))
(if (node-list-empty? attrib)
(make element gi: "BLOCKQUOTE"
attributes: '(("CLASS" "BLOCKQUOTE"))
(process-children))
(make element gi: "TABLE"
attributes: '(("BORDER" "0")
("WIDTH" "100%")
("CELLSPACING" "0")
("CELLPADDING" "0")
("CLASS" "BLOCKQUOTE"))
(make element gi: "TR"
(make element gi: "TD"
attributes: (append startc
'(("VALIGN" "TOP")))
(make entity-ref name: "nbsp"))
(make element gi: "TD"
attributes: '(("VALIGN" "TOP"))
(process-node-list paras))
(make element gi: "TD"
attributes: (append endc
'(("VALIGN" "TOP")))
(make entity-ref name: "nbsp")))
(make element gi: "TR"
(make element gi: "TD"
attributes: '(("COLSPAN" "2")
("ALIGN" "RIGHT")
("VALIGN" "TOP"))
(make sequence
(literal "--")
(process-node-list attrib)))
(make element gi: "TD"
attributes: endc
(make entity-ref name: "nbsp"))))))))
(element epigraph
(let* ((attrib (select-elements (children (current-node))
(normalize "attribution")))
(startcol (list (list "WIDTH" %epigraph-start-col%)))
(contentcol (list (list "WIDTH" %epigraph-content-col%)))
(paras (node-list-filter-by-not-gi
(children (current-node))
(list (normalize "attribution")))))
(make element gi: "TABLE"
attributes: '(("BORDER" "0")
("WIDTH" "100%")
("CELLSPACING" "0")
("CELLPADDING" "0")
("CLASS" "EPIGRAPH"))
(make element gi: "TR"
(make element gi: "TD"
attributes: startcol
(make entity-ref name: "nbsp"))
(make element gi: "TD"
attributes: (append contentcol
'(("ALIGN" "LEFT")
("VALIGN" "TOP")))
(make element gi: "I"
(process-node-list paras))))
(if (node-list-empty? attrib)
(empty-sosofo)
(make element gi: "TR"
(make element gi: "TD"
attributes: startcol
(make entity-ref name: "nbsp"))
(make element gi: "TD"
attributes: (append contentcol
'(("ALIGN" "RIGHT")
("VALIGN" "TOP")))
(make element gi: "I"
(process-node-list attrib))))))))
(element attribution ($charseq$))
(element (epigraph para)
(make element gi: "P"
(make element gi: "I"
(process-children-trim))))
(element para ($paragraph$))
(element simpara ($paragraph$))
(element formalpara
(make element gi: "DIV"
attributes: (list
(list "CLASS" (gi)))
(make element gi: "P"
(if (attribute-string (normalize "id"))
(make element gi: "A"
attributes: (list
(list "NAME"
(attribute-string
(normalize "id"))))
(empty-sosofo))
(empty-sosofo))
(process-children))))
(element (formalpara title) ($runinhead$))
(element (formalpara para)
(process-children))
(element sidebar
(make element gi: "TABLE"
attributes: (list
(list "CLASS" (gi))
(list "BORDER" "1")
(list "CELLPADDING" "5"))
(make element gi: "TR"
(make element gi: "TD"
($semiformal-object$)))))
(element (sidebar title)
(empty-sosofo))
(element abstract
(make element gi: "BLOCKQUOTE"
attributes: '(("CLASS" "ABSTRACT"))
($semiformal-object$)))
(element (abstract title) (empty-sosofo))
(element authorblurb ($block-container$))
(element ackno ($paragraph$))
(define ($inline-object$)
(process-children))
(define ($informal-object$ #!optional (rule-before? #f) (rule-after? #f))
(let ((id (element-id)))
(make element gi: "DIV"
attributes: (list
(list "CLASS" (gi)))
(if %spacing-paras%
(make element gi: "P" (empty-sosofo))
(empty-sosofo))
(if rule-before?
(make empty-element gi: "HR")
(empty-sosofo))
(if id
;; empty A is a little evil but for instance you can't
;; wrap TABLE within A
(make element gi: "A"
attributes: (list (list "NAME" id))
(empty-sosofo))
(empty-sosofo))
;; reset the mode to make processing of elements within an
;; informal object not subject to whatever mode they would
;; be in on the top level; e.g.,
;; bookinfo-legalnotice-productname distinguished from
;; bookinfo-productname
(with-mode #f
(process-children))
(if rule-after?
(make empty-element gi: "HR")
(empty-sosofo))
(if %spacing-paras%
(make element gi: "P" (empty-sosofo))
(empty-sosofo)))))
(define (object-title-after #!optional (node (current-node)))
(if (member (gi node) ($object-titles-after$))
#t
#f))
(define (named-formal-objects)
(list (normalize "figure")
(normalize "table")
(normalize "example")
(normalize "equation")))
(define ($formal-object$ #!optional (rule-before? #f) (rule-after? #f))
(let* ((nsep (gentext-label-title-sep (gi)))
(id (element-id))
(title-inline-sosofo
(make sequence
(if (member (gi) (named-formal-objects))
(make sequence
(literal (gentext-element-name (gi)))
(if (string=? (element-label) "")
(literal nsep)
(literal " " (element-label) nsep)))
(empty-sosofo))
(with-mode title-mode
(process-node-list
(select-elements (children (current-node))
(normalize "title"))))))
(title-sosofo (make element gi: "P"
(make element gi: "B"
title-inline-sosofo)))
;; reset the mode to make processing of elements within an
;; formal object not subject to whatever mode they would be
;; in on the top level; e.g.,
;; bookinfo-legalnotice-productname distinguished from
;; bookinfo-productname
(object-sosofo (with-mode #f
(process-children))))
(make element gi: "DIV"
attributes: (list
(list "CLASS" (gi)))
(if rule-before?
(make empty-element gi: "HR")
(empty-sosofo))
(if id
(make element gi: "A"
attributes: (list
(list "NAME" id))
(empty-sosofo))
(empty-sosofo))
(if (object-title-after)
(make sequence
object-sosofo
title-sosofo)
(make sequence
title-sosofo
object-sosofo))
(if rule-after?
(make empty-element gi: "HR")
(empty-sosofo)))))
(define ($semiformal-object$)
;; semiformal means optional title...
(if (node-list-empty? (select-elements (children (current-node))
(normalize "title")))
($informal-object$)
($formal-object$)))
(element example
($formal-object$ %example-rules% %example-rules%))
(element (example title) (empty-sosofo)) ; don't show caption below example
(element informalexample
($informal-object$ %informalexample-rules% %informalexample-rules%))
(element informalfigure
($informal-object$ %informalfigure-rules% %informalfigure-rules%))
(element (figure title) (empty-sosofo)) ; don't show caption below figure
(element figure
($formal-object$ %figure-rules% %figure-rules%))
(element informaltable
($informal-object$ %informaltable-rules% %informaltable-rules%))
(element table
($formal-object$ %table-rules% %table-rules%))
(element (table title) (empty-sosofo))
;; remark and comment use the same rendering
(define ($remark$)
(if %show-comments%
(let ((inpara (equal? (gi (parent (current-node))) (normalize "para")))
(attrib '(("CLASS" "COMMENT"))))
(if inpara
(make element gi: "SPAN"
attributes: attrib
(process-children))
(make element gi: "P"
attributes: attrib
(process-children))))
(empty-sosofo)))
(element comment ($remark$))
;; In DocBook V4.0 comment became remark
(element remark ($remark$))