diff options
Diffstat (limited to 'html/dbcompon.dsl')
-rw-r--r-- | html/dbcompon.dsl | 199 |
1 files changed, 199 insertions, 0 deletions
diff --git a/html/dbcompon.dsl b/html/dbcompon.dsl new file mode 100644 index 0000000..250726d --- /dev/null +++ b/html/dbcompon.dsl @@ -0,0 +1,199 @@ +;; $Id: dbcompon.dsl,v 1.8 2003/04/29 05:49:21 adicarlo Exp $ +;; +;; This file is part of the Modular DocBook Stylesheet distribution. +;; See ../README or http://docbook.sourceforge.net/projects/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 + (let ((first-gi (gi (node-list-first nl)))) + (if (equal? first-gi (normalize "epigraph")) + (node-list-first nl) + (if (or (equal? first-gi (normalize "title")) + (equal? first-gi (normalize "subtitle")) + (equal? first-gi (normalize "titleabbrev")) + (equal? first-gi (normalize "docinfo")) + (equal? first-gi (normalize "chapterinfo")) + (equal? first-gi (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 "article")) + (node-list-filter-by-gi (children (current-node)) + (list (normalize "artheader") + (normalize "articleinfo")))) + ((or + (equal? (gi) (normalize "appendix")) + (equal? (gi) (normalize "bibliography")) + (equal? (gi) (normalize "chapter")) + (equal? (gi) (normalize "glossary")) + (equal? (gi) (normalize "index")) + (equal? (gi) (normalize "preface")) + (equal? (gi) (normalize "reference")) + (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"))) + (titles (if (node-list-empty? parent-titles) + (select-elements exp-children (normalize "title")) + parent-titles)) + (parent-subttl (select-elements (children (current-node)) (normalize "subtitle"))) + (subtitles (if (node-list-empty? parent-subttl) + (select-elements exp-children (normalize "subtitle")) + parent-subttl))) + (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)) +) + +(element colophon ($component$)) + +;; 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 |