mirror of
https://github.com/smarty-php/smarty.git
synced 2025-11-01 12:51:38 +01:00
998 lines
28 KiB
Plaintext
Executable File
998 lines
28 KiB
Plaintext
Executable File
;; $Id$
|
|
;;
|
|
;; This file is part of the Modular DocBook Stylesheet distribution.
|
|
;; See ../README or http://www.berkshire.net/~norm/dsssl/
|
|
;;
|
|
|
|
;; ......................... BIBLIOGRAPHY PARAMS .........................
|
|
|
|
;; these should be in dbparam...
|
|
(define %biblsep% ", ")
|
|
(define %biblend% ".")
|
|
(define bibltable #f)
|
|
|
|
(define (bibliography-table)
|
|
(let* ((bibliography (ancestor-member (current-node)
|
|
(list (normalize "bibliography"))))
|
|
(biblpi (dbhtml-value bibliography "bibliography-format")))
|
|
(and (or bibltable (equal? biblpi "table"))
|
|
(not (equal? biblpi "list")))))
|
|
|
|
(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)
|
|
(if (bibliography-table)
|
|
(make element gi: "TABLE"
|
|
attributes: '(("BORDER" "0"))
|
|
(process-node-list entries))
|
|
(process-node-list entries)))))
|
|
|
|
(element (book bibliography)
|
|
(let ((title (element-title-sosofo (current-node)))
|
|
(body (make sequence
|
|
(make element gi: "A"
|
|
attributes: (list (list "NAME" (element-id)))
|
|
(empty-sosofo))
|
|
($component-separator$)
|
|
($component-title$)
|
|
(bibliography-content))))
|
|
(html-document title body)))
|
|
|
|
(element (article bibliography)
|
|
(let ((title (element-title-sosofo (current-node)))
|
|
(body (make sequence
|
|
(make element gi: "A"
|
|
attributes: (list (list "NAME" (element-id)))
|
|
(empty-sosofo))
|
|
($component-separator$)
|
|
($component-title$)
|
|
(bibliography-content))))
|
|
(html-document title body)))
|
|
|
|
(element bibliography
|
|
;; A bibliography that's inside something else...or root
|
|
(if (sgml-root-element? (current-node))
|
|
(let ((title (element-title-sosofo (current-node)))
|
|
(body (make sequence
|
|
(make element gi: "A"
|
|
attributes: (list (list "NAME"
|
|
(element-id)))
|
|
(empty-sosofo))
|
|
($component-separator$)
|
|
($component-title$)
|
|
(bibliography-content))))
|
|
(html-document title body))
|
|
(let* ((sect (ancestor-member (current-node)
|
|
(append (section-element-list)
|
|
(component-element-list))))
|
|
(hlevel (+ (SECTLEVEL sect) 1))
|
|
(helem (string-append "H" (number->string (+ hlevel 1)))))
|
|
(make sequence
|
|
(make element gi: helem
|
|
(make element gi: "A"
|
|
attributes: (list (list "NAME" (element-id)))
|
|
(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 sequence
|
|
($section-separator$)
|
|
($section-title$)
|
|
(if (bibliography-table)
|
|
(make element gi: "TABLE"
|
|
attributes: '(("BORDER" "0"))
|
|
(process-node-list entries))
|
|
(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 element gi: "I"
|
|
(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))
|
|
|
|
(define (nontable-biblioentry
|
|
xreflabel leading-abbrev inline-children block-children)
|
|
(let ((has-leading-abbrev?
|
|
(not (or (node-list-empty? leading-abbrev) biblio-number))))
|
|
(make element gi: "DIV"
|
|
attributes: (list (list "CLASS" (gi)))
|
|
(make element gi: "A"
|
|
attributes: (list (list "NAME" (element-id)))
|
|
(empty-sosofo))
|
|
(make element gi: "P"
|
|
(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 "]")
|
|
(make entity-ref name: "nbsp"))
|
|
(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 element gi: "DIV"
|
|
attributes: '(("CLASS" "BIBLIOENTRYBLOCK")
|
|
("STYLE" "margin-left: 0.5in"))
|
|
(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)))))))))
|
|
|
|
(define (table-biblioentry
|
|
xreflabel leading-abbrev inline-children block-children)
|
|
(let ((has-leading-abbrev?
|
|
(not (or (node-list-empty? leading-abbrev) biblio-number))))
|
|
(make element gi: "TR"
|
|
(make element gi: "TD"
|
|
attributes: '(("ALIGN" "LEFT")
|
|
("VALIGN" "TOP")
|
|
("WIDTH" "10%"))
|
|
(make element gi: "A"
|
|
attributes: (list (list "NAME" (element-id)))
|
|
(empty-sosofo))
|
|
|
|
(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 "]"))
|
|
(make entity-ref name: "nbsp")))
|
|
|
|
(make element gi: "TD"
|
|
attributes: '(("ALIGN" "LEFT")
|
|
("VALIGN" "TOP")
|
|
("WIDTH" "90%"))
|
|
(make element gi: "P"
|
|
(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))))))
|
|
|
|
(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)))))
|
|
|
|
(if (node-list-empty? block-children)
|
|
(empty-sosofo)
|
|
(make element gi: "P"
|
|
;; get the table row spacing right
|
|
(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")))))
|
|
(if (bibliography-table)
|
|
(table-biblioentry xreflabel leading-abbrev inline-children block-children)
|
|
(nontable-biblioentry xreflabel leading-abbrev inline-children block-children))))
|
|
|
|
(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
|
|
(make element gi: "SPAN"
|
|
attributes: '(("CLASS" "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 element gi: "SPAN"
|
|
attributes: '(("CLASS" "EDITOR"))
|
|
(if (first-sibling?)
|
|
(make sequence
|
|
(literal (gentext-edited-by))
|
|
(literal " "))
|
|
(empty-sosofo))
|
|
(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
|
|
(make element gi: "SPAN"
|
|
attributes: '(("CLASS" "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"))
|
|
; (dingbat-sosofo "trademark")
|
|
; (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 element gi: "I"
|
|
(process-children)))
|
|
|
|
(element surname
|
|
(make sequence
|
|
(process-children)))
|
|
|
|
(element title
|
|
(make element gi: "I"
|
|
(process-children)))
|
|
|
|
(element titleabbrev
|
|
(make sequence
|
|
(process-children)))
|
|
|
|
(element volumenum
|
|
(make sequence
|
|
(process-children)))
|
|
|
|
(element (bibliomixed title)
|
|
(make element gi: "I"
|
|
(process-children)))
|
|
|
|
(element (bibliomixed subtitle)
|
|
(make element gi: "I"
|
|
(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 element gi: "I"
|
|
(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 element gi: "I"
|
|
(process-children))))))
|
|
)
|
|
|
|
(mode biblioentry-block-mode
|
|
(element abstract
|
|
(make element gi: "DIV"
|
|
attributes: (list (list "CLASS" (gi)))
|
|
(process-children)))
|
|
|
|
(element (abstract title)
|
|
(make element gi: "P"
|
|
(make element gi: "B"
|
|
(process-children))))
|
|
|
|
(element address
|
|
($linespecific-display$ %indent-address-lines% %number-address-lines%))
|
|
|
|
(element authorblurb
|
|
(make element gi: "DIV"
|
|
attributes: (list (list "CLASS" (gi)))
|
|
(process-children)))
|
|
|
|
(element printhistory
|
|
(make element gi: "DIV"
|
|
attributes: (list (list "CLASS" (gi)))
|
|
(process-children)))
|
|
|
|
|
|
(element revhistory
|
|
(make element gi: "DIV"
|
|
attributes: (list (list "CLASS" (gi)))
|
|
(make element gi: "TABLE"
|
|
attributes: (list
|
|
(list "WIDTH" ($table-width$))
|
|
(list "BORDER" "0"))
|
|
(make sequence
|
|
(make element gi: "TR"
|
|
(make element gi: "TH"
|
|
attributes: '(("ALIGN" "LEFT")
|
|
("VALIGN" "TOP")
|
|
("COLSPAN" "3"))
|
|
(make element gi: "B"
|
|
(literal (gentext-element-name
|
|
(gi (current-node)))))))
|
|
(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 element gi: "TR"
|
|
(make element gi: "TD"
|
|
attributes: (list
|
|
(list "ALIGN" "LEFT"))
|
|
(if (not (node-list-empty? revnumber))
|
|
(make sequence
|
|
(literal (gentext-element-name-space
|
|
(gi (current-node))))
|
|
(process-node-list revnumber))
|
|
(empty-sosofo)))
|
|
(make element gi: "TD"
|
|
attributes: (list
|
|
(list "ALIGN" "LEFT"))
|
|
(if (not (node-list-empty? revdate))
|
|
(process-node-list revdate)
|
|
(empty-sosofo)))
|
|
(make element gi: "TD"
|
|
attributes: (list
|
|
(list "ALIGN" "LEFT"))
|
|
(if (not (node-list-empty? revauthor))
|
|
(make sequence
|
|
(literal (gentext-revised-by))
|
|
(process-node-list revauthor))
|
|
(empty-sosofo))))
|
|
(make element gi: "TR"
|
|
(make element gi: "TD"
|
|
attributes: (list
|
|
(list "ALIGN" "LEFT")
|
|
(list "COLSPAN" "3"))
|
|
(if (not (node-list-empty? revremark))
|
|
(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 element gi: "DIV"
|
|
attributes: (list (list "CLASS" (gi)))
|
|
(make element gi: "P"
|
|
(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 element gi: "DIV"
|
|
attributes: (list (list "CLASS" (gi)))
|
|
(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)))))))))
|
|
)
|
|
|
|
(define (nontable-bibliomixed
|
|
xreflabel leading-abbrev inline-children)
|
|
(let* ((has-leading-abbrev? (not (node-list-empty? leading-abbrev))))
|
|
(make element gi: "DIV"
|
|
attributes: (list (list "CLASS" (gi)))
|
|
(make element gi: "A"
|
|
attributes: (list (list "NAME" (element-id)))
|
|
(empty-sosofo))
|
|
(make element gi: "P"
|
|
attributes: (list (list "CLASS" (gi)))
|
|
|
|
(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 "]")
|
|
(make entity-ref name: "nbsp"))
|
|
(empty-sosofo))
|
|
|
|
(with-mode biblioentry-inline-mode
|
|
(process-node-list inline-children))))))
|
|
|
|
(define (table-bibliomixed
|
|
xreflabel leading-abbrev inline-children)
|
|
(let* ((has-leading-abbrev? (not (node-list-empty? leading-abbrev))))
|
|
(make element gi: "TR"
|
|
(make element gi: "TD"
|
|
attributes: '(("ALIGN" "LEFT")
|
|
("VALIGN" "TOP")
|
|
("WIDTH" "10%"))
|
|
(make element gi: "A"
|
|
attributes: (list (list "NAME" (element-id)))
|
|
(empty-sosofo))
|
|
|
|
(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 "]"))
|
|
(make entity-ref name: "nbsp")))
|
|
|
|
(make element gi: "TD"
|
|
attributes: '(("ALIGN" "LEFT")
|
|
("VALIGN" "TOP")
|
|
("WIDTH" "90%"))
|
|
(with-mode biblioentry-inline-mode
|
|
(process-node-list inline-children))))))
|
|
|
|
(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")))))
|
|
(if (bibliography-table)
|
|
(table-bibliomixed xreflabel leading-abbrev inline-children)
|
|
(nontable-bibliomixed xreflabel leading-abbrev inline-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 sequence
|
|
(literal (gentext-element-name (gi (current-node))))
|
|
(make entity-ref name: "nbsp")
|
|
(dingbat-sosofo "copyright")
|
|
(make entity-ref name: "nbsp")
|
|
(process-children)))
|
|
|
|
(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"))
|
|
; (dingbat-sosofo "trademark")
|
|
; (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$))
|
|
|
|
(element (bookbiblio revhistory) ($book-revhistory$))
|
|
|
|
;; The (element (bookinfo revhistory)) construction rule is in dbinfo.dsl
|
|
;; It calls $book-revhistory$...
|
|
(define ($book-revhistory$)
|
|
(make element gi: "DIV"
|
|
attributes: (list
|
|
(list "CLASS" (gi)))
|
|
(make element gi: "TABLE"
|
|
attributes: (list
|
|
(list "WIDTH" ($table-width$))
|
|
(list "BORDER" "0"))
|
|
(make sequence
|
|
(make element gi: "TR"
|
|
(make element gi: "TH"
|
|
attributes: '(("ALIGN" "LEFT")
|
|
("VALIGN" "TOP")
|
|
("COLSPAN" "3"))
|
|
(make element gi: "B"
|
|
(literal (gentext-element-name
|
|
(gi (current-node)))))))
|
|
(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 element gi: "TR"
|
|
(make element gi: "TD"
|
|
attributes: (list
|
|
(list "ALIGN" "LEFT"))
|
|
(if (not (node-list-empty? revnumber))
|
|
(make sequence
|
|
(literal (gentext-element-name-space
|
|
(gi (current-node))))
|
|
(process-node-list revnumber))
|
|
(empty-sosofo)))
|
|
(make element gi: "TD"
|
|
attributes: (list
|
|
(list "ALIGN" "LEFT"))
|
|
(if (not (node-list-empty? revdate))
|
|
(process-node-list revdate)
|
|
(empty-sosofo)))
|
|
(make element gi: "TD"
|
|
attributes: (list
|
|
(list "ALIGN" "LEFT"))
|
|
(if (not (node-list-empty? revauthor))
|
|
(make sequence
|
|
(literal (gentext-revised-by))
|
|
(process-node-list revauthor))
|
|
(empty-sosofo))))
|
|
(make element gi: "TR"
|
|
(make element gi: "TD"
|
|
attributes: (list
|
|
(list "ALIGN" "LEFT")
|
|
(list "COLSPAN" "3"))
|
|
(if (not (node-list-empty? revremark))
|
|
(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))
|