;; $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;