diff --git a/share/sgml/freebsd.dsl b/share/sgml/freebsd.dsl index de71bfe4d3..5561ab9910 100644 --- a/share/sgml/freebsd.dsl +++ b/share/sgml/freebsd.dsl @@ -1,1103 +1,1103 @@ %freebsd.l10n; %freebsd.l10n-common; ]]> ]]> ]> (declare-flow-object-class formatting-instruction "UNREGISTERED::James Clark//Flow Object Class::formatting-instruction") (define %hyphenation% #f) (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))) (define ($email-footer$) (empty-sosofo)) (define html-index-filename (if nochunks "html.index" "html-split.index")) (define %stylesheet% "docbook.css") (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) (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+6-current")) (("xfree86") (string-append u "&" "amp;" "manpath=XFree86+4.4.0")) (("xorg") (string-append u "&" "amp;" "manpath=X11R6.7.0")) (("netbsd") (string-append u "&" "amp;" "manpath=NetBSD+1.6.1")) (("openbsd") (string-append u "&" "amp;" "manpath=OpenBSD+3.4")) (("ports") (string-append u "&" "amp;" "manpath=FreeBSD+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 '()) (element quote (make sequence - (literal "``") + (literal "“") (process-children) - (literal "''"))) + (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$))) ]]> "))) (element filename (pathwrap)) (element varname (pathwrap)) ]]> (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)) ]]> (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) (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)) (element sgmltag ($mono-seq$ (make sequence (literal "<") (process-children) (literal ">")))) (element errorname (make sequence - + ($mono-seq$ (process-children)) - + )) (element command ($mono-seq$)) (element envar ($mono-seq$)) (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$)) (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$)) (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) "]")))))))) (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")))