;; $Id: dbindex.dsl,v 1.4 2003/01/15 08:24:23 adicarlo Exp $ ;; ;; This file is part of the Modular DocBook Stylesheet distribution. ;; See ../README or http://docbook.sourceforge.net/projects/dsssl/ ;; ;; ................... INDEX TERMS (EMBEDDED MARKERS) ................... (element indexterm ;; This is different than (empty-sosofo) alone because the backend ;; will hang an anchor off the empty sequence. This allows the index ;; to point to the indexterm (but only if the indexterm has an ID). (make sequence (empty-sosofo))) (element primary (empty-sosofo)) (element secondary (empty-sosofo)) (element tertiary (empty-sosofo)) (element see (empty-sosofo)) (element seealso (empty-sosofo)) ;; =========================== INDEX ELEMENTS =========================== (element setindex ($component$)) (element (setindex title) (empty-sosofo)) (element index (make simple-page-sequence page-number-restart?: (or %page-number-restart% (book-start?) (first-chapter?)) page-number-format: ($page-number-format$) use: default-text-style left-header: ($left-header$) center-header: ($center-header$) right-header: ($right-header$) left-footer: ($left-footer$) center-footer: ($center-footer$) right-footer: ($right-footer$) start-indent: %body-start-indent% input-whitespace-treatment: 'collapse quadding: %default-quadding% page-n-columns: 2 (make sequence ($component-title$) (process-children)) (make-endnotes))) ;; this is a special case. this prevents the index from causing an error but ;; will make the index a single column. c'est la vie. (element (article index) ($section$)) (element (index title) (empty-sosofo)) (element indexdiv ($section$)) (element (indexdiv title) (empty-sosofo)) (element indexentry (process-children)) (element primaryie (make paragraph font-size: (* (inherited-font-size) %smaller-size-factor%) (process-children))) (element secondaryie (make paragraph font-size: (* (inherited-font-size) %smaller-size-factor%) start-indent: (+ (inherited-start-indent) 1em) (process-children))) (element tertiaryie (make paragraph font-size: (* (inherited-font-size) %smaller-size-factor%) start-indent: (+ (inherited-start-indent) 2em) (process-children))) (define (find-indexterm id) ;; If you have a lot of indexterms that don't have IDs, this could ;; be incredibly slow. So don't do that. (let* ((idtarget (element-with-id id))) (if (node-list-empty? idtarget) (let loop ((idnodes (select-elements (descendants (sgml-root-element)) (normalize "indexterm")))) (if (node-list-empty? idnodes) (empty-node-list) (if (equal? id (string-append "AEN" (number->string (all-element-number (node-list-first idnodes))))) (node-list-first idnodes) (loop (node-list-rest idnodes))))) idtarget))) (define (indexentry-link nd) (let* ((id (attribute-string (normalize "role") nd)) (target (find-indexterm id)) (preferred (not (node-list-empty? (select-elements (children (current-node)) (normalize "emphasis"))))) (sosofo (if (node-list-empty? target) (literal "?") (make link destination: (node-list-address target) (with-mode toc-page-number-mode (process-node-list target)))))) (if preferred (make sequence font-weight: 'bold sosofo) sosofo))) (element (primaryie ulink) (indexentry-link (current-node))) (element (secondaryie ulink) (indexentry-link (current-node))) (element (tertiaryie ulink) (indexentry-link (current-node))) (element seeie (let ((indent (cond ((node-list-empty? (select-elements (children (parent (current-node))) (normalize "secondaryie"))) 1em) ((node-list-empty? (select-elements (children (parent (current-node))) (normalize "tertiaryie"))) 2em) (else 3em)))) (make paragraph font-size: (* (inherited-font-size) %smaller-size-factor%) start-indent: (+ (inherited-start-indent) indent) (literal "(" (gentext-index-see) " ") (process-children) (literal ")")))) (element seealsoie (let ((indent (cond ((node-list-empty? (select-elements (children (parent (current-node))) (normalize "secondaryie"))) 1em) ((node-list-empty? (select-elements (children (parent (current-node))) (normalize "tertiaryie"))) 2em) (else 3em)))) (make paragraph font-size: (* (inherited-font-size) %smaller-size-factor%) start-indent: (+ (inherited-start-indent) indent) (literal "(" (gentext-index-seealso) " ") (process-children) (literal ")"))))