;; $Id: dbnavig.dsl,v 1.3 2001/07/05 12:08:42 nwalsh Exp $
;;
;; This file is part of the Modular DocBook Stylesheet distribution.
;; See ../README or http://nwalsh.com/docbook/dsssl/
;;
;; The header of a chunk has this form:
;;
;; +-----------------------------------------+
;; | nav-banner |
;; +------------+---------------+------------|
;; | prevlink | nav-context | nextlink |
;; +-----------------------------------------+
(define (nav-banner? elemnode)
;; This node has a banner if:
;; 1. There's an inherited dbhtml PI value for "banner-text" and that
;; value is not the empty string, or
;; 2. The element is not the root element
(let ((banner (inherited-dbhtml-value elemnode "banner-text")))
(or (and banner (not (string=? banner "")))
(not (node-list=? elemnode (sgml-root-element))))))
(define (nav-banner elemnode)
(let* ((rootelem (sgml-root-element))
(info (info-element rootelem))
(subtitle-child (select-elements (children rootelem)
(normalize "subtitle")))
(subtitle-info (select-elements (children info)
(normalize "subtitle")))
(subtitle (if (node-list-empty? subtitle-info)
subtitle-child
subtitle-info))
(banner-text (inherited-dbhtml-value elemnode "banner-text"))
(banner-href (inherited-dbhtml-value elemnode "banner-href"))
(banner (if (and banner-text (not (string=? banner-text "")))
(literal banner-text)
(make sequence
(element-title-sosofo rootelem)
(if (node-list-empty? subtitle)
(empty-sosofo)
(make sequence
(literal ": ")
(with-mode subtitle-mode
(process-node-list subtitle))))))))
(make sequence
(if banner-href
(make element gi: "A"
attributes: (list (list "HREF" banner-href))
banner)
banner))))
(define (nav-context? elemnode)
;; Print a context header if
;; 1. There's an inherited dbhtml PI value for "context-text" and that
;; value is not the empty string, or
;; 2. The chunk is a top level section and the parent component
;; isn't the same as the root element (which appears in the nav-banner).
;;
(let* ((context-text (inherited-dbhtml-value elemnode "context-text"))
(rootelem (sgml-root-element))
(component (ancestor-member elemnode
(append (book-element-list)
(division-element-list)
(component-element-list))))
(gencontext (and (or (equal? (gi elemnode) (normalize "sect1"))
(equal? (gi elemnode) (normalize "section")))
(not (node-list=? component rootelem)))))
(or gencontext
(and context-text (not (string=? context-text ""))))))
(define (nav-context elemnode)
;; Print the context string for elemnode. If there's an inherited
;; dbhtml value for 'context-text', use that. Otherwise, use the
;; title of the parent component...
(let* ((context-href (inherited-dbhtml-value elemnode "context-href")))
(if (nav-context? elemnode)
(if context-href
(make element gi: "A"
attributes: (list (list "HREF" context-href))
(nav-context-sosofo elemnode))
(nav-context-sosofo elemnode))
(empty-sosofo))))
(define (nav-context-sosofo elemnode)
(let* ((component (ancestor-member elemnode
(append (book-element-list)
(division-element-list)
(component-element-list))))
(context-text (inherited-dbhtml-value elemnode "context-text")))
(if (and context-text (not (string=? context-text "")))
(literal context-text)
(if (equal? (element-label component) "")
(make sequence
(element-title-sosofo component))
(make sequence
;; Special case. This is a bit of a hack.
;; I need to revisit this aspect of
;; appendixes.
(if (and (equal? (gi component) (normalize "appendix"))
(or (equal? (gi elemnode) (normalize "sect1"))
(equal? (gi elemnode) (normalize "section")))
(equal? (gi (parent component)) (normalize "article")))
(empty-sosofo)
(literal (gentext-element-name-space (gi component))))
(element-label-sosofo component)
(literal (gentext-label-title-sep (gi component)))
(element-title-sosofo component))))))
;; The footer of a chunk has this form:
;;
;; +----------------------------------------+
;; | prevlink | nav-home | nextlink |
;; +------------+--------------+------------|
;; | p. title | nav-up | n. title |
;; +-----------------------------------------+
(define (nav-home? elemnode)
(not (node-list=? elemnode (sgml-root-element))))
(define (nav-home elemnode)
(sgml-root-element))
(define (nav-home-link elemnode)
(let ((home (nav-home elemnode))
(home-text (inherited-dbhtml-value elemnode "home-text")))
(if (node-list=? elemnode home)
(make entity-ref name: "nbsp")
(make element gi: "A"
attributes: (list
(list "HREF"
(href-to home))
(list "ACCESSKEY" "H"))
(if home-text
(literal home-text)
(gentext-nav-home home))))))
;; nav-up is displayed in the bottom center of the footer-navigation
;; table. The definition below will show "Up" for nested components
;; (the component wrapping a section, the division wrapping a component
;; etc.). It can be abused for other things, such as an index...
;;
(define (nav-up? elemnode)
(let ((up (parent elemnode))
(up-text (inherited-dbhtml-value elemnode "up-text")))
(if (and up-text (not (string=? up-text "")))
#t
(if (or (node-list-empty? up)
(node-list=? up (sgml-root-element))
(equal? (gi up) (normalize "bookinfo"))
(equal? (gi up) (normalize "docinfo"))
(equal? (gi up) (normalize "setinfo")))
#f
#t))))
(define (nav-up elemnode)
(let* ((up (parent elemnode))
(up-href (inherited-dbhtml-value elemnode "up-href"))
(uplink? (not (or (node-list-empty? up)
(node-list=? up (sgml-root-element)))))
(href (if up-href
up-href
(if uplink?
(href-to up)
#f))))
(if href
(make element gi: "A"
attributes: (list
(list "HREF" href)
(list "ACCESSKEY" "U"))
(nav-up-sosofo elemnode))
(nav-up-sosofo elemnode))))
(define (nav-up-sosofo elemnode)
(let* ((up (parent elemnode))
(up-text (inherited-dbhtml-value elemnode "up-text")))
(if (and up-text (not (string=? up-text "")))
(literal up-text)
(if (or (node-list-empty? up)
(node-list=? up (sgml-root-element)))
(make entity-ref name: "nbsp")
(gentext-nav-up up)))))
(define (nav-footer elemnode)
(empty-sosofo))
;; ======================================================================
(define (header-navigation nd #!optional (navlist '()))
(let* ((prev (if (null? navlist)
(prev-chunk-element nd)
(list-ref navlist 0)))
(next (if (null? navlist)
(next-chunk-element nd)
(list-ref navlist 1)))
(prevm (if (null? navlist)
(prev-major-component-chunk-element nd)
(list-ref navlist 2)))
(nextm (if (null? navlist)
(next-major-component-chunk-element nd)
(list-ref navlist 3)))
(rnavlist (list prev next prevm nextm)))
(make sequence
($html-body-start$)
(if %header-navigation%
(cond
((equal? (gi nd) (normalize "set"))
(set-header-navigation nd rnavlist))
((equal? (gi nd) (normalize "book"))
(book-header-navigation nd rnavlist))
((equal? (gi nd) (normalize "part"))
(part-header-navigation nd rnavlist))
((equal? (gi nd) (normalize "preface"))
(preface-header-navigation nd rnavlist))
((equal? (gi nd) (normalize "chapter"))
(chapter-header-navigation nd rnavlist))
((equal? (gi nd) (normalize "article"))
(article-header-navigation nd rnavlist))
((equal? (gi nd) (normalize "appendix"))
(appendix-header-navigation nd rnavlist))
((equal? (gi nd) (normalize "reference"))
(reference-header-navigation nd rnavlist))
((equal? (gi nd) (normalize "refentry"))
(refentry-header-navigation nd rnavlist))
((equal? (gi nd) (normalize "glossary"))
(glossary-header-navigation nd rnavlist))
((equal? (gi nd) (normalize "bibliography"))
(bibliography-header-navigation nd rnavlist))
((equal? (gi nd) (normalize "index"))
(index-header-navigation nd rnavlist))
;; LegalNotice only happens when %generate-legalnotice-link% is #t
((equal? (gi nd) (normalize "legalnotice"))
(default-header-navigation nd
(empty-node-list) (empty-node-list)
(empty-node-list) (empty-node-list)))
((member (gi nd) (section-element-list))
(section-header-navigation nd rnavlist))
(else (default-header-navigation nd prev next prevm nextm)))
(empty-sosofo))
($user-header-navigation$ prev next prevm nextm)
($html-body-content-start$))))
(define (footer-navigation nd #!optional (navlist '()))
(let* ((prev (if (null? navlist)
(prev-chunk-element nd)
(list-ref navlist 0)))
(next (if (null? navlist)
(next-chunk-element nd)
(list-ref navlist 1)))
(prevm (if (null? navlist)
(prev-major-component-chunk-element nd)
(list-ref navlist 2)))
(nextm (if (null? navlist)
(next-major-component-chunk-element nd)
(list-ref navlist 3)))
(rnavlist (list prev next prevm nextm)))
(make sequence
(make-endnotes)
($html-body-content-end$)
($user-footer-navigation$ prev next prevm nextm)
(if %footer-navigation%
(cond
((equal? (gi nd) (normalize "set"))
(set-footer-navigation nd rnavlist))
((equal? (gi nd) (normalize "book"))
(book-footer-navigation nd rnavlist))
((equal? (gi nd) (normalize "part"))
(part-footer-navigation nd rnavlist))
((equal? (gi nd) (normalize "preface"))
(preface-footer-navigation nd rnavlist))
((equal? (gi nd) (normalize "chapter"))
(chapter-footer-navigation nd rnavlist))
((equal? (gi nd) (normalize "article"))
(article-footer-navigation nd rnavlist))
((equal? (gi nd) (normalize "appendix"))
(appendix-footer-navigation nd rnavlist))
((equal? (gi nd) (normalize "reference"))
(reference-footer-navigation nd rnavlist))
((equal? (gi nd) (normalize "refentry"))
(refentry-footer-navigation nd rnavlist))
((equal? (gi nd) (normalize "glossary"))
(glossary-footer-navigation nd rnavlist))
((equal? (gi nd) (normalize "bibliography"))
(bibliography-footer-navigation nd rnavlist))
((equal? (gi nd) (normalize "index"))
(index-footer-navigation nd rnavlist))
;; LegalNotice only happens when %generate-legalnotice-link% is #t
((equal? (gi nd) (normalize "legalnotice"))
(default-footer-navigation nd
(empty-node-list) (empty-node-list)
(empty-node-list) (empty-node-list)))
((member (gi nd) (section-element-list))
(section-footer-navigation nd rnavlist))
(else (default-footer-navigation nd prev next prevm nextm)))
(empty-sosofo))
(nav-footer nd)
($html-body-end$))))
(define (set-header-navigation elemnode #!optional (navlist '()))
(empty-sosofo))
(define (book-header-navigation elemnode #!optional (navlist '()))
(empty-sosofo))
(define (part-header-navigation elemnode #!optional (navlist '()))
(let* ((prev (if (null? navlist)
(prev-chunk-element elemnode)
(list-ref navlist 0)))
(next (if (null? navlist)
(next-chunk-element elemnode)
(list-ref navlist 1)))
(prevsib (if (null? navlist)
(prev-major-component-chunk-element elemnode)
(list-ref navlist 2)))
(nextsib (if (null? navlist)
(next-major-component-chunk-element elemnode)
(list-ref navlist 3))))
(default-header-navigation elemnode prev next prevsib nextsib)))
(define (preface-header-navigation elemnode #!optional (navlist '()))
(let* ((prev (if (null? navlist)
(prev-chunk-element elemnode)
(list-ref navlist 0)))
(next (if (null? navlist)
(next-chunk-element elemnode)
(list-ref navlist 1)))
(prevsib (if (null? navlist)
(prev-major-component-chunk-element elemnode)
(list-ref navlist 2)))
(nextsib (if (null? navlist)
(next-major-component-chunk-element elemnode)
(list-ref navlist 3))))
(default-header-navigation elemnode prev next prevsib nextsib)))
(define (chapter-header-navigation elemnode #!optional (navlist '()))
(let* ((prev (if (null? navlist)
(prev-chunk-element elemnode)
(list-ref navlist 0)))
(next (if (null? navlist)
(next-chunk-element elemnode)
(list-ref navlist 1)))
(prevsib (if (null? navlist)
(prev-major-component-chunk-element elemnode)
(list-ref navlist 2)))
(nextsib (if (null? navlist)
(next-major-component-chunk-element elemnode)
(list-ref navlist 3))))
(default-header-navigation elemnode prev next prevsib nextsib)))
(define (appendix-header-navigation elemnode #!optional (navlist '()))
(let* ((prev (if (null? navlist)
(prev-chunk-element elemnode)
(list-ref navlist 0)))
(next (if (null? navlist)
(next-chunk-element elemnode)
(list-ref navlist 1)))
(prevsib (if (null? navlist)
(prev-major-component-chunk-element elemnode)
(list-ref navlist 2)))
(nextsib (if (null? navlist)
(next-major-component-chunk-element elemnode)
(list-ref navlist 3))))
(default-header-navigation elemnode prev next prevsib nextsib)))
(define (article-header-navigation elemnode #!optional (navlist '()))
(let* ((prev (if (null? navlist)
(prev-chunk-element elemnode)
(list-ref navlist 0)))
(next (if (null? navlist)
(next-chunk-element elemnode)
(list-ref navlist 1)))
(prevsib (if (null? navlist)
(prev-major-component-chunk-element elemnode)
(list-ref navlist 2)))
(nextsib (if (null? navlist)
(next-major-component-chunk-element elemnode)
(list-ref navlist 3))))
(if (node-list=? elemnode (sgml-root-element))
(empty-sosofo)
(default-header-navigation elemnode prev next prevsib nextsib))))
(define (glossary-header-navigation elemnode #!optional (navlist '()))
(let* ((prev (if (null? navlist)
(prev-chunk-element elemnode)
(list-ref navlist 0)))
(next (if (null? navlist)
(next-chunk-element elemnode)
(list-ref navlist 1)))
(prevsib (if (null? navlist)
(prev-major-component-chunk-element elemnode)
(list-ref navlist 2)))
(nextsib (if (null? navlist)
(next-major-component-chunk-element elemnode)
(list-ref navlist 3))))
(default-header-navigation elemnode prev next prevsib nextsib)))
(define (bibliography-header-navigation elemnode #!optional (navlist '()))
(let* ((prev (if (null? navlist)
(prev-chunk-element elemnode)
(list-ref navlist 0)))
(next (if (null? navlist)
(next-chunk-element elemnode)
(list-ref navlist 1)))
(prevsib (if (null? navlist)
(prev-major-component-chunk-element elemnode)
(list-ref navlist 2)))
(nextsib (if (null? navlist)
(next-major-component-chunk-element elemnode)
(list-ref navlist 3))))
(default-header-navigation elemnode prev next prevsib nextsib)))
(define (index-header-navigation elemnode #!optional (navlist '()))
(let* ((prev (if (null? navlist)
(prev-chunk-element elemnode)
(list-ref navlist 0)))
(next (if (null? navlist)
(next-chunk-element elemnode)
(list-ref navlist 1)))
(prevsib (if (null? navlist)
(prev-major-component-chunk-element elemnode)
(list-ref navlist 2)))
(nextsib (if (null? navlist)
(next-major-component-chunk-element elemnode)
(list-ref navlist 3))))
(default-header-navigation elemnode prev next prevsib nextsib)))
(define (reference-header-navigation elemnode #!optional (navlist '()))
(let* ((prev (if (null? navlist)
(prev-chunk-element elemnode)
(list-ref navlist 0)))
(next (if (null? navlist)
(next-chunk-element elemnode)
(list-ref navlist 1)))
(prevsib (if (null? navlist)
(prev-major-component-chunk-element elemnode)
(list-ref navlist 2)))
(nextsib (if (null? navlist)
(next-major-component-chunk-element elemnode)
(list-ref navlist 3))))
(default-header-navigation elemnode prev next prevsib nextsib)))
(define (refentry-header-navigation elemnode #!optional (navlist '()))
(let* ((prev (if (null? navlist)
(prev-chunk-element elemnode)
(list-ref navlist 0)))
(next (if (null? navlist)
(next-chunk-element elemnode)
(list-ref navlist 1)))
(prevsib (if (null? navlist)
(prev-major-component-chunk-element elemnode)
(list-ref navlist 2)))
(nextsib (if (null? navlist)
(next-major-component-chunk-element elemnode)
(list-ref navlist 3))))
(default-header-navigation elemnode prev next prevsib nextsib)))
(define (section-header-navigation elemnode #!optional (navlist '()))
(let* ((prev (if (null? navlist)
(prev-chunk-element elemnode)
(list-ref navlist 0)))
(next (if (null? navlist)
(next-chunk-element elemnode)
(list-ref navlist 1)))
(prevsib (if (null? navlist)
(prev-major-component-chunk-element elemnode)
(list-ref navlist 2)))
(nextsib (if (null? navlist)
(next-major-component-chunk-element elemnode)
(list-ref navlist 3))))
(default-header-navigation elemnode prev next prevsib nextsib)))
(define (set-footer-navigation elemnode #!optional (navlist '()))
(let* ((prev (if (null? navlist)
(prev-chunk-element elemnode)
(list-ref navlist 0)))
(next (if (null? navlist)
(next-chunk-element elemnode)
(list-ref navlist 1)))
(prevsib (if (null? navlist)
(prev-major-component-chunk-element elemnode)
(list-ref navlist 2)))
(nextsib (if (null? navlist)
(next-major-component-chunk-element elemnode)
(list-ref navlist 3))))
(default-footer-navigation elemnode prev next prevsib nextsib)))
(define (book-footer-navigation elemnode #!optional (navlist '()))
(let* ((prev (if (null? navlist)
(prev-chunk-element elemnode)
(list-ref navlist 0)))
(next (if (null? navlist)
(next-chunk-element elemnode)
(list-ref navlist 1)))
(prevsib (if (null? navlist)
(prev-major-component-chunk-element elemnode)
(list-ref navlist 2)))
(nextsib (if (null? navlist)
(next-major-component-chunk-element elemnode)
(list-ref navlist 3))))
(default-footer-navigation elemnode prev next prevsib nextsib)))
(define (part-footer-navigation elemnode #!optional (navlist '()))
(let* ((prev (if (null? navlist)
(prev-chunk-element elemnode)
(list-ref navlist 0)))
(next (if (null? navlist)
(next-chunk-element elemnode)
(list-ref navlist 1)))
(prevsib (if (null? navlist)
(prev-major-component-chunk-element elemnode)
(list-ref navlist 2)))
(nextsib (if (null? navlist)
(next-major-component-chunk-element elemnode)
(list-ref navlist 3))))
(default-footer-navigation elemnode prev next prevsib nextsib)))
(define (preface-footer-navigation elemnode #!optional (navlist '()))
(let* ((prev (if (null? navlist)
(prev-chunk-element elemnode)
(list-ref navlist 0)))
(next (if (null? navlist)
(next-chunk-element elemnode)
(list-ref navlist 1)))
(prevsib (if (null? navlist)
(prev-major-component-chunk-element elemnode)
(list-ref navlist 2)))
(nextsib (if (null? navlist)
(next-major-component-chunk-element elemnode)
(list-ref navlist 3))))
(default-footer-navigation elemnode prev next prevsib nextsib)))
(define (chapter-footer-navigation elemnode #!optional (navlist '()))
(let* ((prev (if (null? navlist)
(prev-chunk-element elemnode)
(list-ref navlist 0)))
(next (if (null? navlist)
(next-chunk-element elemnode)
(list-ref navlist 1)))
(prevsib (if (null? navlist)
(prev-major-component-chunk-element elemnode)
(list-ref navlist 2)))
(nextsib (if (null? navlist)
(next-major-component-chunk-element elemnode)
(list-ref navlist 3))))
(default-footer-navigation elemnode prev next prevsib nextsib)))
(define (appendix-footer-navigation elemnode #!optional (navlist '()))
(let* ((prev (if (null? navlist)
(prev-chunk-element elemnode)
(list-ref navlist 0)))
(next (if (null? navlist)
(next-chunk-element elemnode)
(list-ref navlist 1)))
(prevsib (if (null? navlist)
(prev-major-component-chunk-element elemnode)
(list-ref navlist 2)))
(nextsib (if (null? navlist)
(next-major-component-chunk-element elemnode)
(list-ref navlist 3))))
(default-footer-navigation elemnode prev next prevsib nextsib)))
(define (article-footer-navigation elemnode #!optional (navlist '()))
(let* ((prev (if (null? navlist)
(prev-chunk-element elemnode)
(list-ref navlist 0)))
(next (if (null? navlist)
(next-chunk-element elemnode)
(list-ref navlist 1)))
(prevsib (if (null? navlist)
(prev-major-component-chunk-element elemnode)
(list-ref navlist 2)))
(nextsib (if (null? navlist)
(next-major-component-chunk-element elemnode)
(list-ref navlist 3))))
(default-footer-navigation elemnode prev next prevsib nextsib)))
(define (glossary-footer-navigation elemnode #!optional (navlist '()))
(let* ((prev (if (null? navlist)
(prev-chunk-element elemnode)
(list-ref navlist 0)))
(next (if (null? navlist)
(next-chunk-element elemnode)
(list-ref navlist 1)))
(prevsib (if (null? navlist)
(prev-major-component-chunk-element elemnode)
(list-ref navlist 2)))
(nextsib (if (null? navlist)
(next-major-component-chunk-element elemnode)
(list-ref navlist 3))))
(default-footer-navigation elemnode prev next prevsib nextsib)))
(define (bibliography-footer-navigation elemnode #!optional (navlist '()))
(let* ((prev (if (null? navlist)
(prev-chunk-element elemnode)
(list-ref navlist 0)))
(next (if (null? navlist)
(next-chunk-element elemnode)
(list-ref navlist 1)))
(prevsib (if (null? navlist)
(prev-major-component-chunk-element elemnode)
(list-ref navlist 2)))
(nextsib (if (null? navlist)
(next-major-component-chunk-element elemnode)
(list-ref navlist 3))))
(default-footer-navigation elemnode prev next prevsib nextsib)))
(define (index-footer-navigation elemnode #!optional (navlist '()))
(let* ((prev (if (null? navlist)
(prev-chunk-element elemnode)
(list-ref navlist 0)))
(next (if (null? navlist)
(next-chunk-element elemnode)
(list-ref navlist 1)))
(prevsib (if (null? navlist)
(prev-major-component-chunk-element elemnode)
(list-ref navlist 2)))
(nextsib (if (null? navlist)
(next-major-component-chunk-element elemnode)
(list-ref navlist 3))))
(default-footer-navigation elemnode prev next prevsib nextsib)))
(define (reference-footer-navigation elemnode #!optional (navlist '()))
(let* ((prev (if (null? navlist)
(prev-chunk-element elemnode)
(list-ref navlist 0)))
(next (if (null? navlist)
(next-chunk-element elemnode)
(list-ref navlist 1)))
(prevsib (if (null? navlist)
(prev-major-component-chunk-element elemnode)
(list-ref navlist 2)))
(nextsib (if (null? navlist)
(next-major-component-chunk-element elemnode)
(list-ref navlist 3))))
(default-footer-navigation elemnode prev next prevsib nextsib)))
(define (refentry-footer-navigation elemnode #!optional (navlist '()))
(let* ((prev (if (null? navlist)
(prev-chunk-element elemnode)
(list-ref navlist 0)))
(next (if (null? navlist)
(next-chunk-element elemnode)
(list-ref navlist 1)))
(prevsib (if (null? navlist)
(prev-major-component-chunk-element elemnode)
(list-ref navlist 2)))
(nextsib (if (null? navlist)
(next-major-component-chunk-element elemnode)
(list-ref navlist 3))))
(default-footer-navigation elemnode prev next prevsib nextsib)))
(define (section-footer-navigation elemnode #!optional (navlist '()))
(let* ((prev (if (null? navlist)
(prev-chunk-element elemnode)
(list-ref navlist 0)))
(next (if (null? navlist)
(next-chunk-element elemnode)
(list-ref navlist 1)))
(prevsib (if (null? navlist)
(prev-major-component-chunk-element elemnode)
(list-ref navlist 2)))
(nextsib (if (null? navlist)
(next-major-component-chunk-element elemnode)
(list-ref navlist 3))))
(default-footer-navigation elemnode prev next prevsib nextsib)))
;; ----------------------------------------------------------------------
(define (default-header-nav-tbl-ff elemnode prev next prevsib nextsib)
(let* ((r1? (nav-banner? elemnode))
(r1-sosofo (make element gi: "TR"
(make element gi: "TH"
attributes: (list
(list "COLSPAN" "5")
(list "ALIGN" "center")
(list "VALIGN" "bottom"))
(nav-banner elemnode))))
(r2? (or (not (node-list-empty? prev))
(not (node-list-empty? next))
(not (node-list-empty? prevsib))
(not (node-list-empty? nextsib))
(nav-context? elemnode)))
(r2-sosofo (make element gi: "TR"
(make element gi: "TD"
attributes: (list
(list "WIDTH" "10%")
(list "ALIGN" "left")
(list "VALIGN" "top"))
(if (node-list-empty? prev)
(make entity-ref name: "nbsp")
(make element gi: "A"
attributes: (list
(list "HREF"
(href-to
prev))
(list "ACCESSKEY"
"P"))
(gentext-nav-prev prev))))
(make element gi: "TD"
attributes: (list
(list "WIDTH" "10%")
(list "ALIGN" "left")
(list "VALIGN" "top"))
(if (node-list-empty? prevsib)
(make entity-ref name: "nbsp")
(make element gi: "A"
attributes: (list
(list "HREF"
(href-to
prevsib)))
(gentext-nav-prev-sibling prevsib))))
(make element gi: "TD"
attributes: (list
(list "WIDTH" "60%")
(list "ALIGN" "center")
(list "VALIGN" "bottom"))
(nav-context elemnode))
(make element gi: "TD"
attributes: (list
(list "WIDTH" "10%")
(list "ALIGN" "right")
(list "VALIGN" "top"))
(if (node-list-empty? nextsib)
(make entity-ref name: "nbsp")
(make element gi: "A"
attributes: (list
(list "HREF"
(href-to
nextsib)))
(gentext-nav-next-sibling nextsib))))
(make element gi: "TD"
attributes: (list
(list "WIDTH" "10%")
(list "ALIGN" "right")
(list "VALIGN" "top"))
(if (node-list-empty? next)
(make entity-ref name: "nbsp")
(make element gi: "A"
attributes: (list
(list "HREF"
(href-to
next))
(list "ACCESSKEY"
"N"))
(gentext-nav-next next)))))))
(if (or r1? r2?)
(make element gi: "DIV"
attributes: '(("CLASS" "NAVHEADER"))
(make element gi: "TABLE"
attributes: (list
(list "SUMMARY" "Header navigation table")
(list "WIDTH" %gentext-nav-tblwidth%)
(list "BORDER" "0")
(list "CELLPADDING" "0")
(list "CELLSPACING" "0"))
(if r1? r1-sosofo (empty-sosofo))
(if r2? r2-sosofo (empty-sosofo)))
(make empty-element gi: "HR"
attributes: (list
(list "ALIGN" "LEFT")
(list "WIDTH" %gentext-nav-tblwidth%))))
(empty-sosofo))))
(define (default-header-nav-tbl-noff elemnode prev next prevsib nextsib)
(let* ((r1? (nav-banner? elemnode))
(r1-sosofo (make element gi: "TR"
(make element gi: "TH"
attributes: (list
(list "COLSPAN" "3")
(list "ALIGN" "center"))
(nav-banner elemnode))))
(r2? (or (not (node-list-empty? prev))
(not (node-list-empty? next))
(nav-context? elemnode)))
(r2-sosofo (make element gi: "TR"
(make element gi: "TD"
attributes: (list
(list "WIDTH" "10%")
(list "ALIGN" "left")
(list "VALIGN" "bottom"))
(if (node-list-empty? prev)
(make entity-ref name: "nbsp")
(make element gi: "A"
attributes: (list
(list "HREF"
(href-to
prev))
(list "ACCESSKEY"
"P"))
(gentext-nav-prev prev))))
(make element gi: "TD"
attributes: (list
(list "WIDTH" "80%")
(list "ALIGN" "center")
(list "VALIGN" "bottom"))
(nav-context elemnode))
(make element gi: "TD"
attributes: (list
(list "WIDTH" "10%")
(list "ALIGN" "right")
(list "VALIGN" "bottom"))
(if (node-list-empty? next)
(make entity-ref name: "nbsp")
(make element gi: "A"
attributes: (list
(list "HREF"
(href-to
next))
(list "ACCESSKEY"
"N"))
(gentext-nav-next next)))))))
(if (or r1? r2?)
(make element gi: "DIV"
attributes: '(("CLASS" "NAVHEADER"))
(make element gi: "TABLE"
attributes: (list
(list "SUMMARY" "Header navigation table")
(list "WIDTH" %gentext-nav-tblwidth%)
(list "BORDER" "0")
(list "CELLPADDING" "0")
(list "CELLSPACING" "0"))
(if r1? r1-sosofo (empty-sosofo))
(if r2? r2-sosofo (empty-sosofo)))
(make empty-element gi: "HR"
attributes: (list
(list "ALIGN" "LEFT")
(list "WIDTH" %gentext-nav-tblwidth%))))
(empty-sosofo))))
(define (default-header-nav-notbl-ff elemnode prev next prevsib nextsib)
(make element gi: "DIV"
attributes: '(("CLASS" "NAVHEADER"))
(if (nav-banner? elemnode)
(make element gi: "H1"
(nav-banner elemnode))
(empty-sosofo))
(if (and (node-list-empty? prev)
(node-list-empty? prevsib)
(node-list-empty? nextsib)
(node-list-empty? next))
(empty-sosofo)
(make element gi: "P"
(if (node-list-empty? next)
(empty-sosofo)
(make sequence
(make element gi: "A"
attributes: (list
(list "HREF" (href-to next))
(list "ACCESSKEY" "N"))
(gentext-nav-next next))))
(if (node-list-empty? prev)
(empty-sosofo)
(make sequence
(if (node-list-empty? next)
(empty-sosofo)
(literal ", "))
(make element gi: "A"
attributes: (list
(list "HREF" (href-to prev))
(list "ACCESSKEY" "P"))
(gentext-nav-prev prev))))
(if (node-list-empty? nextsib)
(empty-sosofo)
(make sequence
(if (and (node-list-empty? next)
(node-list-empty? prev))
(empty-sosofo)
(literal ", "))
(make element gi: "A"
attributes: (list
(list "HREF" (href-to nextsib)))
(gentext-nav-next-sibling nextsib))))
(if (node-list-empty? prevsib)
(empty-sosofo)
(make sequence
(if (and (node-list-empty? next)
(node-list-empty? prev)
(node-list-empty? nextsib))
(empty-sosofo)
(literal ", "))
(make element gi: "A"
attributes: (list
(list "HREF" (href-to prevsib)))
(gentext-nav-prev-sibling prevsib))))))
(if (nav-context? elemnode)
(make element gi: "H2"
(nav-context elemnode))
(empty-sosofo))
(make empty-element gi: "HR")))
(define (default-header-nav-notbl-noff elemnode prev next prevsib nextsib)
(default-header-nav-notbl-ff elemnode prev next
(empty-node-list) (empty-node-list)))
(define (default-header-navigation elemnode prev next prevsib nextsib)
(if %gentext-nav-use-tables%
(if %gentext-nav-use-ff%
(default-header-nav-tbl-ff elemnode prev next prevsib nextsib)
(default-header-nav-tbl-noff elemnode prev next prevsib nextsib))
(if %gentext-nav-use-ff%
(default-header-nav-notbl-ff elemnode prev next prevsib nextsib)
(default-header-nav-notbl-noff elemnode prev next prevsib nextsib))))
(define (default-footer-navigation elemnode prev next prevsib nextsib)
(if %gentext-nav-use-tables%
(default-footer-nav-tbl elemnode prev next prevsib nextsib)
(default-footer-nav-notbl elemnode prev next prevsib nextsib)))
(define (default-footer-nav-tbl elemnode prev next prevsib nextsib)
(let ((r1? (or (not (node-list-empty? prev))
(not (node-list-empty? next))
(nav-home? elemnode)))
(r2? (or (not (node-list-empty? prev))
(not (node-list-empty? next))
(nav-up? elemnode)))
(r1-sosofo (make element gi: "TR"
(make element gi: "TD"
attributes: (list
(list "WIDTH" "33%")
(list "ALIGN" "left")
(list "VALIGN" "top"))
(if (node-list-empty? prev)
(make entity-ref name: "nbsp")
(make element gi: "A"
attributes: (list
(list "HREF" (href-to
prev))
(list "ACCESSKEY"
"P"))
(gentext-nav-prev prev))))
(make element gi: "TD"
attributes: (list
(list "WIDTH" "34%")
(list "ALIGN" "center")
(list "VALIGN" "top"))
(nav-home-link elemnode))
(make element gi: "TD"
attributes: (list
(list "WIDTH" "33%")
(list "ALIGN" "right")
(list "VALIGN" "top"))
(if (node-list-empty? next)
(make entity-ref name: "nbsp")
(make element gi: "A"
attributes: (list
(list "HREF" (href-to
next))
(list "ACCESSKEY"
"N"))
(gentext-nav-next next))))))
(r2-sosofo (make element gi: "TR"
(make element gi: "TD"
attributes: (list
(list "WIDTH" "33%")
(list "ALIGN" "left")
(list "VALIGN" "top"))
(if (node-list-empty? prev)
(make entity-ref name: "nbsp")
(element-title-sosofo prev)))
(make element gi: "TD"
attributes: (list
(list "WIDTH" "34%")
(list "ALIGN" "center")
(list "VALIGN" "top"))
(if (nav-up? elemnode)
(nav-up elemnode)
(make entity-ref name: "nbsp")))
(make element gi: "TD"
attributes: (list
(list "WIDTH" "33%")
(list "ALIGN" "right")
(list "VALIGN" "top"))
(if (node-list-empty? next)
(make entity-ref name: "nbsp")
(element-title-sosofo next))))))
(if (or r1? r2?)
(make element gi: "DIV"
attributes: '(("CLASS" "NAVFOOTER"))
(make empty-element gi: "HR"
attributes: (list
(list "ALIGN" "LEFT")
(list "WIDTH" %gentext-nav-tblwidth%)))
(make element gi: "TABLE"
attributes: (list
(list "SUMMARY" "Footer navigation table")
(list "WIDTH" %gentext-nav-tblwidth%)
(list "BORDER" "0")
(list "CELLPADDING" "0")
(list "CELLSPACING" "0"))
(if r1? r1-sosofo (empty-sosofo))
(if r2? r2-sosofo (empty-sosofo))))
(empty-sosofo))))
(define (default-footer-nav-notbl elemnode prev next prevsib nextsib)
(make element gi: "DIV"
attributes: '(("CLASS" "NAVFOOTER"))
(make empty-element gi: "HR")
(if (nav-home? elemnode)
(nav-home-link elemnode)
(empty-sosofo))
(if (nav-up? elemnode)
(make sequence
(if (nav-home? elemnode)
(literal ", ")
(empty-sosofo))
(nav-up elemnode))
(empty-sosofo))
(if (or (nav-home? elemnode) (nav-up? elemnode))
(make empty-element gi: "BR")
(empty-sosofo))
(if (node-list-empty? prev)
(empty-sosofo)
(make sequence
(make element gi: "A"
attributes: (list
(list "HREF" (href-to prev))
(list "ACCESSKEY" "P"))
(gentext-nav-prev prev))
(literal ": " (element-title-string prev))
(make empty-element gi: "BR")))
(if (node-list-empty? next)
(empty-sosofo)
(make sequence
(make element gi: "A"
attributes: (list
(list "HREF" (href-to next))
(list "ACCESSKEY" "N"))
(gentext-nav-next next))
(literal ": " (element-title-string next))
(make empty-element gi: "BR")))))
(define ($user-header-navigation$ #!optional
(prev (empty-node-list))
(next (empty-node-list))
(prevm (empty-node-list))
(nextm (empty-node-list)))
(empty-sosofo))
(define ($user-footer-navigation$ #!optional
(prev (empty-node-list))
(next (empty-node-list))
(prevm (empty-node-list))
(nextm (empty-node-list)))
(empty-sosofo))
;; EOF dbnavig.dsl;