Files
smarty/docs/dsssl/docbook/html/dbcompon.dsl
2004-03-23 18:20:30 +00:00

210 lines
7.1 KiB
Plaintext
Executable File

;; $Id$
;;
;; This file is part of the Modular DocBook Stylesheet distribution.
;; See ../README or http://www.berkshire.net/~norm/dsssl/
;;
;; ============================= COMPONENTS =============================
;;
;; in docbook, components are containers at the chapter/appendix level
(define ($component$)
(html-document
(with-mode head-title-mode
(literal (element-title-string (current-node))))
($component-body$)))
(define ($component-separator$)
(if (or (not nochunks) (node-list=? (current-node) (sgml-root-element)))
(empty-sosofo)
(make empty-element gi: "HR")))
(define ($component-body$)
(let* ((epigraph (let loop ((nl (children (current-node))))
(if (node-list-empty? nl)
nl
(if (equal? (gi (node-list-first nl))
(normalize "epigraph"))
(node-list-first nl)
(if (or (equal? (gi (node-list-first nl))
(normalize "title"))
(equal? (gi (node-list-first nl))
(normalize "subtitle"))
(equal? (gi (node-list-first nl))
(normalize "titleabbrev"))
(equal? (gi (node-list-first nl))
(normalize "docinfo"))
(equal? (gi (node-list-first nl))
(normalize "chapterinfo"))
(equal? (gi (node-list-first nl))
(normalize "appendixinfo")))
(loop (node-list-rest nl))
(loop (empty-node-list)))))))
(notepigraph (let loop ((nl (children (current-node)))
(ch (empty-node-list)))
(if (node-list-empty? nl)
ch
(if (node-list=? (node-list-first nl) epigraph)
(loop (node-list-rest nl) ch)
(loop (node-list-rest nl)
(node-list ch (node-list-first nl))))))))
(make element gi: "DIV"
attributes: (list (list "CLASS" (gi)))
($component-separator$)
($component-title$)
(process-node-list epigraph)
(if ($generate-chapter-toc$)
($chapter-toc$)
(empty-sosofo))
(process-node-list notepigraph))))
(define ($component-title$ #!optional (titlegi "H1") (subtitlegi "H2"))
(let* ((info (cond
((equal? (gi) (normalize "appendix"))
(select-elements (children (current-node)) (normalize "docinfo")))
((equal? (gi) (normalize "article"))
(node-list-filter-by-gi (children (current-node))
(list (normalize "artheader")
(normalize "articleinfo"))))
((equal? (gi) (normalize "bibliography"))
(select-elements (children (current-node)) (normalize "docinfo")))
((equal? (gi) (normalize "chapter"))
(select-elements (children (current-node)) (normalize "docinfo")))
((equal? (gi) (normalize "dedication"))
(empty-node-list))
((equal? (gi) (normalize "glossary"))
(select-elements (children (current-node)) (normalize "docinfo")))
((equal? (gi) (normalize "index"))
(select-elements (children (current-node)) (normalize "docinfo")))
((equal? (gi) (normalize "preface"))
(select-elements (children (current-node)) (normalize "docinfo")))
((equal? (gi) (normalize "reference"))
(select-elements (children (current-node)) (normalize "docinfo")))
((equal? (gi) (normalize "setindex"))
(select-elements (children (current-node)) (normalize "docinfo")))
(else
(empty-node-list))))
(exp-children (if (node-list-empty? info)
(empty-node-list)
(expand-children (children info)
(list (normalize "bookbiblio")
(normalize "bibliomisc")
(normalize "biblioset")))))
(parent-titles (select-elements (children (current-node)) (normalize "title")))
(info-titles (select-elements exp-children (normalize "title")))
(titles (if (node-list-empty? parent-titles)
info-titles
parent-titles))
(subtitles (select-elements exp-children (normalize "subtitle"))))
(make sequence
(make element gi: titlegi
(make sequence
(make element gi: "A"
attributes: (list (list "NAME" (element-id)))
(empty-sosofo))
(if (and %chapter-autolabel%
(or (equal? (gi) (normalize "chapter"))
(equal? (gi) (normalize "appendix"))))
(literal (gentext-element-name-space (gi))
(element-label (current-node))
(gentext-label-title-sep (gi)))
(empty-sosofo))
(if (node-list-empty? titles)
(element-title-sosofo) ;; get a default!
(with-mode title-mode
(process-node-list titles)))))
(if (node-list-empty? subtitles)
(empty-sosofo)
(with-mode subtitle-mode
(make element gi: subtitlegi
(process-node-list subtitles)))))))
(define ($chapter-toc$)
;; Called by the TITLE element so that it can come after the TITLE
(build-toc (ancestor-member (current-node) (component-element-list))
(toc-depth
(ancestor-member (current-node) (component-element-list)))
#t))
(element appendix ($component$))
(element (appendix title) (empty-sosofo))
(element chapter ($component$))
(element (chapter title) (empty-sosofo))
(element preface ($component$))
(element (preface title) (empty-sosofo))
;; Dedication is empty except in a special mode so that it can be
;; reordered (made to come before the TOCs)...see dbttlpg.dsl
;; Dedication is empty except in a special mode so that it can be
;; reordered (made to come before the TOCs)
(element dedication (empty-sosofo))
(mode dedication-page-mode
(element dedication
(html-document
(with-mode head-title-mode
(literal (element-title-string (current-node))))
(make sequence
($component-separator$)
($component-title$)
(process-children))))
(element (dedication title) (empty-sosofo))
)
;; Articles are like components, except that if they may have much
;; more formal title pages (created with article-titlepage).
;;
(element article
(let* ((info (node-list-filter-by-gi (children (current-node))
(list (normalize "artheader")
(normalize "articleinfo"))))
(ititle (select-elements (children info) (normalize "title")))
(title (if (node-list-empty? ititle)
(select-elements (children (current-node))
(normalize "title"))
(node-list-first ititle)))
(tsosofo (with-mode head-title-mode
(process-node-list title)))
(nl (titlepage-info-elements (current-node) info)))
(html-document
tsosofo
(make element gi: "DIV"
attributes: '(("CLASS" "ARTICLE"))
(if %generate-article-titlepage%
(make sequence
(article-titlepage nl 'recto)
(article-titlepage nl 'verso))
($component-title$))
(if (not (generate-toc-in-front))
(process-children)
(empty-sosofo))
(if %generate-article-toc%
(make sequence
(build-toc (current-node)
(toc-depth (current-node))))
(empty-sosofo))
(let loop ((gilist ($generate-article-lot-list$)))
(if (null? gilist)
(empty-sosofo)
(if (not (node-list-empty?
(select-elements (descendants (current-node))
(car gilist))))
(make sequence
(build-lot (current-node) (car gilist))
(loop (cdr gilist)))
(loop (cdr gilist)))))
(if (generate-toc-in-front)
(process-children)
(empty-sosofo))))))
(element (article title) (empty-sosofo))
(element (article appendix) ($section$)) ;; this is a special case