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 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
|
;; $Id: dbsect.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/
;;
;; ============================== SECTIONS ==============================
(define (SECTLEVEL #!optional (sect (current-node)))
(section-level-by-node (not nochunks) sect))
;; BRIDGEHEAD isn't a proper section, but appears to be a section title
(element bridgehead
(let* ((renderas (attribute-string "renderas"))
;; the apparent section level
(hlevel
;; if not real section level, then get the apparent level
;; from "renderas"
(if renderas
(section-level-by-gi (not nochunks) (normalize renderas))
;; else use the real level
(SECTLEVEL)))
(helem
(string-append "H" (number->string hlevel))))
(make element gi: helem
attributes: '(("CLASS" "BRIDGEHEAD"))
(make element gi: "A"
attributes: (list (list "NAME" (element-id)))
(empty-sosofo))
(process-children))))
(define ($section-separator$)
(let* (;; There are several situations in which we don't want a
;; separator here:
;; 1. This document is being chunked:
(chunks (not nochunks))
;; 2. This node is the root element of the document:
(isroot (node-list=? (current-node) (sgml-root-element)))
;; 3. This node is the first section in the root element
;; and no other content (except the *info elements and
;; the title) precedes it. This means that the
;; titlepage-separator was the last thing we put out.
;; No one expects two separators in a row, or the Spanish
;; inquisition.
(s1ofrt (node-list=? (parent (current-node)) (sgml-root-element)))
(precnd (ipreced (current-node)))
(infond (info-element (parent (current-node))))
(isfirst (or (equal? (gi precnd) (normalize "title"))
(node-list=? precnd infond))))
(if (or chunks isroot isfirst)
(empty-sosofo)
(make empty-element gi: "HR"))))
(define ($section$)
(html-document (with-mode head-title-mode
(literal (element-title-string (current-node))))
($section-body$)))
(define ($section-body$)
(make element gi: "DIV"
attributes: (list (list "CLASS" (gi)))
($section-separator$)
($section-title$)
(if (not (node-list-empty? (select-elements (children (current-node))
(normalize "refentry"))))
(build-toc (current-node) 1)
(empty-sosofo))
(process-children)))
(define ($section-title$)
(let* ((sect (current-node))
(info (info-element))
(subtitles (select-elements (children info) (normalize "subtitle")))
(renderas (inherited-attribute-string (normalize "renderas") sect))
;; the apparent section level
(hlevel
;; if not real section level, then get the apparent level
;; from "renderas"
(if renderas
(section-level-by-gi (not nochunks) (normalize renderas))
;; else use the real level
(SECTLEVEL)))
(h1elem
(string-append "H" (number->string hlevel)))
(h2elem
(string-append "H" (number->string (+ hlevel 1))))
(name (element-id))
(isep (gentext-intra-label-sep (gi sect)))
(nsep (gentext-label-title-sep (gi sect))))
(make sequence
(make element gi: h1elem
attributes: (list (list "CLASS" (gi sect)))
(make element gi: "A"
attributes: (list (list "NAME" name))
(make sequence
(if (string=? (element-label (current-node)) "")
(empty-sosofo)
(literal (element-label (current-node)) nsep))
(element-title-sosofo sect))))
(if (node-list-empty? subtitles)
(empty-sosofo)
(with-mode subtitle-mode
(make element gi: h2elem
(process-node-list subtitles))))
($proc-section-info$ info))))
(define ($proc-section-info$ info)
(cond ((equal? (gi) (normalize "sect1"))
($sect1-info$ info))
((equal? (gi) (normalize "sect2"))
($sect2-info$ info))
((equal? (gi) (normalize "sect3"))
($sect3-info$ info))
((equal? (gi) (normalize "sect4"))
($sect4-info$ info))
((equal? (gi) (normalize "sect5"))
($sect5-info$ info))
((equal? (gi) (normalize "section"))
($section-info$ info))
((equal? (gi) (normalize "refsect1"))
($refsect1-info$ info))
((equal? (gi) (normalize "refsect2"))
($refsect2-info$ info))
((equal? (gi) (normalize "refsect3"))
($refsect3-info$ info))
(else (empty-sosofo))))
(define ($sect1-info$ info) (empty-sosofo))
(define ($sect2-info$ info) (empty-sosofo))
(define ($sect3-info$ info) (empty-sosofo))
(define ($sect4-info$ info) (empty-sosofo))
(define ($sect5-info$ info) (empty-sosofo))
(define ($section-info$ info) (empty-sosofo))
(define ($refsect1-info$ info) (empty-sosofo))
(define ($refsect2-info$ info) (empty-sosofo))
(define ($refsect3-info$ info) (empty-sosofo))
(element sect1 ($section$))
(element (sect1 title) (empty-sosofo))
(element sect2 ($section$))
(element (sect2 title) (empty-sosofo))
(element sect3 ($section$))
(element (sect3 title) (empty-sosofo))
(element sect4 ($section$))
(element (sect4 title) (empty-sosofo))
(element sect5 ($section$))
(element (sect5 title) (empty-sosofo))
(element simplesect ($section$))
(element (simplesect title) (empty-sosofo))
|