diff options
Diffstat (limited to 'print/dbbibl.dsl')
-rw-r--r-- | print/dbbibl.dsl | 868 |
1 files changed, 868 insertions, 0 deletions
diff --git a/print/dbbibl.dsl b/print/dbbibl.dsl new file mode 100644 index 0000000..38340a9 --- /dev/null +++ b/print/dbbibl.dsl @@ -0,0 +1,868 @@ +;; $Id: dbbibl.dsl,v 1.2 2002/06/09 12:04:09 nwalsh Exp $ +;; +;; This file is part of the Modular DocBook Stylesheet distribution. +;; See ../README or http://nwalsh.com/docbook/dsssl/ +;; + +;; ......................... BIBLIOGRAPHY PARAMS ......................... + +;; these should be in dbparam... +(define %biblsep% ", ") +(define %biblend% ".") + +(define %biblioentry-in-entry-order% #t) + +;; .................... BIBLIOGRAPHY and BIBLIODIV ...................... + +(define (bibliography-content) + ;; Note that the code below works for both the case where the bibliography + ;; has BIBLIODIVs and the case where it doesn't, by the slightly subtle + ;; fact that if it does, then allentries will be (empty-node-list). + (let* ((allbibcontent (children (current-node))) + (prebibcontent (node-list-filter-by-not-gi + allbibcontent + (list (normalize "biblioentry") + (normalize "bibliomixed")))) + (allentries (node-list-filter-by-gi + allbibcontent + (list (normalize "biblioentry") + (normalize "bibliomixed")))) + (entries (if biblio-filter-used + (biblio-filter allentries) + allentries))) + (make sequence + (process-node-list prebibcontent) + (process-node-list entries)))) + +(element (book bibliography) + (make simple-page-sequence + page-n-columns: %page-n-columns% + 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% + (make sequence + ($component-title$) + (bibliography-content)) + (make-endnotes))) + +(element bibliography + ;; A bibliography that's inside something else... + (let* ((sect (ancestor-member (current-node) + (append (section-element-list) + (component-element-list)))) + (hlevel (+ (SECTLEVEL sect) 1)) + (hs (HSIZE (- 4 hlevel)))) + (make sequence + (make paragraph + font-family-name: %title-font-family% + font-weight: (if (< hlevel 5) 'bold 'medium) + font-posture: (if (< hlevel 5) 'upright 'italic) + font-size: hs + line-spacing: (* hs %line-spacing-factor%) + space-before: (* hs %head-before-factor%) + space-after: (* hs %head-after-factor%) + start-indent: (if (or (>= hlevel 3) + (member (gi) (list (normalize "refsect1") + (normalize "refsect2") + (normalize "refsect3")))) + %body-start-indent% + 0pt) + first-line-start-indent: 0pt + quadding: %section-title-quadding% + keep-with-next?: #t + heading-level: (if %generate-heading-level% (+ hlevel 1) 0) + (element-title-sosofo (current-node))) + (bibliography-content)))) + +(element (bibliography title) (empty-sosofo)) + +(element bibliodiv + (let* ((allentries (node-list-filter-by-gi (children (current-node)) + (list (normalize "biblioentry") + (normalize "bibliomixed")))) + (entries (if biblio-filter-used + (biblio-filter allentries) + allentries))) + (if (and biblio-filter-used (node-list-empty? entries)) + (empty-sosofo) + (make display-group + space-before: %block-sep% + space-after: %block-sep% + start-indent: %body-start-indent% + (make sequence + ($section-title$) + (process-node-list entries)))))) + +(element (bibliodiv title) (empty-sosofo)) + +;; ..................... BIBLIOGRAPHY ENTRIES ......................... + +(define (biblioentry-inline-sep node rest) + ;; Output the character that should separate inline node from rest + (cond + ((and (equal? (gi node) (normalize "title")) + (equal? (gi (node-list-first rest)) (normalize "subtitle"))) + (make sequence + font-posture: 'italic + (literal ": "))) + (else + (literal %biblsep%)))) + +(define (biblioentry-inline-end blocks) + ;; Output the character that should occur at the end of inline + (literal %biblend%)) + +(define (biblioentry-block-sep node rest) + ;; Output the character that should separate block node from rest + (empty-sosofo)) + +(define (biblioentry-block-end) + ;; Output the character that should occur at the end of block + (empty-sosofo)) + +(element biblioentry + (let* ((expanded-children (expand-children + (children (current-node)) + (biblioentry-flatten-elements))) + (all-inline-children (if %biblioentry-in-entry-order% + (titlepage-gi-list-by-nodelist + (biblioentry-inline-elements) + expanded-children) + (titlepage-gi-list-by-elements + (biblioentry-inline-elements) + expanded-children))) + (block-children (if %biblioentry-in-entry-order% + (titlepage-gi-list-by-nodelist + (biblioentry-block-elements) + expanded-children) + (titlepage-gi-list-by-elements + (biblioentry-block-elements) + expanded-children))) + (leading-abbrev (if (equal? (normalize "abbrev") + (gi (node-list-first + all-inline-children))) + (node-list-first all-inline-children) + (empty-node-list))) + (inline-children (if (node-list-empty? leading-abbrev) + all-inline-children + (node-list-rest all-inline-children))) + (has-leading-abbrev? (not (node-list-empty? leading-abbrev))) + (xreflabel (if (or has-leading-abbrev? biblio-number) + #f + (attribute-string (normalize "xreflabel"))))) + (make display-group + (make paragraph + space-before: %para-sep% + space-after: %para-sep% + start-indent: (+ (inherited-start-indent) 2pi) + first-line-start-indent: -2pi + + (if (or biblio-number xreflabel has-leading-abbrev?) + (make sequence + (literal "[") + + (if biblio-number + (literal (number->string (bibentry-number (current-node)))) + (empty-sosofo)) + + (if xreflabel + (literal xreflabel) + (empty-sosofo)) + + (if has-leading-abbrev? + (with-mode biblioentry-inline-mode + (process-node-list leading-abbrev)) + (empty-sosofo)) + + (literal "]\no-break-space;")) + (empty-sosofo)) + + (let loop ((nl inline-children)) + (if (node-list-empty? nl) + (empty-sosofo) + (make sequence + (with-mode biblioentry-inline-mode + (process-node-list (node-list-first nl))) + (if (node-list-empty? (node-list-rest nl)) + (biblioentry-inline-end block-children) + (biblioentry-inline-sep (node-list-first nl) + (node-list-rest nl))) + (loop (node-list-rest nl)))))) + + (make display-group + start-indent: (+ (inherited-start-indent) 2pi) + (let loop ((nl block-children)) + (if (node-list-empty? nl) + (empty-sosofo) + (make sequence + (with-mode biblioentry-block-mode + (process-node-list (node-list-first nl))) + (if (node-list-empty? (node-list-rest nl)) + (biblioentry-block-end) + (biblioentry-block-sep (node-list-first nl) + (node-list-rest nl))) + (loop (node-list-rest nl))))))))) + +(mode biblioentry-inline-mode + (element abbrev + (make sequence + (process-children))) + + (element affiliation + (let ((inline-children (node-list-filter-by-not-gi + (children (current-node)) + (list (normalize "address"))))) + (let loop ((nl inline-children)) + (if (node-list-empty? nl) + (empty-sosofo) + (make sequence + (process-node-list (node-list-first nl)) + (if (node-list-empty? (node-list-rest nl)) + (empty-sosofo) + (literal ", ")) + (loop (node-list-rest nl))))))) + + (element artpagenums + (make sequence + (process-children))) + + (element author + (literal (author-list-string))) + + (element authorgroup + (process-children)) + + (element authorinitials + (make sequence + (process-children))) + + (element collab + (let* ((nl (children (current-node))) + (collabname (node-list-first nl)) + (affil (node-list-rest nl))) + (make sequence + (process-node-list collabname) + (if (node-list-empty? affil) + (empty-sosofo) + (let loop ((nl affil)) + (if (node-list-empty? nl) + (empty-sosofo) + (make sequence + (literal ", ") + (process-node-list (node-list-first nl)) + (loop (node-list-rest nl))))))))) + + (element (collab collabname) + (process-children)) + + (element confgroup + (let ((inline-children (node-list-filter-by-not-gi + (children (current-node)) + (list (normalize "address"))))) + (let loop ((nl inline-children)) + (if (node-list-empty? nl) + (empty-sosofo) + (make sequence + (process-node-list (node-list-first nl)) + (if (node-list-empty? (node-list-rest nl)) + (empty-sosofo) + (literal ", ")) + (loop (node-list-rest nl))))))) + + (element contractnum + (process-children)) + + (element contractsponsor + (process-children)) + + (element contrib + (process-children)) + + (element copyright + ;; Just print the year(s) + (let ((years (select-elements (children (current-node)) + (normalize "year")))) + (process-node-list years))) + + (element (copyright year) + (make sequence + (process-children) + (if (not (last-sibling? (current-node))) + (literal ", ") + (empty-sosofo)))) + + (element corpauthor + (make sequence + (process-children))) + + (element corpname + (make sequence + (process-children))) + + (element date + (make sequence + (process-children))) + + (element edition + (make sequence + (process-children))) + + (element editor + (make sequence + (literal (gentext-edited-by)) + (literal " ") + (literal (author-list-string)))) + + (element firstname + (make sequence + (process-children))) + + (element honorific + (make sequence + (process-children))) + + (element invpartnumber + (make sequence + (process-children))) + + (element isbn + (make sequence + (process-children))) + + (element issn + (make sequence + (process-children))) + + (element issuenum + (make sequence + (process-children))) + + (element lineage + (make sequence + (process-children))) + + (element orgname + (make sequence + (process-children))) + + (element othercredit + (literal (author-list-string))) + + (element othername + (make sequence + (process-children))) + + (element pagenums + (make sequence + (process-children))) + + (element productname + (make sequence + ($charseq$) +; this is actually a problem since "trade" is the default value for +; the class attribute. we can put this back in in DocBook 5.0, when +; class becomes #IMPLIED +; (if (equal? (attribute-string "class") (normalize "trade")) +; (literal "\trade-mark-sign;") +; (empty-sosofo)) + )) + + (element productnumber + (make sequence + (process-children))) + + (element pubdate + (make sequence + (process-children))) + + (element publisher + (let ((pubname (select-elements (children (current-node)) + (normalize "publishername"))) + (cities (select-elements (descendants (current-node)) + (normalize "city")))) + (make sequence + (process-node-list pubname) + (if (node-list-empty? cities) + (empty-sosofo) + (literal ", ")) + (process-node-list cities)))) + + (element publishername + (make sequence + (process-children))) + + (element (publisher address city) + (make sequence + (process-children) + (if (not (last-sibling? (current-node))) + (literal ", ") + (empty-sosofo)))) + + (element pubsnumber + (make sequence + (process-children))) + + (element releaseinfo + (make sequence + (process-children))) + + (element seriesvolnums + (make sequence + (process-children))) + + (element subtitle + (make sequence + font-posture: 'italic + (process-children))) + + (element surname + (make sequence + (process-children))) + + (element title + (make sequence + font-posture: 'italic + (process-children))) + + (element titleabbrev + (make sequence + (process-children))) + + (element volumenum + (make sequence + (process-children))) + + (element (bibliomixed title) + (make sequence + font-posture: 'italic + (process-children))) + + + (element (bibliomixed subtitle) + (make sequence + font-posture: 'italic + (process-children))) + + (element (biblioset title) + (let ((rel (case-fold-up + (inherited-attribute-string (normalize "relation"))))) + (cond + ((equal? rel "ARTICLE") (make sequence + (literal (gentext-start-quote)) + (process-children) + (literal (gentext-end-quote)))) + (else (make sequence + font-posture: 'italic + (process-children)))))) + + (element (bibliomset title) + (let ((rel (case-fold-up + (inherited-attribute-string (normalize "relation"))))) + (cond + ((equal? rel "ARTICLE") (make sequence + (literal (gentext-start-quote)) + (process-children) + (literal (gentext-end-quote)))) + (else (make sequence + font-posture: 'italic + (process-children)))))) +) + +(mode biblioentry-block-mode + (element abstract + (make display-group + (process-children))) + + (element (abstract title) + (make paragraph + font-weight: 'bold + (process-children))) + + (element address + ($linespecific-display$ %indent-address-lines% %number-address-lines%)) + + (element authorblurb + (make display-group + (process-children))) + + (element printhistory + (make display-group + (process-children))) + + (element revhistory + (make sequence + (make paragraph + font-weight: 'bold + (literal (gentext-element-name (current-node)))) + (make table + before-row-border: #f + (make table-column + column-number: 1 + width: (/ (- %body-width% (inherited-start-indent)) 3)) + (make table-column + column-number: 2 + width: (/ (- %body-width% (inherited-start-indent)) 3)) + (make table-column + column-number: 3 + width: (/ (- %body-width% (inherited-start-indent)) 3)) + (process-children)))) + + (element (revhistory revision) + (let ((revnumber (select-elements (descendants (current-node)) + (normalize "revnumber"))) + (revdate (select-elements (descendants (current-node)) + (normalize "date"))) + (revauthor (select-elements (descendants (current-node)) + (normalize "authorinitials"))) + (revremark (node-list-filter-by-gi + (descendants (current-node)) + (list (normalize "revremark") + (normalize "revdescription"))))) + (make sequence + (make table-row + (make table-cell + column-number: 1 + n-columns-spanned: 1 + n-rows-spanned: 1 + (if (not (node-list-empty? revnumber)) + (make paragraph + (make sequence + (literal (gentext-element-name-space (current-node))) + (process-node-list revnumber))) + (empty-sosofo))) + (make table-cell + column-number: 2 + n-columns-spanned: 1 + n-rows-spanned: 1 + (if (not (node-list-empty? revdate)) + (make paragraph + (process-node-list revdate)) + (empty-sosofo))) + (make table-cell + column-number: 3 + n-columns-spanned: 1 + n-rows-spanned: 1 + (if (not (node-list-empty? revauthor)) + (make paragraph + (make sequence + (literal (gentext-revised-by)) + (process-node-list revauthor))) + (empty-sosofo)))) + (make table-row + cell-after-row-border: #f + (make table-cell + column-number: 1 + n-columns-spanned: 3 + n-rows-spanned: 1 + (if (not (node-list-empty? revremark)) + (make paragraph + space-after: %block-sep% + (process-node-list revremark)) + (empty-sosofo))))))) + + (element (revision revnumber) (process-children-trim)) + (element (revision date) (process-children-trim)) + (element (revision authorinitials) (process-children-trim)) + (element (revision revremark) (process-children-trim)) + (element (revision revdescription) (process-children)) + + (element seriesinfo + ;; This is a nearly biblioentry recursively... + (let* ((expanded-children (expand-children + (children (current-node)) + (biblioentry-flatten-elements))) + (all-inline-children (if %biblioentry-in-entry-order% + (titlepage-gi-list-by-nodelist + (biblioentry-inline-elements) + expanded-children) + (titlepage-gi-list-by-elements + (biblioentry-inline-elements) + expanded-children))) + (block-children (if %biblioentry-in-entry-order% + (titlepage-gi-list-by-nodelist + (biblioentry-block-elements) + expanded-children) + (titlepage-gi-list-by-elements + (biblioentry-block-elements) + expanded-children))) + (inline-children all-inline-children)) + (make display-group + (make paragraph + space-before: %para-sep% + space-after: %para-sep% + start-indent: (+ (inherited-start-indent) 2pi) + first-line-start-indent: -2pi + + (let loop ((nl inline-children)) + (if (node-list-empty? nl) + (empty-sosofo) + (make sequence + (with-mode biblioentry-inline-mode + (process-node-list (node-list-first nl))) + (if (node-list-empty? (node-list-rest nl)) + (biblioentry-inline-end block-children) + (biblioentry-inline-sep (node-list-first nl) + (node-list-rest nl))) + (loop (node-list-rest nl)))))) + + (make display-group + start-indent: (+ (inherited-start-indent) 2pi) + (let loop ((nl block-children)) + (if (node-list-empty? nl) + (empty-sosofo) + (make sequence + (with-mode biblioentry-block-mode + (process-node-list (node-list-first nl))) + (if (node-list-empty? (node-list-rest nl)) + (biblioentry-block-end) + (biblioentry-block-sep (node-list-first nl) + (node-list-rest nl))) + (loop (node-list-rest nl))))))))) +) + +(element bibliomixed + (let* ((all-inline-children (children (current-node))) + (leading-abbrev (if (equal? (normalize "abbrev") + (gi (node-list-first + all-inline-children))) + (node-list-first all-inline-children) + (empty-node-list))) + (inline-children (if (node-list-empty? leading-abbrev) + all-inline-children + (node-list-rest all-inline-children))) + (has-leading-abbrev? (not (node-list-empty? leading-abbrev))) + (xreflabel (if (or has-leading-abbrev? biblio-number) + #f + (attribute-string (normalize "xreflabel"))))) + (make paragraph + space-before: %para-sep% + space-after: %para-sep% + start-indent: (+ (inherited-start-indent) 2pi) + first-line-start-indent: -2pi + + (if (or biblio-number xreflabel has-leading-abbrev?) + (make sequence + (literal "[") + + (if biblio-number + (literal (number->string (bibentry-number (current-node)))) + (empty-sosofo)) + + (if xreflabel + (literal xreflabel) + (empty-sosofo)) + + (if has-leading-abbrev? + (with-mode biblioentry-inline-mode + (process-node-list leading-abbrev)) + (empty-sosofo)) + + (literal "]\no-break-space;")) + (empty-sosofo)) + + (with-mode biblioentry-inline-mode + (process-children))))) + +;; ....................... BIBLIOGRAPHY ELEMENTS ....................... + +;; These are element construction rules for bibliography elements that +;; may occur outside of a BIBLIOENTRY or BIBLIOMIXED. + +(element bibliomisc (process-children)) +(element bibliomset (process-children)) +(element biblioset (process-children)) +(element bookbiblio (process-children)) + +(element street ($charseq$)) +(element pob ($charseq$)) +(element postcode ($charseq$)) +(element city ($charseq$)) +(element state ($charseq$)) +(element country ($charseq$)) +(element phone ($charseq$)) +(element fax ($charseq$)) +(element otheraddr ($charseq$)) +(element affiliation ($charseq$)) +(element shortaffil ($charseq$)) +(element jobtitle ($charseq$)) +(element orgdiv ($charseq$)) +(element artpagenums ($charseq$)) + +(element author + (make sequence + (literal (author-list-string)))) + +(element authorgroup (process-children)) + +(element collab (process-children)) +(element collabname ($charseq$)) +(element authorinitials ($charseq$)) +(element confgroup (process-children)) +(element confdates ($charseq$)) +(element conftitle ($charseq$)) +(element confnum ($charseq$)) +(element confsponsor ($charseq$)) +(element contractnum ($charseq$)) +(element contractsponsor ($charseq$)) + +(element copyright + (make paragraph + (make sequence + (literal (gentext-element-name (current-node))) + (literal "\no-break-space;") + (literal (dingbat "copyright")) + (literal "\no-break-space;") + (process-children-trim)))) + +(element year + (make sequence + (process-children) + (if (not (last-sibling? (current-node))) + (literal ", ") + (literal " ")))) + +(element holder ($charseq$)) + +(element corpauthor + (make sequence + (literal (author-list-string)))) + +(element corpname ($charseq$)) +(element date ($charseq$)) +(element edition ($charseq$)) +(element editor ($charseq$)) +(element isbn ($charseq$)) +(element issn ($charseq$)) +(element invpartnumber ($charseq$)) +(element issuenum ($charseq$)) + +(element legalnotice ($semiformal-object$)) +(element (legalnotice title) (empty-sosofo)) + +(element modespec (empty-sosofo)) + +(element orgname ($charseq$)) + +(element othercredit + (make sequence + (literal (author-list-string)))) + +(element pagenums ($charseq$)) +(element contrib ($charseq$)) + +(element firstname ($charseq$)) +(element honorific ($charseq$)) +(element lineage ($charseq$)) +(element othername ($charseq$)) +(element surname ($charseq$)) + +(element printhistory (empty-sosofo)) + +(element productname + (make sequence + ($charseq$) +; this is actually a problem since "trade" is the default value for +; the class attribute. we can put this back in in DocBook 5.0, when +; class becomes #IMPLIED +; (if (equal? (attribute-string "class") (normalize "trade")) +; (literal "\trade-mark-sign;") +; (empty-sosofo)) +)) + +(element productnumber ($charseq$)) +(element pubdate ($charseq$)) +(element publisher (process-children)) +(element publishername ($charseq$)) +(element pubsnumber ($charseq$)) +(element releaseinfo (empty-sosofo)) +(element revision ($charseq$)) +(element revnumber ($charseq$)) +(element revremark ($charseq$)) +(element revdescription ($block-container$)) +(element seriesvolnums ($charseq$)) +(element volumenum ($charseq$)) + +;; The (element (bookinfo revhistory)) construction rule is in dbinfo.dsl +;; It calls $book-revhistory$... +(define ($book-revhistory$) + (make sequence + (make paragraph + use: title-style + font-family-name: %title-font-family% + font-weight: 'bold + space-before: (* (HSIZE 3) %head-before-factor%) + space-after: (* (HSIZE 1) %head-before-factor%) + (literal (gentext-element-name (current-node)))) + (make table + before-row-border: #f + (process-children)))) + +(element (revhistory revision) + (let ((revnumber (select-elements (descendants (current-node)) + (normalize "revnumber"))) + (revdate (select-elements (descendants (current-node)) + (normalize "date"))) + (revauthor (select-elements (descendants (current-node)) + (normalize "authorinitials"))) + (revremark (node-list-filter-by-gi + (descendants (current-node)) + (list (normalize "revremark") + (normalize "revdescription"))))) + (make sequence + (make table-row + (make table-cell + column-number: 1 + n-columns-spanned: 1 + n-rows-spanned: 1 + (if (not (node-list-empty? revnumber)) + (make paragraph + (make sequence + (literal (gentext-element-name-space (current-node))) + (process-node-list revnumber))) + (empty-sosofo))) + (make table-cell + column-number: 2 + n-columns-spanned: 1 + n-rows-spanned: 1 + (if (not (node-list-empty? revdate)) + (make paragraph + (process-node-list revdate)) + (empty-sosofo))) + (make table-cell + column-number: 3 + n-columns-spanned: 1 + n-rows-spanned: 1 + (if (not (node-list-empty? revauthor)) + (make paragraph + (make sequence + (literal (gentext-revised-by)) + (process-node-list revauthor))) + (empty-sosofo)))) + (make table-row + cell-after-row-border: #f + (make table-cell + column-number: 1 + n-columns-spanned: 3 + n-rows-spanned: 1 + (if (not (node-list-empty? revremark)) + (make paragraph + space-after: %block-sep% + (process-node-list revremark)) + (empty-sosofo))))))) + +(element (revision revnumber) (process-children-trim)) +(element (revision date) (process-children-trim)) +(element (revision authorinitials) (process-children-trim)) +(element (revision revremark) (process-children-trim)) +(element (revision revdescription) (process-children)) |