diff --git a/share/sgml/catalog b/share/sgml/catalog index 6b82633e6d..313eea9b84 100644 --- a/share/sgml/catalog +++ b/share/sgml/catalog @@ -23,6 +23,24 @@ PUBLIC "-//FreeBSD//DOCUMENT DocBook Stylesheet//EN" PUBLIC "-//FreeBSD//DOCUMENT DocBook Language Neutral Stylesheet//EN" "freebsd.dsl" +PUBLIC "-//FreeBSD//DOCUMENT DocBook HTML Stylesheet//EN" + "freebsd-html.dsl" + +PUBLIC "-//FreeBSD//DOCUMENT DocBook HTML Lanugage Neutral Stylesheet//EN" + "freebsd-html.dsl" + +PUBLIC "-//FreeBSD//DOCUMENT DocBook Print Stylesheet//EN" + "freebsd-print.dsl" + +PUBLIC "-//FreeBSD//DOCUMENT DocBook Print Lanugage Neutral Stylesheet//EN" + "freebsd-print.dsl" + +PUBLIC "-//FreeBSD//DOCUMENT DocBook Common Stylesheet//EN" + "freebsd-common.dsl" + +PUBLIC "-//FreeBSD//DOCUMENT DocBook Common Lanugage Neutral Stylesheet//EN" + "freebsd-common.dsl" + PUBLIC "-//FreeBSD//ENTITIES DocBook FreeBSD Articles Entity Set//EN" "articles.ent" diff --git a/share/sgml/default.dsl b/share/sgml/default.dsl index 8edeed51a2..bd71d2f0d3 100644 --- a/share/sgml/default.dsl +++ b/share/sgml/default.dsl @@ -1,14 +1,14 @@ -<!-- $FreeBSD: doc/share/sgml/freebsd.dsl,v 1.16 2000/07/25 18:23:45 ben Exp $ --> +<!-- $FreeBSD$ --> <!DOCTYPE style-sheet PUBLIC "-//James Clark//DTD DSSSL Style Sheet//EN" [ <!ENTITY freebsd.dsl PUBLIC "-//FreeBSD//DOCUMENT DocBook Stylesheet//EN" CDATA DSSSL> ]> <style-sheet> - <style-specification use="docbook"> + <style-specification use="freebsd"> <style-specification-body> </style-specification-body> </style-specification> - <external-specification id="docbook" document="freebsd.dsl"> + <external-specification id="freebsd" document="freebsd.dsl"> </style-sheet> diff --git a/share/sgml/freebsd-common.dsl b/share/sgml/freebsd-common.dsl new file mode 100644 index 0000000000..0222459280 --- /dev/null +++ b/share/sgml/freebsd-common.dsl @@ -0,0 +1,331 @@ +<!-- $FreeBSD$ --> + +<!DOCTYPE style-sheet PUBLIC "-//James Clark//DTD DSSSL Style Sheet//EN" [ +<!ENTITY % freebsd.l10n PUBLIC "-//FreeBSD//ENTITIES DocBook Language Specific Entities//EN"> +%freebsd.l10n; +<!ENTITY % freebsd.l10n-common PUBLIC "-//FreeBSD//ENTITIES DocBook Language Neutral Entities//EN"> +%freebsd.l10n-common; +]> + +<style-sheet> + <style-specification> + <style-specification-body> + + (declare-flow-object-class formatting-instruction + "UNREGISTERED::James Clark//Flow Object Class::formatting-instruction") + + (define %section-autolabel% + #t) + + (define %label-preface-sections% + #f) + + (define %may-format-variablelist-as-table% + #f) + + (define %indent-programlisting-lines% + #f) + + (define %indent-screen-lines% + #f) + + (define (article-titlepage-recto-elements) + (list (normalize "title") + (normalize "subtitle") + (normalize "corpauthor") + (normalize "authorgroup") + (normalize "author") + (normalize "releaseinfo") + (normalize "copyright") + (normalize "pubdate") + (normalize "revhistory") + (normalize "legalnotice") + (normalize "abstract"))) + + (define %admon-graphics% + ;; Use graphics in admonitions? + #f) + + (define %admon-graphics-path% + ;; Path to admonition images + "./imagelib/admon/") + + (define ($admon-graphic$ #!optional (nd (current-node))) + ;; Admonition graphic file + (string-append %admon-graphics-path% (case-fold-down (gi nd)) ".png")) + + (define %show-all-trademark-symbols% + ;; Show all the trademark symbols, not just the required + ;; symbols. + #f) + + <!-- Slightly deeper customisations --> + + <!-- We would like the author attributions to show up in line + with the section they refer to. Authors who made the same + contribution should be listed in a single <authorgroup> and + only one of the <author> elements should contain a <contrib> + element that describes what the whole authorgroup was + responsible for. For example: + + <chapterinfo> + <authorgroup> + <author> + <firstname>Bob</firstname> + <surname>Jones</surname> + <contrib>Contributed by </contrib> + </author> + <author> + <firstname>Sarah</firstname> + <surname>Lee</surname> + </author> + </authorgroup> + </chapterinfo> + + Would show up as "Contributed by Bob Jones and Sarah Lee". Each + authorgroup shows up as a separate sentence. --> + + + (element chapterinfo + (process-children)) + (element sect1info + (process-children)) + (element sect2info + (process-children)) + (element sect3info + (process-children)) + (element sect4info + (process-children)) + (element sect5info + (process-children)) + (element (chapterinfo authorgroup author) + (literal (author-list-string))) + (element (sect1info authorgroup author) + (literal (author-list-string))) + (element (sect2info authorgroup author) + (literal (author-list-string))) + (element (sect3info authorgroup author) + (literal (author-list-string))) + (element (sect4info authorgroup author) + (literal (author-list-string))) + (element (sect5info authorgroup author) + (literal (author-list-string))) + + (define (custom-authorgroup) + ($italic-seq$ + (make sequence + (process-node-list (select-elements (descendants (current-node)) + (normalize "contrib"))) + (process-children) + (literal ". ")))) + + (element (chapterinfo authorgroup) + (custom-authorgroup)) + (element (sect1info authorgroup) + (custom-authorgroup)) + (element (sect2info authorgroup) + (custom-authorgroup)) + (element (sect3info authorgroup) + (custom-authorgroup)) + (element (sect4info authorgroup) + (custom-authorgroup)) + (element (sect5info authorgroup) + (custom-authorgroup)) + + <!-- I want things marked up with 'sgmltag' eg., + + <para>You can use <sgmltag>para</sgmltag> to indicate + paragraphs.</para> + + to automatically have the opening and closing braces inserted, + and it should be in a mono-spaced font. --> + + (element sgmltag ($mono-seq$ + (make sequence + (literal "<") + (process-children) + (literal ">")))) + + <!-- Add double quotes around <errorname> text. --> + + (element errorname + (make sequence + <![ %output.html; [ (literal "“") ]]> + ($mono-seq$ (process-children)) + <![ %output.html; [ (literal "”") ]]> + )) + + <!-- John Fieber's 'instant' translation specification had + '<command>' rendered in a mono-space font, and '<application>' + rendered in bold. + + Norm's stylesheet doesn't do this (although '<command>' is + rendered in bold). + + Configure the stylesheet to behave more like John's. --> + + (element command ($mono-seq$)) + (element envar ($mono-seq$)) + + <!-- Warnings and cautions are put in boxed tables to make them stand + out. The same effect can be better achieved using CSS or similar, + so have them treated the same as <important>, <note>, and <tip> + --> + (element warning ($admonition$)) + (element (warning title) (empty-sosofo)) + (element (warning para) ($admonpara$)) + (element (warning simpara) ($admonpara$)) + (element caution ($admonition$)) + (element (caution title) (empty-sosofo)) + (element (caution para) ($admonpara$)) + (element (caution simpara) ($admonpara$)) + + <!-- Tell the stylesheet about our local customisations --> + + (element hostid + (if %hyphenation% + (urlwrap) + ($mono-seq$))) + (element username ($mono-seq$)) + (element groupname ($mono-seq$)) + (element devicename ($mono-seq$)) + (element maketarget ($mono-seq$)) + (element makevar ($mono-seq$)) + + <!-- Override generate-anchor. This is used to generate a unique ID for + each element that can be linked to. The element-id function calls + this one if there's no ID attribute that it can use. Normally, we + would just use the current element number. However, if it's a + a question then use the question's number, as determined by the + question-answer-label function. + + This generates anchors of the form "Qx.y.", where x.y is the + question label. This will probably break if question-answer-label + is changed to generate something that might be the same for two + different questions (for example, if question numbering restarts + for each qandaset. --> + (define (generate-anchor #!optional (nd (current-node))) + (cond + ((equal? (gi nd) (normalize "question")) + (string-append "Q" (question-answer-label))) + (else + (string-append "AEN" (number->string (all-element-number nd)))))) + + (define (xref-biblioentry target) + (let* ((abbrev (node-list-first + (node-list-filter-out-pis (children target)))) + (label (attribute-string (normalize "xreflabel") target))) + + (if biblio-xref-title + (let* ((citetitles (select-elements (descendants target) + (normalize "citetitle"))) + (titles (select-elements (descendants target) + (normalize "title"))) + (isbn (select-elements (descendants target) + (normalize "isbn"))) + (publisher (select-elements (descendants target) + (normalize "publishername"))) + (title (if (node-list-empty? citetitles) + (node-list-first titles) + (node-list-first citetitles)))) + (with-mode xref-title-mode + (make sequence + (process-node-list title)))) + (if biblio-number + (make sequence + (literal "[" (number->string (bibentry-number target)) "]")) + (if label + (make sequence + (literal "[" label "]")) + (if (equal? (gi abbrev) (normalize "abbrev")) + (make sequence + (process-node-list abbrev)) + (make sequence + (literal "[" (id target) "]")))))))) + + <!-- The (create-link) procedure should be used by all FreeBSD + stylesheets to create links. It calls (can-link-here) to + determine whether it's okay to make a link in the current + position. + + This check is necessary because links aren't allowed in, + for example, <question> tags since the latter cause links + to be created by themselves. Obviously, nested links lead + to all kinds of evil. This normally wouldn't be a problem + since no one in their right mind will put a <ulink> or + <link> in a <question>, but it comes up when someone uses, + say, a man page entity (e.g., &man.ls.1;); the latter may + cause a link to be created, but its use inside a <question> + is perfectly legal. + + The (can-link-here) routine isn't perfect; in fact, it's a + hack and an ugly one at that. Ideally, it would detect if + the currect output would wind up in an <a> tag and return + #f if that's the case. Slightly less ideally it would + check the current mode and return #f if, say, we're + currently in TOC mode. Right now, it makes a best guess + attempt at guessing which tags might cause links to be + generated. --> + (define (can-link-here) + (cond ((has-ancestor-member? (current-node) + '("TITLE" "QUESTION")) #f) + (#t #t))) + + (define (create-link attrlist target) + (if (can-link-here) + (make element gi: "A" + attributes: attrlist + target) + target)) + + ;; Standard boolean XNOR (NOT Exclusive OR). + (define (xnor x y) + (or (and x y) + (and (not x) (not y)))) + + ;; Standard boolean XOR (Exclusive OR). + (define (xor x y) + (not (xnor x y))) + + ;; Determine if a given node is in a title. + (define (is-in-title? node) + (has-ancestor-member? node (list (normalize "title")))) + + ;; Number of references to a trademark before the current + ;; reference in each chunk. Trademarks in title tags, and + ;; trademarks in normal text (actually just text that is not in + ;; title tags) are counted separately. + (define ($chunk-trademark-number$ trademark) + (let* ((trademarks (select-elements + (descendants (chunk-parent trademark)) + (normalize "trademark")))) + (let loop ((nl trademarks) (num 1)) + (if (node-list-empty? nl) + num + (if (node-list=? (node-list-first nl) trademark) + num + (if (and (string=? (data trademark) + (data (node-list-first nl))) + (xnor (is-in-title? trademark) + (is-in-title? (node-list-first nl)))) + (loop (node-list-rest nl) (+ num 1)) + (loop (node-list-rest nl) num))))))) + + ;; Determine if we should show a trademark symbol. Either in + ;; first occurrence in the proper context, if the role + ;; attribute is set to force, or if %show-all-trademark-symbols% + ;; is set to true. + (define (show-tm-symbol? trademark) + (or %show-all-trademark-symbols% + (= ($chunk-trademark-number$ trademark) 1) + (equal? (attribute-string (normalize "role") trademark) "force"))) + + (element (acronym remark) + (let* ((role (attribute-string (normalize "role")))) + (if (not (equal? role "acronym")) + ($charseq$) + (empty-sosofo)))) + + </style-specification-body> + </style-specification> +</style-sheet> diff --git a/share/sgml/freebsd-html.dsl b/share/sgml/freebsd-html.dsl new file mode 100644 index 0000000000..9aadff7666 --- /dev/null +++ b/share/sgml/freebsd-html.dsl @@ -0,0 +1,361 @@ +<!-- $FreeBSD$ --> + +<!DOCTYPE style-sheet PUBLIC "-//James Clark//DTD DSSSL Style Sheet//EN" [ +<!ENTITY % output.html "IGNORE"> +<!ENTITY % output.html.images "IGNORE"> + +<!ENTITY % freebsd.l10n PUBLIC "-//FreeBSD//ENTITIES DocBook Language Specific Entities//EN"> +%freebsd.l10n; +<!ENTITY % freebsd.l10n-common PUBLIC "-//FreeBSD//ENTITIES DocBook Language Neutral Entities//EN"> +%freebsd.l10n-common; +]> + +<style-sheet> + <style-specification> + <style-specification-body> + + (declare-flow-object-class formatting-instruction + "UNREGISTERED::James Clark//Flow Object Class::formatting-instruction") + + <!-- HTML only .................................................... --> + + <![ %output.html; [ + <!-- Configure the stylesheet using documented variables --> + + (define %hyphenation% #f) <!-- Silence a warning --> + + (define %html-header-tags% '(("META" ("HTTP-EQUIV" "Content-Type") + ("CONTENT" "text/html; charset=&doc.html.charset;")))) + + (define %gentext-nav-use-tables% + ;; Use tables to build the navigation headers and footers? + #t) + + (define %html-ext% + ;; Default extension for HTML output files + ".html") + + (define %shade-verbatim% + ;; Should verbatim environments be shaded? + #f) + + (define %use-id-as-filename% + ;; Use ID attributes as name for component HTML files? + #t) + + (define %root-filename% + ;; Name for the root HTML document + "index") + + (define html-manifest + ;; Write a manifest? + #f) + + (define %generate-legalnotice-link% + ;; Should legal notices be a link to a separate file? + ;; + ;; Naturally, this has no effect if you're building one big + ;; HTML file. + #f) + + (define %generate-docformat-navi-link% + ;; Create docformat navi link for HTML output? + #f) + +;; Taken from Norm's stylesheets; modified to add support for TITLE so +;; that we get a mouse over definition for acronyms in HTML output. + (define ($acronym-seq$ #!optional (sosofo (process-children))) + ;; FIXME: html4 only + (let ((title (attribute-string (normalize "role") (current-node)))) + (if title + (make element gi: "ACRONYM" + attributes: (list + (list "TITLE" title) + (list "CLASS" (gi))) + sosofo) + (make element gi: "ACRONYM" + attributes: (list + (list "CLASS" (gi))) + sosofo)))) + + (define (book-titlepage-recto-elements) + (list (normalize "title") + (normalize "subtitle") + (normalize "graphic") + (normalize "mediaobject") + (normalize "corpauthor") + (normalize "authorgroup") + (normalize "author") + (normalize "editor") + (normalize "copyright") + (normalize "abstract") + (normalize "legalnotice") + (normalize "isbn"))) + + ;; Create a simple navigation link + ;; if %generate-docformat-navi-link% defined. + (define (make-docformat-navi tlist) + (let ((rootgi (gi (sgml-root-element)))) + (make element gi: "DIV" + attributes: '(("CLASS" "DOCFORAMTNAVI")) + (literal "[ ") + (make-docformat-navi-link rootgi tlist) + (literal " ]")))) + + (define (make-docformat-navi-link rootgi tlist) + (make sequence + (cond + ((null? tlist) (empty-sosofo)) + ((null? (car tlist)) (empty-sosofo)) + ((not (symbol? (car tlist))) (empty-sosofo)) + ((equal? (car tlist) 'html-split) + (make sequence + (create-link (list (list "href" "./index.html")) + (literal "&docnavi.split-html;")) + (if (not (null? (cdr tlist))) + (make sequence + (literal " / ") + (make-docformat-navi-link rootgi (cdr tlist))) + (empty-sosofo)))) + ((equal? (car tlist) 'html-single) + (make sequence + (create-link (list (list "href" + (string-append "./" (case-fold-down rootgi) ".html"))) + (literal "&docnavi.single-html;")) + (if (not (null? (cdr tlist))) + (make sequence + (literal " / ") + (make-docformat-navi-link rootgi (cdr tlist))) + (empty-sosofo)))) + (else (empty-sosofo))))) + + (define (article-titlepage-separator side) + (make sequence + (if %generate-docformat-navi-link% + (make-docformat-navi '(html-split html-single)) + (empty-sosofo)) + (make empty-element gi: "HR"))) + + (define (book-titlepage-separator side) + (if (equal? side 'recto) + (make sequence + (if %generate-docformat-navi-link% + (make-docformat-navi '(html-split html-single)) + (empty-sosofo)) + (make empty-element gi: "HR")) + (empty-sosofo))) + + <!-- This is the text to display at the bottom of each page. + Defaults to nothing. The individual stylesheets should + redefine this as necessary. --> + (define ($email-footer$) + (empty-sosofo)) + + (define html-index-filename + (if nochunks + "html.index" + "html-split.index")) + + (define %stylesheet% + "docbook.css") + + <!-- This code handles displaying $email-footer$ at the bottom + of each page. + + If "nochunks" is turned on then we make sure that an <hr> + is shown first. + + Then create a centered paragraph ("<p>"), and reduce the font + size ("<small>"). Then run $email-footer$, which should + create the text and links as necessary. --> + (define ($html-body-end$) + (if (equal? $email-footer$ (normalize "")) + (empty-sosofo) + (make sequence + (if nochunks + (make empty-element gi: "hr") + (empty-sosofo)) + ($email-footer$)))) + + (define %refentry-xref-link% + ;; REFENTRY refentry-xref-link + ;; PURP Generate URL links when cross-referencing RefEntrys? + ;; DESC + ;; If true, a web link will be generated, presumably + ;; to an online man->HTML gateway. The text of the link is + ;; generated by the $create-refentry-xref-link$ function. + ;; /DESC + ;; AUTHOR N/A + ;; /REFENTRY + #f) + + <!-- Specify how to generate the man page link HREF --> + (define ($create-refentry-xref-link$ #!optional (n (current-node))) + (let* ((r (select-elements (children n) (normalize "refentrytitle"))) + (m (select-elements (children n) (normalize "manvolnum"))) + (v (attribute-string (normalize "vendor") n)) + (u (string-append "http://www.FreeBSD.org/cgi/man.cgi?query=" + (data r) "&" "amp;" "sektion=" (data m)))) + (case v + (("current") (string-append u "&" "amp;" "manpath=FreeBSD+8-current")) + (("xfree86") (string-append u "&" "amp;" "manpath=XFree86+4.5.0")) + (("xorg") (string-append u "&" "amp;" "manpath=X11R7.2")) + (("netbsd") (string-append u "&" "amp;" "manpath=NetBSD+3.0")) + (("openbsd") (string-append u "&" "amp;" "manpath=OpenBSD+4.1")) + (("ports") (string-append u "&" "amp;" "manpath=FreeBSD+7.0-RELEASE+and+Ports")) + (else u)))) + + (element application ($bold-seq$)) + + (element citerefentry + (let ((href ($create-refentry-xref-link$))) + (if %refentry-xref-link% + (create-link (list (list "HREF" href)) + (if %refentry-xref-italic% + ($italic-seq$) + ($charseq$))) + (if %refentry-xref-italic% + ($italic-seq$) + ($charseq$))))) + + (element filename + (let* ((class (attribute-string (normalize "role")))) + (cond + ((equal? class "package") + (let* ((urlurl "http://www.FreeBSD.org/cgi/url.cgi") + (href (string-append urlurl "?ports/" + (data (current-node)) + "/pkg-descr"))) + (create-link (list (list "HREF" href)) ($mono-seq$)))) + (else ($mono-seq$))))) + + ;; Do not render email with mailto: when nolink role attribute + ;; is used or when the email address matches + ;; @example.{com|net|org} + (element email + (let* ((class (attribute-string (normalize "role")))) + (cond + ((or (equal? class "nolink") + (and (> (string-length (data (current-node))) + 11) + (string=? + (substring (data (current-node)) + (- (string-length (data (current-node))) 11) + (- (string-length (data (current-node))) 4)) + "example"))) + ($code-seq$ + (make sequence + (literal "<") + (process-children) + (literal ">")))) + (else + (next-match))))) + + ;; Ensure that we start with no preferred mediaobject notations, + ;; so that in the text-only case we don't choose any of the + ;; possible images, and fallback to the most appropriate + ;; textobject + (define preferred-mediaobject-notations + '()) + + <!-- Convert " ... " to `` ... '' in the HTML output. --> + (element quote + (make sequence + (literal "“") + (process-children) + (literal "”"))) + + ;; The special FreeBSD version of the trademark tag handling. + ;; This function was more or less taken from the DocBook DSSSL + ;; stylesheets by Norman Walsh. + (element trademark + (if (show-tm-symbol? (current-node)) + (make sequence + ($charseq$) + (cond + ((equal? (attribute-string "class") (normalize "copyright")) + (make entity-ref name: "copy")) + ((equal? (attribute-string "class") (normalize "registered")) + (make entity-ref name: "reg")) + ((equal? (attribute-string "class") (normalize "service")) + (make element gi: "SUP" + (literal "SM"))) + (else + (make entity-ref name: "#8482")))) + ($charseq$))) + + ;; multiple copyright holders should be separated. + (element (copyright holder) + (make sequence + ($charseq$) + (if (not (last-sibling? (current-node))) + (literal ", ") + (empty-sosofo)))) + + ]]> + + <!-- HTML with images ............................................ --> + + <![ %output.html.images [ + +; The new Cascading Style Sheets for the HTML output are very confused +; by our images when used with div class="mediaobject". We can +; clear up the confusion by ignoring the whole mess and just +; displaying the image. + + (element mediaobject + (make element gi: "P" + ($mediaobject$))) + + (define %graphic-default-extension% + "png") + + (define %callout-graphics% + ;; Use graphics in callouts? + #t) + + (define %callout-graphics-ext% + ;; The extension to use for callout images. This is an extension + ;; to the stylesheets, they do not support this functionality + ;; natively. + ".png") + + (define %callout-graphics-number-limit% + ;; Number of largest callout graphic + 15) + + (define %callout-graphics-path% + ;; Path to callout graphics + "./imagelib/callouts/") + + ;; Redefine $callout-bug$ to support the %callout-graphic-ext% + ;; variable. + (define ($callout-bug$ conumber) + (let ((number (if conumber (format-number conumber "1") "0"))) + (if conumber + (if %callout-graphics% + (if (<= conumber %callout-graphics-number-limit%) + (make empty-element gi: "IMG" + attributes: (list (list "SRC" + (root-rel-path + (string-append + %callout-graphics-path% + number + %callout-graphics-ext%))) + (list "HSPACE" "0") + (list "VSPACE" "0") + (list "BORDER" "0") + (list "ALT" + (string-append + "(" number ")")))) + (make element gi: "B" + (literal "(" (format-number conumber "1") ")"))) + (make element gi: "B" + (literal "(" (format-number conumber "1") ")"))) + (make element gi: "B" + (literal "(??)"))))) + ]]> + + </style-specification-body> + </style-specification> +</style-sheet> diff --git a/share/sgml/freebsd-print.dsl b/share/sgml/freebsd-print.dsl new file mode 100644 index 0000000000..230f386c2a --- /dev/null +++ b/share/sgml/freebsd-print.dsl @@ -0,0 +1,456 @@ +<!-- $FreeBSD$ --> + +<!DOCTYPE style-sheet PUBLIC "-//James Clark//DTD DSSSL Style Sheet//EN" [ +<!ENTITY % output.rtf.images "IGNORE"> +<!ENTITY % output.print "IGNORE"> +<!ENTITY % output.print.pdf "IGNORE"> +<!ENTITY % output.print.justify "IGNORE"> +<!ENTITY % output.print.twoside "IGNORE"> + +<!ENTITY % freebsd.l10n PUBLIC "-//FreeBSD//ENTITIES DocBook Language Specific Entities//EN"> +%freebsd.l10n; +<!ENTITY % freebsd.l10n-common PUBLIC "-//FreeBSD//ENTITIES DocBook Language Neutral Entities//EN"> +%freebsd.l10n-common; +]]> +]> + +<style-sheet> + <style-specification> + <style-specification-body> + + (declare-flow-object-class formatting-instruction + "UNREGISTERED::James Clark//Flow Object Class::formatting-instruction") + + <!-- RTF with images ............................................ --> + + <![ %output.rtf.images [ + + (define %graphic-default-extension% + "png") + + (define %callout-graphics% + ;; Use graphics in callouts? + #f) + ]]> + + <!-- Two-sided Print output ....................................... --> + <![ %output.print.twoside; [ + + ;; From an email by Ian Castle to the DocBook-apps list + + (define ($component$) + (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$) + (process-children)) + (make-endnotes))) + + ;; From an email by Ian Castle to the DocBook-apps list + + (define (first-part?) + (let* ((book (ancestor (normalize "book"))) + (nd (ancestor-member (current-node) + (append + (component-element-list) + (division-element-list)))) + (bookch (children book))) + (let loop ((nl bookch)) + (if (node-list-empty? nl) + #f + (if (equal? (gi (node-list-first nl)) (normalize "part")) + (if (node-list=? (node-list-first nl) nd) + #t + #f) + (loop (node-list-rest nl))))))) + + + ;; From an email by Ian Castle to the DocBook-apps list + + (define (first-chapter?) + ;; Returns #t if the current-node is in the first chapter of a book + (if (has-ancestor-member? (current-node) (division-element-list)) + #f + (let* ((book (ancestor (normalize "book"))) + (nd (ancestor-member (current-node) + (append (component-element-list) + (division-element-list)))) + (bookch (children book)) + (bookcomp (expand-children bookch (list (normalize "part"))))) + (let loop ((nl bookcomp)) + (if (node-list-empty? nl) + #f + (if (equal? (gi (node-list-first nl)) (normalize "chapter")) + (if (node-list=? (node-list-first nl) nd) + #t + #f) + (loop (node-list-rest nl)))))))) + + + ; By default, the Part I title page will be given a roman numeral, + ; which is wrong so we have to fix it + + (define (part-titlepage elements #!optional (side 'recto)) + (let ((nodelist (titlepage-nodelist + (if (equal? side 'recto) + (part-titlepage-recto-elements) + (part-titlepage-verso-elements)) + elements)) + ;; partintro is a special case... + (partintro (node-list-first + (node-list-filter-by-gi elements (list (normalize "partintro")))))) + (if (part-titlepage-content? elements side) + (make simple-page-sequence + page-n-columns: %titlepage-n-columns% + ;; Make sure that page number format is correct. + page-number-format: ($page-number-format$) + ;; Make sure that the page number is set to 1 if this is the first part + ;; in the book + page-number-restart?: (first-part?) + input-whitespace-treatment: 'collapse + use: default-text-style + + ;; This hack is required for the RTF backend. If an + ;; external-graphic is the first thing on the page, + ;; RTF doesn't seem to do the right thing (the graphic + ;; winds up on the baseline of the first line of the + ;; page, left justified). This "one point rule" fixes + ;; that problem. + + (make paragraph + line-spacing: 1pt + (literal "")) + + (let loop ((nl nodelist) (lastnode (empty-node-list))) + (if (node-list-empty? nl) + (empty-sosofo) + (make sequence + (if (or (node-list-empty? lastnode) + (not (equal? (gi (node-list-first nl)) + (gi lastnode)))) + (part-titlepage-before (node-list-first nl) side) + (empty-sosofo)) + (cond + ((equal? (gi (node-list-first nl)) (normalize "subtitle")) + (part-titlepage-subtitle (node-list-first nl) side)) + ((equal? (gi (node-list-first nl)) (normalize "title")) + (part-titlepage-title (node-list-first nl) side)) + (else + (part-titlepage-default (node-list-first nl) side))) + (loop (node-list-rest nl) (node-list-first nl))))) + (if (and %generate-part-toc% + %generate-part-toc-on-titlepage% + (equal? side 'recto)) + (make display-group + (build-toc (current-node) + (toc-depth (current-node)))) + (empty-sosofo)) + + ;; PartIntro is a special case + (if (and (equal? side 'recto) + (not (node-list-empty? partintro)) + %generate-partintro-on-titlepage%) + ($process-partintro$ partintro #f) + (empty-sosofo))) + (empty-sosofo)))) + + ]]> + + <!-- Print with justification ..................................... --> + <![ %output.print.justify; [ + + (define %default-quadding% + 'justify) + + (define %hyphenation% + #t) + + + ;; The url.sty package is making all of the links purple/pink. + ;; Someone please fix this! + + (define (urlwrap) + (let ((%factor% (if %verbatim-size-factor% + %verbatim-size-factor% + 1.0))) + (make sequence + font-family-name: %mono-font-family% + font-size: (* (inherited-font-size) %factor%) + (make formatting-instruction data: + (string-append + "\\url|" + (data (current-node)) + "|"))))) + + (define (pathwrap) + (let ((%factor% (if %verbatim-size-factor% + %verbatim-size-factor% + 1.0))) + (make sequence + font-family-name: %mono-font-family% + font-size: (* (inherited-font-size) %factor%) + (make formatting-instruction data: + (string-append + "\\path|" + (data (current-node)) + "|"))))) + + ;; Some others may check the value of %hyphenation% and be + ;; specified below + +; (element email +; (make sequence +; (literal "<") +; (urlwrap) +; (literal ">"))) + + (element filename + (pathwrap)) + + (element varname + (pathwrap)) + + ]]> + + <!-- Print only ................................................... --> + <![ %output.print; [ + (define withpgpkeys + #f) + + ;; If a link is entered as "file://localhost/usr/ports" in the docs + ;; then we only want to display "/usr/ports" in printed form. + + (define (fix-url url) + (if (and (> (string-length url) 15) + (string=? (substring url 0 16) "file://localhost")) + (substring url 16 (string-length url)) + url)) + + + (element (primaryie ulink) + (indexentry-link (current-node))) + (element (secondaryie ulink) + (indexentry-link (current-node))) + (element (tertiaryie ulink) + (indexentry-link (current-node))) + + ;; Override the count-footnote? definition from dbblock.dsl + ;; to fix a bug. Basically, the original procedure would count + ;; all ulink elements when doing %footnote-ulinks%. It's + ;; actually harder than that, because ulink elements with no + ;; content shouldn't generate footnotes (the ulink element + ;; definition just inserts the url attribute in-line, thus there + ;; is no need for a footnote with the url). So, when we figure + ;; out which footnotes to count for the purpose of determining + ;; footnote numbers, we only count the ulink elements containing + ;; content. + (define (count-footnote? footnote) + ;; don't count footnotes in comments (unless you're showing comments) + ;; or footnotes in tables which are handled locally in the table + (if (or (and (has-ancestor-member? footnote (list (normalize "comment"))) + (not %show-comments%)) + (has-ancestor-member? footnote (list (normalize "tgroup"))) + (and (has-ancestor-member? footnote (list (normalize "ulink"))) + (node-list-empty? (children footnote)))) + #f + #t)) + + (element ulink + (make sequence + (if (node-list-empty? (children (current-node))) + (literal (fix-url (attribute-string (normalize "url")))) + (make sequence + ($charseq$) + (if %footnote-ulinks% + (if (and (equal? (print-backend) 'tex) bop-footnotes) + (make sequence + ($ss-seq$ + (literal (footnote-number (current-node)))) + (make page-footnote + (make paragraph + font-size: (* %footnote-size-factor% %bf-size%) + font-posture: 'upright + quadding: %default-quadding% + line-spacing: (* (* %footnote-size-factor% %bf-size%) + %line-spacing-factor%) + space-before: %para-sep% + space-after: %para-sep% + start-indent: %footnote-field-width% + first-line-start-indent: (- %footnote-field-width%) + (make line-field + field-width: %footnote-field-width% + (literal (footnote-number (current-node)) + (gentext-label-title-sep (normalize "footnote")))) + (literal (fix-url (attribute-string (normalize "url"))))))) + ($ss-seq$ + (literal (footnote-number (current-node))))) + (if (and %show-ulinks% + (not (equal? (fix-url (attribute-string (normalize "url"))) + (data-of (current-node))))) + (make sequence + (literal " (") + (if %hyphenation% + (make formatting-instruction data: + (string-append "\\url{" + (fix-url (attribute-string + (normalize "url"))) + "}")) + (literal (fix-url (attribute-string (normalize "url"))))) + (literal ")")) + (empty-sosofo))))))) + + + (define (toc-depth nd) + (if (string=? (gi nd) (normalize "book")) + 3 + 1)) + + (element programlisting + (if (and (equal? (attribute-string (normalize "role")) "pgpkey") + (not withpgpkeys)) + (empty-sosofo) + (next-match))) + + (element legalnotice + (if (equal? (attribute-string (normalize "role")) "trademarks") + (make sequence + (process-children)) + (next-match))) + + (define %body-start-indent% + 0pi) + + (define (book-titlepage-verso-elements) + (list (normalize "title") + (normalize "subtitle") + (normalize "corpauthor") + (normalize "authorgroup") + (normalize "author") + (normalize "editor") + (normalize "edition") + (normalize "pubdate") + (normalize "copyright") + (normalize "abstract") + (normalize "legalnotice") + (normalize "revhistory") + (normalize "isbn"))) + + ;; Norm's stylesheets are smart about working out what sort of + ;; object to display. But this bites us. Since we know that the + ;; first item is going to be displayable, always use that. + (define (find-displayable-object objlist notlist extlist) + (let loop ((nl objlist)) + (if (node-list-empty? nl) + (empty-node-list) + (let* ((objdata (node-list-filter-by-gi + (children (node-list-first nl)) + (list (normalize "videodata") + (normalize "audiodata") + (normalize "imagedata")))) + (filename (data-filename objdata)) + (extension (file-extension filename)) + (notation (attribute-string (normalize "format") objdata))) + (node-list-first nl))))) + + ;; When selecting a filename to use, don't append the default + ;; extension, instead, just use the bare filename, and let TeX + ;; work it out. jadetex will use the .eps file, while pdfjadetex + ;; will use the .png file automatically. + (define (graphic-file filename) + (let ((ext (file-extension filename))) + (if (or tex-backend ;; TeX can work this out itself + (not filename) + (not %graphic-default-extension%) + (member ext %graphic-extensions%)) + filename + (string-append filename "." %graphic-default-extension%)))) + + ;; Including bitmaps in the PS and PDF output tends to scale them + ;; horribly. The solution is to scale them down by 50%. + ;; + ;; You could do this with 'imagedata scale="50"' in the source, + ;; but that will affect all the output formats that we use (because + ;; there is only one 'imagedata' per image). + ;; + ;; Solution is to have the authors include the "FORMAT" attribute, + ;; set to PNG or EPS as appropriate, but to omit the extension. + ;; If we're using the tex-backend, and the FORMAT is PNG, and the + ;; author hasn't already set a scale, then set scale to 0.5. + ;; Otherwise, use the supplied scale, or 1, as appropriate. + (define ($graphic$ fileref + #!optional (display #f) (format #f) + (scale #f) (align #f)) + (let* ((graphic-format (if format format "")) + (graphic-scale (if scale + (/ (string->number scale) 100) + (if (and tex-backend + (equal? graphic-format "PNG")) + 0.5 1))) + (graphic-align (cond ((equal? align (normalize "center")) + 'center) + ((equal? align (normalize "right")) + 'end) + (else + 'start)))) + (make external-graphic + entity-system-id: (graphic-file fileref) + notation-system-id: graphic-format + scale: graphic-scale + display?: display + display-alignment: graphic-align))) + + ;; Display TeX and LaTeX properly by sending direct formatting + ;; commands to the TeX backend. + + (element application + (if (equal? "TeX" (data (current-node))) + (make formatting-instruction data: + "\\TeX{}") + (if (equal? "LaTeX" (data (current-node))) + (make formatting-instruction data: + "\\LaTeX{}") + ($bold-seq$)))) + + ;; The special FreeBSD version of the trademark tag handling. + ;; This function was more or less taken from the DocBook DSSSL + ;; stylesheets by Norman Walsh. + (element trademark + (if (show-tm-symbol? (current-node)) + (make sequence + ($charseq$) + (cond + ((equal? (attribute-string "class") (normalize "copyright")) + (literal "\copyright-sign;")) + ((equal? (attribute-string "class") (normalize "registered")) + (literal "\registered-sign;")) + ((equal? (attribute-string "class") (normalize "service")) + ($ss-seq$ + (literal "SM"))) + (else + (literal "\trade-mark-sign;")))) + ($charseq$))) + + ;; Make the trademark functions think print output has chunks. + (define (chunk-parent nd) + (sgml-root-element nd)) + + ]]> + + <![ %output.print.pdf; [ + + ]]> + + </style-specification-body> + </style-specification> +</style-sheet> diff --git a/share/sgml/freebsd.dsl b/share/sgml/freebsd.dsl index d90955235d..ee0bda0923 100644 --- a/share/sgml/freebsd.dsl +++ b/share/sgml/freebsd.dsl @@ -2,12 +2,7 @@ <!DOCTYPE style-sheet PUBLIC "-//James Clark//DTD DSSSL Style Sheet//EN" [ <!ENTITY % output.html "IGNORE"> -<!ENTITY % output.html.images "IGNORE"> -<!ENTITY % output.rtf.images "IGNORE"> <!ENTITY % output.print "IGNORE"> -<!ENTITY % output.print.pdf "IGNORE"> -<!ENTITY % output.print.justify "IGNORE"> -<!ENTITY % output.print.twoside "IGNORE"> <!ENTITY % freebsd.l10n PUBLIC "-//FreeBSD//ENTITIES DocBook Language Specific Entities//EN"> %freebsd.l10n; @@ -16,1099 +11,27 @@ <![ %output.html; [ <!ENTITY docbook.dsl PUBLIC "-//Norman Walsh//DOCUMENT DocBook HTML Stylesheet//EN" CDATA DSSSL> +<!ENTITY freebsd.dsl PUBLIC "-//FreeBSD//DOCUMENT DocBook HTML Stylesheet//EN" CDATA DSSSL> ]]> <![ %output.print; [ <!ENTITY docbook.dsl PUBLIC "-//Norman Walsh//DOCUMENT DocBook Print Stylesheet//EN" CDATA DSSSL> - +<!ENTITY freebsd.dsl PUBLIC "-//FreeBSD//DOCUMENT DocBook Print Stylesheet//EN" CDATA DSSSL> ]]> + +<!ENTITY freebsd-common.dsl PUBLIC "-//FreeBSD//DOCUMENT DocBook Common Stylesheet//EN" CDATA DSSSL> ]> <style-sheet> - <style-specification use="docbook"> + <style-specification use="freebsd freebsd-common docbook"> <style-specification-body> (declare-flow-object-class formatting-instruction "UNREGISTERED::James Clark//Flow Object Class::formatting-instruction") - <!-- HTML only .................................................... --> - - <![ %output.html; [ - <!-- Configure the stylesheet using documented variables --> - - (define %hyphenation% #f) <!-- Silence a warning --> - - (define %html-header-tags% '(("META" ("HTTP-EQUIV" "Content-Type") - ("CONTENT" "text/html; charset=&doc.html.charset;")))) - - (define %gentext-nav-use-tables% - ;; Use tables to build the navigation headers and footers? - #t) - - (define %html-ext% - ;; Default extension for HTML output files - ".html") - - (define %shade-verbatim% - ;; Should verbatim environments be shaded? - #f) - - (define %use-id-as-filename% - ;; Use ID attributes as name for component HTML files? - #t) - - (define %root-filename% - ;; Name for the root HTML document - "index") - - (define html-manifest - ;; Write a manifest? - #f) - - (define %generate-legalnotice-link% - ;; Should legal notices be a link to a separate file? - ;; - ;; Naturally, this has no effect if you're building one big - ;; HTML file. - #f) - - (define %generate-docformat-navi-link% - ;; Create docformat navi link for HTML output? - #f) - -;; Taken from Norm's stylesheets; modified to add support for TITLE so -;; that we get a mouse over definition for acronyms in HTML output. - - (define ($acronym-seq$ #!optional (sosofo (process-children))) - ;; FIXME: html4 only - (let ((title (attribute-string (normalize "role") (current-node)))) - (if title - (make element gi: "ACRONYM" - attributes: (list - (list "TITLE" title) - (list "CLASS" (gi))) - sosofo) - (make element gi: "ACRONYM" - attributes: (list - (list "CLASS" (gi))) - sosofo)))) - - (define (book-titlepage-recto-elements) - (list (normalize "title") - (normalize "subtitle") - (normalize "graphic") - (normalize "mediaobject") - (normalize "corpauthor") - (normalize "authorgroup") - (normalize "author") - (normalize "editor") - (normalize "copyright") - (normalize "abstract") - (normalize "legalnotice") - (normalize "isbn"))) - - ;; Create a simple navigation link - ;; if %generate-docformat-navi-link% defined. - (define (make-docformat-navi tlist) - (let ((rootgi (gi (sgml-root-element)))) - (make element gi: "DIV" - attributes: '(("CLASS" "DOCFORAMTNAVI")) - (literal "[ ") - (make-docformat-navi-link rootgi tlist) - (literal " ]")))) - - (define (make-docformat-navi-link rootgi tlist) - (make sequence - (cond - ((null? tlist) (empty-sosofo)) - ((null? (car tlist)) (empty-sosofo)) - ((not (symbol? (car tlist))) (empty-sosofo)) - ((equal? (car tlist) 'html-split) - (make sequence - (create-link (list (list "href" "./index.html")) - (literal "&docnavi.split-html;")) - (if (not (null? (cdr tlist))) - (make sequence - (literal " / ") - (make-docformat-navi-link rootgi (cdr tlist))) - (empty-sosofo)))) - ((equal? (car tlist) 'html-single) - (make sequence - (create-link (list (list "href" - (string-append "./" (case-fold-down rootgi) ".html"))) - (literal "&docnavi.single-html;")) - (if (not (null? (cdr tlist))) - (make sequence - (literal " / ") - (make-docformat-navi-link rootgi (cdr tlist))) - (empty-sosofo)))) - (else (empty-sosofo))))) - - (define (article-titlepage-separator side) - (make sequence - (if %generate-docformat-navi-link% - (make-docformat-navi '(html-split html-single)) - (empty-sosofo)) - (make empty-element gi: "HR"))) - - (define (book-titlepage-separator side) - (if (equal? side 'recto) - (make sequence - (if %generate-docformat-navi-link% - (make-docformat-navi '(html-split html-single)) - (empty-sosofo)) - (make empty-element gi: "HR")) - (empty-sosofo))) - - <!-- This is the text to display at the bottom of each page. - Defaults to nothing. The individual stylesheets should - redefine this as necessary. --> - (define ($email-footer$) - (empty-sosofo)) - - (define html-index-filename - (if nochunks - "html.index" - "html-split.index")) - - (define %stylesheet% - "docbook.css") - - <!-- This code handles displaying $email-footer$ at the bottom - of each page. - - If "nochunks" is turned on then we make sure that an <hr> - is shown first. - - Then create a centered paragraph ("<p>"), and reduce the font - size ("<small>"). Then run $email-footer$, which should - create the text and links as necessary. --> - (define ($html-body-end$) - (if (equal? $email-footer$ (normalize "")) - (empty-sosofo) - (make sequence - (if nochunks - (make empty-element gi: "hr") - (empty-sosofo)) - ($email-footer$)))) - - (define %refentry-xref-link% - ;; REFENTRY refentry-xref-link - ;; PURP Generate URL links when cross-referencing RefEntrys? - ;; DESC - ;; If true, a web link will be generated, presumably - ;; to an online man->HTML gateway. The text of the link is - ;; generated by the $create-refentry-xref-link$ function. - ;; /DESC - ;; AUTHOR N/A - ;; /REFENTRY - #f) - - <!-- Specify how to generate the man page link HREF --> - (define ($create-refentry-xref-link$ #!optional (n (current-node))) - (let* ((r (select-elements (children n) (normalize "refentrytitle"))) - (m (select-elements (children n) (normalize "manvolnum"))) - (v (attribute-string (normalize "vendor") n)) - (u (string-append "http://www.FreeBSD.org/cgi/man.cgi?query=" - (data r) "&" "amp;" "sektion=" (data m)))) - (case v - (("current") (string-append u "&" "amp;" "manpath=FreeBSD+8-current")) - (("xfree86") (string-append u "&" "amp;" "manpath=XFree86+4.5.0")) - (("xorg") (string-append u "&" "amp;" "manpath=X11R7.2")) - (("netbsd") (string-append u "&" "amp;" "manpath=NetBSD+3.0")) - (("openbsd") (string-append u "&" "amp;" "manpath=OpenBSD+4.1")) - (("ports") (string-append u "&" "amp;" "manpath=FreeBSD+7.0-RELEASE+and+Ports")) - (else u)))) - - (element application ($bold-seq$)) - - (element citerefentry - (let ((href ($create-refentry-xref-link$))) - (if %refentry-xref-link% - (create-link (list (list "HREF" href)) - (if %refentry-xref-italic% - ($italic-seq$) - ($charseq$))) - (if %refentry-xref-italic% - ($italic-seq$) - ($charseq$))))) - - (element filename - (let* ((class (attribute-string (normalize "role")))) - (cond - ((equal? class "package") - (let* ((urlurl "http://www.FreeBSD.org/cgi/url.cgi") - (href (string-append urlurl "?ports/" - (data (current-node)) - "/pkg-descr"))) - (create-link (list (list "HREF" href)) ($mono-seq$)))) - (else ($mono-seq$))))) - - ;; Do not render email with mailto: when nolink role attribute - ;; is used or when the email address matches - ;; @example.{com|net|org} - (element email - (let* ((class (attribute-string (normalize "role")))) - (cond - ((or (equal? class "nolink") - (and (> (string-length (data (current-node))) - 11) - (string=? - (substring (data (current-node)) - (- (string-length (data (current-node))) 11) - (- (string-length (data (current-node))) 4)) - "example"))) - ($code-seq$ - (make sequence - (literal "<") - (process-children) - (literal ">")))) - (else - (next-match))))) - - ;; Ensure that we start with no preferred mediaobject notations, - ;; so that in the text-only case we don't choose any of the - ;; possible images, and fallback to the most appropriate - ;; textobject - (define preferred-mediaobject-notations - '()) - - <!-- Convert " ... " to `` ... '' in the HTML output. --> - (element quote - (make sequence - (literal "“") - (process-children) - (literal "”"))) - - ;; The special FreeBSD version of the trademark tag handling. - ;; This function was more or less taken from the DocBook DSSSL - ;; stylesheets by Norman Walsh. - (element trademark - (if (show-tm-symbol? (current-node)) - (make sequence - ($charseq$) - (cond - ((equal? (attribute-string "class") (normalize "copyright")) - (make entity-ref name: "copy")) - ((equal? (attribute-string "class") (normalize "registered")) - (make entity-ref name: "reg")) - ((equal? (attribute-string "class") (normalize "service")) - (make element gi: "SUP" - (literal "SM"))) - (else - (make entity-ref name: "#8482")))) - ($charseq$))) - - ;; multiple copyright holders should be separated. - (element (copyright holder) - (make sequence - ($charseq$) - (if (not (last-sibling? (current-node))) - (literal ", ") - (empty-sosofo)))) - ]]> - - <!-- HTML with images ............................................ --> - - <![ %output.html.images [ - -; The new Cascading Style Sheets for the HTML output are very confused -; by our images when used with div class="mediaobject". We can -; clear up the confusion by ignoring the whole mess and just -; displaying the image. - - (element mediaobject - (make element gi: "P" - ($mediaobject$))) - - (define %graphic-default-extension% - "png") - - (define %callout-graphics% - ;; Use graphics in callouts? - #t) - - (define %callout-graphics-ext% - ;; The extension to use for callout images. This is an extension - ;; to the stylesheets, they do not support this functionality - ;; natively. - ".png") - - (define %callout-graphics-number-limit% - ;; Number of largest callout graphic - 15) - - (define %callout-graphics-path% - ;; Path to callout graphics - "./imagelib/callouts/") - - ;; Redefine $callout-bug$ to support the %callout-graphic-ext% - ;; variable. - (define ($callout-bug$ conumber) - (let ((number (if conumber (format-number conumber "1") "0"))) - (if conumber - (if %callout-graphics% - (if (<= conumber %callout-graphics-number-limit%) - (make empty-element gi: "IMG" - attributes: (list (list "SRC" - (root-rel-path - (string-append - %callout-graphics-path% - number - %callout-graphics-ext%))) - (list "HSPACE" "0") - (list "VSPACE" "0") - (list "BORDER" "0") - (list "ALT" - (string-append - "(" number ")")))) - (make element gi: "B" - (literal "(" (format-number conumber "1") ")"))) - (make element gi: "B" - (literal "(" (format-number conumber "1") ")"))) - (make element gi: "B" - (literal "(??)"))))) - ]]> - - <!-- RTF with images ............................................ --> - - <![ %output.rtf.images [ - - (define %graphic-default-extension% - "png") - - (define %callout-graphics% - ;; Use graphics in callouts? - #f) - ]]> - - <!-- Two-sided Print output ....................................... --> - <![ %output.print.twoside; [ - - ;; From an email by Ian Castle to the DocBook-apps list - - (define ($component$) - (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$) - (process-children)) - (make-endnotes))) - - ;; From an email by Ian Castle to the DocBook-apps list - - (define (first-part?) - (let* ((book (ancestor (normalize "book"))) - (nd (ancestor-member (current-node) - (append - (component-element-list) - (division-element-list)))) - (bookch (children book))) - (let loop ((nl bookch)) - (if (node-list-empty? nl) - #f - (if (equal? (gi (node-list-first nl)) (normalize "part")) - (if (node-list=? (node-list-first nl) nd) - #t - #f) - (loop (node-list-rest nl))))))) - - - ;; From an email by Ian Castle to the DocBook-apps list - - (define (first-chapter?) - ;; Returns #t if the current-node is in the first chapter of a book - (if (has-ancestor-member? (current-node) (division-element-list)) - #f - (let* ((book (ancestor (normalize "book"))) - (nd (ancestor-member (current-node) - (append (component-element-list) - (division-element-list)))) - (bookch (children book)) - (bookcomp (expand-children bookch (list (normalize "part"))))) - (let loop ((nl bookcomp)) - (if (node-list-empty? nl) - #f - (if (equal? (gi (node-list-first nl)) (normalize "chapter")) - (if (node-list=? (node-list-first nl) nd) - #t - #f) - (loop (node-list-rest nl)))))))) - - - ; By default, the Part I title page will be given a roman numeral, - ; which is wrong so we have to fix it - - (define (part-titlepage elements #!optional (side 'recto)) - (let ((nodelist (titlepage-nodelist - (if (equal? side 'recto) - (part-titlepage-recto-elements) - (part-titlepage-verso-elements)) - elements)) - ;; partintro is a special case... - (partintro (node-list-first - (node-list-filter-by-gi elements (list (normalize "partintro")))))) - (if (part-titlepage-content? elements side) - (make simple-page-sequence - page-n-columns: %titlepage-n-columns% - ;; Make sure that page number format is correct. - page-number-format: ($page-number-format$) - ;; Make sure that the page number is set to 1 if this is the first part - ;; in the book - page-number-restart?: (first-part?) - input-whitespace-treatment: 'collapse - use: default-text-style - - ;; This hack is required for the RTF backend. If an - ;; external-graphic is the first thing on the page, - ;; RTF doesn't seem to do the right thing (the graphic - ;; winds up on the baseline of the first line of the - ;; page, left justified). This "one point rule" fixes - ;; that problem. - - (make paragraph - line-spacing: 1pt - (literal "")) - - (let loop ((nl nodelist) (lastnode (empty-node-list))) - (if (node-list-empty? nl) - (empty-sosofo) - (make sequence - (if (or (node-list-empty? lastnode) - (not (equal? (gi (node-list-first nl)) - (gi lastnode)))) - (part-titlepage-before (node-list-first nl) side) - (empty-sosofo)) - (cond - ((equal? (gi (node-list-first nl)) (normalize "subtitle")) - (part-titlepage-subtitle (node-list-first nl) side)) - ((equal? (gi (node-list-first nl)) (normalize "title")) - (part-titlepage-title (node-list-first nl) side)) - (else - (part-titlepage-default (node-list-first nl) side))) - (loop (node-list-rest nl) (node-list-first nl))))) - (if (and %generate-part-toc% - %generate-part-toc-on-titlepage% - (equal? side 'recto)) - (make display-group - (build-toc (current-node) - (toc-depth (current-node)))) - (empty-sosofo)) - - ;; PartIntro is a special case - (if (and (equal? side 'recto) - (not (node-list-empty? partintro)) - %generate-partintro-on-titlepage%) - ($process-partintro$ partintro #f) - (empty-sosofo))) - (empty-sosofo)))) - - ]]> - - <!-- Print with justification ..................................... --> - <![ %output.print.justify; [ - - (define %default-quadding% - 'justify) - - (define %hyphenation% - #t) - - - ;; The url.sty package is making all of the links purple/pink. - ;; Someone please fix this! - - (define (urlwrap) - (let ((%factor% (if %verbatim-size-factor% - %verbatim-size-factor% - 1.0))) - (make sequence - font-family-name: %mono-font-family% - font-size: (* (inherited-font-size) %factor%) - (make formatting-instruction data: - (string-append - "\\url|" - (data (current-node)) - "|"))))) - - (define (pathwrap) - (let ((%factor% (if %verbatim-size-factor% - %verbatim-size-factor% - 1.0))) - (make sequence - font-family-name: %mono-font-family% - font-size: (* (inherited-font-size) %factor%) - (make formatting-instruction data: - (string-append - "\\path|" - (data (current-node)) - "|"))))) - - ;; Some others may check the value of %hyphenation% and be - ;; specified below - -; (element email -; (make sequence -; (literal "<") -; (urlwrap) -; (literal ">"))) - - (element filename - (pathwrap)) - - (element varname - (pathwrap)) - - ]]> - - <!-- Print only ................................................... --> - <![ %output.print; [ - (define withpgpkeys - #f) - - ;; If a link is entered as "file://localhost/usr/ports" in the docs - ;; then we only want to display "/usr/ports" in printed form. - - (define (fix-url url) - (if (and (> (string-length url) 15) - (string=? (substring url 0 16) "file://localhost")) - (substring url 16 (string-length url)) - url)) - - - (element (primaryie ulink) - (indexentry-link (current-node))) - (element (secondaryie ulink) - (indexentry-link (current-node))) - (element (tertiaryie ulink) - (indexentry-link (current-node))) - - ;; Override the count-footnote? definition from dbblock.dsl - ;; to fix a bug. Basically, the original procedure would count - ;; all ulink elements when doing %footnote-ulinks%. It's - ;; actually harder than that, because ulink elements with no - ;; content shouldn't generate footnotes (the ulink element - ;; definition just inserts the url attribute in-line, thus there - ;; is no need for a footnote with the url). So, when we figure - ;; out which footnotes to count for the purpose of determining - ;; footnote numbers, we only count the ulink elements containing - ;; content. - (define (count-footnote? footnote) - ;; don't count footnotes in comments (unless you're showing comments) - ;; or footnotes in tables which are handled locally in the table - (if (or (and (has-ancestor-member? footnote (list (normalize "comment"))) - (not %show-comments%)) - (has-ancestor-member? footnote (list (normalize "tgroup"))) - (and (has-ancestor-member? footnote (list (normalize "ulink"))) - (node-list-empty? (children footnote)))) - #f - #t)) - - (element ulink - (make sequence - (if (node-list-empty? (children (current-node))) - (literal (fix-url (attribute-string (normalize "url")))) - (make sequence - ($charseq$) - (if %footnote-ulinks% - (if (and (equal? (print-backend) 'tex) bop-footnotes) - (make sequence - ($ss-seq$ + (literal (footnote-number (current-node)))) - (make page-footnote - (make paragraph - font-size: (* %footnote-size-factor% %bf-size%) - font-posture: 'upright - quadding: %default-quadding% - line-spacing: (* (* %footnote-size-factor% %bf-size%) - %line-spacing-factor%) - space-before: %para-sep% - space-after: %para-sep% - start-indent: %footnote-field-width% - first-line-start-indent: (- %footnote-field-width%) - (make line-field - field-width: %footnote-field-width% - (literal (footnote-number (current-node)) - (gentext-label-title-sep (normalize "footnote")))) - (literal (fix-url (attribute-string (normalize "url"))))))) - ($ss-seq$ + (literal (footnote-number (current-node))))) - (if (and %show-ulinks% - (not (equal? (fix-url (attribute-string (normalize "url"))) - (data-of (current-node))))) - (make sequence - (literal " (") - (if %hyphenation% - (make formatting-instruction data: - (string-append "\\url{" - (fix-url (attribute-string - (normalize "url"))) - "}")) - (literal (fix-url (attribute-string (normalize "url"))))) - (literal ")")) - (empty-sosofo))))))) - - - (define (toc-depth nd) - (if (string=? (gi nd) (normalize "book")) - 3 - 1)) - - (element programlisting - (if (and (equal? (attribute-string (normalize "role")) "pgpkey") - (not withpgpkeys)) - (empty-sosofo) - (next-match))) - - (element legalnotice - (if (equal? (attribute-string (normalize "role")) "trademarks") - (make sequence - (process-children)) - (next-match))) - - (define %body-start-indent% - 0pi) - - (define (book-titlepage-verso-elements) - (list (normalize "title") - (normalize "subtitle") - (normalize "corpauthor") - (normalize "authorgroup") - (normalize "author") - (normalize "editor") - (normalize "edition") - (normalize "pubdate") - (normalize "copyright") - (normalize "abstract") - (normalize "legalnotice") - (normalize "revhistory") - (normalize "isbn"))) - - ;; Norm's stylesheets are smart about working out what sort of - ;; object to display. But this bites us. Since we know that the - ;; first item is going to be displayable, always use that. - (define (find-displayable-object objlist notlist extlist) - (let loop ((nl objlist)) - (if (node-list-empty? nl) - (empty-node-list) - (let* ((objdata (node-list-filter-by-gi - (children (node-list-first nl)) - (list (normalize "videodata") - (normalize "audiodata") - (normalize "imagedata")))) - (filename (data-filename objdata)) - (extension (file-extension filename)) - (notation (attribute-string (normalize "format") objdata))) - (node-list-first nl))))) - - ;; When selecting a filename to use, don't append the default - ;; extension, instead, just use the bare filename, and let TeX - ;; work it out. jadetex will use the .eps file, while pdfjadetex - ;; will use the .png file automatically. - (define (graphic-file filename) - (let ((ext (file-extension filename))) - (if (or tex-backend ;; TeX can work this out itself - (not filename) - (not %graphic-default-extension%) - (member ext %graphic-extensions%)) - filename - (string-append filename "." %graphic-default-extension%)))) - - ;; Including bitmaps in the PS and PDF output tends to scale them - ;; horribly. The solution is to scale them down by 50%. - ;; - ;; You could do this with 'imagedata scale="50"' in the source, - ;; but that will affect all the output formats that we use (because - ;; there is only one 'imagedata' per image). - ;; - ;; Solution is to have the authors include the "FORMAT" attribute, - ;; set to PNG or EPS as appropriate, but to omit the extension. - ;; If we're using the tex-backend, and the FORMAT is PNG, and the - ;; author hasn't already set a scale, then set scale to 0.5. - ;; Otherwise, use the supplied scale, or 1, as appropriate. - (define ($graphic$ fileref - #!optional (display #f) (format #f) - (scale #f) (align #f)) - (let* ((graphic-format (if format format "")) - (graphic-scale (if scale - (/ (string->number scale) 100) - (if (and tex-backend - (equal? graphic-format "PNG")) - 0.5 1))) - (graphic-align (cond ((equal? align (normalize "center")) - 'center) - ((equal? align (normalize "right")) - 'end) - (else - 'start)))) - (make external-graphic - entity-system-id: (graphic-file fileref) - notation-system-id: graphic-format - scale: graphic-scale - display?: display - display-alignment: graphic-align))) - - ;; Display TeX and LaTeX properly by sending direct formatting - ;; commands to the TeX backend. - - (element application - (if (equal? "TeX" (data (current-node))) - (make formatting-instruction data: - "\\TeX{}") - (if (equal? "LaTeX" (data (current-node))) - (make formatting-instruction data: - "\\LaTeX{}") - ($bold-seq$)))) - - ;; The special FreeBSD version of the trademark tag handling. - ;; This function was more or less taken from the DocBook DSSSL - ;; stylesheets by Norman Walsh. - (element trademark - (if (show-tm-symbol? (current-node)) - (make sequence - ($charseq$) - (cond - ((equal? (attribute-string "class") (normalize "copyright")) - (literal "\copyright-sign;")) - ((equal? (attribute-string "class") (normalize "registered")) - (literal "\registered-sign;")) - ((equal? (attribute-string "class") (normalize "service")) - ($ss-seq$ + (literal "SM"))) - (else - (literal "\trade-mark-sign;")))) - ($charseq$))) - - ;; Make the trademark functions think print output has chunks. - (define (chunk-parent nd) - (sgml-root-element nd)) - - ]]> - - <![ %output.print.pdf; [ - - ]]> - - <!-- Both sets of stylesheets ..................................... --> - - (define %section-autolabel% - #t) - - (define %label-preface-sections% - #f) - - (define %may-format-variablelist-as-table% - #f) - - (define %indent-programlisting-lines% - #f) - - (define %indent-screen-lines% - #f) - - (define (article-titlepage-recto-elements) - (list (normalize "title") - (normalize "subtitle") - (normalize "corpauthor") - (normalize "authorgroup") - (normalize "author") - (normalize "releaseinfo") - (normalize "copyright") - (normalize "pubdate") - (normalize "revhistory") - (normalize "legalnotice") - (normalize "abstract"))) - - (define %admon-graphics% - ;; Use graphics in admonitions? - #f) - - (define %admon-graphics-path% - ;; Path to admonition images - "./imagelib/admon/") - - (define ($admon-graphic$ #!optional (nd (current-node))) - ;; Admonition graphic file - (string-append %admon-graphics-path% (case-fold-down (gi nd)) ".png")) - - (define %show-all-trademark-symbols% - ;; Show all the trademark symbols, not just the required - ;; symbols. - #f) - - <!-- Slightly deeper customisations --> - - <!-- We would like the author attributions to show up in line - with the section they refer to. Authors who made the same - contribution should be listed in a single <authorgroup> and - only one of the <author> elements should contain a <contrib> - element that describes what the whole authorgroup was - responsible for. For example: - - <chapterinfo> - <authorgroup> - <author> - <firstname>Bob</firstname> - <surname>Jones</surname> - <contrib>Contributed by </contrib> - </author> - <author> - <firstname>Sarah</firstname> - <surname>Lee</surname> - </author> - </authorgroup> - </chapterinfo> - - Would show up as "Contributed by Bob Jones and Sarah Lee". Each - authorgroup shows up as a separate sentence. --> - - - (element chapterinfo - (process-children)) - (element sect1info - (process-children)) - (element sect2info - (process-children)) - (element sect3info - (process-children)) - (element sect4info - (process-children)) - (element sect5info - (process-children)) - (element (chapterinfo authorgroup author) - (literal (author-list-string))) - (element (sect1info authorgroup author) - (literal (author-list-string))) - (element (sect2info authorgroup author) - (literal (author-list-string))) - (element (sect3info authorgroup author) - (literal (author-list-string))) - (element (sect4info authorgroup author) - (literal (author-list-string))) - (element (sect5info authorgroup author) - (literal (author-list-string))) - - (define (custom-authorgroup) - ($italic-seq$ - (make sequence - (process-node-list (select-elements (descendants (current-node)) - (normalize "contrib"))) - (process-children) - (literal ". ")))) - - (element (chapterinfo authorgroup) - (custom-authorgroup)) - (element (sect1info authorgroup) - (custom-authorgroup)) - (element (sect2info authorgroup) - (custom-authorgroup)) - (element (sect3info authorgroup) - (custom-authorgroup)) - (element (sect4info authorgroup) - (custom-authorgroup)) - (element (sect5info authorgroup) - (custom-authorgroup)) - - <!-- I want things marked up with 'sgmltag' eg., - - <para>You can use <sgmltag>para</sgmltag> to indicate - paragraphs.</para> - - to automatically have the opening and closing braces inserted, - and it should be in a mono-spaced font. --> - - (element sgmltag ($mono-seq$ - (make sequence - (literal "<") - (process-children) - (literal ">")))) - - <!-- Add double quotes around <errorname> text. --> - - (element errorname - (make sequence - <![ %output.html; [ (literal "“") ]]> - ($mono-seq$ (process-children)) - <![ %output.html; [ (literal "”") ]]> - )) - - <!-- John Fieber's 'instant' translation specification had - '<command>' rendered in a mono-space font, and '<application>' - rendered in bold. - - Norm's stylesheet doesn't do this (although '<command>' is - rendered in bold). - - Configure the stylesheet to behave more like John's. --> - - (element command ($mono-seq$)) - (element envar ($mono-seq$)) - - <!-- Warnings and cautions are put in boxed tables to make them stand - out. The same effect can be better achieved using CSS or similar, - so have them treated the same as <important>, <note>, and <tip> - --> - (element warning ($admonition$)) - (element (warning title) (empty-sosofo)) - (element (warning para) ($admonpara$)) - (element (warning simpara) ($admonpara$)) - (element caution ($admonition$)) - (element (caution title) (empty-sosofo)) - (element (caution para) ($admonpara$)) - (element (caution simpara) ($admonpara$)) - - <!-- Tell the stylesheet about our local customisations --> - - (element hostid - (if %hyphenation% - (urlwrap) - ($mono-seq$))) - (element username ($mono-seq$)) - (element groupname ($mono-seq$)) - (element devicename ($mono-seq$)) - (element maketarget ($mono-seq$)) - (element makevar ($mono-seq$)) - - <!-- Override generate-anchor. This is used to generate a unique ID for - each element that can be linked to. The element-id function calls - this one if there's no ID attribute that it can use. Normally, we - would just use the current element number. However, if it's a - a question then use the question's number, as determined by the - question-answer-label function. - - This generates anchors of the form "Qx.y.", where x.y is the - question label. This will probably break if question-answer-label - is changed to generate something that might be the same for two - different questions (for example, if question numbering restarts - for each qandaset. --> - (define (generate-anchor #!optional (nd (current-node))) - (cond - ((equal? (gi nd) (normalize "question")) - (string-append "Q" (question-answer-label))) - (else - (string-append "AEN" (number->string (all-element-number nd)))))) - - (define (xref-biblioentry target) - (let* ((abbrev (node-list-first - (node-list-filter-out-pis (children target)))) - (label (attribute-string (normalize "xreflabel") target))) - - (if biblio-xref-title - (let* ((citetitles (select-elements (descendants target) - (normalize "citetitle"))) - (titles (select-elements (descendants target) - (normalize "title"))) - (isbn (select-elements (descendants target) - (normalize "isbn"))) - (publisher (select-elements (descendants target) - (normalize "publishername"))) - (title (if (node-list-empty? citetitles) - (node-list-first titles) - (node-list-first citetitles)))) - (with-mode xref-title-mode - (make sequence - (process-node-list title)))) - (if biblio-number - (make sequence - (literal "[" (number->string (bibentry-number target)) "]")) - (if label - (make sequence - (literal "[" label "]")) - (if (equal? (gi abbrev) (normalize "abbrev")) - (make sequence - (process-node-list abbrev)) - (make sequence - (literal "[" (id target) "]")))))))) - - <!-- The (create-link) procedure should be used by all FreeBSD - stylesheets to create links. It calls (can-link-here) to - determine whether it's okay to make a link in the current - position. - - This check is necessary because links aren't allowed in, - for example, <question> tags since the latter cause links - to be created by themselves. Obviously, nested links lead - to all kinds of evil. This normally wouldn't be a problem - since no one in their right mind will put a <ulink> or - <link> in a <question>, but it comes up when someone uses, - say, a man page entity (e.g., &man.ls.1;); the latter may - cause a link to be created, but its use inside a <question> - is perfectly legal. - - The (can-link-here) routine isn't perfect; in fact, it's a - hack and an ugly one at that. Ideally, it would detect if - the currect output would wind up in an <a> tag and return - #f if that's the case. Slightly less ideally it would - check the current mode and return #f if, say, we're - currently in TOC mode. Right now, it makes a best guess - attempt at guessing which tags might cause links to be - generated. --> - (define (can-link-here) - (cond ((has-ancestor-member? (current-node) - '("TITLE" "QUESTION")) #f) - (#t #t))) - - (define (create-link attrlist target) - (if (can-link-here) - (make element gi: "A" - attributes: attrlist - target) - target)) - - ;; Standard boolean XNOR (NOT Exclusive OR). - (define (xnor x y) - (or (and x y) - (and (not x) (not y)))) - - ;; Standard boolean XOR (Exclusive OR). - (define (xor x y) - (not (xnor x y))) - - ;; Determine if a given node is in a title. - (define (is-in-title? node) - (has-ancestor-member? node (list (normalize "title")))) - - ;; Number of references to a trademark before the current - ;; reference in each chunk. Trademarks in title tags, and - ;; trademarks in normal text (actually just text that is not in - ;; title tags) are counted separately. - (define ($chunk-trademark-number$ trademark) - (let* ((trademarks (select-elements - (descendants (chunk-parent trademark)) - (normalize "trademark")))) - (let loop ((nl trademarks) (num 1)) - (if (node-list-empty? nl) - num - (if (node-list=? (node-list-first nl) trademark) - num - (if (and (string=? (data trademark) - (data (node-list-first nl))) - (xnor (is-in-title? trademark) - (is-in-title? (node-list-first nl)))) - (loop (node-list-rest nl) (+ num 1)) - (loop (node-list-rest nl) num))))))) - - ;; Determine if we should show a trademark symbol. Either in - ;; first occurrence in the proper context, if the role - ;; attribute is set to force, or if %show-all-trademark-symbols% - ;; is set to true. - (define (show-tm-symbol? trademark) - (or %show-all-trademark-symbols% - (= ($chunk-trademark-number$ trademark) 1) - (equal? (attribute-string (normalize "role") trademark) "force"))) - </style-specification-body> </style-specification> - + + <external-specification id="freebsd" document="freebsd.dsl"> + <external-specification id="freebsd-common" document="freebsd-common.dsl"> <external-specification id="docbook" document="docbook.dsl"> </style-sheet>