summaryrefslogtreecommitdiff
path: root/doc/libgtop.dsl
diff options
context:
space:
mode:
Diffstat (limited to 'doc/libgtop.dsl')
-rwxr-xr-xdoc/libgtop.dsl1621
1 files changed, 3 insertions, 1618 deletions
diff --git a/doc/libgtop.dsl b/doc/libgtop.dsl
index 5947abc6..00deca64 100755
--- a/doc/libgtop.dsl
+++ b/doc/libgtop.dsl
@@ -1,1627 +1,12 @@
-<!doctype style-sheet PUBLIC "-//James Clark//DTD DSSSL Style Sheet//EN">
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;
-; dbtohtml.dsl - DSSSL style sheet for DocBook to HTML conversion (jadeware)
-;
-; Author : Mark Burton (markb@ordern.com)
-; Created On : Fri Jun 13 18:21:14 1997
-; Last Modified By: Mark Burton
-; Last Modified On: Thu Jul 10 21:58:53 1997
-;
-; $Id$
-;
-; Usage:
-;
-; jade -d dbtohtml.dsl -t sgml yourdoc.sgm
-;
-; Additional command line options:
-;
-; -V %no-split-output% sends all the output to one file
-; -V %no-make-index% disables index creation
-; -V %no-make-toc% disables TOC creation
-; -V %no-shade-screen% disables grey background to SCREEN regions
-; -V %show-comments% includes contents of COMMENT regions
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Contributors
-
-; Mark Eichin (eichin@cygnus.com)
-; Jason Molenda (crash@cygnus.co.jp)
-; Mark Galassi (rosalia@cygnus.com)
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Parameterisation
-
-; This style sheet can easily be parameterised by the use of a driver.
-; Here is a simple example that sets the output file basename and directory.
-; If the driver is foo.dsl, use: jade -d foo.dsl -t sgml yourdoc.sgm
-
-<!--
-
<!doctype style-sheet PUBLIC "-//James Clark//DTD DSSSL Style Sheet//EN" [
<!ENTITY dbtohtml.dsl SYSTEM "dbtohtml.dsl" CDATA DSSSL >
]>
-<style-specification id="foodbtohtml" use="dbtohtml">
+<style-specification id="libgtopdbtohtml" use="dbtohtml">
-(define %output-basename% "foo")
-(define %output-directory% "foodir")
+(define %output-basename% "libgtop")
+(define %output-directory% "libgtop")
</style-specification>
<external-specification id="dbtohtml" document="dbtohtml.dsl">
-
--->
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; declare non-standard functions
-
-(declare-flow-object-class element
- "UNREGISTERED::James Clark//Flow Object Class::element")
-(declare-flow-object-class empty-element
- "UNREGISTERED::James Clark//Flow Object Class::empty-element")
-(declare-flow-object-class document-type
- "UNREGISTERED::James Clark//Flow Object Class::document-type")
-(declare-flow-object-class processing-instruction
- "UNREGISTERED::James Clark//Flow Object Class::processing-instruction")
-(declare-flow-object-class entity
- "UNREGISTERED::James Clark//Flow Object Class::entity")
-(declare-flow-object-class entity-ref
- "UNREGISTERED::James Clark//Flow Object Class::entity-ref")
-(declare-flow-object-class formatting-instruction
- "UNREGISTERED::James Clark//Flow Object Class::formatting-instruction")
-
-(declare-characteristic preserve-sdata?
- "UNREGISTERED::James Clark//Characteristic::preserve-sdata?" #f)
-;;
-;; try setting this to true to see if ISO character entities get translated
-;;(declare-characteristic preserve-sdata?
-;; "UNREGISTERED::James Clark//Characteristic::preserve-sdata?" #t)
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; variables
-
-(define %no-split-output% #f)
-(define %no-make-toc% #f)
-(define %no-make-index% #f)
-(define %no-shade-screen% #f)
-(define %show-comments% #f)
-(define %shade-width% "100%") ; width or #f
-(define %email-element% "TT") ; font changing element or #f
-
-(define %html-public-id% "-//W3C//DTD HTML 3.2 Final//EN")
-(define %body-bgcolor% "white")
-(define %output-directory% ".")
-(define %output-basename% "libgtop")
-(define %output-suffix% ".shtml")
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; top-level sections
-
-(define (book-common)
- (cond (%no-split-output% ; everything goes in one file
- (make-file (string-append %output-basename% %output-suffix%)
- (make sequence
- (process-children)
- (cond ((not %no-make-index%)
- (make sequence
- (make-fat-rule)
- (make-index)))
- (#t (empty-sosofo))))))
- (#t ; split output into separate files
- (make sequence
- (make-file (string-append %output-basename% %output-suffix%)
- (make sequence
- (process-first-descendant "TITLE")
- (process-first-descendant "BOOKINFO")))
- (process-matching-children "PREFACE"
- "CHAPTER"
- "APPENDIX"
- "BIBLIOGRAPHY"
- "GLOSSARY"
- "ARTHEADER")
- (cond ((not %no-make-index%)
- (make-file (string-append %output-basename%
- "-INDEX"
- %output-suffix%)
- (make-index)))
- (#t (empty-sosofo)))))))
-
-(element BOOK (book-common))
-
-(define generator-version
- "Generated from Docbook 3.0 DTD, dbtohtml.dsl version $Revision$")
-
-(define (make-file file-name content)
- (make entity
- system-id: (string-append %output-directory% "/" file-name)
- (make sequence
- (make document-type
- name: "html"
- public-id: %html-public-id%)
- (make formatting-instruction data: "<")
- (make formatting-instruction data: "!--")
- (literal generator-version)
- (make formatting-instruction data: "-->
-")
- (make element
- gi: "html"
- (make sequence
- (make element
- gi: "head"
- (make sequence
- (make empty-element gi: "link"
- attributes: (list (list "rel" "stylesheet")
- (list "type" "text/css")
- (list "href" "/style/docbook.css")))
- (make empty-element gi: "meta"
- attributes: (list (list "name" "generator")
- (list "content" generator-version)))
- (make empty-element gi: "meta"
- attributes: (list (list "name" "ObjectType")
- (list "content" "book")))
- (make element
- gi: "title"
- (with-mode extract-title-text
- (process-first-descendant "title")))))
- (make element
- gi: "body"
- attributes: (list (list "bgcolor" %body-bgcolor%))
- (make sequence
- (make-anchor)
- content
- (make-footer)
- (make formatting-instruction data: "<")
- (make formatting-instruction data: "!--#include virtual=\"/includes/docbook_footer\"")
- (make formatting-instruction data: "-->"))))))))
-
-(define (make-footer)
- (let ((copyright (select-elements (descendants (book-node))
- '("COPYRIGHT" "BOOKINFO"))))
- (cond ((node-list-empty? copyright) (empty-sosofo))
- (#t (make sequence
- (make-fat-rule)
- (process-node-list copyright))))))
-
-(define (node-list-last nl)
- (node-list-ref nl (- (node-list-length nl) 1)))
-
-(define (make-nav-links parent-gi)
- (make sequence
- (make empty-element
- gi: "P")
- (make element
- gi: "A"
- attributes: (list (list "href" (link-file-name (ancestor parent-gi))))
- (literal "Up"))
- (literal " ")
- (if (absolute-last-sibling?)
- (empty-sosofo)
- (make element
- gi: "A"
- attributes: (list (list "href"
- (link-file-name (node-list-first
- (follow (current-node))))))
- (literal "Forward")))
- (literal " ")
- (if (absolute-first-sibling?)
- (empty-sosofo)
- (make element
- gi: "A"
- attributes: (list (list "href"
- (link-file-name (node-list-last
- (preced (current-node))))))
- (literal "Back")))
- (make empty-element
- gi: "P")))
-
-(define (make-pref-chap-app)
- (cond (%no-split-output%
- (make sequence
- (make-anchor)
- (make-fat-rule)
- (process-children)))
- (#t
- (make-file (link-file-name (current-node))
- (make sequence
- (make-nav-links "BOOK")
- (process-children)
- (make-nav-links "BOOK"))))))
-
-;;(element ARTICLE (process-children))
-(element ARTICLE (book-common))
-
-(element PREFACE (make-pref-chap-app))
-
-(element CHAPTER (make-pref-chap-app))
-
-(element APPENDIX (make-pref-chap-app))
-
-(element BEGINPAGE (make sequence
- (make empty-element gi: "P")
- (make empty-element gi: "HR")))
-
-(element BIBLIOGRAPHY (make-pref-chap-app))
-
-(element BOOKBIBLIO (process-children))
-
-(element BIBLIODIV (process-children))
-
-(element GLOSSARY (make-pref-chap-app))
-
-; (element GLOSSDIV (make-pref-chap-app))
-
-;;(element ARTHEADER (make-pref-chap-app))
-(element ARTHEADER
- (make sequence
- (cond ((not %no-make-toc%)
- (make sequence
- (make-fat-rule)
- (make element
- gi: "h2"
- attributes: (list "align" "center")
- (literal "Contents"))
- (make element
- gi: "ul"
- attributes: (list "align" "center")
- (with-mode make-toc-links
- (process-node-list (book-node))))))
- (#t (empty-sosofo)))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; sections
-
-(element SECT1
- (make sequence
- (make-anchor)
- (process-children)))
-
-(element SECT2
- (make sequence
- (make-anchor)
- (process-children)))
-
-(element SECT3
- (make sequence
- (make-anchor)
- (process-children)))
-
-(element SECT4
- (make sequence
- (make-anchor)
- (process-children)))
-
-(element SECT5
- (make sequence
- (make-anchor)
- (process-children)))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; titles
-
-(mode extract-title-text
- (element (TITLE)
- (process-children)))
-
-(mode extract-title-text
- (element (BRIDGEHEAD)
- (process-children)))
-
-(element (BOOK TITLE)
- (make element
- gi: "h1"
- attributes: (list "align" "center")
- (process-children)))
-
-(element (ARTICLE TITLE)
- (make element
- gi: "h1"
- attributes: (list "align" "center")
- (process-children)))
-
-(element (CHAPTER TITLE)
- (make sequence
- (make element
- gi: "h1"
- (make sequence
- (literal (chap-app-head-label "Chapter"))
- (process-children-trim)))))
-
-(element (PREFACE TITLE)
- (make element
- gi: "h1"
- (make sequence
- (literal "Preface: ")
- (process-children-trim))))
-
-(element (APPENDIX TITLE)
- (make element
- gi: "H1"
- (make sequence
- (literal (chap-app-head-label "Appendix"))
- (process-children-trim))))
-
-(element (BIBLIOGRAPHY TITLE)
- (make element gi: "H1"
- (make sequence
- (literal (chap-app-head-label "Bibliography"))
- (process-children-trim))))
-
-(element (BOOKBIBLIO TITLE)
- (make element gi: "H2"
- (make sequence
-;;; (literal (chap-app-head-label "Bibliography"))
- (process-children-trim))))
-
-(element (BIBLIODIV TITLE)
- (make element gi: "H2"
- (make sequence
- (process-children-trim))))
-
-(element (GLOSSARY TITLE)
- (make element gi: "H1"
- (make sequence
- (literal "Glossary")
-; (process-children-trim)
-)))
-
-(element (GLOSSDIV TITLE)
- (make element gi: "H2"
- (process-children-trim)))
-
-(element (ARTHEADER TITLE)
- (make element gi: "H1"
- (process-children-trim)))
-
-(element (ARTHEADER DATE)
- (make element gi: "P"))
-
-(element (ARTHEADER SUBTITLE)
- (make element
- gi: "H2"
- (make element
- gi: "i"
- (process-children-trim)
- )))
-
-(element (SECT1 TITLE) (make element gi: "H2"))
-
-(element (SECT2 TITLE) (make element gi: "H3"))
-
-(element (SECT3 TITLE) (make element gi: "H4"))
-
-(element (SECT4 TITLE) (make element gi: "H5"))
-
-(element (SECT5 TITLE) (make element gi: "H6"))
-
-(element (FORMALPARA TITLE) (make element gi: "H6"))
-
-(element BRIDGEHEAD (make element gi: "H4"))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; font changers
-
-(element EMPHASIS
- (make element gi: "EM"))
-
-(element TYPE
- (make element gi: "STRONG"
- (make element gi: "TT")))
-
-(element TOKEN
- (make element gi: "EM"
- (make element gi: "STRONG"
- (make element gi: "TT"))))
-
-(element REPLACEABLE (make element gi: "EM"))
-
-(element FIRSTTERM (make element gi: "EM"))
-
-(element APPLICATION (make element gi: "TT"))
-
-(element FILENAME (make element gi: "TT"))
-
-(element LITERAL (make element gi: "TT"))
-
-(element GUIMENU (make element gi: "TT"))
-(element GUIMENUITEM (make element gi: "TT"))
-
-(element ENVAR (make element gi: "TT"))
-
-(element SUBSCRIPT (make element gi: "SUB"))
-
-(element SUPERSCRIPT (make element gi: "SUP"))
-
-(element CITATION (process-children))
-(element CITETITLE (make element gi: "I"))
-
-(element COMMAND (make element gi: "TT"))
-
-(element STRUCTFIELD (make element gi: "TT"))
-
-(element OPTION (make element gi: "TT"))
-
-(element USERINPUT (make element gi: "TT"))
-
-(element COMPUTEROUTPUT (make element gi: "TT"))
-
-(element PROMPT (make element gi: "TT"))
-
-(element PRODUCTNAME (make element gi: "I"))
-
-(element SGMLTAG (make element gi: "TT"))
-(element CLASSNAME (make element gi: "TT"))
-(element SYMBOL (make element gi: "TT"))
-(element LITERALLAYOUT (make element gi: "PRE"))
-(element PROGRAMLISTING (make element gi: "PRE"))
-
-(element FOREIGNPHRASE (make element gi: "I"))
-
-;; I think that title abbreviations don't really have a place in HTML.
-;; The only place in which I can imagine them being useful is if the
-;; HTML secret title (the one that goes in your bookmarks and stuff)
-;; is derived from the DocBook title abbrev
-;;
-;; (element ABBREV (process-children-trim))
-(element ABBREV (empty-sosofo))
-(element TITLEABBREV (empty-sosofo))
-
-(element EMAIL
- (if %email-element%
- (make element
- gi: %email-element%
- (process-children-trim))
- (process-children-trim)))
-
-(element QUOTE
- (make sequence
- (make entity-ref
- name: "quot")
- (process-children-trim)
- (make entity-ref
- name: "quot")))
-
-(element ADDRESS
- (make element
- gi: "address"
- (make element
- gi: "em"
- (process-children-trim))))
-
-(element (ADDRESS CITY)
- (make sequence
- (make empty-element
- gi: "BR")
- (process-children-trim)))
-
-(element (ADDRESS COUNTRY)
- (make sequence
- (make empty-element
- gi: "BR")
- (process-children-trim)))
-
-(element (ADDRESS EMAIL)
- (make sequence
- (make empty-element
- gi: "BR")
- ;; Now throw some space between street address and the email
- ;; address. Sadly, the only way I know how to do it in HTML is to
- ;; throw in an empty paragraph tag.
- (make empty-element
- gi: "spacer"
- attributes: '(("align" "vertical") ("size" "10")))
- (if %email-element%
- (make element
- gi: %email-element%
- (process-children-trim))
- (process-children-trim))))
-
-(element (ADDRESS FAX)
- (make sequence
- (make empty-element
- gi: "BR")
- (process-children-trim)))
-
-(element (ADDRESS OTHERADDR)
- (make sequence
- (make empty-element
- gi: "BR")
- (process-children-trim)))
-
-(element (ADDRESS POB)
- (make sequence
- (make empty-element
- gi: "BR")
- (process-children-trim)))
-
-(element (ADDRESS PHONE)
- (make sequence
- (make empty-element
- gi: "BR")
- (process-children-trim)))
-
-(element (ADDRESS POSTCODE)
- (process-children-trim))
-
-(element (ADDRESS STATE)
- (process-children-trim))
-
-(element (ADDRESS STREET)
- (make sequence
- (make empty-element
- gi: "BR")
- (process-children-trim)))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; paragraph like things
-
-(element CAUTION (make-special-para))
-
-(element IMPORTANT (make-special-para))
-
-(element WARNING (make-special-para))
-
-(element NOTE (make-special-para))
-
-(element TIP (make-special-para))
-
-(element EXAMPLE (make-special-para))
-
-(element INFORMALEXAMPLE
- (make element
- gi: "BLOCKQUOTE"))
-
-(element COMMENT
- (cond (%show-comments%
- (make element
- gi: "FONT"
- attributes: '(("color" "red"))
- (make-special-para)))
- (#t (empty-sosofo))))
-
-(element PARA
- (make sequence
- (make empty-element
- gi: "P")
- (with-mode footnote-ref
- (process-children))
- (with-mode footnote-def
- (process-matching-children "FOOTNOTE"))))
-
-(element BLOCKQUOTE (make element gi: "BLOCKQUOTE"))
-
-(element SCREEN
- (let ((gubbins (make element
- gi: "PRE"
- (process-children))))
- (make sequence
- (make empty-element
- gi: "P")
- (if %no-shade-screen%
- gubbins
- (make element
- gi: "TABLE"
- attributes: (append (list '("border" "0")
- '("bgcolor" "#E0E0E0"))
- (if %shade-width%
- (list (list "width" %shade-width%))
- '()))
- (make element
- gi: "TR"
- (make element
- gi: "TD"
- gubbins)))))))
-
-(element FORMALPARA (process-children))
-
-(element PHRASE (maybe-bold-children))
-
-(mode footnote-ref
- (element FOOTNOTE
- (make sequence
- (literal "[")
- (literal (format-number (element-number (current-node)) "1"))
- (literal "]"))))
-
-(mode footnote-def
- (element FOOTNOTE
- (make element
- gi: "BLOCKQUOTE"
- (make sequence
- (literal "[")
- (literal (format-number (element-number (current-node)) "1"))
- (literal "]")
- (process-children)))))
-
-(element (CAUTION TITLE)
- (make element
- gi: "H5"))
-
-(element (IMPORTANT TITLE)
- (make element
- gi: "H5"))
-
-(element (WARNING TITLE)
- (make element
- gi: "H5"))
-
-(element (NOTE TITLE)
- (make element
- gi: "H5"))
-
-(element (TIP TITLE)
- (make element
- gi: "H5"))
-
-(element (EXAMPLE TITLE)
- (make element
- gi: "H5"))
-
-(element (BIBLIOENTRY TITLE)
- (make element
- gi: "H3"))
-
-(element (BIBLIOENTRY PAGENUMS)
- (make sequence
- (literal "Pages: ")
- (make element gi: "I")))
-
-(element (BIBLIOENTRY DATE)
- (make sequence
- (literal " Date: ")
- (make element gi: "I")))
-
-(element (BIBLIOENTRY VOLUMENUM)
- (make sequence
- (literal " Volume: ")
- (make element gi: "I")))
-
-(element (BIBLIOENTRY SERIESINFO) (process-children))
-
-(element (BIBLIOENTRY SERIESINFO TITLE)
- (make element gi: "H4"))
-
-(element (BIBLIOENTRY BIBLIOMISC)
- (make sequence
- (literal " other: ")
- (process-children)))
-
-; the para inside does the work, here...
-(element (BIBLIOENTRY ABSTRACT) (process-children))
-
-;; an article'sabstract is centered text
-(element ABSTRACT
- (make sequence
- (make empty-element gi: "HR")
- (make element
- gi: "H2"
- (literal "Abstract"))
- (make element
- gi: "DIV"
- attributes: (list (list "align" "left"))
- (make element gi: "BLOCKQUOTE"
- (process-children)))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; lists
-
-(element ITEMIZEDLIST
- (make sequence
- (make empty-element
- gi: "P")
- (make element
- gi: "UL")))
-
-(element ORDEREDLIST
- (make sequence
- (make empty-element
- gi: "P")
- (make element
- gi: "OL")))
-
-(element PROCEDURE
- (make sequence
- (make empty-element
- gi: "P")
- (make element
- gi: "OL")))
-
-(element SIMPLELIST
- (make sequence
- (make empty-element
- gi: "P")
- (make element
- gi: "UL")))
-
-(element (ITEMIZEDLIST LISTITEM)
- (make sequence
- (make empty-element
- gi: "LI")
- (process-children)
- (make empty-element
- gi: "P")))
-
-(element (ORDEREDLIST LISTITEM)
- (make sequence
- (make empty-element
- gi: "LI")
- (process-children)
- (make empty-element
- gi: "P")))
-
-(element STEP
- (make sequence
- (make empty-element
- gi: "LI")
- (process-children)
- (make empty-element
- gi: "P")))
-
-(element (SIMPLELIST MEMBER)
- (make sequence
- (make empty-element
- gi: "LI")
- (process-children)))
-
-(element VARIABLELIST
- (make sequence
- (make empty-element
- gi: "P")
- (make element
- gi: "DL")))
-
-(element VARLISTENTRY
- (make sequence
- (make empty-element
- gi: "DT")
- (process-children)))
-
-(element (VARLISTENTRY LISTITEM)
- (make sequence
- (make empty-element
- gi: "DD")
- (process-children)
- (make empty-element
- gi: "P")))
-
-(element TERM (maybe-bold-children))
-
-(element GLOSSDIV
- (make sequence
- (make empty-element
- gi: "P")
- (make element
- gi: "DL")))
-
-; (define (gloss-entry-name indexterm)
-; (string-append "gloss." (format-number (element-number indexterm) "1")))
-(define (gloss-entry-name glossterm)
- (string-append "gloss." (data glossterm)))
-
-(element GLOSSENTRY
- (process-children))
-
-(element (GLOSSENTRY GLOSSTERM)
- (make sequence
- (make empty-element
- gi: "DT")
- (make empty-element
- gi: "A"
- attributes: (list (list "name" (gloss-entry-name (current-node)))))
- (process-children)))
-
-
-(element (GLOSSENTRY GLOSSDEF)
- (make sequence
- (make empty-element
- gi: "DD")
- (process-children)
- (make empty-element
- gi: "P")))
-
-(element (GLOSSENTRY GLOSSSEE)
- (make sequence
- (make empty-element
- gi: "DD")
- (literal "See ")
- (make element
- gi: "A"
- attributes: (list (list "href"
- (string-append "#"
- (gloss-entry-name (current-node)))
- )))
- (make empty-element
- gi: "P")))
-
-; (element GLOSSTERM (maybe-bold-children))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; index
-
-(define (index-entry-name indexterm)
- (string-append "index." (format-number (element-number indexterm) "1")))
-
-(element INDEXTERM
- (make sequence
- (make element
- gi: "A"
- attributes: (list (list "name" (index-entry-name (current-node))))
- (literal ""))
- (empty-sosofo)))
-
-; DIY string-ci>?
-
-(define (string-ci>? s1 s2)
- (let ((len1 (string-length s1))
- (len2 (string-length s2)))
- (let loop ((i 0))
- (cond ((= i len1) #f)
- ((= i len2) #t)
- (#t (let ((c1 (index-char-val (string-ref s1 i)))
- (c2 (index-char-val (string-ref s2 i))))
- (cond
- ((= c1 c2) (loop (+ i 1)))
- (#t (> c1 c2)))))))))
-
-(define (index-char-val ch)
- (case ch
- ((#\A #\a) 65)
- ((#\B #\b) 66)
- ((#\C #\c) 67)
- ((#\D #\d) 68)
- ((#\E #\e) 69)
- ((#\F #\f) 70)
- ((#\G #\g) 71)
- ((#\H #\h) 72)
- ((#\I #\i) 73)
- ((#\J #\j) 74)
- ((#\K #\k) 75)
- ((#\L #\l) 76)
- ((#\M #\m) 77)
- ((#\N #\n) 78)
- ((#\O #\o) 79)
- ((#\P #\p) 80)
- ((#\Q #\q) 81)
- ((#\R #\r) 82)
- ((#\S #\s) 83)
- ((#\T #\t) 84)
- ((#\U #\u) 85)
- ((#\V #\v) 86)
- ((#\W #\w) 87)
- ((#\X #\x) 88)
- ((#\Y #\y) 89)
- ((#\Z #\z) 90)
-
- ((#\ ) 32)
-
- ((#\0) 48)
- ((#\1) 49)
- ((#\2) 50)
- ((#\3) 51)
- ((#\4) 52)
- ((#\5) 53)
- ((#\6) 54)
- ((#\7) 55)
- ((#\8) 56)
- ((#\9) 57)
-
- ; laziness precludes me from filling this out further
- (else 0)))
-
-(define (string->number-list s)
- (let loop ((i (- (string-length s) 1))
- (l '()))
- (if (< i 0)
- l
- (loop (- i 1) (cons (index-char-val (string-ref s i)) l)))))
-
-(define (number-list>? l1 l2)
- (cond ((null? l1) #f)
- ((null? l2) #t)
- ((= (car l1) (car l2))
- (number-list>? (cdr l1) (cdr l2)))
- (#t (> (car l1) (car l2)))))
-
-; return the string data for a given index entry
-
-(define (get-index-entry-data entry)
- (let ((primary (select-elements (descendants entry) "PRIMARY"))
- (secondary (select-elements (descendants entry) "SECONDARY")))
- (if (node-list-empty? secondary)
- (data primary)
- (string-append (data primary) " - " (data secondary)))))
-
-(define (make-index-entry entry)
- (let ((text (get-index-entry-data entry)))
- (cons text
- (make sequence
- (make empty-element
- gi: "LI")
- (make element
- gi: "A"
- attributes: (list (list "href"
- (string-append (link-file-name
- entry)
- "#"
- (index-entry-name
- entry))))
- (literal text))))))
-
-(define (build-index nl)
- (let loop ((result '())
- (nl nl))
- (if (node-list-empty? nl)
- result
- (loop (cons (make-index-entry (node-list-first nl)) result)
- (node-list-rest nl)))))
-
-(define (sort-index il)
- (letrec ((list-head (lambda (l n)
- (if (> n 0)
- (cons (car l) (list-head (cdr l) (- n 1)))
- '())))
- (merge (lambda (il1 il2)
- (cond ((null? il1) il2)
- ((null? il2) il1)
- ((string-ci>? (car (car il1)) (car (car il2)))
- (cons (car il2) (merge il1 (cdr il2))))
- (#t
- (cons (car il1) (merge (cdr il1) il2)))))))
- (let* ((ll (length il))
- (ldiv2 (quotient ll 2)))
- (if (> 2 ll)
- il
- (merge (sort-index (list-head il ldiv2))
- (sort-index (list-tail il ldiv2)))))))
-
-(define (output-index il)
- (let extract-and-append ((il il)
- (result (empty-sosofo)))
- (if (null? il)
- result
- (extract-and-append (cdr il) (sosofo-append result (cdr (car il)))))))
-
-(define (make-index)
- (make sequence
- (make element
- gi: "A"
- attributes: (list (list "name" "INDEXTOP"))
- (literal ""))
- (make element
- gi: "H1"
- (literal "Index"))
- (make element
- gi: "UL"
- (output-index
- (sort-index
- (build-index (select-elements (descendants (current-node))
- "INDEXTERM")))))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; links & cross-references
-
-(define (link-file-name target)
- (cond (%no-split-output% "")
- (#t
- (string-append
- %output-basename%
- (cond ((equal? (gi target) "CHAPTER")
- (string-append
- "-"
- (format-number (child-number target) "1")))
- ((ancestor-child-number "CHAPTER" target)
- (string-append
- "-"
- (format-number (ancestor-child-number "CHAPTER" target) "1")))
- ((equal? (gi target) "APPENDIX")
- (string-append
- "-"
- (format-number (child-number target) "A")))
- ((ancestor-child-number "APPENDIX" target)
- (string-append
- "-"
- (format-number (ancestor-child-number "APPENDIX" target) "A")))
- (#t ""))
- %output-suffix%))))
-
-(element ANCHOR
- (make-anchor))
-
-(element LINK
- (let* ((target (element-with-id (attribute-string "linkend")
- (book-node)))
- (target-file-name (link-file-name target))
- (endterm (attribute-string "endterm"))
- (target-title-sosofo (if endterm
- (with-mode extract-xref-text
- (process-node-list
- (element-with-id endterm
- (book-node))))
- (process-children))))
- (make element
- gi: "A"
- attributes: (list
- (list "href"
- (string-append
- target-file-name
- "#"
- (attribute-string "linkend"))))
- target-title-sosofo)))
-(element ULINK
- (make element
- gi: "A"
- attributes: (list
- (list "href" (attribute-string "url")))))
-
-(element XREF
- (let* ((target (element-with-id (attribute-string "LINKEND")
- (book-node)))
- (target-file-name (link-file-name target)))
- (make element
- gi: "A"
- attributes: (list
- (list "href"
- (string-append target-file-name
- "#"
- (attribute-string "linkend"))))
- (with-mode extract-xref-text
- (process-node-list target)))))
-
-(mode extract-xref-text
- (default
- (let ((title-sosofo (with-mode extract-title-text
- (process-first-descendant "TITLE"))))
- (if (sosofo? title-sosofo)
- title-sosofo
- (literal (string-append "Reference to " (gi)))))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; figures
-
-(element FIGURE
- (make sequence
- (make empty-element
- gi: "P")
- (make-anchor)
- (process-children)
- (make empty-element
- gi: "P")))
-
-(element (FIGURE TITLE)
- (make sequence
- (make element
- gi: "B")
- (make empty-element
- gi: "P")))
-
-(element GRAPHIC
- (let ((img
- (make sequence
- (make empty-element
- gi: "P")
- (make empty-element
- gi: "IMG"
- attributes: (list
- (list "src"
- (string-append (attribute-string "fileref")
- ".gif")))))))
- (if (equal?
- (attribute-string "align")
- "CENTER")
- (make element
- gi: "CENTER"
- img)
- img)))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; tables
-
-(element TABLE
- (make sequence
- (make empty-element
- gi: "P")
- (make element
- gi: "TABLE"
- attributes: (if (equal?
- (attribute-string "frame")
- "ALL")
- '(("border" "2") ("cellpadding" "2"))
- '()))
- (make empty-element
- gi: "P")))
-
-(element (TABLE TITLE)
- (make element
- gi: "H4"
- (make sequence
- (literal "Table: ")
- (process-children-trim))))
-
-(element INFORMALTABLE
- (make sequence
- (make empty-element
- gi: "P")
- (make element
- gi: "TABLE"
- attributes: (if (equal?
- (attribute-string "frame")
- "ALL")
- '(("border" "2") ("cellpadding" "2"))
- '()))
- (make empty-element
- gi: "P")))
-
-(element TGROUP (process-children))
-
-(element THEAD (process-children))
-
-(element (THEAD ROW)
- (make sequence
- (make empty-element
- gi: "TR")
- (process-children)))
-
-(element (THEAD ROW ENTRY)
- (make sequence
- (make empty-element
- gi: "TD")
- (make element
- gi: "B"
- (process-children))))
-
-(element TBODY (process-children))
-
-(element (TBODY ROW)
- (make sequence
- (make empty-element
- gi: "TR")
- (process-children)))
-
-
-(element (TBODY ROW ENTRY)
- (make sequence
- (make empty-element
- gi: "TD")
- (process-children)))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; book info
-
-(element BOOKINFO
- (make sequence
- (make element
- gi: "CENTER"
- (process-children))
- (cond ((not %no-make-toc%)
- (make sequence
- (make-fat-rule)
- (make element
- gi: "H2"
- (literal "Contents"))
- (make element
- gi: "ul"
- (with-mode make-toc-links
- (process-node-list (book-node))))))
- (#t (empty-sosofo)))))
-
-(element (BOOKINFO DATE)
- (make element gi: "P"))
-
-(element (BOOKINFO TITLE)
- (make element gi: "H1"))
-
-(element (BOOKINFO SUBTITLE)
- (make element
- gi: "H2"
- (make element
- gi: "i"
- (process-children-trim)
- )))
-
-(element AUTHORGROUP
- (let ((reducer (lambda (sofar new)
- (sosofo-append sofar (make element
- gi: "H2"
- (process-node-list new))))))
- (make sequence
- (node-list-reduce (select-elements (descendants (current-node)) "AUTHOR")
- reducer
- (empty-sosofo))
- (node-list-reduce (select-elements (descendants (current-node)) "EDITOR")
- reducer
- (empty-sosofo))
- (node-list-reduce (select-elements (descendants (current-node)) "CORPAUTHOR")
- reducer
- (empty-sosofo)))))
-
-;; I make a new left-aligned DIV sandwiched between HRs for the author
-;; blurb.
-(element AUTHORBLURB
- (make sequence
- (make empty-element gi: "HR")
- (make element
- gi: "DIV"
- attributes: '(("align" "left"))
- (make element
- gi: "h4"
- attributes: '(("align" "left"))
- (literal "Author blurb for ")
- (make element
- gi: "i"
- (process-matching-children "TITLE")
- (literal ":")))
- (process-matching-children "FORMALPARA" "PARA" "SIMPARA"))
- (make empty-element gi: "HR")))
-
-(element (AUTHORBLURB TITLE)
- (make element gi: "B"))
-
-(element CORPNAME
- (make element gi: "H2"))
-
-(element (BIBLIOENTRY AUTHORGROUP)
- (let ((reducer (lambda (sofar new)
- (sosofo-append sofar (make element
- gi: "H3"
- (process-node-list new))))))
- (make sequence
- (node-list-reduce (select-elements (descendants (current-node)) "AUTHOR")
- reducer
- (empty-sosofo))
- (node-list-reduce (select-elements (descendants (current-node)) "EDITOR")
- reducer
- (empty-sosofo))
- (node-list-reduce (select-elements (descendants (current-node)) "CORPAUTHOR")
- reducer
- (empty-sosofo)))))
-
-(element COPYRIGHT
- (make element
- gi: "H4"
- (make sequence
- (make entity-ref
- name: "copy")
- (process-matching-children "HOLDER")
- (process-matching-children "YEAR"))))
-
-(element HOLDER
- (make sequence
- (literal " ")
- (process-children-trim)))
-
-(element YEAR
- (make sequence
- (literal " ")
- (process-children-trim)))
-
-(element CORPAUTHOR
- (process-children-trim))
-
-(element AUTHOR
- (process-children-trim))
-
-(element EDITOR
- (process-children-trim))
-
-(element CONFGROUP
- (process-children-trim))
-
-(element CONFTITLE
- (make sequence
- (make empty-element
- gi: "BR")
- (make element gi: "I" (process-children))))
-
-(element CONFDATES
- (make sequence
- (make empty-element
- gi: "BR")
- (process-children)))
-
-(element HONORIFIC
- (make sequence
- (process-children-trim)
- (literal " ")))
-
-(element FIRSTNAME
- (make sequence
- (process-children-trim)
- (literal " ")))
-
-(element OTHERNAME
- (make sequence
- (process-children-trim)
- (literal " ")))
-
-(element SURNAME
- (make sequence
- (process-children-trim)
- (literal " ")))
-
-(element LINEAGE
- (make sequence
- (process-children-trim)
- (literal " ")))
-
-(element TRADEMARK (process-children))
-
-(element PUBLISHERNAME (process-children))
-
-(element BIBLIOENTRY (process-children))
-
-(element ACRONYM (process-children))
-
-(element RELEASEINFO
- (make sequence
- (make empty-element
- gi: "BR")
- (make element gi: "B")))
-
-(element AFFILIATION
- (make sequence
- (make element
- gi: "I")))
-
-(element ORGNAME
- (make sequence
- (make empty-element
- gi: "BR")
- (process-children)))
-
-;;(element ORGNAME
-;; (process-children))
-
-(element JOBTITLE
- (make sequence
- (make empty-element
- gi: "BR")
- (process-children)))
-
-(element ORGDIV
- (make sequence
- (make empty-element
- gi: "BR")
- (process-children)))
-
-(element PUBLISHER
- (make sequence
- (make empty-element
- gi: "BR")
- (process-children)))
-
-(element ISBN
- (make sequence
- (make empty-element
- gi: "BR")
- (process-children)))
-
-(element PUBDATE
- (make sequence
- (make empty-element
- gi: "BR")
- (process-children)))
-
-(element REVHISTORY
- (empty-sosofo))
-
-(element LEGALNOTICE
- (make sequence
- (make element
- gi: "H4"
- attributes: '(("align" "left"))
- (literal "Legal Notice: "))
- (make element
- gi: "DIV"
- attributes: '(("align" "left")))))
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Synopses for command line, API functions and so forth
-;;(element FUNCSYNOPSIS
-;; (process-children))
-
-(element FUNCSYNOPSIS
- (make sequence
- (make empty-element gi: "P") ; go to a new line
- ;; just in case there is some synopsisinfo, like #include directives
- (process-matching-children "FUNCSYNOPSISINFO")
- (make empty-element gi: "P") ; go to a new line
- (process-matching-children "FUNCDEF") ; this gives the function name
- (literal " (")
- (process-matching-children "PARAMDEF") ; this gives the function arguments
- (literal ")")
- ))
-
-(element FUNCDEF
- (make element gi: "TT"))
-
-(element FUNCTION
- (make element gi: "B"))
-
-(element STRUCTNAME
- (make element gi: "B"))
-
-(element FUNCSYNOPSISINFO
- (make element
- gi: "PRE"))
-
-(element PARAMDEF
- (make element
- gi: "TT"))
-
-(element PARAMETER
- (make element
- gi: "I"))
-
-(element FUNCPROTOTYPE
- (make element
- gi: "PRE"))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; TOC
-
-(element LOF (empty-sosofo))
-
-(element LOT (empty-sosofo))
-
-(element TOC (empty-sosofo))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; DIY TOC
-
-(mode make-toc-links
- (element (BOOK)
- (sosofo-append
- (process-children)
- (cond ((not %no-make-index%)
- (make sequence
- (make empty-element
- gi: "LI")
- (make element
- gi: "A"
- attributes: (list (list "href"
- (cond (%no-split-output% "#INDEXTOP")
- (#t
- (string-append %output-basename%
- "-INDEX"
- %output-suffix%
- "#INDEXTOP")))))
- (literal "Index"))))
- (#t (empty-sosofo)))))
- (element (CHAPTER)
- (make-chap-or-app-toc-links))
- (element (APPENDIX)
- (make-chap-or-app-toc-links))
- (element (SECT1)
- (make sequence
- (make empty-element
- gi: "LI")
- (let ((title-text (with-mode extract-title-text
- (process-first-descendant "TITLE"))))
- (if (id)
- (make element
- gi: "A"
- attributes: (list (list "href" (string-append (link-file-name (current-node))
- "#"
- (id))))
- title-text)
- title-text))))
- (default
- (empty-sosofo)))
-
-(define (make-chap-or-app-toc-links)
- (make sequence
- (make empty-element
- gi: "LI")
- (let ((title-text
- (make sequence
- (literal (if (equal? (gi) "CHAPTER")
- (string-append "Chapter "
- (format-number
- (element-number (current-node))
- "1")
- " - ")
- (string-append "Appendix "
- (format-number
- (element-number (current-node))
- "A")
- " - ")))
- (with-mode extract-title-text
- (process-first-descendant "TITLE")))))
- (if (id)
- (make element
- gi: "A"
- attributes: (list (list "href" (string-append (link-file-name (current-node))
- "#"
- (id))))
- title-text)
- title-text))
- (make element
- gi: "UL"
- (with-mode make-toc-links
- (process-matching-children "SECT1")))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; make the unimplemented bits stand out
-
-(default
- (make element
- gi: "FONT"
- attributes: '(("color" "red"))
- (make sequence
- (literal (string-append "<" (gi) ">"))
- (process-children)
- (literal (string-append "</" (gi) ">")))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; standard subroutines
-
-(define (node-list-reduce nl combine init)
- (if (node-list-empty? nl)
- init
- (node-list-reduce (node-list-rest nl)
- combine
- (combine init (node-list-first nl)))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; various homebrew subroutines
-
-(define (book-node)
- (cond ((equal? (gi) "BOOK") (current-node))
- (#t (let ((book-root (ancestor "BOOK")))
- (if (node-list-empty? book-root)
- (cond ((equal? (gi) "CHAPTER") (current-node))
- (#t (ancestor "CHAPTER")))
- book-root)))))
-
-(define (make-fat-rule)
- (make sequence
- (make empty-element gi: "P")
- (make empty-element gi: "HR")))
-
-(define (chap-app-head-label chap-or-app)
- (let ((label
- (attribute-string "label" (ancestor chap-or-app))))
- (string-append
- chap-or-app
- " "
- (if label
- (if (equal? label "auto")
- (format-number
- (element-number (ancestor chap-or-app))
- (if (equal? chap-or-app "Chapter") "1" "A"))
- label)
- (format-number
- (element-number (ancestor chap-or-app))
- (if (equal? chap-or-app "Chapter") "1" "A")))
- ". ")))
-
-(define (make-anchor)
- (if (id)
- (make element
- gi: "A"
- attributes: (list (list "name" (id)))
- (literal ""))
- (empty-sosofo)))
-
-(define (make-special-para)
- (make sequence
- (make empty-element
- gi: "P")
- (make element
- gi: "B"
- (literal (string-append (gi) ":")))
- (make element
- gi: "BLOCKQUOTE"
- (process-children))))
-
-(define (maybe-bold-children)
- (cond ((equal? (attribute-string "role")
- "bold")
- (make element
- gi: "B"
- (process-children-trim)))
- (#t (process-children-trim))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; the end