Release Notes for the DocBook XSL Stylesheets

$Revision$ $Date$

2012-06-04

This release-notes document is available in the following formats: HTML, PDF,
plain text; it provides a per-release list of enhancements and changes to the
stylesheets’ public APIs (user-configurable parameters) and excludes
descriptions of most bug fixes. For a complete list of all changes (including
all bug fixes) that have been made since the previous release, see the separate
NEWS (plain text) or NEWS.html files. Also available: An online hyperlinked
change history (warning: big file) of all changes made over the entire history
of the codebase.

As with all DocBook Project “dot one plus” releases, this release aspires to be
stable (in contrast to dot-zero releases, which are experimental).

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Table of Contents

Release Notes: 1.77.1

    Gentext
    Common
    FO
    HTML
    Epub
    HTMLHelp
    Eclipse
    JavaHelp
    Webhelp
    Params
    Highlighting
    Profiling
    Lib
    Template
    Extensions
    XSL-Saxon

Release Notes: 1.77.1

    FO
    HTML
    Roundtrip
    Slides
    Website
    Webhelp

Release Notes: 1.76.1

    FO
    HTML
    Params

Release Notes: 1.76.0

    Gentext
    Common
    FO
    HTML
    Manpages
    Epub
    Eclipse
    Params
    XSL-Xalan

Release Notes: 1.75.2

    Gentext
    Common
    FO
    HTML
    Manpages
    Epub
    Profiling
    XSL-Saxon
    XSL-Xalan

Release Notes: 1.75.1

    FO
    HTML
    Epub
    Params

Release Notes: 1.75.0

    Gentext
    Common
    FO
    HTML
    Manpages
    ePub
    HTMLHelp
    Params
    Highlighting
    XSL-Saxon
    XSL-Xalan

Release Notes: 1.74.3
Release Notes: 1.74.2
Release Notes: 1.74.1

    Gentext
    FO
    HTML
    Manpages
    ePub
    Roundtrip
    Params
    Highlighting

Release Notes: 1.74.0

    Gentext
    Common
    FO
    HTML
    Manpages
    Epub
    HTMLHelp
    Eclipse
    JavaHelp
    Roundtrip
    Slides
    Website
    Params
    Profiling
    Tools
    Extensions
    XSL-Saxon
    XSL-Xalan
    XSL-libxslt

Release Notes: 1.73.2
Release: 1.73.1

    Gentext
    FO
    HTML
    Manpages
    HTMLHelp
    Eclipse
    JavaHelp
    Roundtrip
    Params

Release: 1.73.0

    Gentext
    Common
    FO
    HTML
    Manpages
    Eclipse
    JavaHelp
    Roundtrip
    Params
    Highlighting
    Profiling
    Lib
    Tools
    XSL-Saxon
    XSL-Xalan

Release: 1.72.0

    Common
    FO
    HTML
    Manpages
    Params
    Template
    Roundtrip

Release: 1.71.1

    Common
    FO
    HTML
    Highlighting
    Manpages
    Params
    Profiling

Release: 1.71.0

    Common
    Extensions
    FO
    HTML
    Highlighting
    Manpages
    Params
    Tools

Release: 1.70.1

    FO
    HTML
    HTMLHelp
    Params

Release: 1.70.0

    Common
    Extensions
    FO
    HTML
    Manpages
    Params
    Profiling
    Tools
    WordML

Release 1.69.1
Release 1.69.0

    Common
    FO
    Help
    HTML
    man

Release 1.68.1
Release 1.68.0
Release 1.67.2
Release 1.67.1
Release 1.67.0
Release 1.66.1
Release 1.65.0
Release 1.64.1
Release 1.61.0
Release 1.60.1
Release 1.59.2
Release 1.59.1
Release 1.58.0
Release 1.57.0
Release 1.56.0
Older releases
About dot-zero releases

Release Notes: 1.77.1

The following list summarizes the major changes that have been made since the
1.76.1 release. It is followed by sections detailing changes to individual
files from the SVN checkin logs, edited to remove housekeeping changes and bug
fixes. See the NEWS.xml file for a complete unedited list of SVN changes.

  • Gentext

    webhelp

        Many improvements to the generated text for webhelp output.

  • Common

    Support more media types

        Expanded list of supported filename extensions for media to include
        video and audio, mostly for HTML5 and EPUB3 outputs.

    Topic element

        Add basic support for new topic element, which is available in DocBook
        5.1. Generally a topic element will be used with assembly and may be
        transformed to some other hierarchical element during processing, but
        it can also be formatted as a plain topic.

  • FO

    Add para.properties attribute-set

        Add a para.properties attribute-set that applies only to para elements.
        That allows still using normal.para.spacing attribute-set for many
        block elements for uniform spacing, but allows separate formatting of
        para elements.

    List of titles in article

        Add support for List of Tables, List of Figures, etc. for articles and
        other component-level elements. Includes a new template for each in
        autotoc.xsl, new attribute-sets in titlepage.xsl, and new entries in
        the titlepage.templates.xml file tu support customization.

    Customizing links in FO

        Add template mode simple.xlink.properties to allow easy customization
        of formatting of links generated from elements that use the xlink
        attributes. This extends link formatting beyond that of xref, link, and
        olink which use xref.properties attribute-set.

    Table caption

        The caption element in an HTML table is now handled like a title in a
        CALS table, using the formal.object.title template with all its
        features, including placement. Now caption template in mode="htmlTable"
        does nothing, because caption handled by formal.object.title template.
        Also adds support for table caption element in a CALS table, placing it
        after the table.

    Graphics attribute handling

        Refactored the big process.image template to use individual templates
        such as image.width for most attributes to allow easier customization
        of individual properties.

    Side regions

        Add support for side page regions in addition to header and footer
        regions. This feature lets you add running content to the side margins,
        and by default the content is rotated 90 degrees. Adds new templates
        named running.side.content, region.inner and region.outer; new template
        modes region.inner.mode and region.outer.mode; new parameters named
        region.inner.extent, region.outer.extent, body.margin.inner,
        body.margin.outer, and side.region.precedence; and new attribute-sets
        named inner.region.content.properties, outer.region.content.properties,
        region.inner.properties, and region.outer.properties.

    Callout formatting

        Add new attribute-sets for calloutlist.

    Topic element

        Add basic support for formatting a topic element, which is available in
        DocBook 5.1.

  • HTML

    HTML5

        Add variables to the base HTML stylesheets that can be adjusted for the
        HTML5 stylesheets.

    Insert Javascript reference

        Add support for html.script param to insert reference to a Javascript
        file.

    Namespace for titlepage mechanism.

        Titlepage mechanism is now namespace aware to support XHTML.

    Chunked filename prefix

        New param named chunked.filename.prefix lets you add a filename prefix
        to each chunked file. This replaces the buggy practice of adding such a
        prefix to the base.dir param. Now the base.dir param will always have a
        trailing slash added if it is not present, so you no longer have to
        remember to add it to the param value.

    Generate id attributes

        The stylesheet param generate.id.attributes already existed but was
        incompletely implemented. Now when it is set to 1, only id attributes
        should be output, not <a name> named anchors.

    Generate consistent id attributes

        New generate.consistent.ids parameter which allows generating a more
        stable id values based on XPath rather than the generate-id() function,
        which may not produce consistent values between runs. Stable output ids
        allow you to make stable links to generated content from the outside.

    Topic element

        Add basic support for formatting a topic element, which is available in
        DocBook 5.1. Generally a topic element will be used with assembly and
        may be transformed to some other hierarchical element during
        processing, but it can also be formatted as a plain topic.

  • Webhelp

    Webhelp refactored

        Webhelp templates refactored to better support customization.

    Added documentation.

        More and better documentation added.

    Webhelp generated text

        Many improvements to the generated text for webhelp output.

  • XHTML5

    New stylesheets to generate HTML5 output, in an XML serialization. These
    templates are a customization layer on top of the XHTML stylesheet files.

  • EPUB3

    New stylesheets to generate EPUB3 output. These templates are a
    customization layer on top of the xhtml5 stylesheet files.

  • Assembly

    New assembly.xsl stylesheet to convert a DocBook 5.1 assembly into a
    standard DocBook 5 document. Also includes a topic-maker-chunk.xsl
    stylesheet that can convert a DocBook 5 book or article document into an
    assembly with a collection of modular files, including converting some
    elements to topic files.

Gentext

The following changes have been made to the gentext code since the 1.76.1
release.

  • stefanhinz: locale/de.xml

    Translated German WebHelp strings

  • David Cramer: locale/zh.xml; locale/en.xml; locale/fr.xml; locale/de.xml;
    locale/ja.xml

    Webhelp: Update non-en gentext strings

  • Robert Stayton: locale/en.xml

    Add topic to title-numbered context.

  • Robert Stayton: locale/en.xml

    Add basic topic element templates.

  • Mauritz Jeanson: locale/el.xml

    Updated gentext for quotation marks. Fixes bug #3512440.

  • Jirka Kosek: locale/cs.xml

    Adding missing context for webhelp

  • David Cramer: locale/en.xml

    Fixing syntax of webhelp gentext entries

  • David Cramer: locale/en.xml

    Moving webhelp gentext strings into a context

  • tom_schr: locale/zh.xml; locale/en.xml; locale/cs.xml; locale/fr.xml;
    locale/de.xml; local⋯

    Moved language specific of WebHelp to gentext/locale/ as discussed with
    Stefan following the "minimal intrusive approach". :)
    In the long run, maybe moving the text into a context, not sure.

  • Jirka Kosek: locale/ru.xml

    Aligned capitalization of first letters with English original

Common

The following changes have been made to the common code since the 1.76.1
release.

  • Robert Stayton: common.xsl

    In "select.mediaobject.index" template, add selection of videoobject
    and audioobject since now supported in HTML5.

  • Robert Stayton: labels.xsl; titles.xsl; entities.ent; targets.xsl;
    subtitles.xsl; gentext.⋯

    Add basic support for new <topic> element.

  • Robert Stayton: common.xsl

    Fix handling of mediatypes for video and audio files, mostly for HTML5 and EPUB3 outputs.

  • Robert Stayton: olink.xsl

    Generate error message if olink data in targetset is in a namespace.

  • Robert Stayton: common.xsl

    Add support for generate.consistent.ids parameter.

  • Robert Stayton: subtitles.xsl

    Add verbose param to subtitle.markup templates to allow its
    error message to be ignored.
    Add that param to fop1.xsl application of subtitle.markup
    to avoid unnecessary error message in document information.

  • Robert Stayton: labels.xsl

    Add empty templates for glossdiv, glosslist, and glossentry in
    mode="label.markup".

FO

The following changes have been made to the fo code since the 1.76.1 release.

  • Robert Stayton: graphics.xsl

    qualify caption template to mediaobject/caption so not confused with table/caption.

  • Robert Stayton: table.xsl

    Add template to process table/caption element.

  • Robert Stayton: titlepage.xsl; autotoc.xsl; component.xsl; xref.xsl;
    titlepage.templates.x⋯

    Add basic support for new <topic> element.

  • Robert Stayton: graphics.xsl

    Fix handling of mediatypes for video and audio files, mostly for HTML5 and EPUB3 outputs.

  • Robert Stayton: titlepage.xsl

    Add default style att-sets for component.list.of.titles, etc.

  • Robert Stayton: autotoc.xsl; component.xsl; titlepage.templates.xml

    Add make.component.tocs to support lists of tables, etc. for
    article and other components.  Added component.list.of.tables to
    titlepage.templates.xml to format the title.

  • Robert Stayton: param.xweb; param.ent

    Add new para.properties attribute-set for paragraphs.

  • Robert Stayton: inline.xsl

    Add template mode 'simple.xlink.properties' to allow
    easy customization of formatting of links generated
    from elements other than xref, link, and olink using
    the xlink attributes.

  • Robert Stayton: param.xweb; param.ent

    Add table.caption.properties to format table captions.

  • Robert Stayton: table.xsl

    Add support for caption in a CALS table.

  • Robert Stayton: graphics.xsl; math.xsl

    Refactored the 'process.image' template to create modular
    templates for each attribute so they can be individually
    customized.  Also merged in support for embedded svg and
    mml content so they can have image attributes too.

  • Robert Stayton: param.xweb; param.ent

    Check in new params for FO side regions in page masters.

  • Robert Stayton: titlepage.xsl; titlepage.templates.xml

    Add support for itermset in info elements, using titlepage mechanism
    to ensure entries are placed inside page-sequence.

  • Robert Stayton: pagesetup.xsl

    Add support for side body margins and side static content regions.
    Fixes bug 3389931.

  • Robert Stayton: param.xweb; param.ent; task.xsl

    Add attribute-set task.properties to task element to
    support customization.

  • Robert Stayton: lists.xsl; param.xweb; param.ent

    Add new attribute-sets calloutlist.properties and callout.properties
    to  better support customization of calloutlists, fixing bug 3160341.

  • Jirka Kosek: Makefile

    Titlepage mechanism is now namespace aware to support XHTML. Please note that when generating titlepage template stylesheets you have to pass FO or XHTML namespace inside ns parameter. For HTML parameter should be empty.

  • Robert Stayton: graphics.xsl

    Allow selection by role for multiple imageobject elements
    within an imageobjectco, which since Docbook 5 allows multiple imageobjects.

  • Mauritz Jeanson: titlepage.xsl

    Added template for collabname. Fixes bug #3414436.

  • David Cramer: verbatim.xsl

    Support the keep-together processing-instruction on programlisting, screen, synopsis, and literallayout. Tracker id #3396906.

  • Robert Stayton: pagesetup.xsl

    Pass the pageclass, sequence, and gentext-key to the template
    named header.footer.widths to enable further customization
    based on page master.

  • Jirka Kosek: xref.xsl

    hyphenation of URL content must be disabled for link, not only for ulink because od DB5

  • Jirka Kosek: xref.xsl

    URLs shouldn't be hyphenated as normal text

  • Jirka Kosek: callout.xsl

    Added support for alternative circled numbers

  • Mauritz Jeanson: axf.xsl; fop1.xsl; xep.xsl

    Added support for author/orgname in document metadata. Closes bug #3132862.

  • Robert Stayton: component.xsl

    Add template for article/colophon to avoid nested page-sequence.

HTML

The following changes have been made to the html code since the 1.76.1 release.

  • Robert Stayton: xref.xsl

    Add support for using info/title as well as title in target element.

  • Robert Stayton: component.xsl

    Enable support for html5 features, including using <section> instead of
    <div> for certain elements, and setting heading level to <h1> for chapters.
    These features are not changed in the base html stylesheet for backwards
    compatibility.

  • Robert Stayton: docbook.css.xml

    Add style for footnote rule.

  • Robert Stayton: biblio-iso690.xsl

    Add support for subtitle inside info.

  • Robert Stayton: docbook.xsl

    Add call to new 'root.attributes' placeholder template to allow
    adding attributes to the <html> output element.

  • Robert Stayton: inline.xsl; titlepage.xsl; formal.xsl; division.xsl;
    toc.xsl; sections.xsl⋯

    Finish implementation of generate.id.attributes for all elements
    using the template named id.attribute.

  • Robert Stayton: autotoc.xsl; chunktoc.xsl; titlepage.xsl; chunk-code.xsl;
    changebars.xsl; ⋯

    Add basic support for new <topic> element.

  • Robert Stayton: graphics.xsl

    Fix handling of mediatypes for video and audio files, mostly for HTML5 and EPUB3 outputs.

  • Robert Stayton: callout.xsl; verbatim.xsl

    Restore programlisting to use <pre> instead of <div> and instead
    wrap callout img elements in <span> to make valid HTML.

  • Robert Stayton: graphics.xsl

    Turn off img longdesc attribute because not supported by browsers.

  • Robert Stayton: footnote.xsl

    Move square brackets and <sup> inside <a> element for footnote
    marks to fix display problems in some browsers.

  • Robert Stayton: param.xweb; param.ent

    Add new params html.script and html.script.type to support
    Javascript references.

  • Robert Stayton: chunk-common.xsl; chunktoc.xsl; titlepage.xsl; chunker.xsl;
    chunk-code.xsl⋯

    Add support for chunked.filename.prefix param.
    Make sure base.dir value has a trailing slash in
    the chunk.base.dir internal param used by the templates.

  • Robert Stayton: formal.xsl; htmltbl.xsl

    Now handles caption in html markup table like title,
    so formal.object.title is used with all its features, including
    formatting and placement.
    Added htmlTable.with.caption template to handle the wrapper, and
    left htmlTable template unchanged.
    Now caption template in mode="htmlTable" does nothing, because
    caption handled by formal.object.title template.

  • Robert Stayton: html.xsl

    Turn off generating the title attribute for block and hierarchical elements.
    Should only be used for inline elements, usually using the alt element.
    Also used for links to show the target title.

  • Robert Stayton: lists.xsl

    The spacing="compact" attribute on lists in HTML no longer outputs compact="compact"
    (or just "compact" in the case of Saxon 6), since that attribute is
    deprecated and improperly supported.  Instead, the output uses a
    multiple class attribute such as class="orderedlist compact".
    Use CSS to style such lists without margin above.

  • Robert Stayton: graphics.xsl

    Allow selection by role for multiple imageobject elements
    within an imageobjectco, which since Docbook 5 allows multiple imageobjects.

  • Robert Stayton: pi.xsl

    Improve doc descriptions of dbhtml filename and dir.

  • Robert Stayton: autoidx.xsl

    Add setindex to context param in mode="reference" to better
    support setindex.

  • Robert Stayton: autotoc.xsl

    Support set as child of set in set.toc template.

  • Robert Stayton: qandaset.xsl

    Change question and title templates to replace hard-coded
    class="local-name()" with mode="class.attribute" to support customization
    of class values.

  • Norman Walsh: chunktoc.xsl

    Separate book appendixes from article appendixes (so that they can be customized independently)

  • Mauritz Jeanson: graphics.xsl

    Added condition to prevent "Failed to interpret image" messages (SVG is not supported
    by the graphic size extension).

Epub

The following changes have been made to the epub code since the 1.76.1 release.

  • Robert Stayton: docbook.xsl

    Replace $base.dir with $chunk.base.dir to ensure trailing slash in place.

HTMLHelp

The following changes have been made to the htmlhelp code since the 1.76.1
release.

  • Robert Stayton: htmlhelp-common.xsl

    Change $base.dir to $chunk.base.dir to ensure trailing slash in place.

Eclipse

The following changes have been made to the eclipse code since the 1.76.1
release.

  • Robert Stayton: eclipse.xsl; eclipse3.xsl

    Use $chunk.base.dir instead of $base.dir to ensure trailing slash is in place.

JavaHelp

The following changes have been made to the javahelp code since the 1.76.1
release.

  • Robert Stayton: javahelp.xsl

    Change $base.dir to $chunk.base.dir to ensure trailing slash is present.

  • Mauritz Jeanson: javahelp.xsl

    Replaced empty header.navigation and footer.navigation templates with parameter suppress.navigation=1,
    which simplifies customization. See bug #3310904.

Webhelp

The following changes have been made to the webhelp code since the 1.76.1
release.

  • David Cramer: template/common/css/positioning.css

    Webhelp: Adding print-only css rules

  • David Cramer: template/common/main.js

    Webhelp: Arun's fix for bug where heading was partially hidden by header in some situations.

  • David Cramer: xsl/webhelp-common.xsl

    Webhelp: turn off autolabeling by default

  • David Cramer: xsl/webhelp.xsl

    Webhelp: Import xhtml base stylesheets

  • David Cramer: docsrc/readme.xml

    Webhelp: Link to the DocBook reference docs from the webhelp readme

  • David Cramer: xsl/webhelp-common.xsl

    Webhelp: Use gentext value for noscript warning

  • David Cramer: Makefile

    Webhelp: Delete tempfile after DocBook xsl build

  • David Cramer: xsl/webhelp.xsl

    Webhelp: moving parameters into the standard location so they will be part of the parameter reference

  • David Cramer: xsl/webhelp.xsl; xsl/webhelp-common.xsl

    Webhelp: moving parameters into the standard location so they will be part of the parameter reference

  • David Cramer: template/common/main.js

    Webhelp: tweaking scrolldown offset for anchors

  • David Cramer: docsrc/images; docsrc/images/sample.jpg; docsrc/readme.xml;
    template/content⋯

    Webhelp: updating docs. Ant version, install instructions, handling of images.

  • David Cramer: xsl/webhelp.xsl

    Patch from Arun Bharadwaj to display message if JavaScript is disabled

  • David Cramer: template/content/search/nwSearchFnt.js

    Patch from Arun Bharadwaj to strip quotes from search query strings

  • Robert Stayton: xsl/webhelp.xsl

    Add basic support for new <topic> element.

  • Jirka Kosek: xsl/webhelp.xsl

    Put back old extensibility point.

    Guys, please don't remove existing extensibility points like named templates, it will break existing customizations.

  • David Cramer: xsl/webhelp.xsl

    Moving webhelp gentext strings into a context

  • tom_schr: param.ent

    Disabled branding and brandname entities for the time being

  • tom_schr: param.xweb; param.ent

    Prepared WebHelp reference documentation :)
    Not clear about parameters brandname and branding: Should they renamed
    to "webhelp.branding" and "webhelp.brandname"?
    Currently, docsrc/reference.xml contains only a comment for the WebHelp
    ref doc to be non-intrusive.
    Idea is to enable it when it is ready

  • tom_schr: xsl/webhelp.xsl

    Moved language specific of WebHelp to gentext/locale/ as discussed with
    Stefan following the "minimal intrusive approach". :)
    In the long run, maybe moving the text into a context, not sure.

  • David Cramer: template/common/css/positioning.css

    Webhelp: Lower the minimum width of content pane

  • kasunbg: xsl/webhelp.xsl; template/common/main.js

    If an user moved to another page by clicking on a toc link, and then clicked on #searchDiv,
    search should be performed if the cookie textToSearch is not empty.

  • David Cramer: xsl/webhelp.xsl

    Webhelp: Left align titles in nav header. Display  for all but the topmost page

  • David Cramer: template/content/search/stemmers/en_stemmer.js; docsrc/
    xinclude-test.xml

    Webhelp: Cleanup related to en_stemmer.js changes

  • David Cramer: template/common/css/positioning.css

    Webhelp: Don't put borders around qandaset list

  • David Cramer: template/common/main.js

    Webhelp: Avoid unnecessary scroll ups when anchor is clicked on

  • David Cramer: build.properties

    Webhelp: Show footer nav by default

  • David Cramer: build.properties; build.xml

    Webhelp: Support setting suppress.footer.navigation from build.properties

  • David Cramer: build.properties; build.xml

    Webhelp: Support admon.graphics param in build.properties

  • David Cramer: docsrc/xinclude-test.xml; docsrc/readme.xml

    Webhelp: Adding xinclude example to the demo/readme doc

  • David Cramer: template/common/css/positioning.css

    Webhelp: Remove border around table used to format callout list

  • David Cramer: xsl/webhelp.xsl; template/common/images/admon/tip.png;
    template/common/image⋯

    Webhelp: Support admon graphics (still off by default)

  • David Cramer: xsl/webhelp.xsl; template/common/css/positioning.css

    Webhelp: Turn on navfooter and fix related css

  • David Cramer: xsl/webhelp.xsl

    Webhelp: Fix error about undeclared doc.title param

  • David Cramer: docsrc/readme.xml

    Webhelp: Adding some test search terms to the readme

  • David Cramer: template/content/search/stemmers/en_stemmer.js

    Handle exceptional cases listed in the Porter 2 stemming algo

  • David Cramer: template/content/search/stemmers/en_stemmer.js

    Webhelp: adding special case word 'say' to en js stemmer

  • David Cramer: template/content/search/stemmers/en_stemmer.js

    Webhelp: Refine stemming of terms that end in (only stem if there's a consonant before the -y)

  • David Cramer: template/content/search/stemmers/en_stemmer.js; template/
    content/search/nwSe⋯

    Webhelp: fixed bug where words like key, day, and nucleus, were not found due to differences in the way the client stemmer and indexer stemmed words

  • David Cramer: build.xml

    Webhelp: Support xinclude and two-pass profiling in build.xml

  • David Cramer: xsl/webhelp.xsl

    Fix bad link to default topic.

  • kasunbg: docsrc/readme.xml

    Automatically limit the size of the search description to something 140 characters

  • kasunbg: xsl/webhelp.xsl

    removing outline in 'contents' and 'search' buttons that is visible when clicked. tabindex for SIDEBAR button.

  • kasunbg: xsl/webhelp.xsl; build.xml

    Webhelp ant script changes - HTML transformation support for WebHelp - Uses Tagsoup for parsing the bad html.
    tagsoup-1.2.1.jar is added to trunk/xsl-webhelpindexer/lib/

  • kasunbg: xsl/webhelp.xsl

    proper support for saxon xhtml transformation.

  • kasunbg: template/common/images/callouts/10.png; template/common/images/
    callouts/11.png; t⋯

    webhelp - adding callouts

  • kasunbg: xsl/webhelp.xsl; template/common/main.js; template/common/css/
    positioning.css

    webhelp - animations for show/hide Sidebar

  • kasunbg: build.properties

    commenting about brand and brandname

  • kasunbg: Makefile

    parameterized MAKE for webhelp

  • kasunbg: xsl/webhelp.xsl; template/common/css/positioning.css;
    build.properties; build.xml

    webhelp xsl customization - logo

  • kasunbg: template/content/search/nwSearchFnt.js

    remove some JS warninings

  • kasunbg: template/content/search/nwSearchFnt.js

    Fix for missing "No results found for..." bug

  • kasunbg: xsl/webhelp.xsl

    commented about the importance of the order of css contents. Order is important between the in-html-file css and the linked css files. Some css declarations in jquery-ui-1.8.2.custom.css are over-ridden. If that's a concern, just remove the additional css contents inside these default jquery css files. I thought of keeping them intact for easier maintenance.

  • Jirka Kosek: xsl/webhelp.xsl; template/common/css/positioning.css

    Minor cleanup, added extensibility hook, some styling moved into CSS for easier customization

  • David Cramer: template/content/search/nwSearchFnt.js

    Removing onclick that came from Oxygen's dita stuff

  • kasunbg: docsrc/readme.xml

    webhelp - documenting about features

  • kasunbg: template/common/css/positioning.css

    webhelp search text box

  • kasunbg: template/common/css/positioning.css

    adding header background image

  • kasunbg: xsl/webhelp.xsl; template/common/images/header-bg.png

    new header background image

  • kasunbg: xsl/webhelp.xsl; template/common/css/positioning.css

    fix left navigation

  • kasunbg: template/common/css/positioning.css

    some css

  • kasunbg: build.xml

    Adding html.extension property

  • kasunbg: template/common/css/positioning.css; build.properties; build.xml

    webhelp - Adding enable.stemming, toc.file build properties

  • David Cramer: template/common/css/positioning.css

    Make the webhelp banner slightly larger.

  • David Cramer: template/common/main.js; template/common/css/positioning.css

    Adjust colors and positioning of header and search/toc tabs

  • David Cramer: xsl/webhelp.xsl

    Only put doc title in header

  • David Cramer: template/common/css/positioning.css; template/common/images/
    main_bg_fade.png

    Adjusting default color of the header

  • kasunbg: xsl/webhelp.xsl; template/common/css/positioning.css

    adjustments to header title. Now output in Opera looks good.

  • kasunbg: template/common/images/sidebar.png; template/content/search/
    punctuation.props; te⋯

    deleting svn:executable flag from webhelp files

  • kasunbg: xsl/webhelp.xsl; template/common/css/positioning.css; template/
    common/images/sear⋯

    Customized the left navagation headers; Contents and Search.
    Adding custom css for the current redmond ui of jquery-ui. These override jquery-ui's default css customizations. These are supposed to take precedence.

  • kasunbg: docsrc/readme.xml

    typo fix

  • kasunbg: template/common/images/next-arrow.png; xsl/webhelp.xsl; template/
    common/main.js; ⋯

    UI improvements.
            Moved search highligher to search tab.
            Added nice icons for navigation buttons etc.
            Removed footer navigation
            Corrected tree colorings
            Overall, some css magic

  • David Cramer: docsrc/readme.xml

    Added listitem thinking SyncRO Soft for their contributions.

  • kasunbg: build.xml

    support for default classpath for Gentoo Linux

  • kasunbg: docsrc/readme.xml

    webhelp - some updates to the documentation about search

  • kasunbg: template/common/css/positioning.css

    Fix for issue 'Keep "search" & "contents" titles always visible in webhelp - ID: 3403438'

  • David Cramer: template/common/images/starsSmall.png

    Changed icons used to show search weightings from stars to boxes so they won't look like user ratings

  • David Cramer: xsl/webhelp.xsl; template/common/main.js; template/common/
    images/starsSmall.⋯

    Merged Oxygen webhelp improvements (search weightings etc) into trunk: -r9031:9039

  • kasunbg: docsrc/readme.xml

    webhelp documentation - search indexing, faq

  • kasunbg: docsrc/readme.xml

    update webhelp documentation

  • David Cramer: xsl/webhelp.xsl

    Fixed bug where webhelp.default.topic was not being used if it was set

  • David Cramer: xsl/webhelp.xsl; template/content/search/nwSearchFnt.js

    Localize string in nwSearchFnt.js file

  • David Cramer: xsl/webhelp.xsl

    Added tabindex attributes to make tab order in UI more logical in webhelp.

  • David Cramer: template/common/main.js

    Fixed bug where anchors in pages landed beneath the banner.

  • kasunbg: xsl/webhelp.xsl

    Added more comments to the xsl/webhelp/xsl/webhelp.xsl file. Removed some clutter.

  • David Cramer: template/common/main.js

    Fixed problem reported in IE 8. See tracker id # 373747.

  • David Cramer: xsl/webhelp.xsl

    Addressed tracker #3247166 by removing hard-coded reference to ch01.html.

  • kasunbg: build.xml

    Changed the webhelp build.xml to reflect the changes to xsl-webhelpindexer.
    Added classpaths for xercesImpl and xml-api jars to the indexer. Paths added for *nix environments, need to look at how the current system behaves in Windows. Discussion: http://lists.oasis-open.org/archives/docbook-apps/201011/msg00116.html

  • kasunbg: template/common/images/loading.gif; template/common/jquery/
    treeview/jquery.treevi⋯

    webhelp: Removing some unnecessary JQuery JS files

  • kasunbg: template/common/main.js

    webhelp: Usability improvement - when click on a node in the TOC tree, the child nodes will auto populate now.

  • kasunbg: xsl/webhelp.xsl

    Added google translated localizations for Japanese, German, French, and Chinese. The translations might not be pretty accurate.
    Better translations are appreciated.

  • kasunbg: docsrc/readme.xml; template/content/images; template/content/
    images/sample.jpg

    Added documentation for how to add images to WebHelp

  • Jirka Kosek: xsl/webhelp.xsl

    Added more customization hooks
    Search code output only when search tab is active
    Added cs localization

  • Jirka Kosek: xsl/webhelp.xsl

    Added parameter webhelp.common.dir for specifying location of common files (JS+CSS)
    Added hooks for adding additional user defined tabs

Params

The following changes have been made to the params code since the 1.76.1
release.

  • David Cramer: webhelp.indexer.language.xml

    Webhelp: Fixing list of supported languages

  • David Cramer: webhelp.indexer.language.xml

    Webhelp: Correct language code in docs for Chinese

  • Mauritz Jeanson: admon.graphics.extension.xml

    Added list of graphics formats.

  • Mauritz Jeanson: passivetex.extensions.xml

    Updated link.

  • tom_schr: webhelp.indexer.language.xml; webhelp.default.topic.xml;
    webhelp.tree.cookie.id.⋯

    Prepared WebHelp reference documentation :)
    Not clear about parameters brandname and branding: Should they renamed
    to "webhelp.branding" and "webhelp.brandname"?
    Currently, docsrc/reference.xml contains only a comment for the WebHelp
    ref doc to be non-intrusive.
    Idea is to enable it when it is ready

  • Robert Stayton: glossary.collection.xml

    Add info about relative paths.

  • Robert Stayton: para.properties.xml

    Special attribute-set for para only.

  • Robert Stayton: table.caption.properties.xml

    To format table captions.

  • Robert Stayton: html.script.type.xml; html.script.xml

    Add support for specifying javascript references like css references.

  • Robert Stayton: body.margin.outer.xml; region.outer.extent.xml;
    body.margin.inner.xml; reg⋯

    Add support for side regions in FO output.

  • Robert Stayton: chunked.filename.prefix.xml

    New param chunked.filename.prefix to separate any such prefix from
    the base.dir param, which helps fix bug 3087359.

  • Robert Stayton: generate.consistent.ids.xml

    New param to support replacing generate-id() with xsl:number
    for more consistent id values.

  • Robert Stayton: task.properties.xml

    Allow task to be customized more easily.

  • Robert Stayton: calloutlist.properties.xml; callout.properties.xml

    Support better customization of callout lists.

  • Jirka Kosek: callout.unicode.start.character.xml

    Added support for alternative circled numbers

  • David Cramer: example.properties.xml

    Made example.properties use keep-together='auto' like table.properies to avoid problems where example/programlisting takes more than one page

  • Mauritz Jeanson: graphicsize.extension.xml

    Added info about supported image formats.

Highlighting

The following changes have been made to the highlighting code since the 1.76.1
release.

  • Jirka Kosek: csharp-hl.xml

    Added LINQ keywords

  • Jirka Kosek: delphi-hl.xml

    Additional keywords from Yuri Zhilin

Profiling

The following changes have been made to the profiling code since the 1.76.1
release.

  • David Cramer: profile-mode.xsl

    When profile.* params only consist of space characters, then ignore them.

Lib

The following changes have been made to the lib code since the 1.76.1 release.

  • Robert Stayton: lib.xweb

    Added two utility templates to make lib.xsl work
    without reference to other modules since it is used
    that way with profiling/xsl2profile.xsl.

  • Robert Stayton: lib.xweb

    Fix trim.common.uri.paths to first resolve any ../ in
    the paths.

Template

The following changes have been made to the template code since the 1.76.1
release.

  • Jirka Kosek: titlepage.xsl

    Titlepage mechanism is now namespace aware to support XHTML. Please note that when generating titlepage template stylesheets you have to pass FO or XHTML namespace inside ns parameter. For HTML parameter should be empty.

Extensions

The following changes have been made to the extensions code since the 1.76.1
release.

  • kasunbg: Makefile

    webhelp - Adding enable.stemming, toc.file build properties

  • David Cramer: Makefile

    Attempt to convince Makefile that webhelpindexer is dirty

XSL-Saxon

The following changes have been made to the xsl-saxon code since the 1.76.1
release.

  • Mauritz Jeanson: src/com/nwalsh/saxon/Verbatim.java; src/com/nwalsh/saxon/
    FormatGraphicCal⋯

    Added fixes to ensure that generated XHTML markup for callouts is in the proper namespace.

Release Notes: 1.77.1

The following is a list of changes that have been made since the 1.77.0
release.

FO

The following changes have been made to the fo code since the 1.77.0 release.

  • Robert Stayton: docbook.xsl

    Import the VERSION.xsl file instead of VERSION so mimetype is interpreted correctly
    from the filename.

  • Robert Stayton: block.xsl

    In sidebar, turn off space before first para if there is no title.

  • Robert Stayton: math.xsl

    Restored templates for mml:* elements that were accidentally deleted.

HTML

The following changes have been made to the html code since the 1.77.0 release.

  • Robert Stayton: docbook.xsl

    Import the VERSION.xsl file instead of VERSION so mimetype is interpreted correctly
    from the filename.

  • Robert Stayton: sections.xsl

    Use $div.element variable in place of div to support html5 section element.
    output

  • Robert Stayton: autoidx.xsl

    Fix bug 3528673, missing "separator" param on template with
    match="indexterm" mode="reference".  That param is passed
    for endofrange processing to output the range separator.

Roundtrip

The following changes have been made to the roundtrip code since the 1.77.0
release.

  • Robert Stayton: dbk2ooo.xsl; dbk2pages.xsl; dbk2wordml.xsl; dbk2wp.xsl

    Import the VERSION.xsl file instead of VERSION so mimetype is interpreted correctly
    from the filename.

Slides

The following changes have been made to the slides code since the 1.77.0
release.

  • Robert Stayton: html/slides-common.xsl

    Import the VERSION.xsl file instead of VERSION so mimetype is interpreted correctly
    from the filename.

Website

The following changes have been made to the website code since the 1.77.0
release.

  • Robert Stayton: website-common.xsl

    Import the VERSION.xsl file instead of VERSION so mimetype is interpreted correctly
    from the filename.

Webhelp

The following changes have been made to the webhelp code since the 1.77.0
release.

  • kasunbg: docsrc/readme.xml

    updated webhelp documentation

  • kasunbg: template/content/search/nwSearchFnt.js; xsl/webhelp-common.xsl

    Removed the script htmlFileList.js since it's content is in htmlFileInfoList.js

  • Robert Stayton: xsl/webhelp-common.xsl

    In the <h1> output, replace call to 'get.doc.title' with
    mode="title.markup" because get.doc.title returns only
    the string value of the title, losing any markup such
    as <trademark> or <superscript>.

  • kasunbg: template/common/css/positioning.css; template/content/search/
    nwSearchFnt.js

    Remove unnecessary bits of code from webhelp

  • David Cramer: docsrc/readme.xml

    Webhelp: Minor edits to the readme

  • David Cramer: xsl/webhelp.xsl; xsl/titlepage.templates.xsl; xsl/
    titlepage.templates.xml

    Webhelp: Suppress abstracts from titlepages. These are used to create the search result summary sentence and should not be shown

  • David Cramer: build.xml

    Webhelp: calculate path to profile.xsl from main build.xml file

Release Notes: 1.76.1

The following is a list of changes that have been made since the 1.76.0
release.

FO

The following changes have been made to the fo code since the 1.76.0 release.

  • Robert Stayton: docbook.xsl; xref.xsl; fop1.xsl

    Apply patch to support named destination in fop1.xsl, per Sourceforge
    bug report #3029845.

HTML

The following changes have been made to the html code since the 1.76.0 release.

  • Keith Fahlgren: highlight.xsl

    Implementing handling for <b> and <i>: transform to <strong> and <em> for XHTML outputs and do not use in the highliting output (per Mauritz Jeanson)

Params

The following changes have been made to the params code since the 1.76.0
release.

  • Robert Stayton: draft.mode.xml

    Change default for draft.mode to 'no'.

Release Notes: 1.76.0

This release includes important bug fixes and adds the following significant
feature changes:

Webhelp

    A new browser-based, cross-platform help format with full-text search and
    other features typically found in help systems. See webhelp/docs/content/
    ch01.html for more information and a demo.

Gentext

    Many updates and additions to translation/locales thanks to Red Hat, the
    Fedora Project, and other contributors.

Common

    Faster localization support, as language files are loaded on demand.

FO

    Support for SVG content in imagedata added.

HTML

    Output improved when using 'make.clean.html' and a stock CSS file is now
    provided.

EPUB

    A number of improvements to NCX, cover and image selection, and XHTML 1.1
    element choices

The following is a list of changes that have been made since the 1.75.2
release.

Gentext

The following changes have been made to the gentext code since the 1.75.2
release.

  • rlandmann: locale/fa.xml

                Update to Persian translation from the Fedora Project


  • rlandmann: locale/nds.xml

                Locale for Low German


  • Mauritz Jeanson: locale/ka.xml; Makefile

                Added support for Georgian based on patch #2917147.


  • rlandmann: locale/nl.xml; locale/ja.xml

                Updated translations from Red Hat and the Fedora Project


  • rlandmann: locale/bs.xml; locale/ru.xml; locale/hr.xml

                Updated locales from Red Hat and the Fedora Project


  • rlandmann: locale/pt.xml; locale/cs.xml; locale/es.xml; locale/bg.xml;
    locale/nl.xml; loca⋯

                Updated translations from Red Hat and the Fedora Project


  • rlandmann: locale/as.xml; locale/bn_IN.xml; locale/ast.xml; locale/ml.xml;
    locale/te.xml; ⋯

                New translations from Red Hat and the Fedora Project


  • rlandmann: locale/pt.xml; locale/ca.xml; locale/da.xml; locale/sr.xml;
    locale/ru.xml; loca⋯

                Updated translations from Red Hat and the Fedora Project


Common

The following changes have been made to the common code since the 1.75.2
release.

  • Mauritz Jeanson: common.xsl

                Fixed bug in output-orderedlist-starting-number template (@startingnumber did not work for FO).


  • Mauritz Jeanson: gentext.xsl

                Added fix to catch ID also of descendants of listitem. Closes bug #2955077.


  • Jirka Kosek: l10n.xsl

                Stripped down, faster version of gentext.template is used when there is no localization customization.


  • Mauritz Jeanson: stripns.xsl

                Added fix that preserves link/@role (makes links in the reference documentation
    with @role="tcg" work).


  • Mauritz Jeanson: l10n.xsl

                Fixed bugs related to manpages and L10n.


  • Jirka Kosek: entities.ent; autoidx-kosek.xsl

                Upgraded to use common entities. Fixed bug when some code used @sortas and some not for grouping/sorting of indexterms.


  • Jirka Kosek: l10n.xsl; l10n.dtd; l10n.xml; autoidx-kosek.xsl

                Refactored localization support. Language files are loaded on demand. Speedup is about 30%.


  • Jirka Kosek: l10n.xsl

                Added xsl:keys for improved performance of localization texts look up. Performance gain around 15%.


  • Mauritz Jeanson: titles.xsl

                Fixed bug #2912677 (error with xref in title).


  • Robert Stayton: olink.xsl

                Fix bug in xrefstyle "title" handling introduced with
    the 'insert.targetdb.data' template.


  • Robert Stayton: gentext.xsl

                Fix bug in xref to equation without title to use context="xref-number" instead
    of "xref-number-and-title".


  • Robert Stayton: labels.xsl

                Number all equations in one sequence, with or without title.


  • Robert Stayton: entities.ent

                Fix bug #2896909 where duplicate @sortas on indexterms caused
    some indexterms to drop out of index.


  • Robert Stayton: stripns.xsl

                Expand the "Stripping namespace ..." message to advise users to
    use the namespaced stylesheets.


  • Robert Stayton: stripns.xsl

                need a local version of $exsl.node.set.available variable because
    this module imported many places.


  • Mauritz Jeanson: olink.xsl

                Added /node() to the select expression that is used to compute the title text
    so that no <ttl> elements end up in the output. Closes bug #2830119.


FO

The following changes have been made to the fo code since the 1.75.2 release.

  • Robert Stayton: table.xsl

                Fix bug 2979166 able - Attribute @rowheader not working


  • Mauritz Jeanson: inline.xsl

                Improved glossterm auto-linking by using keys. The old code was inefficient when processing documents
    with many inline glossterms.


  • Robert Stayton: titlepage.xsl

                Fix bug 2805530 author/orgname not appearing on title page.


  • Mauritz Jeanson: graphics.xsl

                Added support for SVG content in imagedata (inspired by patch #2909154).


  • Mauritz Jeanson: table.xsl

                Removed superfluous test used when computing column-width. Closes bug #3000898.


  • Mauritz Jeanson: inline.xsl

                Added missing <xsl:call-template name="anchor"/>. Closes bug #2998567.


  • Mauritz Jeanson: lists.xsl

                Added table-layout="fixed" on segmentedlist table (required by XSL spec when  proportional-column-width() is used).


  • Jirka Kosek: autoidx-kosek.xsl

                Upgraded to use common entities. Fixed bug when some code used @sortas and some not for grouping/sorting of indexterms.


  • Jirka Kosek: index.xsl

                Upgraded to use common entities. Fixed bug when some code used @sortas and some not for grouping/sorting of indexterms.


  • Robert Stayton: xref.xsl

                Fix bug in olink template when an olink has an id.
    Add warning message with id value when trying to link
    to an element that has no generated text.


  • Mauritz Jeanson: refentry.xsl

                Fixed bug #2930968 (indexterm in refmeta not handled correctly).


  • Robert Stayton: block.xsl

                fix bug 2949567 title in revhistory breaks FO transform.


  • Robert Stayton: glossary.xsl

                Output id attributes on glossdiv blocks so they can be added to
    xrefs or TOC.


  • Jirka Kosek: xref.xsl

                Enabled hyphenation of URLs when ulink content is the same as link target


  • Robert Stayton: table.xsl

                Apply patch to turn off row recursion if no @morerows attributes present.
    This will enable very large tables without row spanning to
    process without running into recursion limits.


  • Robert Stayton: formal.xsl

                Format equation without title using table layout with equation number
    next to the equation.


  • Robert Stayton: param.xweb; param.ent

                Add equation.number.properties.


HTML

The following changes have been made to the html code since the 1.75.2 release.

  • Mauritz Jeanson: block.xsl

                Modified acknowledgements template to avoid invalid output (<p> in <p>).


  • Mauritz Jeanson: titlepage.xsl

                Added default sidebar attribute-sets.


  • Robert Stayton: table.xsl

                Fix bug 2979166 able - Attribute @rowheader not working


  • Robert Stayton: footnote.xsl

                Fix bug 3033191 footnotes in html tables.


  • Mauritz Jeanson: inline.xsl

                Improved glossterm auto-linking by using keys. The old code was inefficient when processing documents
    with many inline glossterms.


  • Robert Stayton: docbook.css.xml; verbatim.xsl

                Fix bug 2844927 Validity error for callout bugs.


  • Robert Stayton: formal.xsl

                Convert formal.object.heading to respect make.clean.html param.


  • Robert Stayton: titlepage.templates.xml; block.xsl

                Fix bug 2840768 sidebar without title inserts empty b tag.


  • Mauritz Jeanson: docbook.xsl

                Moved the template that outputs <base> so that the base URI also applies to relative CSS paths that come later.
    See patch #2896121.


  • Jirka Kosek: autoidx-kosek.xsl

                Upgraded to use common entities. Fixed bug when some code used @sortas and some not for grouping/sorting of indexterms.


  • Robert Stayton: chunk-code.xsl

                fix bug 2948363 generated filename for refentry not unique, when
    used in a set.


  • Robert Stayton: component.xsl

                Fix missing "Chapter n" label when use chapter/info/title.


  • Robert Stayton: table.xsl

                Row recursion turned off if no @morerows attributes in the table.
    This will prevent failure on long table (with no @morerows) due
    to excessive depth of recursion.


  • Robert Stayton: autotoc.xsl; docbook.css.xml

                Support make.clean.html in autotoc.xsl.


  • Robert Stayton: docbook.css.xml; block.xsl

                Add support for make.clean.html setting in block elements.


  • Robert Stayton: docbook.css.xml

                Stock CSS styles for DocBook HTML output when 'make.clean.html' is non-zero.


  • Robert Stayton: html.xsl

                Add templates for generating CSS files and links to them.


  • Robert Stayton: param.xweb

                Fix bugs in new entity references.


  • Robert Stayton: chunk-common.xsl

                List of Equations now includes on equations with titles.


  • Robert Stayton: table.xsl

                If a colspec has a colname attribute, add it to the HTML col
    element as a class attribute so it can be styled.


  • Robert Stayton: formal.xsl

                Fix bug 2825842 where table footnotes not appearing in HTML-coded table.


  • Robert Stayton: chunktoc.xsl

                Fix bug #2834826 where appendix inside part was not chunked as it should be.


  • Mauritz Jeanson: chunktoc.xsl

                Added missing namespace declarations. Closes bug #2890069.


  • Mauritz Jeanson: footnote.xsl

                Updated the template for footnote paras to use the 'paragraph' template. Closes bug #2803739.


  • Keith Fahlgren: inline.xsl; lists.xsl

                Remove <b> and <i> elements "discouraged in favor of style sheets" from
    XHTML, XHTML 1.1 (and therefore EPUB) outputs by changing html2xhtml.xsl.

    Fixes bug #2873153: No <b> and <i> tags in XHTML/EPUB

    Added regression to EPUB specs:


  • Mauritz Jeanson: inline.xsl

                Fixed bug #2844916 (don't output @target if ulink.target is empty).


  • Keith Fahlgren: autoidx.xsl

                Fix a bug when using index.on.type: an 'index symbols' section was created
    even if that typed index didn't include any symbols (they were in the other types).


Manpages

The following changes have been made to the manpages code since the 1.75.2
release.

  • Mauritz Jeanson: other.xsl

                Modified the write.stubs template so that the section directory name is not output twice. Should fix bug #2831602.
    Also ensured that $lang is added to the .so path (when man.output.lang.in.name.enabled=1).


  • Mauritz Jeanson: docbook.xsl; other.xsl

                Fixed bug #2412738 (apostrophe escaping) by applying the submitted patch.


  • Norman Walsh: block.xsl; endnotes.xsl

                Fix bug where simpara in footnote didn't work. Patch by Jonathan Nieder, jrnieder@gmail.com


  • dleidert: lists.xsl

                Fix two indentation issues: In the first case there is no corresponding .RS
    macro (Debian #519438, sf.net 2793873). In the second case an .RS instead of
    the probably intended .sp leads to an indentation bug (Debian #527309,
    sf.net #2642139).


Epub

The following changes have been made to the epub code since the 1.75.2 release.

  • Keith Fahlgren: bin/spec/examples/AMasqueOfDays.epub; docbook.xsl; bin/spec
    /epub_spec.rb

                Resolve some actual regressions in date output spotted by more recent versions of epubcheck


  • Keith Fahlgren: docbook.xsl

                Updated mediaobject selection code that better uses roles (when available); based on contributons by  Glenn McDonald


  • Keith Fahlgren: bin/spec/epub_regressions_spec.rb; docbook.xsl

                Ensure that NCX documents are always outputted with a default namespace
    to prevent problems with the kindlegen machinery


  • Keith Fahlgren: bin/spec/epub_regressions_spec.rb; bin/spec/files/
    partintro.xml; docbook.x⋯

                Adding support for partintros with sect2s, 3s, etc


  • Keith Fahlgren: docbook.xsl

                Adding param to workaround horrific ADE bug with the inability to process <br>


  • Keith Fahlgren: docbook.xsl

                Add support for authorgroup/author in OPF metadata (via Michael Wiedmann)


  • Keith Fahlgren: bin/spec/epub_regressions_spec.rb

                Remove <b> and <i> elements "discouraged in favor of style sheets" from
    XHTML, XHTML 1.1 (and therefore EPUB) outputs by changing html2xhtml.xsl.

    Fixes bug #2873153: No <b> and <i> tags in XHTML/EPUB

    Added regression to EPUB specs:


  • Keith Fahlgren: bin/lib/docbook.rb; bin/spec/files/DejaVuSerif-Italic.otf;
    docbook.xsl; bi⋯

                This resolves bug #2873142, Please add support for multiple embedded fonts


    If you navigate to a checkout of DocBook-XSL and go to:
    xsl/epub/bin/spec/files
    You can now run the following command:

    ../../dbtoepub -f DejaVuSerif.otf -f DejaVuSerif-Italic.otf -c test.css
    -s test_cust.xsl orm.book.001.xml

    In dbtoepub, the following option can be used more than once:
    -f, --font [OTF FILE] Embed OTF FILE in .epub.

    The underlying stylesheet now accepts a comma-separated list of font file
    names rather than just one as the RENAMED epub.embedded.fonts ('s' added).

    The runnable EPUB spec now includes:
    - should be valid .epub after including more than one embedded font


  • Keith Fahlgren: docbook.xsl

                Improve the selection of cover images when working in DocBook 4.x land (work in progress)


  • Keith Fahlgren: bin/spec/epub_regressions_spec.rb; docbook.xsl

                Improve the quality of the OPF spine regression by ensuring that the spine
    elements for deeply nested refentries are in order and adjacent to their
    opening wrapper XHTML chunk.


  • Keith Fahlgren: bin/spec/epub_regressions_spec.rb; docbook.xsl; bin/spec/
    files/orm.book.00⋯

                Add more careful handling of refentries to ensure that they always appear in the opf:spine.
    This was only a problem when refentries were pushed deep into the hierarchy (like inside
    a sect2), but presented navigational problems for many reading systems (despite the
    correct NCX references). This may *not* be the best solution, but attacking a better
    chunking strategy for refentries was too big a nut to crack at this time.


Eclipse

The following changes have been made to the eclipse code since the 1.75.2
release.

  • Mauritz Jeanson: eclipse3.xsl

                Added a stylesheet module that generates plug-ins conforming to the standard (OSGi-based) Eclipse 3.x
    architecture. The main difference to the older format is that metadata is stored in a separate
    manifest file. The module imports and extends the existing eclipse.xsl module. Based on code
    contributed in patch #2624668.


Params

The following changes have been made to the params code since the 1.75.2
release.

  • Robert Stayton: draft.watermark.image.xml

                Fix bug 2922488 draft.watermark.image pointing to web resource.
    Now the value is images/draft.png, and may require customization
    for local resolution.


  • Mauritz Jeanson: equation.number.properties.xml

                Corrected refpurpose.


  • Norman Walsh: paper.type.xml

                Added USlegal and USlegallandscape paper types.


  • Jirka Kosek: highlight.xslthl.config.xml

                Added note about specifying location as URL


  • Robert Stayton: docbook.css.source.xml; generate.css.header.xml;
    custom.css.source.xml; ma⋯

                Params to support generated CSS files.


  • Robert Stayton: equation.number.properties.xml

                New attribute set for numbers appearing next to equations.


XSL-Xalan

The following changes have been made to the xsl-xalan code since the 1.75.2
release.

  • dleidert: nbproject/genfiles.properties; nbproject/build-impl.xml

                Rebuild netbeans build files after adding missing Netbeans configuration to allow easier packaging for Debian.


Release Notes: 1.75.2

The following is a list of changes that have been made since the 1.75.1
release.

Gentext

The following changes have been made to the gentext code since the 1.75.1
release.

  • dleidert: locale/ja.xml

    Improved Japanese translation for Note(s). Closes bug #2823965.

  • dleidert: locale/pl.xml

    Polish alphabet contains O with acute accent, not with grave accent. Closes bug #2823964.

  • Robert Stayton: locale/ja.xml

    Fix translation of "index", per bug report 2796064.

  • Robert Stayton: locale/is.xml

    New Icelandic locale file.

Common

The following changes have been made to the common code since the 1.75.1
release.

  • Norman Walsh: stripns.xsl

    Support more downconvert cases

  • Robert Stayton: titles.xsl

    Make sure title inside info is used if no other title.

FO

The following changes have been made to the fo code since the 1.75.1 release.

  • Robert Stayton: pi.xsl

    Turn off dbfo-need for fop1.extensions also, per bug #2816141.

HTML

The following changes have been made to the html code since the 1.75.1 release.

  • Mauritz Jeanson: titlepage.xsl

    Output "Copyright" heading in XHTML too.

  • Mauritz Jeanson: titlepage.xsl

    Added stylesheet.result.type test for copyright. Closes bug #2813289.

  • Norman Walsh: htmltbl.xsl

    Remove ambiguity wrt @span, @rowspan, and @colspan

Manpages

The following changes have been made to the manpages code since the 1.75.1
release.

  • Mauritz Jeanson: endnotes.xsl

    Added normalize-space() for ulink content. Closes bug #2793877.

  • Mauritz Jeanson: docbook.xsl

    Added stylesheet.result.type test for copyright. Closes bug #2813289.

Epub

The following changes have been made to the epub code since the 1.75.1 release.

  • Keith Fahlgren: bin/dbtoepub; bin/lib/docbook.rb

    Corrected bugs caused by path and file assumptions were not met

  • Keith Fahlgren: bin/lib/docbook.rb; docbook.xsl

    Cleaning up hardcoded values into parameters and fixing Ruby library to pass them properly; all thanks to patch from Liza Daly

Profiling

The following changes have been made to the profiling code since the 1.75.1
release.

  • Robert Stayton: profile.xsl

    Fix bug 2815493 missing exsl.node.set.available parameter.

XSL-Saxon

The following changes have been made to the xsl-saxon code since the 1.75.1
release.

  • Mauritz Jeanson: src/com/nwalsh/saxon/ColumnUpdateEmitter.java; src/com/
    nwalsh/saxon/Colum⋯

    Added fixes so that colgroups in the XHTML namespace are processed properly.

XSL-Xalan

The following changes have been made to the xsl-xalan code since the 1.75.1
release.

  • Mauritz Jeanson: nbproject/project.xml

    Added missing NetBeans configuration.

Release Notes: 1.75.1

This release includes bug fixes.

The following is a list of changes that have been made since the 1.75.0
release.

FO

The following changes have been made to the fo code since the 1.75.0 release.

  • Keith Fahlgren: block.xsl

    Switching to em dash for character before attribution in epigraph; resolves Bug #2793878

  • Robert Stayton: lists.xsl

    Fixed bug 2789947, id attribute missing on simplelist fo output.

HTML

The following changes have been made to the html code since the 1.75.0 release.

  • Keith Fahlgren: block.xsl

    Switching to em dash for character before attribution in epigraph; resolves Bug #2793878

  • Robert Stayton: lists.xsl

    Fixed bug 2789678: apply-templates line accidentally deleted.

Epub

The following changes have been made to the epub code since the 1.75.0 release.

  • Keith Fahlgren: bin/spec/epub_regressions_spec.rb; docbook.xsl

    Added regression and fix to correct "bug" with namespace-prefixed container elements in META-INF/container.xml ; resolves Issue #2790017

  • Keith Fahlgren: bin/spec/epub_regressions_spec.rb; bin/spec/files/
    onegraphic.xinclude.xml;⋯

    Another attempt at flexible named entity and XInclude processing

  • Keith Fahlgren: bin/lib/docbook.rb

    Tweaking solution to Bug #2750442 following regression reported by Michael Wiedmann.

Params

The following changes have been made to the params code since the 1.75.0
release.

  • Mauritz Jeanson: highlight.source.xml

    Updated documentation to reflect changes made in r8419.

Release Notes: 1.75.0

This release includes important bug fixes and adds the following significant
feature changes:

Gentext

    Modifications to translations have been made.

Common

    Added support for some format properties on tables using HTML table markup.

    Added two new qanda.defaultlabel values so that numbered sections and
    numbered questions can be distinguished. Satisfies Feature Request #
    1539045.

    Added code to handle acknowledgements in book and part. The element is
    processed similarly to dedication. All acknowledgements will appear as
    front matter, after any dedications.

FO

    The inclusion of highlighting code has been simplified.

    Add support for pgwide on informal objects.

    Added a new parameter, bookmarks.collapse, that controls the initial state
    of the bookmark tree. Closes FR #1792326.

    Add support for more dbfo processing instructions.

    Add new variablelist.term.properties to format terms, per request #
    1968513.

    Add support for @width on screen and programlisting, fixes bug #2012736.

    Add support for writing-mode="rl-tb" (right-to-left) in FO outputs.

    Add writing.mode param for FO output.

HTML

    Convert all calls to class.attribute to calls to common.html.attributes to
    support dir, lang, and title attributes in html output for all elements.
    Fulfills feature request #1993833.

    Inclusion of highlighting code was simplified. Only one import is now
    necessary.

    Add new param index.links.to.section.

    Add support for the new index.links.to.section param which permits precise
    links to indexterms in HTML output rather than to the section title.

ePub

    Slightly more nuanced handling of imageobject alternatives and better
    support in dbtoepub for XIncludes and ENTITYs to resolve Issue #2750442
    reported by Raphael Hertzog.

    Added a colon after an abstract/title when mapping into the dc:description
    for OPF metadata in ePub output to help the flat text have more
    pseudo-semantics (sugestions from Michael Wiedmann)

    Added DocBook subjectset -> OPF dc:subject mapping and tests

    Added DocBook date -> OPF dc:date mapping and tests

    Added DocBook abstract -> OPF dc:description mapping and tests

    Added --output option to dbtoepub based on user request

HTMLHelp

    Add support for generating olink target database for htmlhelp files.

Params

    Add default setting for @rules attribute on HTML markup tables.

    Added a new parameter, bookmarks.collapse, that controls the initial state
    of the bookmark tree. When the parameter has a non-zero value (the
    default), only the top-level bookmarks are displayed initially. Otherwise,
    the whole tree of bookmarks is displayed. This is implemented for FOP 0.9X.
    Closes FR #1792326.

    Add new variablelist.term.properties to format terms, per request #
    1968513.

    Add two new qanda.defaultlabel values so that numbered sections and
    numbered questions can be distinguished. Satisfies Feature Request #
    1539045.

    Add param to control whether an index entry links to a section title or to
    the precise location of the indexterm.

    New attribute list for glossentry in glossary.

    New parameter to support @width on programlisting and screen.

    Add attribute-sets for formatting glossary terms and defs.

Highlighting

    Inclusion of highlighting code was simplified. Only one import is now
    necessary.

The following is a list of changes that have been made since the 1.74.3
release.

Gentext

The following changes have been made to the gentext code since the 1.74.3
release.

  • Robert Stayton: locale/sv.xml; locale/ja.xml; locale/pl.xml

    Check in translations of Legalnotice submitted on mailing list.

  • Robert Stayton: locale/es.xml

    Fix spelling errors in Acknowledgements entries.

  • Robert Stayton: locale/es.xml

    Check in translations for 4 elements submitted through docbook-apps
    message of 14 April 2009.

  • David Cramer: locale/zh.xml; locale/ca.xml; locale/ru.xml; locale/ga.xml;
    locale/gl.xml; l⋯

    Internationalized punctuation in glosssee and glossseealso

  • Robert Stayton: Makefile

    Check in fixes for DSSSL gentext targets from submitted patch #1689633.

  • Robert Stayton: locale/uk.xml

    Check in major update submitted with bug report #2008524.

  • Robert Stayton: locale/zh_tw.xml

    Check in fix to Note string submitted in bug #2441051.

  • Robert Stayton: locale/ru.xml

    Checkin typo fix submitted in bug #2453406.

Common

The following changes have been made to the common code since the 1.74.3
release.

  • Robert Stayton: gentext.xsl

    Fix extra generated space when xrefstyle includes 'nopage'.

  • Robert Stayton: table.xsl

    Add support for some format properties on tables using
    HTML table markup.  These include:
      - frame attribute on table (or uses $default.table.frame parameter).
      - rules attribute on table (or uses $default.table.rules parameter).
      - align attribute on td and th
      - valign attribute on td and th
      - colspan on td and th
      - rowspan on td and th
      - bgcolor on td and th

  • Robert Stayton: olink.xsl

    Add placeholder template to massage olink hot text to make
    customization easier, per Feature Request 1828608.

  • Robert Stayton: targets.xsl

    Add support for collecting olink targets from a glossary
    generated from a glossary.collection.

  • Robert Stayton: titles.xsl

    Handle firstterm like glossterm in mode="title.markup".

  • Robert Stayton: titles.xsl

    Add match on info/title in title.markup templates where missing.

  • Mauritz Jeanson: titles.xsl

    Changed "ancestor::title" to "(ancestor::title and (@id or @xml:id))".
    This enables proper formatting of inline elements in titles in TOCs,
    as long as these inlines don't have id or xml:id attributes.

  • Robert Stayton: labels.xsl

    Add two new qanda.defaultlabel values so that numbered sections
    and numbered questions can be distinguished.  Satisfies
    Feature Request #1539045.

  • Robert Stayton: stripns.xsl; pi.xsl

    Convert function-available(exsl:node-set) to use the new param
    so Xalan bug is isolated.

  • Mauritz Jeanson: titles.xsl

    Added fixes for bugs #2112656 and #1759205:
    1. Reverted mistaken commits r7485 and r7523.
    2. Updated the template with match="link" and mode="no.anchor.mode" so that
    @endterm is used if it exists and if the link has no content.

  • Mauritz Jeanson: titles.xsl

    Added code to handle acknowledgements in book and part. The element is processed
    similarly to dedication. All acknowledgements will appear as front matter, after
    any dedications.

  • Robert Stayton: olink.xsl

    Fix bug #2018717 use.local.olink.style uses wrong gentext context.

  • Robert Stayton: olink.xsl

    Fix bug #1787167 incorrect hot text for some olinks.

  • Robert Stayton: common.xsl

    Fix bug #1669654 Broken output if copyright <year> contains a range.

  • Robert Stayton: labels.xsl

    Fix bug in labelling figure inside appendix inside article inside book.

FO

The following changes have been made to the fo code since the 1.74.3 release.

  • Jirka Kosek: highlight.xsl

    Inclusion of highlighting code was simplified. Only one import is now necessary.

  • Robert Stayton: fop1.xsl

    Add the new fop extensions namespace declaration, in case FOP
    extension functions are used.

  • Robert Stayton: formal.xsl

    Add support for pgwide on informal objects.

  • Robert Stayton: docbook.xsl

    Fixed spurious closing quote on line 134.

  • Robert Stayton: docbook.xsl; autoidx-kosek.xsl; autoidx.xsl

    Convert function-available for node-set() to use
    new $exsl.node.set.available param in test.

  • David Cramer: xref.xsl

    Suppress extra space after xref when xrefstyle='select: label nopage' (#2740472)

  • Mauritz Jeanson: pi.xsl

    Fixed doc bug for row-height.

  • David Cramer: glossary.xsl

    Internationalized punctuation in glosssee and glossseealso

  • Robert Stayton: param.xweb; param.ent; htmltbl.xsl; table.xsl

    Add support for some format properties on tables using
    HTML table markup.  These include:
      - frame attribute on table (or uses $default.table.frame parameter).
      - rules attribute on table (or uses $default.table.rules parameter).
      - align attribute on td and th
      - valign attribute on td and th
      - colspan on td and th
      - rowspan on td and th
      - bgcolor on td and th

  • Robert Stayton: table.xsl

    Add support bgcolor in td and th
    elements in HTML table markup.

  • Robert Stayton: htmltbl.xsl

    Add support for colspan and rowspan and bgcolor in td and th
    elements in HTML table markup.

  • Robert Stayton: param.xweb

    Fix working of page-master left and right margins.

  • Mauritz Jeanson: param.xweb; param.ent; fop1.xsl

    Added a new parameter, bookmarks.collapse, that controls the initial state of the bookmark tree. When the parameter has a non-zero value (the default), only the top-level bookmarks are displayed initially. Otherwise, the whole tree of bookmarks is displayed.  This is implemented for FOP 0.9X. Closes FR #1792326.

  • Robert Stayton: table.xsl; pi.xsl

    Add support for dbfo row-height processing instruction, like that in dbhtml.

  • Robert Stayton: lists.xsl

    Add support for dbfo keep-together processing instruction for
    entire list instances.

  • Robert Stayton: lists.xsl; block.xsl

    Add support fo dbfo keep-together processing instruction to
    more blocks like list items and paras.

  • Robert Stayton: lists.xsl; param.xweb; param.ent

    Add new variablelist.term.properties to format terms, per request # 1968513.

  • Robert Stayton: inline.xsl

    In simple.xlink, rearrange order of processing.

  • Robert Stayton: xref.xsl

    Handle firstterm like glossterm in mode="xref-to".

  • Robert Stayton: glossary.xsl; xref.xsl; pi.xsl; footnote.xsl

    Implement simple.xlink for glosssee and glossseealso so they can use
    other types of linking besides otherterm.

  • Robert Stayton: qandaset.xsl

    Add two new qanda.defaultlabel values so that numbered sections and numbered questions can be distinguished.  Satisfies Feature Request #1539045.

  • Robert Stayton: titlepage.xsl

    For the book title templates, I changed info/title to book/info/title
    so other element's titles will not be affected.

  • Robert Stayton: xref.xsl; verbatim.xsl

    Use param exsl.node.set.available to test for function.

  • Robert Stayton: param.xweb; param.ent; footnote.xsl

    Start using new param exsl.node.set.available to work around Xalan bug.

  • Robert Stayton: titlepage.templates.xml

    Add comment on use of t:predicate for editor to prevent
    extra processing of multiple editors. Fixes bug 2687842.

  • Robert Stayton: xref.xsl; autoidx.xsl

    An indexterm primary, secondary, or tertiary element with an id or xml:id
    now outputs that ID, so that index entries can be cross referenced to.

  • Mauritz Jeanson: synop.xsl

    Added modeless template for ooclass|oointerface|ooexception.
    Closes bug #1623468.

  • Robert Stayton: xref.xsl

    Add template with match on indexterm in mode="xref-to" to fix bug 2102592.

  • Robert Stayton: xref.xsl

    Now xref to qandaentry will use the label element in a question for
    the link text if it has one.

  • Robert Stayton: inline.xsl

    Add id if specified from @id to output for quote and phrase so
    they can be xref'ed to.

  • Robert Stayton: xref.xsl

    Add support for xref to phrase, simpara, anchor, and quote.
    This assumes the author specifies something using xrefstyle since
    the elements don't have ordinary link text.

  • Robert Stayton: toc.xsl

    Fix bug in new toc templates.

  • Mauritz Jeanson: titlepage.xsl; component.xsl; division.xsl; xref.xsl;
    titlepage.templates⋯

    Added code to handle acknowledgements in book and part. The element is processed
    similarly to dedication. All acknowledgements will appear as front matter, after
    any dedications.

  • Robert Stayton: toc.xsl

    Rewrite toc templates to support an empty toc or populated toc
    in all permitted contexts.  Same for lot elements.
    This fixes bug #1595969 for FO outputs.

  • Robert Stayton: index.xsl

    Fix indents for seealsoie so they are consistent.

  • Mauritz Jeanson: param.xweb

    Removed duplicate (monospace.font.family).

  • Robert Stayton: param.xweb; param.ent

    Add glossentry.list.item.properties.

  • Robert Stayton: param.xweb; param.ent

    Add monospace.verbatim.font.width param to support @width on programlisting.

  • Robert Stayton: verbatim.xsl

    Put programlisting in fo:block-container with writing-mode="lr-tb"
    when text direction is right to left because all program languages
    are left-to-right.

  • Robert Stayton: verbatim.xsl

    Add support for @width on screen and programlisting, fixes bug #2012736.

  • Robert Stayton: xref.xsl

    Fix bug #1973585 xref to para with xrefstyle not handled correctly.

  • Mauritz Jeanson: block.xsl

    Added support for acknowledgements in article.
    Support in book/part remains to be added.

  • Robert Stayton: xref.xsl

    Fix bug #1787167 incorrect hot text for some olinks.

  • Robert Stayton: fo.xsl

    Add writing-mode="tb-rl" as well since some XSL-FO processors support it.

  • Robert Stayton: autotoc.xsl; lists.xsl; glossary.xsl; fo.xsl; table.xsl;
    pagesetup.xsl

    Add support for writing-mode="rl-tb" (right-to-left) in FO outputs.
    Changed instances of margin-left to margin-{$direction.align.start}
    and margin-right to margin-{$direction.align.end}. Those direction.align
    params are computed from the writing mode value in each locale's
    gentext key named 'writing-mode', introduced in 1.74.3 to add
    right-to-left support to HTML outputs.

  • Robert Stayton: param.xweb; param.ent

    Add attribute-sets for formatting glossary terms and defs.

  • Robert Stayton: param.xweb; param.ent

    Add writing.mode param for FO output.

  • Robert Stayton: autotoc.xsl

    Fix bug 1546008: in qandaentry in a TOC, use its blockinfo/titleabbrev or blockinfo/title
    instead of question, if available. For DocBook 5, use the info versions.

  • Keith Fahlgren: verbatim.xsl

    Add better pointer to README for XSLTHL

  • Keith Fahlgren: verbatim.xsl

    More tweaking the way that XSLTHL does or does not get called

  • Keith Fahlgren: verbatim.xsl

    Alternate attempt at sanely including/excluding XSLTHT code

HTML

The following changes have been made to the html code since the 1.74.3 release.

  • Robert Stayton: lists.xsl

    Removed redundant lang and title attributes on list element inside
    div element for lists.

  • Robert Stayton: inline.xsl; titlepage.xsl; division.xsl; toc.xsl;
    sections.xsl; table.xsl;⋯

    Convert all calls to class.attribute to calls to common.html.attributes
    to support dir, lang, and title attributes in html output for all elements.
    Fulfills feature request #1993833.

  • Robert Stayton: chunk-common.xsl

    Fix bug #2750253 wrong links in list of figures in chunk.html
    when target html is in a subdirectory and dbhtml filename used.

  • Jirka Kosek: highlight.xsl

    Inclusion of highlighting code was simplified. Only one import is now necessary.

  • Robert Stayton: chunk-common.xsl; chunktoc.xsl; docbook.xsl;
    chunk-changebars.xsl; autoidx⋯

    Convert function-available for node-set() to use
    new $exsl.node.set.available param in test.

  • Mauritz Jeanson: pi.xsl

    Fixed doc bug for row-height.

  • David Cramer: glossary.xsl

    Internationalized punctuation in glosssee and glossseealso

  • Robert Stayton: lists.xsl; html.xsl; block.xsl

    More elements get common.html.attributes.
    Added locale.html.attributes template which does the lang,
    dir, and title attributes, but not the class attribute
    (used on para, for example).

  • Robert Stayton: lists.xsl

    Replace more literal class atts with mode="class.attribute" to support
    easier customization.

  • Robert Stayton: glossary.xsl

    Support olinking in glosssee and glossseealso.

  • Robert Stayton: inline.xsl

    In simple.xlink, rearrange order of processing.

  • Robert Stayton: xref.xsl

    Handle firstterm like glossterm in mode="xref-to".

  • Robert Stayton: lists.xsl; html.xsl; block.xsl

    Added template named common.html.attributes to output
    class, title, lang, and dir for most elements.
    Started adding it to some list and block elements.

  • Robert Stayton: qandaset.xsl

    Add two new qanda.defaultlabel values so that numbered sections
    and numbered questions can be distinguished.  Satisfies
    Feature Request #1539045.

  • Robert Stayton: param.xweb; chunk-code.xsl; param.ent; xref.xsl;
    chunkfast.xsl; verbatim.x⋯

    Use new param exsl.node.set.available to test, handles Xalan bug.

  • Robert Stayton: autoidx.xsl

    Use named anchors for primary, secondary, and tertiary ids so
    duplicate entries with different ids can still have an id output.

  • Robert Stayton: param.xweb; param.ent

    Add new param index.links.to.section.

  • Robert Stayton: xref.xsl; autoidx.xsl

    Pass through an id on primary, secondary, or tertiary to
    the index entry, so that one could link to an index entry.
    You can't link to the id on an indexterm because that is
    used to place the main anchor in the text flow.

  • Robert Stayton: autoidx.xsl

    Add support for the new index.links.to.section param which permits
    precise links to indexterms in HTML output rather than to
    the section title.

  • Mauritz Jeanson: synop.xsl

    Added modeless template for ooclass|oointerface|ooexception.
    Closes bug #1623468.

  • Robert Stayton: qandaset.xsl

    Make sure a qandaset has an anchor, even when it has no title,
    because it may be referenced in a TOC or xref.
    Before, the anchor was output by the title, but there was no
    anchor if there was no title.

  • Robert Stayton: xref.xsl

    Add a template for indexterm with mode="xref-to" to fix bug 2102592.

  • Robert Stayton: xref.xsl

    Now xref to qandaentry will use the label element in a question for
    the link text if it has one.

  • Robert Stayton: qandaset.xsl; html.xsl

    Create separate templates for computing label of question and answer
    in a qandaentry, so such can be used for the alt text of an xref
    to a qandaentry.

  • Robert Stayton: inline.xsl; xref.xsl

    Now support xref to phrase, simpara, anchor, and quote,
    most useful when an xrefstyle is used.

  • Robert Stayton: toc.xsl

    Rewrite toc templates to support an empty toc or populated toc
    in all permitted contexts.  Same for lot elements.
    This fixes bug #1595969 for HTML outputs.

  • Mauritz Jeanson: titlepage.xsl; component.xsl; division.xsl; xref.xsl;
    titlepage.templates⋯

    Added code to handle acknowledgements in book and part. The element is processed
    similarly to dedication. All acknowledgements will appear as front matter, after
    any dedications.

  • Robert Stayton: index.xsl

    Rewrote primaryie, secondaryie and tertiaryie templates to handle
    nesting of elements and seeie and seealsoie, as reported in
    bug # 1168912.

  • Robert Stayton: autotoc.xsl

    Fix simplesect in toc problem.

  • Robert Stayton: verbatim.xsl

    Add support for @width per bug report #2012736.

  • Robert Stayton: formal.xsl; htmltbl.xsl

    Fix bug #1787140 HTML tables not handling attributes correctly.

  • Robert Stayton: param.xweb

    Move writing-mode param.

  • Keith Fahlgren: refentry.xsl

    Remove a nesting of <p> inside <p> for refclass (made XHTML* invalid, made HTML silly)

  • Robert Stayton: table.xsl

    Fix bug #1945872 to allow passthrough of colwidth values to
    HTML table when no tablecolumns.extension is available and
    when no instance of * appears in the table's colspecs.

  • Mauritz Jeanson: block.xsl

    Added support for acknowledgements in article.
    Support in book/part remains to be added.

  • Robert Stayton: chunk-common.xsl

    Fix bug #1787167 incorrect hot text for some olinks.

  • Robert Stayton: qandaset.xsl

    Fix bug 1546008: in qandaentry in a TOC, use its blockinfo/titleabbrev or blockinfo/title
    instead of question, if available. For DocBook 5, use the info versions.

  • Robert Stayton: chunktoc.xsl

    Add support for generating olink database when using chunktoc.xsl.

  • Keith Fahlgren: verbatim.xsl

    Add better pointer to README for XSLTHL

  • Keith Fahlgren: verbatim.xsl

    Another stab at fixing the stupid XSLTHT includes across processors (Saxon regression reported by Sorin Ristache)

  • Keith Fahlgren: verbatim.xsl

    More tweaking the way that XSLTHL does or does not get called

  • Keith Fahlgren: verbatim.xsl

    Alternate attempt at sanely including/excluding XSLTHT code

Manpages

The following changes have been made to the manpages code since the 1.74.3
release.

  • Robert Stayton: table.xsl

    Convert function-available test for node-set() function to
    test of $exsl.node.set.available param.

  • Mauritz Jeanson: lists.xsl

    Added a template for bibliolist. Closes bug #1815916.

ePub

The following changes have been made to the epub code since the 1.74.3 release.

  • Keith Fahlgren: bin/spec/epub_regressions_spec.rb; bin/spec/files/
    onegraphic.xinclude.xml;⋯

    Slightly more nuanced handling of imageobject alternatives and better support in dbtoepub for XIncludes and ENTITYs to resolve Issue #2750442 reported by Raphael Hertzog.

  • Keith Fahlgren: docbook.xsl

    Add a colon after an abstract/title when mapping into the dc:description for OPF metadata in ePub output to help the flat text have more pseudo-semantics (sugestions from Michael Wiedmann)

  • Keith Fahlgren: bin/spec/epub_regressions_spec.rb; docbook.xsl; bin/spec/
    files/de.xml

    Correctly set dc:language in OPF metadata when i18nizing. Closes Bug #2755150

  • Keith Fahlgren: bin/spec/epub_regressions_spec.rb; docbook.xsl

    Corrected namespace declarations for literal XHTML elements to make them serialize "normally"

  • Keith Fahlgren: docbook.xsl

    Be a little bit more nuanced about dates

  • Keith Fahlgren: docbook.xsl; bin/spec/epub_realbook_spec.rb; bin/spec/files
    /orm.book.001.x⋯

    Add DocBook subjectset -> OPF dc:subject mapping and tests

  • Keith Fahlgren: docbook.xsl; bin/spec/epub_realbook_spec.rb; bin/spec/files
    /orm.book.001.x⋯

    Add DocBook date -> OPF dc:date mapping and tests

  • Keith Fahlgren: docbook.xsl; bin/spec/epub_realbook_spec.rb; bin/spec/files
    /orm.book.001.x⋯

    Add DocBook abstract -> OPF dc:description mapping and tests

  • Robert Stayton: docbook.xsl

    Check in patch submitted by user to add opf:file-as attribute
    to dc:creator element.

  • Keith Fahlgren: bin/dbtoepub

    Adding --output option to dbtoepub based on user request

  • Keith Fahlgren: docbook.xsl; bin/spec/epub_spec.rb

    Cleaning and regularizing the generation of namespaced nodes for OPF, NCX, XHTML and other outputted filetypes (hat tip to bobstayton for pointing out the silly, incorrect code)

  • Keith Fahlgren: bin/spec/epub_regressions_spec.rb; bin/spec/files/
    refclass.xml

    Remove a nesting of <p> inside <p> for refclass (made XHTML* invalid, made HTML silly)

  • Keith Fahlgren: bin/spec/epub_regressions_spec.rb; bin/spec/files/
    blockquotepre.xml

    Added regression test and fix for XHTML validation problem with <a>s added inside <blockquote>; This potentially causes another problem (where something is referenced by has no anchor, but someone reporting that should cause the whole <a id='thing'/> thing to be reconsidered with modern browsers in mind.

HTMLHelp

The following changes have been made to the htmlhelp code since the 1.74.3
release.

  • Robert Stayton: htmlhelp-common.xsl

    Add support for generating olink target database for htmlhelp files.

Params

The following changes have been made to the params code since the 1.74.3
release.

  • Robert Stayton: default.table.rules.xml

    Add default setting for @rules attribute on HTML markup tables.

  • Mauritz Jeanson: bookmarks.collapse.xml

    Added a new parameter, bookmarks.collapse, that controls the initial state
    of the bookmark tree. When the parameter has a non-zero value (the default),
    only the top-level bookmarks are displayed initially. Otherwise, the whole
    tree of bookmarks is displayed.

    This is implemented for FOP 0.9X. Closes FR #1792326.

  • Robert Stayton: variablelist.term.properties.xml

    Add new variablelist.term.properties to format terms, per
    request # 1968513.

  • Robert Stayton: qanda.defaultlabel.xml

    Add two new qanda.defaultlabel values so that numbered sections
    and numbered questions can be distinguished.  Satisfies
    Feature Request #1539045.

  • Robert Stayton: index.links.to.section.xml

    Change default to 1 to match past behavior.

  • Robert Stayton: exsl.node.set.available.xml

    Isolate this text for Xalan bug regarding exsl:node-set available.
    If it is ever fixed in Xalan, just fix it here.

  • Robert Stayton: index.links.to.section.xml

    Add param to control whether an index entry links to
    a section title or to the precise location of the
    indexterm.

  • Robert Stayton: glossentry.list.item.properties.xml

    New attribute list for glossentry in glossary.

  • Robert Stayton: monospace.verbatim.font.width.xml

    New parameter to support @width on programlisting and screen.

  • Mauritz Jeanson: highlight.source.xml

    Updated and reorganized the description.

  • Robert Stayton: page.margin.outer.xml; page.margin.inner.xml

    Add caveat about XEP bug when writing-mode is right-to-left.

  • Robert Stayton: article.appendix.title.properties.xml; writing.mode.xml;
    body.start.indent⋯

    Change 'left' to 'start' and 'right' to 'end' to support right-to-left
    writing mode.

  • Robert Stayton: glossdef.block.properties.xml;
    glossdef.list.properties.xml; glossterm.blo⋯

    Add attribute-sets for formatting glossary terms and defs.

  • Robert Stayton: glossterm.separation.xml

    Clarify the description.

  • Robert Stayton: make.year.ranges.xml

    Now handles year element containing a comma or dash without error.

Highlighting

The following changes have been made to the highlighting code since the 1.74.3
release.

  • Jirka Kosek: README

    Inclusion of highlighting code was simplified. Only one import is now necessary.

  • Keith Fahlgren: README

    Adding XSLTHL readme

  • Keith Fahlgren: common.xsl

    Alternate attempt at sanely including/excluding XSLTHT code

XSL-Saxon

The following changes have been made to the xsl-saxon code since the 1.74.3
release.

  • Mauritz Jeanson: src/com/nwalsh/saxon/Text.java

    Added a fix that prevents output of extra blank line.
    Hopefully this closes bug #894805.

XSL-Xalan

The following changes have been made to the xsl-xalan code since the 1.74.3
release.

  • Mauritz Jeanson: src/com/nwalsh/xalan/Text.java

    Added a fix that prevents output of extra blank line.
    Hopefully this closes bug #894805.

Release Notes: 1.74.3

This release fixes some bugs in the 1.74.2 release.

See highlighting/README for XSLTHL usage instructions.

Release Notes: 1.74.2

This release fixes some bugs in the 1.74.1 release.

Release Notes: 1.74.1

This release includes important bug fixes and adds the following significant
feature changes:

Gentext

    Kirghiz locale added and Chinese translations have been simplified.

    Somme support for gentext and right-to-left languages has been added.

FO

    Various bugs have been resolved.

    Support for a new processing instruction: dbfo funcsynopsis-style has been
    added.

    Added new param email.mailto.enabled for FO output. Patch from Paolo
    Borelli.

    Support for documented metadata in fop1 mode has been added.

Highlighting

    Support for the latest version of XSLTHL 2.0 and some new language syntaxes
    have been added to a variety of outputs.

Manpages

    Added man.output.better.ps.enabled param (zero default). It non-zero, no
    such markup is embedded in generated man pages, and no enhancements are
    included in the PostScript output generated from those man pages by the man
    -Tps command.

HTML

    Support for writing.mode to set text direction and alignment based on
    document locale has been added.

    Added a new top-level stylesheet module, chunk-changebars.xsl, to be used
    for generating chunked output with highlighting based on change
    (@revisionflag) markup. The module imports/includes the standard chunking
    and changebars templates and contains additional logic for chunked output.
    See FRs #1015180 and #1819915.

ePub

    Covers now look better in Adobe Digital Editions thanks to a patch from
    Paul Norton of Adobe

    Cover handling now more generic (including limited DocBook 5.0 cover
    support thanks to patch contributed by Liza Daly.

    Cover markup now carries more reliably into files destined for .mobi and
    the Kindle.

    dc:identifiers are now generated from more types of numbering schemes.

    Both SEO and semantic structure of chunked ePub output by ensuring that we
    always send out one and only one h1 in each XHTML chunk.

    Primitive support for embedding a single font added.

    Support for embedding a CSS customizations added.

Roundtrip

    Support for imagedata-metadata and table as images added.

    Support for imagedata-metadata and legalnotice as images added.

Params

    man.output.better.ps.enabled added for Manpages output

    writing.mode.xml added to set text direction.

    Added new param email.mailto.enabled for FO output. Patch from Paolo
    Borelli. Closes #2086321.

    highlight.source upgraded to support the latest version of XSLTHL 2.0.

The following is a list of changes that have been made since the 1.74.0
release.

Gentext

The following changes have been made to the gentext code since the 1.74.0
release.

  • Michael(tm) Smith: locale/ky.xml; Makefile

    new Kirghiz locale from Ilyas Bakirov

  • Mauritz Jeanson: locale/en.xml

    Added "Acknowledgements".

  • Dongsheng Song: locale/zh_cn.xml

    Simplified Chinese translation.

  • Robert Stayton: locale/lv.xml; locale/ca.xml; locale/pt.xml; locale/tr.xml;
    locale/af.xml;⋯

    Add writing-mode gentext string to support right-to-left languages.

FO

The following changes have been made to the fo code since the 1.74.0 release.

  • David Cramer: footnote.xsl

    Added a check to confirm that a footnoteref's linkend points to a footnote. Stylesheets stop processing if not and provide a useful error message.

  • Mauritz Jeanson: spaces.xsl

    Convert spaces to fo:leader also in elements in the DB 5 namespace.

  • Mauritz Jeanson: pi.xsl; synop.xsl

    Added support for a new processing instruction: dbfo funcsynopsis-style.
    Closes bug #1838213.

  • Michael(tm) Smith: inline.xsl; param.xweb; param.ent

    Added new param email.mailto.enabled for FO output.
    Patch from Paolo Borelli. Closes #2086321.

  • Mauritz Jeanson: docbook.xsl

    Added support for document metadata for fop1 (patch #2067318).

  • Jirka Kosek: param.ent; param.xweb; highlight.xsl

    Upgraded to support the latest version of XSLTHL 2.0
     -- nested markup in highlited code is now processed
     -- it is no longer needed to specify path XSLTHL configuration file using Java property
     -- support for new languages, including Perl, Python and Ruby was added

HTML

The following changes have been made to the html code since the 1.74.0 release.

  • Robert Stayton: param.xweb; docbook.xsl; param.ent; html.xsl

    Add support for writing.mode to set text direction and alignment based on document locale.

  • Mauritz Jeanson: chunk-changebars.xsl

    Added a new top-level stylesheet module, chunk-changebars.xsl, to be
    used for generating chunked output with highlighting based on change
    (@revisionflag) markup. The module imports/includes the standard chunking
    and changebars templates and contains additional logic for chunked output.
    See FRs #1015180 and #1819915.

Manpages

The following changes have been made to the manpages code since the 1.74.0
release.

  • Michael(tm) Smith: docbook.xsl

    Put the following at the top of generated roff for each page:
      \" t
    purpose is to explicitly tell AT&T troff that the page needs to be
    pre-processed through tbl(1); groff can figure it out
    automatically, but apparently AT&T troff needs to be explicitly told

ePub

The following changes have been made to the epub code since the 1.74.0 release.

  • Keith Fahlgren: docbook.xsl

    Patch from Paul Norton of Adobe to get covers to look better in Adobe Digital Editions

  • Keith Fahlgren: bin/spec/epub_regressions_spec.rb; bin/spec/files/
    v5cover.xml; bin/spec/sp⋯

    Patch contributed by Liza Daly to make ePub cover handling more generic. Additionally
    DocBook 5.0's <cover> now has some limited support:

    - should reference a cover in the OPF guide for a DocBook 5.0 test document

  • Keith Fahlgren: bin/spec/files/isbn.xml; bin/spec/files/issn.xml; bin/spec/
    files/biblioid.⋯

    Liza Daly reported that the dc:identifer-generation code was garbage (she was right).

    Added new tests:
    - should include at least one dc:identifier
    - should include an ISBN as URN for dc:identifier if an ISBN was in the metadata
    - should include an ISSN as URN for dc:identifier if an ISSN was in the metadata
    - should include an biblioid as a dc:identifier if an biblioid was in the metadata
    - should include a URN for a biblioid with @class attribute as a dc:identifier if an biblioid was in the metadata

  • Keith Fahlgren: docbook.xsl; bin/spec/epub_spec.rb

    Improve both SEO and  semantic structure of chunked ePub output by ensuring that
    we always send out one and only one h1 in each XHTML chunk.

    DocBook::Epub
    - should include one and only one <h1> in each HTML file in rendered ePub files
    for <book>s
    - should include one and only one <h1> in each HTML file in rendered ePub files
    for <book>s even if they do not have section markup

  • Keith Fahlgren: docbook.xsl; bin/spec/epub_realbook_spec.rb; bin/spec/files
    /orm.book.001.x⋯

    Adding better support for covers in epub files destined for .mobi and the Kindle

  • Keith Fahlgren: bin/dbtoepub; bin/lib/docbook.rb; bin/spec/files/
    DejaVuSerif.otf; docbook.⋯

    Adding primitive support for embedding a single font

  • Keith Fahlgren: bin/dbtoepub; bin/lib/docbook.rb; bin/spec/files/
    test_cust.xsl; bin/spec/e⋯

    Adding support for user-specified customization layers in dbtoepub

  • Keith Fahlgren: bin/dbtoepub; bin/spec/epub_regressions_spec.rb; bin/lib/
    docbook.rb; bin/s⋯

    Adding CSS support to .epub target & dbtoepub:
        -c, --css [FILE]                 Use FILE for CSS on generated XHTML.


    DocBook::Epub
    ...
    - should include a CSS link in HTML files when a CSS file has been provided
    - should include CSS file in .epub when a CSS file has been provided
    - should include a CSS link in OPF file when a CSS file has been provided

Roundtrip

The following changes have been made to the roundtrip code since the 1.74.0
release.

  • Steve Ball: blocks2dbk.xsl; template.xml; template.dot

    added support for imagedata-metadata
    added support for table as images

  • Steve Ball: blocks2dbk.xsl; normalise2sections.xsl; sections2blocks.xsl

    Improved support for personname inlines.

  • Steve Ball: blocks2dbk.xsl; blocks2dbk.dtd; template.xml

    Added support for legalnotice.

  • Steve Ball: blocks2dbk.xsl; wordml2normalise.xsl

    added support for orgname in author

  • Steve Ball: specifications.xml; supported.xml; blocks2dbk.xsl;
    wordml2normalise.xsl; dbk2w⋯

    Updated specification.
    to-DocBook: add cols attribute to tgroup
    from-DocBook: fix for blockquote title

Params

The following changes have been made to the params since the 1.74.0 release.

  • The change was to add man.output.better.ps.enabled parameter, with its
    default value set to zero. If the value of the man.output.better.ps.enabled
    parameter is non-zero, certain markup is embedded in each generated man
    page such that PostScript output from the man -Tps command for that page
    will include a number of enhancements designed to improve the quality of
    that output. If man.output.better.ps.enabled is zero (the default), no such
    markup is embedded in generated man pages, and no enhancements are included
    in the PostScript output generated from those man pages by the man -Tps
    command. WARNING: The enhancements provided by this parameter rely on
    features that are specific to groff (GNU troff) and that are not part of
    "classic" AT&T troff or any of its derivatives. Therefore, any man pages
    you generate with this parameter enabled will be readable only on systems
    on which the groff (GNU troff) program is installed, such as GNU/Linux
    systems. The pages will not not be readable on systems on with the classic
    troff (AT&T troff) command is installed. NOTE: The value of this parameter
    only affects PostScript output generated from the man command. It has no
    effect on output generated using the FO backend. TIP: You can generate
    PostScript output for any man page by running the following command: man
    FOO -Tps > FOO.ps You can then generate PDF output by running the following
    command: ps2pdf FOO.ps

  • Robert Stayton: writing.mode.xml

    writing mode param used to set text direction.

  • Michael(tm) Smith: email.mailto.enabled.xml

    Added new param email.mailto.enabled for FO output.
    Patch from Paolo Borelli. Closes #2086321.

  • Jirka Kosek: highlight.source.xml; highlight.xslthl.config.xml

    Upgraded to support the latest version of XSLTHL 2.0
     -- nested markup in highlited code is now processed
     -- it is no longer needed to specify path XSLTHL configuration file using Java property
     -- support for new languages, including Perl, Python and Ruby was added

Highlighting

The following changes have been made to the highlighting code since the 1.74.0
release.

  • Jirka Kosek: cpp-hl.xml; c-hl.xml; tcl-hl.xml; php-hl.xml; common.xsl;
    perl-hl.xml; delphi⋯

    Upgraded to support the latest version of XSLTHL 2.0
     -- nested markup in highlited code is now processed
     -- it is no longer needed to specify path XSLTHL configuration file using Java property
     -- support for new languages, including Perl, Python and Ruby was added

Release Notes: 1.74.0

This release includes important bug fixes and adds the following significant
feature changes:

.epub target

    Paul Norton (Adobe) and Keith Fahlgren(O'Reilly Media) have donated code
    that generates .epub documents from DocBook input. An alpha-reference
    implementation in Ruby has also been provided.

    .epub is an open standard of the The International Digital Publishing Forum
    (IDPF), a the trade and standards association for the digital publishing
    industry.

    Read more about this target in epub/README

XHTML 1.1 target

    To support .epub output, a strict XHTML 1.1 target has been added. The
    stylesheets for this output are generated and are quite similar to the
    XHTML target.

Gentext updates

    A number of locales have been updated.

Roundtrip improvements

    Table, figure, template syncronization, and character style improvements
    have been made for WordML & Pages. Support added for OpenOffice.org.

First implementation of a libxslt extension

    A stylesheet extension for libxslt, written in Python, has been added. The
    extension is a function for adjusting column widths in CALS tables. See
    extensions/README.LIBXSLT for more information.

The following is a list of changes that have been made since the 1.73.2
release.

Gentext

The following changes have been made to the gentext code since the 1.73.2
release.

  • Michael(tm) Smith: locale/id.xml

    Checked in changes to Indonesion locale submitted by Euis Luhuanam a long time ago.

  • Michael(tm) Smith: locale/lt.xml

    Added changes to Lithuanian locate submitted a long time back by Nikolajus Krauklis.

  • Michael(tm) Smith: locale/hu.xml

    fixed error in lowercase.alpha definition in Hungarian locale

  • Michael(tm) Smith: locale/nb.xml

    Corrected language code for nb locale, and restored missing "startquote" key.

  • Michael(tm) Smith: locale/ja.xml

    Committed changes to ja locale file, from Akagi Kobayashi. Adds bracket quotes around many xref instances that did not have them
    before.

  • Michael(tm) Smith: Makefile

    "no" locale is now "nb"

  • Michael(tm) Smith: locale/nb.xml

    Update Norwegian Bokmål translation. Thanks to Hans F. Nordhaug.

  • Michael(tm) Smith: locale/no.xml; locale/nb.xml

    per message from Hans F. Nordhaug, correct identifier for
    Norwegian Bokmål is "nb" (not "no") and has been for quite some
    time now...

  • Michael(tm) Smith: locale/ja.xml

    Converted ja.xml source file to use real unicode characters so
    that the actual glyphs so up when you edit it in a text editor
    (instead of the character references).

  • Michael(tm) Smith: locale/ja.xml

    Checked in changes to ja.xml locale file. Thanks to Akagi Kobayashi.

  • Michael(tm) Smith: locale/it.xml

    Changes from Federico Zenith

  • Dongsheng Song: locale/zh_cn.xml

    Added missing translations.

Common

The following changes have been made to the common code since the 1.73.2
release.

  • Michael(tm) Smith: l10n.xsl

    Added new template "l10.language.name" for retrieving the
    English-language name of the lang setting of the current document.
    Closes #1916837. Thanks to Simon Kennedy.

  • Michael(tm) Smith: refentry.xsl

    fixed syntax error

  • Michael(tm) Smith: refentry.xsl

    fixed a couple of typos

  • Michael(tm) Smith: refentry.xsl

    refined handling of cases where refentry "source" or "manual"
    metadata is missing or when we use fallback content instead. We
    now report a Warning if we use fallback content.

  • Michael(tm) Smith: refentry.xsl

    don't use refmiscinfo@class=date value as fallback for refentry
    "source" or "manual" metadata fields

  • Michael(tm) Smith: refentry.xsl

    Made reporting of missing refentry metadata more quiet:

      - we no longer report anything if usable-but-not-preferred
        metadata is found; we just quietly use whatever we manage to
        find

      - we now only report missing "source" metadata if the refentry
        is missing BOTH "source name" and "version" metadata; if it
        has one but not the other, we use whichever one it has and
        don't report anything as missing

    The above changes were made because testing with some "real world"
    source reveals that some authors are intentionally choosing to use
    "non preferred" markup for some metadata, and also choosing to
    omit "source name" or "version" metadata in there DocBook XML. So
    it does no good to give them pedantic reminders about what they
    already know...

    Also, changed code to cause "fixme" text to be inserted in output
    in particular cases:

      - if we can't manage to find any "source" metadata at all, we
        now put fixme text into the output

      - if we can't manage to find any "manual" metadata a all, we
        now put fixme text into the output

    The "source" and "manual" metadata is necessary information, so
    buy putting the fixme stuff in the output, we alert users to the
    need problem of it being missing.

  • Michael(tm) Smith: refentry.xsl

    When generating manpages output, we no longer report anything if
    the refentry source is missing date or pubdate content. In
    practice, many users intentionally omit the date from the source
    because they explicitly want it to be generated.

  • Michael(tm) Smith: l10n.xml

    further change needed for switch from no locale to nb.

  • Michael(tm) Smith: common.xsl

    Added support for orgname in authorgroup. Thanks to Camille
    Bégnis.

  • Michael(tm) Smith: Makefile

    "no" locale is now "nb"

  • Mauritz Jeanson: stripns.xsl

    Removed the template matching "ng:link|db:link" (in order to make @xlink:show
    work with <link> elements). As far as I can tell, this template is no longer needed.

  • Mauritz Jeanson: entities.ent

    Moved declaration of comment.block.parents entity to common/entities.ent.

  • Mauritz Jeanson: titles.xsl

    Added an update the fix made in revision 7528 (handling of xref/link in no.anchor.mode mode).
    Having xref in title is not a problem as long as the target is not an ancestor element.
    Closes bug #1838136.

    Note that an xref that is in a title and whose target is an ancestor element is still not
    rendered in the TOC. This could be considered a bug, but on the other hand I cannot really
    see the point in having such an xref in a document.

  • Mauritz Jeanson: titles.xsl

    Added a "not(ancestor::title)" test to work around "too many nested
    apply-templates" problems when processing xrefs or links in no.anchor.mode mode.
    Hopefully, this closes bug #1811721.

  • Mauritz Jeanson: titles.xsl

    Removed old template matching "link" in no.anchor.mode mode.

  • Mauritz Jeanson: titles.xsl

    Process <link> in no.anchor.mode mode with the same template as <xref>.
    Closes bug #1759205 (Empty link in no.anchor.mode mode).

  • Mauritz Jeanson: titles.xsl

    In no.anchor.mode mode, do not output anchors for elements that are descendants
    of <title>. Previously, having inline elements with @id/@xml:id in <title>s
    resulted in anchors both in the TOC and in the main flow. Closes bug #1797492.

FO

The following changes have been made to the fo code since the 1.73.2 release.

  • Mauritz Jeanson: pi.xsl

    Updated documentation for keep-together.

  • Mauritz Jeanson: task.xsl

    Enabled use of the keep-together PI on task elements.

  • Robert Stayton: index.xsl

    FOP1 requires fo:wrapper for inline index entries, not fo:inline.

  • Robert Stayton: index.xsl

    Fixed non-working inline.or.block template for indexterm wrappers.
    Add fop1 to list of processors using inline.or.block.

  • Mauritz Jeanson: table.xsl

    Fixed bug #1891965 (colsep in entytbl not working).

  • Mauritz Jeanson: titlepage.xsl

    Added support for title in revhistory. Closes bug #1842847.

  • Mauritz Jeanson: pi.xsl

    Small doc cleanup (dbfo float-type).

  • Mauritz Jeanson: titlepage.xsl

    Insert commas between multiple copyright holders.

  • Mauritz Jeanson: autotoc.xsl; division.xsl

    Added modifications to support nested set elements. See bug #1853172.

  • David Cramer: glossary.xsl

    Added normalize-space to xsl:sorts to avoid missorting of glossterms due to stray leading spaces.

  • David Cramer: glossary.xsl

    Fixed bug #1854199: glossary.xsl should use the sortas attribute on glossentry

  • Mauritz Jeanson: inline.xsl

    Added a template for citebiblioid. The hyperlink target is the parent of the referenced biblioid,
    and the "hot text" is the biblioid itself enclosed in brackets.

  • Mauritz Jeanson: inline.xsl

    Moved declaration of comment.block.parents entity to common/entities.ent.

  • Mauritz Jeanson: docbook.xsl

    Updated message about unmatched element.

  • Mauritz Jeanson: param.xweb

    Added link to profiling chapter of TCG.

  • Mauritz Jeanson: refentry.xsl

    Fixed typo (refsynopsysdiv -> refsynopsisdiv).

  • David Cramer: fop.xsl; fop1.xsl; ptc.xsl; xep.xsl

    Added test to check generate.index param when generating pdf bookmarks

  • Mauritz Jeanson: graphics.xsl

    Added support for MathML in imagedata.

  • Michael(tm) Smith: math.xsl

    Removed unnecessary extra test condition in test express that
    checks for passivetex.

  • Michael(tm) Smith: math.xsl

    Don't use fo:instream-foreign-object if we are processing with
    passivetex. Closes #1806899. Thanks to Justus Piater.

  • Mauritz Jeanson: component.xsl

    Added code to output a TOC for an appendix in an article when
    generate.toc='article/appendix toc'. Closes bug #1669658.

  • Dongsheng Song: biblio-iso690.xsl

    Change encoding from "windows-1250" to "UTF-8".

  • Mauritz Jeanson: pi.xsl

    Updated documentation for dbfo_label-width.

  • Mauritz Jeanson: lists.xsl

    Added support for the dbfo_label-width PI in calloutlists.

  • Robert Stayton: biblio.xsl

    Support finding glossary database entries inside bibliodivs.

  • Robert Stayton: formal.xsl

    Complete support for <?dbfo pgwide="1"?> for informal
    elements too.

  • Mauritz Jeanson: table.xsl

    In the table.block template, added a check for the dbfo_keep-together PI, so that
    a table may break (depending on the PI value) at a page break. This was needed
    since the outer fo:block that surrounds fo:table has keep-together.within-column="always"
    by default, which prevents the table from breaking. Closes bug #1740964 (Titled
    table does not respect dbfo PI).

  • Mauritz Jeanson: pi.xsl

    Added a few missing @role="tcg".

  • Mauritz Jeanson: inline.xsl

    Use normalize-space() in glossterm comparisons (as in html/inline.xsl).

  • Mauritz Jeanson: autoidx.xsl

    Removed the [&scope;] predicate from the target variable in the template with name="reference".
    This filter was the cause of missing index backlinks when @zone and @type were used on indexterms,
    with index.on.type=1. Closes bug #1680836.

  • Michael(tm) Smith: inline.xsl; xref.xsl; footnote.xsl

    Added capability in FO output for displaying URLs for all
    hyperlinks (elements marked up with xlink:href attributes) in the
    same way as URLs for ulinks are already handled (which is to say,
    either inline or as numbered footnotes).

    Background on this change:
    DocBook 5 allows "ubiquitous" linking, which means you can make
    any element a hyperlink just by adding an xlink:href attribute to
    it, with the value set to an external URL. That's in contrast to
    DocBook 4, which only allows you to use specific elements (e.g.,
    the link and ulink elements) to mark up hyperlinks.

    The existing FO stylesheets have a mechanism for handling display
    of URLs for hyperlinks that are marked up with ulink, but they did
    not handle display of URLs for elements that were marked up with
    xlink:href attributes. This change adds handling for those other
    elements, enabling the URLs they link to be displayed either
    inline or as numbered footnotes (depending on what values the user
    has the ulink.show and ulink.footnotes params set to).

    Note that this change only adds URL display support for elements
    that call the simple.xlink template -- which currently is most
    (but not all) inline elements.

    This change also moves the URL display handling out of the ulink
    template and into a new "hyperlink.url.display" named template;
    the ulink template and the simple.xlink named template now both
    call the hyperlink.url.display template.

    Warning: In the stylesheet code that determines what footnote
    number to assign to each footnote or external hyperlink, there is
    an XPath expression for determining whether a particular
    xlink:href instance is an external hyperlink; that expression is
    necessarily a bit complicated and further testing may reveal that
    it doesn't handle all cases as expected -- so some refinements to
    it may need to be done later.

    Closes #1785519. Thanks to Ken Morse for reporting and
    troubleshooting the problem.

HTML

The following changes have been made to the html code since the 1.73.2 release.

  • Keith Fahlgren: inline.xsl; synop.xsl

    Work to make HTML and XHTML targets more valid

  • Keith Fahlgren: table.xsl

    Add better handling for tables that have footnotes in the titles

  • Keith Fahlgren: biblio.xsl

    Add anchors to bibliodivs

  • Keith Fahlgren: formal.xsl; Makefile; htmltbl.xsl

    Initial checkin/merge of epub target from work provided by Paul Norton of Adobe
    and Keith Fahlgren of O'Reilly.

    This change includes new code for generating the XHTML 1.1 target sanely.

  • Mauritz Jeanson: biblio.xsl

    Added code for creating URLs from biblioids with @class="doi" (representing Digital
    Object Identifiers). See FR #1934434 and http://doi.org.

    To do: 1) Add support for FO output. 2) Figure out how @class="doi" should be handled
    for bibliorelation, bibliosource and citebiblioid.

  • Norman Walsh: formal.xsl

    Don't use xsl:copy because it forces the resulting element to be in the same namespace as the source element; in the XHTML stylesheets, that's wrong. But the HTML-to-XHTML converter does the right thing with literal result elements, so use one of them.

  • Michael(tm) Smith: Makefile

    Added checks and hacks to various makefiles to enable building
    under Cygwin. This stuff is ugly and maybe not worth the mess and
    trouble, but does seem to work as expected and not break anything
    else.

  • Michael(tm) Smith: docbook.xsl

    added "exslt" namespace binding to html/docbook.xsl file (in
    addition to existing "exsl" binding. reason is because lack of it
    seems to cause processing problems when using the profiled
    version of the stylsheet

  • Norman Walsh: chunk-common.xsl

    Rename link

  • Mauritz Jeanson: table.xsl

    Added a fix to make rowsep apply to the last row of thead in entrytbl.

  • Michael(tm) Smith: synop.xsl

    Simplified and streamlined handling of output for ANSI-style
    funcprototype output, to correct a problem that was causing type
    data to be lost in the output parameter definitions. For example,
    for an instance like this:
      <paramdef>void *<parameter>dataptr</parameter>[]</paramdef>
    ... the brackets (indicating an array type) were being dropped.

  • Michael(tm) Smith: synop.xsl

    Changed HTML handling of K&R-style paramdef output. The parameter
    definitions are no longer output in a table (though the prototype
    still is). The reason for the change is that the
    kr-tabular-funcsynopsis-mode template was causing type data to be
    lost in the output parameter definitions. For example, for an
    instance like this:
      <paramdef>void *<parameter>dataptr</parameter>[]</paramdef>
    ... the brackets (indicating an array type) were being dropped.
    The easiest way to deal with the problem is to not try to chop up
    the parameter definitions and display them in table format, but to
    instead just output them as-is. May not look quite as pretty, but
    at least we can be sure no information is being lost...

  • Michael(tm) Smith: pi.xsl

    updated wording of doc for funcsynopsis-style PI

  • Michael(tm) Smith: param.xweb; param.ent; synop.xsl

    Removed the funcsynopsis.tabular.threshold param. It's no longer
    being used in the code and hasn't been since mid 2006.

  • Mauritz Jeanson: graphics.xsl

    Added support for the img.src.path parameter for SVG graphics. Closes bug #1888169.

  • Mauritz Jeanson: chunk-common.xsl

    Added missing space.

  • Norman Walsh: component.xsl

    Fix bug where component titles inside info elements were not handled properly

  • Michael(tm) Smith: pi.xsl

    Moved dbhtml_stop-chunking embedded doc into alphabetical order,
    fixed text of TCG section it see-also'ed.

  • David Cramer: pi.xsl

    Added support for <?dbhtml stop-chunking?> processing instruction

  • David Cramer: chunk-common.xsl; pi.xsl

    Added support for <?dbhtml stop-chunking?> processing instruction

  • David Cramer: glossary.xsl

    Fixed bug #1854199: glossary.xsl should use the sortas attribute on glossentry. Also added normalize-space to avoid missorting due to stray leading spaces.

  • Mauritz Jeanson: inline.xsl

    Added a template for citebiblioid. The hyperlink target is the parent of the referenced biblioid,
    and the "hot text" is the biblioid itself enclosed in brackets.

  • Mauritz Jeanson: inline.xsl

    Added support for @xlink:show in the simple.xlink template. The "new" and "replace"
    values are supported (corresponding to values of "_blank" and "_top" for the
    ulink.target parameter). I have assumed that @xlink:show should override ulink.target
    for external URI links. This closes bugs #1762023 and #1727498.

  • Mauritz Jeanson: inline.xsl

    Moved declaration of comment.block.parents entity to common/entities.ent.

  • Mauritz Jeanson: param.xweb

    Added link to profiling chapter of TCG.

  • Dongsheng Song: biblio-iso690.xsl

    Change encoding from "windows-1250" to "UTF-8".

  • Robert Stayton: biblio.xsl

    Add support in biblio collection to entries in bibliodivs.

  • Mauritz Jeanson: pi.xsl

    Added missing @role="tcg".

  • Mauritz Jeanson: chunk-common.xsl; titlepage.xsl

    Refactored legalnotice/revhistory chunking, so that the use.id.as.filename
    parameter as well as the dbhtml_filename PI are taken into account. A new named
    template in titlepage.xsl is used to compute the filename.

  • Mauritz Jeanson: chunk-common.xsl; titlepage.xsl

    An update to the fix for bug #1790495 (r7433):
    The "ln-" prefix is output only when the legalnotice doesn't have an
    @id/@xml:id, in which case the stylesheets generate an ID value,
    resulting in a filename like "ln-7e0fwgj.html". This is useful because
    without the prefix, you wouldn't know that the file contained a legalnotice.
    The same logic is also applied to revhistory, using an "rh-" prefix.

  • Mauritz Jeanson: autoidx.xsl

    Removed the [&scope;] predicate from the target variable in the template with name="reference".
    This filter was the cause of missing index backlinks when @zone and @type were used on indexterms,
    with index.on.type=1. Closes bug #1680836.

  • Mauritz Jeanson: titlepage.xsl

    Added 'ln-' prefix to the name of the legalnotice chunk, in order to match the
    <link href"..."> that is output by make.legalnotice.head.links (chunk-common.xsl).
    Modified the href attribute on the legalnotice link.
    Closes bug #1790495.

Manpages

The following changes have been made to the manpages code since the 1.73.2
release.

  • Michael(tm) Smith: other.xsl

    slightly adjusted spacing around admonition markers

  • Michael(tm) Smith: refentry.xsl; utility.xsl

    make sure refsect3 titles are preceded by a line of space, and
    make the indenting of their child content less severe

  • Michael(tm) Smith: block.xsl

    only indent verbatim environments in TTY output, not in non-TTY/PS

  • Michael(tm) Smith: block.xsl

    made another adjustment to correct vertical alignment of admonition marker

  • Michael(tm) Smith: block.xsl; other.xsl

    Adjusted/corrected alignment of adominition marker in PS/non-TTY output.

  • Michael(tm) Smith: endnotes.xsl

    For PS/non-TTY output, display footnote/endnote numbers in
    superscript.

  • Michael(tm) Smith: table.xsl; synop.xsl; utility.xsl

    Changed handling of hanging indents for cmdsynopsis, funcsynopsis,
    and synopfragment such that they now look correct in non-TTY/PS
    output. We now use the groff \w escape to hang by the actual width
    -- in the current font -- of the command, funcdef, or
    synopfragment references number (as opposed to hanging by the
    number of characters). This rendering in TTY output remains the
    same, since the width in monospaced TTY output is the same as the
    number of characters.

    Also, created new synopsis-block-start and synopsis-block-end
    templates to use for cmdsynopsis and funcsynopsis instead of the
    corresponding verbatim-* templates.

    Along with those changes, also corrected a problem that caused the
    content of synopfragment to be dropped, and made a
    vertical-spacing change to adjust spacing around table titles and
    among sibling synopfragment instances.

  • Michael(tm) Smith: other.xsl

    use common l10.language.name template to retrieve English-language name

  • Michael(tm) Smith: synop.xsl; inline.xsl

    added comment in code explaining why we don't put filename output
    in italic (despite the fact that man guidelines say we should)

  • Michael(tm) Smith: inline.xsl

    put filename output in monospace instead of italic

  • Michael(tm) Smith: synop.xsl

    put cmdsynopsis in monospace

  • Michael(tm) Smith: inline.xsl

    removed template match for literal. template matches for monospace
    inlines are all imported from the HTML stylesheet

  • Michael(tm) Smith: block.xsl

    don't indent verbatim environments that are descendants of
    refsynopsisdiv, not put backgrounds behind them

  • Michael(tm) Smith: inline.xsl

    set output of the literal element in monospace. this causes all
    inline monospace instances in the git man pages to be set in
    monospace (since DocBook XML source for git docs is generated with
    asciidoc and asciidoc consistently outputs only <literal> for
    inline monospace (not <command> or <code> or anything else).
    Of course this only affects non-TTY output...

  • Michael(tm) Smith: utility.xsl

    Added inline.monoseq named template.

  • Michael(tm) Smith: utility.xsl

    don't bother using a custom register to store the previous
    font-family value when setting blocks of text in code font; just
    use \F[] .fam with no arg to switch back

  • Michael(tm) Smith: endnotes.xsl

    put links in blue in PS output (note that this matches how groff
    renders content marked up with the .URL macro)

  • Michael(tm) Smith: endnotes.xsl; param.xweb; param.ent

    removed man.links.are.underlined and added man.font.links. Also,
    changed the default font formatting for links to bold.

  • Michael(tm) Smith: endnotes.xsl; param.xweb; param.ent

    Added new param man.base.url.for.relative.links .. specifies a
    base URL for relative links (for ulink, @xlink:href, imagedata,
    audiodata, videodata) shown in the generated NOTES section of
    man-page output. The value of man.base.url.for.relative.links is
    prepended to any relative URI that is a value of ulink url,
    xlink:href, or fileref attribute.

    If you use relative URIs in link sources in your DocBook refentry
    source, and you leave man.base.url.for.relative.links unset, the
    relative links will appear "as is" in the NOTES section of any
    man-page output generated from your source. That's probably not
    what you want, because such relative links are only usable in the
    context of HTML output. So, to make the links meaningful and
    usable in the context of man-page output, set a value for
    man.base.url.for.relative.links that points
    to the online version of HTML output generated from your DocBook
    refentry source. For example:

      <xsl:param name="man.base.url.for.relative.links"
      >http://www.kernel.org/pub/software/scm/git/docs/</xsl:param>

  • Michael(tm) Smith: info.xsl

    If a source refentry contains a Documentation or DOCUMENTATION
    section, don't report it as having missing AUTHOR information.
    Also, if missing a contrib/personblurb for a person or org, report
    pointers to http://docbook.sf.net/el/personblurb and to
    http://docbook.sf.net/el/contrib

  • Michael(tm) Smith: info.xsl

    If we encounter an author|editor|othercredit instance that lacks a
    personblurb or contrib, report it to the user (because that means
    we have no information about that author|editor|othercredit to
    display in the generated AUTHOR|AUTHORS section...)

  • Michael(tm) Smith: info.xsl; docbook.xsl; other.xsl

    if we can't find any usable author data, emit a warning and insert
    a fixme in the output

  • Michael(tm) Smith: info.xsl

    fixed bug in indenting of output for contrib instances in AUTHORS
    section. Thanks to Daniel Leidert and the fglrx docs for exposing
    the bug.

  • Michael(tm) Smith: block.xsl

    for a para or simpara that is the first child of a callout,
    suppress the .sp or .PP that would normally be output (because in
    those cases, the output goes into a table cell, and the .sp or .PP
    markup causes a spurious linebreak before it when displayed

  • Michael(tm) Smith: lists.xsl

    Added support for rendering co callouts and calloutlist instances.
    So you can now use simple callouts -- marking up programlisting
    and such with co instances -- and have the callouts displayed in
    man-page output. ("simple callouts" means using co@id and
    callout@arearefs pointing to co@id instances; in man/roff output,
    we can't/don't support markup that uses areaset and area)

  • Michael(tm) Smith: block.xsl

    only put a line of space after a verbatim if it's followed by a
    text node or a paragraph

  • Michael(tm) Smith: utility.xsl

    put verbatim environments in slightly smaller font in non-TTY
    output

  • Michael(tm) Smith: lists.xsl

    minor whitespace-only reformatting of lists.xsl source

  • Michael(tm) Smith: lists.xsl

    Made refinements/fixes to output of orderedlist and itemizedlist
    -- in part, to get mysql man pages to display correctly. This
    change causes a "\c" continuation marker to be added between
    listitem markers and contents (to ensure that the content remains
    on the same line as the marker when displayed)

  • Michael(tm) Smith: block.xsl

    put a line of vertical space after all verbatim output that has
    sibling content following it (not just if that sibling content is
    a text node)

  • Michael(tm) Smith: block.xsl

    refined spacing around titles for admonitions

  • Michael(tm) Smith: block.xsl; other.xsl

    Deal with case of verbatim environments that have a linebreak
    after the opening tag. Assumption is that users generally don't
    want that linebreak to appear in output, so we do some groff
    hackery to mess with vertical spacing and close the space.

  • Michael(tm) Smith: inline.xsl

    indexterm instances now produce groff comments like this:

      .\" primary: secondary: tertiary

    remark instances, if non-empty, now produce groff comments

  • Michael(tm) Smith: charmap.groff.xsl; other.xsl

    convert no-break space character to groff "\ \&" (instead of just
    "\ "). the reason is that if a space occurs at the end of a line,
    our processing causes it to be eaten. a real-world case of this is
    the mysql(1) man page. appending the "\&" prevents that

  • Michael(tm) Smith: block.xsl

    output "sp" before simpara output, not after it (outputting it
    after results in undesirable whitespace in particular cases; for
    example, in the hg/mercurial docs

  • Michael(tm) Smith: table.xsl; synop.xsl; utility.xsl

    renamed from title-preamble to pinch.together and replaced "sp -1"
    between synopsis fragments with call to pinch.together instead

  • Michael(tm) Smith: table.xsl

    use title-preamble template for table titles (instead of "sp -1"
    hack), and "sp 1" after all tables (instead of just "sp"

  • Michael(tm) Smith: utility.xsl

    created title-preamble template for suppressing line spacing after
    headings

  • Michael(tm) Smith: info.xsl

    further refinement of indenting in AUTHORS section

  • Michael(tm) Smith: block.xsl; other.xsl

    refined handling of admonitions

  • Michael(tm) Smith: lists.xsl

    Use RS/RE in another place where we had IP ""

  • Michael(tm) Smith: info.xsl

    Replace (ab)use of IP with "sp -1" in AUTHORS section with RS/RE
    instead.

  • Michael(tm) Smith: table.xsl; synop.xsl; info.xsl

    changed all instances of ".sp -1n" to ".sp -1"

  • Michael(tm) Smith: other.xsl

    add extra line before SH heads only in non-TTY output

  • Michael(tm) Smith: block.xsl

    Reworked output for admonitions (caution, important, note, tip,
    warning). In TTY output, admonitions now get indented. In non-TTY
    output, a colored marker (yellow) is displayed next to them.

  • Michael(tm) Smith: other.xsl

    Added BM/EM macros for putting a colored marker in margin next to
    a block of text.

  • Michael(tm) Smith: utility.xsl

    created make.bold.title template by moving title-bolding part out
    from nested-section-title template. This allows the bolding to
    also be used by the template for formatting admonitions

  • Michael(tm) Smith: info.xsl

    put .br before copyright contents to prevent them from getting run in

  • Michael(tm) Smith: refentry.xsl; other.xsl; utility.xsl

    made point size of output for Refsect2 and Refsect3 heads bigger

  • Michael(tm) Smith: other.xsl

    put slightly more space between SH head and underline in non-TTY
    output

  • Michael(tm) Smith: param.xweb; param.ent; other.xsl

    Added the man.charmap.subset.profile.english parameter and refined
    the handling of charmap subsets to differentiate between English
    and non-English source.

    This way charmap subsets are now handled is this:

    If the value of the man.charmap.use.subset parameter is non-zero,
    and your DocBook source is not written in English (that is, if its
    lang or xml:lang attribute has a value other than en), then the
    character-map subset specified by the man.charmap.subset.profile
    parameter is used instead of the full roff character map.

    Otherwise, if the lang or xml:lang attribute on the root element
    in your DocBook source or on the first refentry element in your
    source has the value en or if it has no lang or xml:lang
    attribute, then the character-map subset specified by the
    man.charmap.subset.profile.english parameter is used instead of
    man.charmap.subset.profile.

    The difference between the two subsets is that
    man.charmap.subset.profile provides mappings for characters in
    Western European languages that are not part of the Roman
    (English) alphabet (ASCII character set).

  • Michael(tm) Smith: other.xsl

    Various updates, mainly related to uppercasing SH titles:

      - added a "Language: " metadata line to the top comment area of
        output man pages, to indicate the language the page is in

      - added a "toupper" macro of doing locale-aware uppercasing of
        SH titles and cross-references to SH titles; the mechanism
        relies on the uppercase.alpha and lowercase.alpha DocBook
        gentext keys to do locale-aware uppercasing based on the
        language the page is written in

      - added a "string.shuffle" template, which provides a library
        function for "shuffling" two strings together into a single
        string; it takes the first character for the first string, the
        first character from second string, etc. The only current use
        for it is to generate the argument for the groff tr request
        that does string uppercasing.

      - added make.tr.uppercase.arg and make.tr.normalcase.arg named
        templates for use in generating groff code for uppercasing and
        "normal"-casing SH titles

      - made the BB/BE "background drawing" macros have effect only in
        non-TTY output

      - output a few comments in the top part of source

  • Michael(tm) Smith: utility.xsl

    removed some leftover kruft

  • Michael(tm) Smith: refentry.xsl

    To create the name(s) for each man page, we now replace any spaces
    in the refname(s) with underscores. This ensures that tools like
    lexgrog(1) will be able to parse the name (lexgrog won't parse
    names that contain spaces).

  • Michael(tm) Smith: docbook.xsl

    Put a comment into source of man page to indicate where the main
    content starts. (We now have a few of macro definitions at the
    start of the source, so putting this comment in helps those that
    might be viewing the source.)

  • Michael(tm) Smith: refentry.xsl

    refined mechanism for generating SH titles

  • Michael(tm) Smith: charmap.groff.xsl

    Added zcaron, Zcaron, scaron, and Scaron to the groff character map.
    This means that generated Finnish man pages will no longer contain
    any raw accented characters -- they'll instead by marked up with
    groff escapes.

  • Michael(tm) Smith: other.xsl; utility.xsl

    corrected a regression I introduced about a year ago that caused
    dots to be output just as "\." -- instead needs to be "\&." (which
    is what it will be now, after this change)

  • Michael(tm) Smith: refentry.xsl

    Changed backend handling for generating titles for SH sections and
    for cross-references to those sections. This should have no effect
    on TTY output (behavior should remain the same hopefully) but
    results in titles in normal case (instead of uppercase) in PS
    output.

  • Michael(tm) Smith: info.xsl

    use make.subheading template to make subheadings for AUTHORS and
    COPYRIGHT sections (instead of harcoding roff markup)

  • Michael(tm) Smith: block.xsl

    put code font around programlisting etc.

  • Michael(tm) Smith: synop.xsl; docbook.xsl

    embed custom macro definitions in man pages, plus wrap synopsis in
    code font

  • Michael(tm) Smith: endnotes.xsl

    use the make.subheading template to generated SH subheading for
    endnotes section.

  • Michael(tm) Smith: lists.xsl

    Added some templates for generating if-then-else conditional
    markup in groff, so let's use those instead of hard-coding it in
    multiple places...

  • Michael(tm) Smith: other.xsl; utility.xsl

    Initial checkin of some changes related to making PS/PDF output
    from "man -l -Tps" look better. The current changes:

      - render synopsis and verbatim sections in a monospace/code font

      - put a light-grey background behind all programlisting, screen,
        and literallayout instances

      - prevent SH heads in PS output from being rendered in uppercase
        (as they are in console output)

      - also display xrefs to SH heads in PS output in normal case
        (instead of uppercase)

      - draw a line under SH heads in PS output

    The changes made to the code to support the above features were:

      - added some embedded/custom macros: one for conditionally
        upper-casing SH x-refs, one for redefining the SH macro
        itself, with some conditional handling for PS output, and
        finally a macro for putting a background/screen (filled box)
        around a block of text (e.g., a program listing) in PS output

      - added utility templates for wrapping blocks of text in code
        font; also templates for inline code font

  • Robert Stayton: refentry.xsl

    refpurpose nodes now get apply-templates instead of just normalize-space().

  • Michael(tm) Smith: lists.xsl

    Fixed alignment of first lined of text for each listitem in
    orderedlist output for TTY. Existing code seemed to have been
    causing an extra undesirable space to appear.

  • Michael(tm) Smith: lists.xsl

    Wrapped some roff conditionals around roff markup for orderedlist
    and itemizedlist output, so that the lists look acceptable in PS
    output as well as TTY.

  • Michael(tm) Smith: pi.xsl; synop.xsl; param.xweb; param.ent

    Added the man.funcsynopsis.style parameter. Has the same effect in
    manpages output as the funcsynopsis.style parameter has in HTML
    output -- except that its default value is 'ansi' instead of 'kr'.

  • Michael(tm) Smith: synop.xsl

    Reworked handling of K&R funcprototype output. It no longer relies
    on the HTML kr-tabular templates, but instead just does direct
    transformation to roff. For K&R output, it displays the paramdef
    output in an indented list following the prototype.

  • Michael(tm) Smith: synop.xsl

    Properly integrated handling for K&R output into manpages
    stylesheet. The choice between K&R output and ANSI output is
    currently controlled through use of the (HTML) funcsynopsis.style
    parameter. Note that because the mechanism does currently rely on
    funcsynopsis.style, the default in manpages output is now K&R
    (because that's the default of that param). But I suppose I ought
    to create a man.funcsynopsis.style and make the default for that
    ANSI (to preserve the existing default behavior).

  • Michael(tm) Smith: docbook.xsl

    added manpages/pi.xsl file

  • Michael(tm) Smith: .cvsignore; pi.xsl

    Added "dbman funcsynopsis-style" PI and incorporated it into the
    doc build.

  • Michael(tm) Smith: refentry.xsl

    Fixed regression that caused an unescaped dash to be output
    between refname and refpurpose content. Closes bug #1894244.
    Thanks to Daniel Leidert.

  • Michael(tm) Smith: other.xsl

    Fixed problem with dots being escaped in filenames of generated
    man files. Closes #1827195. Thanks to Daniel Leidert.

  • Michael(tm) Smith: inline.xsl

    Added support for processing structfield (was appearing in roff
    output surrounded by HTML <em> tags; fixed so that it gets roff
    ital markup). Closes bug #1858329.  Thanks to Sam Varshavchik.

Epub

The following changes have been made to the epub code since the 1.73.2 release.

  • Keith Fahlgren: bin/spec/README; bin/spec/epub_realbook_spec.rb

    'Realbook' spec now passes

  • Keith Fahlgren: bin/dbtoepub; README; bin/spec/README; bin/lib/docbook.rb;
    bin/spec/epub_r⋯

    Very primitive Windows support for dbtoepub reference implementation; README for running tests and for the .epub target in general; shorter realbook test document (still fails for now)

  • Keith Fahlgren: bin/dbtoepub; bin/spec/epub_regressions_spec.rb; bin/lib/
    docbook.rb; bin/s⋯

    Changes to OPF spine to not duplicate idrefs for documents with parts not at the root; regression specs for same

  • Keith Fahlgren: docbook.xsl

    Fixing linking to cover @id, distinct from other needs of cover-image-id (again, thanks to Martin Goerner)

  • Keith Fahlgren: docbook.xsl

    Updating the title of the toc element in the guide to be more explicit (thanks to Martin Goerner)

  • Keith Fahlgren: bin/spec/examples/amasque_exploded/content.opf; bin/spec/
    examples/amasque_⋯

    Initial checkin/merge of epub target from work provided by Paul Norton of Adobe
    and Keith Fahlgren of O'Reilly.

  • Keith Fahlgren: docbook.xsl

    == General epub test support

    $ spec -O ~/.spec.opts spec/epub_spec.rb

    DocBook::Epub
    - should be able to be created
    - should fail on a nonexistent file
    - should be able to render to a file
    - should create a file after rendering
    - should have the correct mimetype after rendering
    - should be valid .epub after rendering an article
    - should be valid .epub after rendering an article without sections
    - should be valid .epub after rendering a book
    - should be valid .epub after rendering a book even if it has one graphic
    - should be valid .epub after rendering a book even if it has many graphics
    - should be valid .epub after rendering a book even if it has many duplicated graphics
    - should report an empty file as invalid
    - should confirm that a valid .epub file is valid
    - should not include PDFs in rendered epub files as valid image inclusions
    - should include a TOC link in rendered epub files for <book>s

    Finished in 20.608395 seconds

    15 examples, 0 failures


    == Verbose epub test coverage against _all_ of the testdocs

    Fails on only (errors truncated):
    1)
    'DocBook::Epub should be able to render a valid .epub for the test document /Users/keith/work/docbook-dev/trunk/xsl/epub/bin/spec/testdocs/calloutlist.003.xml [30]' FAILED
    'DocBook::Epub should be able to render a valid .epub for the test document /Users/keith/work/docbook-dev/trunk/xsl/epub/bin/spec/testdocs/cmdsynopsis.001.xml [35]' FAILED
    ....

    Finished in 629.89194 seconds

    224 examples, 15 failures

    224 examples, 15 failures yields 6% failure rate

HTMLHelp

The following changes have been made to the htmlhelp code since the 1.73.2
release.

  • Mauritz Jeanson: htmlhelp-common.xsl

    Added <xsl:with-param name="quiet" select="$chunk.quietly"/> to calls to
    the write.chunk, write.chunk.with.doctype, and write.text.chunk templates.
    This makes chunk.quietly=1 suppress chunk filename messages also for help
    support files (which seems to be what one would expect). See bug #1648360.

Eclipse

The following changes have been made to the eclipse code since the 1.73.2
release.

  • David Cramer: eclipse.xsl

    Use sortas attributes (if they exist) when sorting indexterms

  • David Cramer: eclipse.xsl

    Added support for indexterm/see in eclipse index.xml

  • Mauritz Jeanson: eclipse.xsl

    Added <xsl:with-param name="quiet" select="$chunk.quietly"/>
    to helpidx template.

  • David Cramer: eclipse.xsl

    Generate index.xml file and add related goo to plugin.xml file. Does not yet support see and seealso.

  • Mauritz Jeanson: eclipse.xsl

    Added <xsl:with-param name="quiet" select="$chunk.quietly"/> to calls to
    the write.chunk, write.chunk.with.doctype, and write.text.chunk templates.
    This makes chunk.quietly=1 suppress chunk filename messages also for help
    support files (which seems to be what one would expect). See bug #1648360.

JavaHelp

The following changes have been made to the javahelp code since the 1.73.2
release.

  • Mauritz Jeanson: javahelp.xsl

    Added <xsl:with-param name="quiet" select="$chunk.quietly"/> to calls to
    the write.chunk, write.chunk.with.doctype, and write.text.chunk templates.
    This makes chunk.quietly=1 suppress chunk filename messages also for help
    support files (which seems to be what one would expect). See bug #1648360.

Roundtrip

The following changes have been made to the roundtrip code since the 1.73.2
release.

  • Steve Ball: blocks2dbk.xsl; wordml2normalise.xsl

    fix table/cell borders for wordml, fix formal figure, add emphasis-strong

  • Mauritz Jeanson: supported.xml

    Changed @cols to 5.

  • Steve Ball: blocks2dbk.xsl; blocks2dbk.dtd; template.xml

    added pubdate, fixed metadata handling in biblioentry

  • Steve Ball: supported.xml

    Added support for edition.

  • Steve Ball: docbook-pages.xsl; wordml-blocks.xsl; docbook.xsl; wordml.xsl;
    pages-normalise⋯

    Removed stylesheets for old, deprecated conversion method.

  • Steve Ball: specifications.xml; dbk2ooo.xsl; blocks2dbk.xsl; dbk2pages.xsl;
    blocks2dbk.dtd⋯

    Added support for Open Office, added edition element, improved list and table support in Word and Pages

  • Steve Ball: normalise-common.xsl; blocks2dbk.xsl; dbk2pages.xsl;
    template-pages.xml; templ⋯

    Fixed bug in WordML table handling, improved table handling for Pages 08, synchronised WordML and Pages templates.

  • Steve Ball: normalise-common.xsl; blocks2dbk.xsl; wordml2normalise.xsl;
    dbk2wp.xsl

    fix caption, attributes

  • Steve Ball: specifications.xml; blocks2dbk.xsl; wordml2normalise.xsl;
    blocks2dbk.dtd; temp⋯

    Fixes to table and list handling

  • Steve Ball: blocks2dbk.xsl

    added support for explicit emphasis character styles

  • Steve Ball: wordml2normalise.xsl

    added support for customisation in image handling

  • Steve Ball: blocks2dbk.xsl

    Added inlinemediaobject support for metadata.

  • Steve Ball: normalise-common.xsl; blocks2dbk.xsl; template.xml;
    dbk2wordml.xsl; dbk2wp.xsl

    Added support file. Added style locking. Conversion bug fixes.

Slides

The following changes have been made to the slides code since the 1.73.2
release.

  • Michael(tm) Smith: fo/Makefile; html/Makefile

    Added checks and hacks to various makefiles to enable building
    under Cygwin. This stuff is ugly and maybe not worth the mess and
    trouble, but does seem to work as expected and not break anything
    else.

  • Jirka Kosek: html/plain.xsl

    Added support for showing foil number

Website

The following changes have been made to the website code since the 1.73.2
release.

  • Michael(tm) Smith: extensions/saxon64/.classes/.gitignore; extensions/
    xalan2/.classes/com/⋯

    renamed a bunch more .cvsignore files to .gitignore (to facilitate use of git-svn)

Params

The following changes have been made to the params code since the 1.73.2
release.

  • Keith Fahlgren: epub.autolabel.xml

    New parameter for epub, epub.autolabel

  • Mauritz Jeanson: table.frame.border.color.xml; table.cell.padding.xml;
    table.cell.border.t⋯

    Added missing refpurposes and descriptions.

  • Keith Fahlgren: ade.extensions.xml

    Extensions to support Adobe Digital Editions extensions in .epub output.

  • Mauritz Jeanson: fop.extensions.xml; fop1.extensions.xml

    Clarified that fop1.extensions is for FOP 0.90 and later. Version 1 is not here yet...

  • Michael(tm) Smith: man.links.are.underlined.xml;
    man.endnotes.list.enabled.xml; man.font.l⋯

    removed man.links.are.underlined and added man.font.links. Also,
    changed the default font formatting for links to bold.

  • Michael(tm) Smith: man.base.url.for.relative.links.xml

    Added new param man.base.url.for.relative.links .. specifies a
    base URL for relative links (for ulink, @xlink:href, imagedata,
    audiodata, videodata) shown in the generated NOTES section of
    man-page output. The value of man.base.url.for.relative.links is
    prepended to any relative URI that is a value of ulink url,
    xlink:href, or fileref attribute.

    If you use relative URIs in link sources in your DocBook refentry
    source, and you leave man.base.url.for.relative.links unset, the
    relative links will appear "as is" in the NOTES section of any
    man-page output generated from your source. That's probably not
    what you want, because such relative links are only usable in the
    context of HTML output. So, to make the links meaningful and
    usable in the context of man-page output, set a value for
    man.base.url.for.relative.links that points
    to the online version of HTML output generated from your DocBook
    refentry source. For example:

      <xsl:param name="man.base.url.for.relative.links"
      >http://www.kernel.org/pub/software/scm/git/docs/</xsl:param>

  • Michael(tm) Smith: man.string.subst.map.xml

    squeeze .sp\n.sp into a single .sp (to prevent a extra, spurious
    line of whitespace from being inserted after programlisting etc.
    in certain cases)

  • Michael(tm) Smith: refentry.manual.fallback.profile.xml;
    refentry.source.fallback.profile.⋯

    don't use refmiscinfo@class=date value as fallback for refentry
    "source" or "manual" metadata fields

  • Michael(tm) Smith: man.charmap.subset.profile.xml; man.charmap.enabled.xml;
    man.charmap.su⋯

    made some further doc tweaks related to the
    man.charmap.subset.profile.english param

  • Michael(tm) Smith: man.charmap.subset.profile.xml; man.charmap.enabled.xml;
    man.charmap.su⋯

    Added the man.charmap.subset.profile.english parameter and refined
    the handling of charmap subsets to differentiate between English
    and non-English source.

    This way charmap subsets are now handled is this:

    If the value of the man.charmap.use.subset parameter is non-zero,
    and your DocBook source is not written in English (that is, if its
    lang or xml:lang attribute has a value other than en), then the
    character-map subset specified by the man.charmap.subset.profile
    parameter is used instead of the full roff character map.

    Otherwise, if the lang or xml:lang attribute on the root element
    in your DocBook source or on the first refentry element in your
    source has the value en or if it has no lang or xml:lang
    attribute, then the character-map subset specified by the
    man.charmap.subset.profile.english parameter is used instead of
    man.charmap.subset.profile.

    The difference between the two subsets is that
    man.charmap.subset.profile provides mappings for characters in
    Western European languages that are not part of the Roman
    (English) alphabet (ASCII character set).

  • Michael(tm) Smith: man.charmap.subset.profile.xml

    Added to default charmap used by manpages:

      - the "letters" part of the 'C1 Controls And Latin-1 Supplement
        (Latin-1 Supplement)' Unicode block
      - Latin Extended-A block (but not all of the characters from
        that block have mappings in groff, so some of them are still
        passed through as-is)

    The effects of this change are that in man pages generated for
    most Western European languages and for Finnish, all characters
    not part of the Roman alphabet are (e.g., "accented" characters)
    are converted to groff escapes.

    Previously, by default we passed through those characters as is
    (and users needed to use the full charmap if they wanted to have
    those characters converted).

    As a result of this change, man pages generated for Western
    European languages will be viewable in some environments in which
    they are not viewable if the "raw" non-Roman characters are in them.

  • Mauritz Jeanson: generate.legalnotice.link.xml;
    generate.revhistory.link.xml

    Added information on how the filename is computed.

  • Mauritz Jeanson: default.table.width.xml

    Clarified PI usage.

  • Michael(tm) Smith: man.funcsynopsis.style.xml

    Added the man.funcsynopsis.style parameter. Has the same effect in
    manpages output as the funcsynopsis.style parameter has in HTML
    output -- except that its default value is 'ansi' instead of 'kr'.

  • Michael(tm) Smith: funcsynopsis.tabular.threshold.xml

    Removed the funcsynopsis.tabular.threshold param. It's no longer
    being used in the code and hasn't been since mid 2006.

  • Mauritz Jeanson: table.properties.xml

    Set keep-together.within-column to "auto". This seems to be the most sensible
    default value for tables.

  • Mauritz Jeanson: informal.object.properties.xml;
    admon.graphics.extension.xml; informalequ⋯

    Several small documentation fixes.

  • Mauritz Jeanson: manifest.in.base.dir.xml

    Wording fixes.

  • Mauritz Jeanson: header.content.properties.xml;
    footer.content.properties.xml

    Added refpurpose.

  • Mauritz Jeanson: ulink.footnotes.xml; ulink.show.xml

    Updated for DocBook 5.

  • Mauritz Jeanson: index.method.xml; glossterm.auto.link.xml

    Spelling and wording fixes.

  • Mauritz Jeanson: callout.graphics.extension.xml

    Clarifed available graphics formats and extensions.

  • Mauritz Jeanson: footnote.sep.leader.properties.xml

    Corrected refpurpose.

  • Jirka Kosek: footnote.properties.xml

    Added more properties which make it possible to render correctly footnotes placed inside verbatim elements.

  • Mauritz Jeanson: img.src.path.xml

    img.src.path works with inlinegraphic too.

  • Mauritz Jeanson: saxon.character.representation.xml

    Added TCG link.

  • Mauritz Jeanson: img.src.path.xml

    Updated description of img.src.path. Bug #1785224 revealed that
    there was a risk of misunderstanding how it works.

Profiling

The following changes have been made to the profiling code since the 1.73.2
release.

  • Jirka Kosek: xsl2profile.xsl

    Added new rules to profile all content generated by HTML Help (including alias files)

  • Robert Stayton: profile-mode.xsl

    use mode="profile" instead of xsl:copy-of for attributes so
    they can be more easily customized.

Tools

The following changes have been made to the tools code since the 1.73.2
release.

  • Michael(tm) Smith: make/Makefile.DocBook

    various changes and additions to support making with asciidoc as
    an input format

  • Michael(tm) Smith: make/Makefile.DocBook

    make dblatex the default PDF maker for the example makefile

  • Michael(tm) Smith: xsl/build/html2roff.xsl

    Reworked handling of K&R funcprototype output. It no longer relies
    on the HTML kr-tabular templates, but instead just does direct
    transformation to roff. For K&R output, it displays the paramdef
    output in an indented list following the prototype.

  • Mauritz Jeanson: xsl/build/make-xsl-params.xsl

    Made attribute-sets members of the param list. This enables links to attribute-sets in the
    reference documentation.

  • Michael(tm) Smith: xsl/build/html2roff.xsl

    use .BI handling in K&R funsynopsis output for manpages, just as
    we do already of ANSI output

  • Michael(tm) Smith: xsl/build/html2roff.xsl

    Implemented initial support for handling tabular K&R output of
    funcprototype in manpages output. Accomplished by adding more
    templates to the intermediate HTML-to-roff stylesheet that the
    build uses to create the manpages/html-synop.xsl stylesheet.

  • Michael(tm) Smith: xsl/build/doc-link-docbook.xsl

    Made the xsl/tools/xsl/build/doc-link-docbook.xsl stylesheet
    import profile-docbook.xsl, so that we can do profiling of release
    notes. Corrected some problems in the target for the release-notes
    HTML build.

Extensions

The following changes have been made to the extensions code since the 1.73.2
release.

  • Keith Fahlgren: Makefile

    Use DOCBOOK_SVN variable everywhere, please; build with PDF_MAKER

  • Michael(tm) Smith: Makefile

    moved extensions build targets from master xsl/Makefile to
    xsl/extensions/Makefile

  • Michael(tm) Smith: .cvsignore

    re-adding empty extensions subdir

XSL-Saxon

The following changes have been made to the xsl-saxon code since the 1.73.2
release.

  • Michael(tm) Smith: VERSION

    bring xsl2, xsl-saxon, and xsl-xalan VERSION files up-to-date with
    recent change to snapshot build infrastructure

  • Michael(tm) Smith: nbproject/build-impl.xml; nbproject/project.properties

    Changed hard-coded file references in "clean" target to variable
    references. Closes #1792043. Thanks to Daniel Leidert.

  • Michael(tm) Smith: VERSION; Makefile

    Did post-release wrap-up of xsl-saxon and xsl-xalan dirs

  • Michael(tm) Smith: nbproject/build-impl.xml; VERSION; Makefile; test

    More tweaks to get release-ready

XSL-Xalan

The following changes have been made to the xsl-xalan code since the 1.73.2
release.

  • Michael(tm) Smith: VERSION

    bring xsl2, xsl-saxon, and xsl-xalan VERSION files up-to-date with
    recent change to snapshot build infrastructure

  • Michael(tm) Smith: nbproject/build-impl.xml

    Changed hard-coded file references in "clean" target to variable
    references. Closes #1792043. Thanks to Daniel Leidert.

  • Michael(tm) Smith: Makefile; VERSION

    Did post-release wrap-up of xsl-saxon and xsl-xalan dirs

  • Michael(tm) Smith: Makefile; nbproject/build-impl.xml; VERSION

    More tweaks to get release-ready

XSL-libxslt

The following changes have been made to the xsl-libxslt code since the 1.73.2
release.

  • Mauritz Jeanson: python/xslt.py

    Print the result to stdout if no outfile has been given.
    Some unnecessary semicolons removed.

  • Mauritz Jeanson: python/xslt.py

    Added a function that quotes parameter values (to ensure that they are interpreted as strings).
    Replaced deprecated functions from the string module with string methods.

  • Michael(tm) Smith: python/README; python/README.LIBXSLT

    renamed xsl-libxslt/python/README to xsl-libxslt/python/README.LIBXSLT

  • Mauritz Jeanson: python/README

    Tweaked the text a little.

Release Notes: 1.73.2

This is solely a minor bug-fix update to the 1.73.1 release. It fixes a
packaging error in the 1.73.1 package, as well as a bug in footnote handling in
FO output.

Release: 1.73.1

This is mostly a bug-fix update to the 1.73.0 release.

Gentext

The following changes have been made to the gentext code since the 1.73.0
release.

  • Mauritz Jeanson: locale/de.xml

    Applied patch #1766009.

  • Michael(tm) Smith: locale/lv.xml

    Added localization for ProductionSet.

FO

The following changes have been made to the fo code since the 1.73.0 release.

  • Mauritz Jeanson: table.xsl

    Modified the tgroup template so that, for tables with multiple tgroups,
    a width attribute is output on all corresponding fo:tables. Previously,
    there was a test prohibiting this (and a comment saying that outputting more
    than one width attribute will cause an error). But this seems to be no longer
    relevant; it is not a problem with FOP 0.93 or XEP 4.10. Closes bug #1760559.

  • Mauritz Jeanson: graphics.xsl

    Replaced useless <a> elements with warning messages (textinsert extension).

  • Mauritz Jeanson: admon.xsl

    Enabled generation of ids (on fo:wrapper) for indexterms in admonition titles, so that page
    references in the index can be created. Closes bug #1775086.

HTML

The following changes have been made to the html code since the 1.73.0 release.

  • Mauritz Jeanson: titlepage.xsl

    Added <xsl:call-template name="process.footnotes"/> to abstract template
    so that footnotes in info/abstract are processed. Closes bug #1760907.

  • Michael(tm) Smith: pi.xsl; synop.xsl

    Changed handling of HTML output for the cmdsynopsis and
    funcsynopsis elements, such that a@id instances are generated for
    them if they are descendants of any element containing a dbcmdlist
    or dbfunclist PI. Also, update the embedded reference docs for the
    dbcmdlist and dbfunclist PIs to make it clear that they can be
    used within any element for which cmdsynopsis or funcsynopsis are
    valid children.

  • Michael(tm) Smith: formal.xsl

    Reverted the part of revision 6952 that caused a@id anchors to be
    generated for output of informal objects. Thanks to Sam Steingold
    for reporting.

  • Robert Stayton: glossary.xsl

    Account for a glossary with no glossdiv or glossentry children.

  • Mauritz Jeanson: titlepage.xsl

    Modified legalnotice template so that the base.name parameter is calculated
    in the same way as for revhistory chunks. Using <xsl:apply-templates
    mode="chunk-filename" select="."/> did not work for single-page output since
    the template with that mode is in chunk-code.xsl.

  • Mauritz Jeanson: graphics.xsl

    Updated support for SVG (must be a child of imagedata in DB 5).
    Added support for MathML in imagedata.

  • Mauritz Jeanson: pi.xsl

    Added documentation for the dbhh PI (used for context-sensitive HTML Help).
    (The two templates matching 'dbhh' are still in htmlhelp-common.xsl).

Manpages

The following changes have been made to the manpages code since the 1.73.0
release.

  • Michael(tm) Smith: endnotes.xsl

    In manpages output, generate warnings about notesources with
    non-para children only if the notesource is a footnote or
    annotation. Thanks to Sam Steingold for reporting problems with
    the existing handling.

HTMLHelp

The following changes have been made to the htmlhelp code since the 1.73.0
release.

  • Michael(tm) Smith: htmlhelp-common.xsl

    Added single-pass namespace-stripping support to the htmlhelp,
    eclipse, and javahelp stylesheets.

Eclipse

The following changes have been made to the eclipse code since the 1.73.0
release.

  • Michael(tm) Smith: eclipse.xsl

    Added single-pass namespace-stripping support to the htmlhelp,
    eclipse, and javahelp stylesheets.

JavaHelp

The following changes have been made to the javahelp code since the 1.73.0
release.

  • Michael(tm) Smith: javahelp.xsl

    Added single-pass namespace-stripping support to the htmlhelp,
    eclipse, and javahelp stylesheets.

Roundtrip

The following changes have been made to the roundtrip code since the 1.73.0
release.

  • Steve Ball: blocks2dbk.xsl; blocks2dbk.dtd; pages2normalise.xsl

    Modularised blocks2dbk to allow customisation,
    Added support for tables to pages2normalise

Params

The following changes have been made to the params code since the 1.73.0
release.

  • Robert Stayton: procedure.properties.xml

    procedure was inheriting keep-together from formal.object.properties, but
    a procedure does not need to be kept together by default.

  • Dave Pawson: title.font.family.xml;
    component.label.includes.part.label.xml; table.frame.b⋯

    Regular formatting re-org.

Release: 1.73.0

This release includes important bug fixes and adds the following significant
feature changes:

New localizations and localization updates

    We added two new localizations: Latvian and Esperanto, and made updates to
    the Czech, Chinese Simplified, Mongolian, Serbian, Italian, and Ukrainian
    localizations.

ISO690 citation style for bibliography output.

    Set the bibliography.style parameter to iso690 to use ISO690 style.

New documentation for processing instructions (PI)

    The reference documentation that ships with the release now includes
    documentation on all PIs that you can use to control output from the
    stylesheets.

New profiling parameters for audience and wordsize

    You can now do profiling based on the values of the audience and wordsize
    attributes.

Changes to man-page output

    The manpages stylesheet now supports single-pass profiling and single-pass
    DocBook 5 namespace stripping (just as the HTML and FO stylesheets also
    do). Also, added handling for mediaobject & inlinemediaobject. (Each
    imagedata, audiodata, or videodata element within a mediaobject or inline
    mediaobject is now treated as a "notesource" and so handled in much the
    same way as links and annotation/alt/footnote are in manpages output.) And
    added the man.authors.section.enabled and man.copyright.section.enabled
    parameters to enable control over whether output includes auto-generated
    AUTHORS and COPYRIGHT sections.

Highlighting support for C

    The highlighting mechanism for generating syntax-highlighted code snippets
    in output now supports C code listings (along with Java, PHP, XSLT, and
    others).

Experimental docbook-xsl-update script

    We added an experimental docbook-xsl-update script, the purpose of which is
    to facilitate easy sync-up to the latest docbook-xsl snapshot (by means of
    rsync).

Gentext

The following changes have been made to the gentext code since the 1.72.0
release.

  • Michael(tm) Smith: locale/lv.xml; Makefile

    Added Latvian localization file, from Girts Ziemelis.

  • Dongsheng Song: locale/zh_cn.xml

    Brought up to date with en.xml in terms of items. A few strings marked for translation.

  • Jirka Kosek: locale/cs.xml

    Added missing translations

  • Robert Stayton: locale/eo.xml

    New locale for Esperanto.

  • Robert Stayton: locale/mn.xml

    Update from Ganbold Tsagaankhuu.

  • Jirka Kosek: locale/en.xml; locale/cs.xml

    Rules for normalizing glossary entries before they are sorted can be now different for each language.

  • Michael(tm) Smith: locale/sr_Latn.xml; locale/sr.xml

    Committed changes from Miloš Komarčević to Serbian files.

  • Robert Stayton: locale/ja.xml

    Fix chapter in context xref-number-and-title

  • Robert Stayton: locale/it.xml

    Improved version from contributor.

  • Mauritz Jeanson: locale/uk.xml

    Applied patch 1592083.

Common

The following changes have been made to the common code since the 1.72.0
release.

  • Michael(tm) Smith: labels.xsl

    Changed handling of reference auto-labeling such that reference
    (when it appears at the component level) is now affected by the
    label.from.part param, just as preface, chapter, and appendix.

  • Michael(tm) Smith: common.xsl

    Added support to the HTML stylesheets for proper processing of
    orgname as a child of author.

  • Michael(tm) Smith: refentry.xsl

    Refined logging output of refentry metadata-gathering template;
    for some cases of "missing" elements (refmiscinfo stuff, etc.),
    the log messages now include URL to corresponding page in the
    Definitive Guide (TDG).

  • Robert Stayton: titles.xsl

    Add refsection/info/title support.

  • Michael(tm) Smith: titles.xsl

    Added support for correct handling of xref to elements that
    contain info/title descendants but no title children.

    This should be further refined so that it handles any *info
    elements. And there are probably some other places where similar
    handling for *info/title should be added.

  • Mauritz Jeanson: pi.xsl

    Modified <xsl:when> in datetime.format template to work
    around Xalan bug.

FO

The following changes have been made to the fo code since the 1.72.0 release.

  • Robert Stayton: component.xsl

    Add parameters to the page.sequence utility template.

  • Mauritz Jeanson: xref.xsl

    Added template for xref to area/areaset.
    Part of fix for bug #1675513 (xref to area broken).

  • Michael(tm) Smith: inline.xsl

    Added template match for person element to fo stylesheet.

  • Robert Stayton: lists.xsl

    Added support for spacing="compact" in variablelist, per bug report #1722540.

  • Robert Stayton: table.xsl

    table pgwide="1" should also use pgwide.properties attribute-set.

  • Mauritz Jeanson: inline.xsl

    Make citations numbered if bibliography.numbered != 0.

  • Robert Stayton: param.xweb; param.ent

    Add new profiling parameters for audience and wordsize.

  • Robert Stayton: param.xweb; param.ent

    Added callout.icon.size parameter.

  • Robert Stayton: inline.xsl; xref.xsl

    Add support for xlink as olink.

  • Robert Stayton: autotoc.xsl; param.xweb; param.ent

    Add support for qanda.in.toc to fo TOC.

  • Robert Stayton: component.xsl

    Improved the page.sequence utility template for use with book.

  • Robert Stayton: division.xsl

    Refactored the big book template into smaller pieces.
    Used the "page.sequence" utility template in
    component.xsl to shorten the toc piece.
    Added placeholder templates for front.cover and back.cover.

  • Robert Stayton: param.xweb; param.ent; sections.xsl

    Add section.container.element parameter to enable
    pgwide spans inside sections.

  • Robert Stayton: param.xweb; param.ent; component.xsl

    Add component.titlepage.properties attribute-set to
    support span="all" and other properties.

  • Robert Stayton: htmltbl.xsl; table.xsl

    Apply table.row.properties template to html tr rows too.
    Add keep-with-next to table.row.properties when row is in thead.

  • Robert Stayton: table.xsl

    Add support for default.table.frame parameter.
    Fix bug 1575446 rowsep last check for @morerows.

  • Robert Stayton: refentry.xsl

    Add support for info/title in refsections.

  • David Cramer: qandaset.xsl

    Make fo questions and answers behave the same way as html

  • Jirka Kosek: lists.xsl

    Added missing attribute set for procedure

  • Jirka Kosek: param.xweb; biblio.xsl; docbook.xsl; param.ent;
    biblio-iso690.xsl

    Added support for formatting biblioentries according to ISO690 citation style.
    New bibliography style can be turned on by setting parameter bibliography.style to "iso690"
    The code was provided by Jana Dvorakova

  • Robert Stayton: param.xweb; param.ent; pagesetup.xsl

    Add header.table.properties and footer.table.properties attribute-sets.

  • Robert Stayton: inline.xsl

    Add fop1.extensions for menuchoice arrow handling exception.

HTML

The following changes have been made to the html code since the 1.72.0 release.

  • Mauritz Jeanson: param.xweb; param.ent

    Moved declaration and documentation of javahelp.encoding from javahelp.xsl to the
    regular "parameter machinery".

  • Michael(tm) Smith: admon.xsl

    Changed handling of titles for note, warning, caution, important,
    tip admonitions: We now output and HTML h3 head only if
    admon.textlabel is non-zero or if the admonition actually contains
    a title; otherwise, we don't output an h3 head at all.
    (Previously, we were outputting an empty h3 if the admon.textlabel
    was zero and if the admonition had no title.)

  • Mauritz Jeanson: xref.xsl

    Added template for xref to area/areaset.
    Part of fix for bug #1675513 (xref to area broken).

  • Mauritz Jeanson: titlepage.xsl; component.xsl; division.xsl; sections.xsl

    Added fixes to avoid duplicate ids when generate.id.attributes = 1.
    This (hopefully) closes bug #1671052.

  • Michael(tm) Smith: formal.xsl; pi.xsl

    Made the dbfunclist PI work as intended. Also added doc for
    dbfunclist and dbcmdlist PIs.

  • Michael(tm) Smith: pi.xsl; synop.xsl

    Made the dbcmdlist work the way it appears to have been intended
    to work. Restored dbhtml-dir template back to pi.xsl.

  • Michael(tm) Smith: titlepage.xsl; param.xweb; param.ent

    Added new param abstract.notitle.enabled.
    If non-zero, in output of the abstract element on titlepages,
    display of the abstract title is suppressed.
    Because sometimes you really don't want or need that title
    there...

  • Michael(tm) Smith: chunk-code.xsl; graphics.xsl

    When we are chunking long descriptions for mediaobject instances
    into separate HTML output files, and use.id.as.filename is
    non-zero, if a mediaobject has an ID, use that ID as the basename
    for the long-description file (otherwise, we generate an ID for it
    and use that ID as the basename for the file).
    The parallels the recent change made to cause IDs for legalnotice
    instances to be used as basenames for legalnotice chunks.
    Also, made some minor refinements to the recent changes for
    legalnotice chunk handling.

  • Michael(tm) Smith: titlepage.xsl

    Added support to the HTML stylesheets for proper processing of
    orgname as a child of author.

  • Michael(tm) Smith: chunk-code.xsl

    When $generate.legalnotice.link is non-zero and
    $use.id.as.filename is also non-zero, if a legalnotice has an ID,
    then instead of assigning the "ln-<generatedID>" basename to the
    output file for that legalnotice, just use its real ID as the
    basename for the file -- as we do when chunking other elements
    that have IDs.

  • David Cramer: xref.xsl

    Handle alt text on xrefs to steps when the step doesn't have a title.

  • David Cramer: lists.xsl

    Added <p> element around term in variablelist when formatted as table to avoid misalignment of term and listitem in xhtml (non-quirks mode) output

  • David Cramer: qandaset.xsl

    Added <p> element around question and answer labels to avoid misalignment of label and listitem in xhtml (non-quirks mode) output

  • David Cramer: lists.xsl

    Added <p> element around callouts to avoid misalignment of callout and listitem in xhtml (non-quirks mode) output

  • Mauritz Jeanson: inline.xsl

    Make citations numbered if bibliography.numbered != 0.

  • Robert Stayton: param.xweb; param.ent

    Add support for new profiling attributes audience and wordsize.

  • Robert Stayton: inline.xsl; xref.xsl

    Add support for xlink olinks.

  • Jirka Kosek: glossary.xsl

    Rules for normalizing glossary entries before they are sorted can be now different for each language.

  • Robert Stayton: chunk-common.xsl; chunk-code.xsl; manifest.xsl; chunk.xsl

    Refactored the chunking modules to move all named templates to
    chunk-common.xsl and all match templates to chunk-code.xsl, in
    order to enable better chunk customization.
    See the comments in chunk.xsl for more details.

  • Robert Stayton: lists.xsl

    Add anchor for xml:id for listitem in varlistentry.

  • Robert Stayton: refentry.xsl

    Add support for info/title in refsections for db5.

  • Jirka Kosek: param.xweb; biblio.xsl; docbook.xsl; param.ent;
    biblio-iso690.xsl

    Added support for formatting biblioentries according to ISO690 citation style.
    New bibliography style can be turned on by setting parameter bibliography.style to "iso690"
    The code was provided by Jana Dvorakova

  • Robert Stayton: inline.xsl; xref.xsl

    Add call to class.attribute to <a> output elements so they can
    have a class value too.

  • Mauritz Jeanson: glossary.xsl

    Fixed bug #1644881:
    * Added curly braces around all $language attribute values.
    * Moved declaration of language variable to top level of stylesheet.
    Tested with Xalan, Saxon, and xsltproc.

Manpages

The following changes have been made to the manpages code since the 1.72.0
release.

  • Michael(tm) Smith: param.xweb; docbook.xsl; param.ent

    Added the man.authors.section.enabled and
    man.copyright.section.enabled parameters. Set those to zero when
    you want to suppress display of the auto-generated AUTHORS and
    COPYRIGHT sections. Closes request #1467806. Thanks to Daniel
    Leidert.

  • Michael(tm) Smith: docbook.xsl

    Took the test that the manpages stylesheet does to see if there
    are any Refentry chilren in current doc, and made it
    namespace-agnostic. Reason for that is because the test otherwise
    won't work when it is copied over into the generated
    profile-docbook.xsl stylesheet.

  • Michael(tm) Smith: Makefile

    Added a manpages/profile-docbook.xsl file to enable single-pass
    profiling for manpages output.

  • Michael(tm) Smith: info.xsl

    Output copyright and legalnotice in man-page output in whatever
    place they are in in document order. Closes #1690539. Thanks to
    Daniel Leidert for reporting.

  • Michael(tm) Smith: docbook.xsl

    Restored support for single-pass namespace stripping to manpages
    stylesheet.

  • Michael(tm) Smith: synop.xsl; block.xsl; info.xsl; inline.xsl; lists.xsl;
    endnotes.xsl; ut⋯

    Changed handling of bold and italic/underline output in manpages
    output. Should be transparent to users, but...

    This touches handling of all bold and italic/underline output. The
    exact change is that the mode="bold" and mode="italic" utility
    templates were changed to named templates. (I think maybe I've
    changed it back and forth from mode to named before, so this is
    maybe re-reverting it yet again).

    Anyway, the reason for the change is that the templates are
    sometimes call on dynamically node-sets, and using modes to format
    those doesn't allow passing info about the current/real context
    node from the source (not the node-set created by the stylesheet)
    to that formatting stage.

    The named templates allow the context to be passed in as a
    parameter, so that the bold/ital formatting template can use
    context-aware condition checking.

    This was basically necessary in order to suppress bold formatting
    in titles, which otherwise gets screwed up because of the numbnut
    way that roff handles nested bold/ital.

    Closes #1674534). Much thanks to Daniel Leidert, whose in his
    docbook-xsl bug-finding kung-fu has achieved Grand Master status.

  • Michael(tm) Smith: block.xsl

    Fixed handling of example instances by adding the example element
    to the same template we use for processing figure. Closes
    #1674538. Thanks to Daniel Leidert.

  • Michael(tm) Smith: utility.xsl

    Don't include lang in manpages filename/pathname if lang=en (that
    is, only generate lang-qualified file-/pathnames for non-English).

  • Michael(tm) Smith: endnotes.xsl

    In manpages output, emit warnings for notesources (footnote, etc.)
    that have something other than para as a child.

    The numbered-with-hanging-indent formatting that's used for
    rendering endnotes in the NOTES section of man pages places some
    limits/assumptions on how the DocBook source is marked up; namely,
    for notesources (footnote, annotation, etc.) that can contain
    block-level children, if the they have a block-level child such as
    a table or itemizedlist or orderedlist that is the first child of
    a footnote, we have no way of rendering/indenting its content
    properly in the endnotes list.

    Thus, the manpages stylesheet not emits a warning message for that
    case, and suggests the "fix" (which is to wrap the table or
    itemizedlist or whatever in a para that has some preferatory text.

  • Michael(tm) Smith: utility.xsl

    Added support to mixed-block template for handling tables in
    mixed-blocks (e.g., as child of para) correctly.

  • Michael(tm) Smith: table.xsl; synop.xsl; block.xsl; info.xsl; lists.xsl;
    refentry.xsl; end⋯

    Reverted necessary escaping of backslash, dot, and dash
    out of the well-intentioned (but it now appears,
    misguided) "marker" mechanism (introduced in the 1.72.0
    release) -- which made use of alternative "marker"
    characters as internal representations of those
    characters, and then replaced them just prior to
    serialization -- and back into what's basically the
    system that was used prior to the 1.69.0 release; that
    is, into a part of stylesheet code that gets executed
    at the beginning of processing -- before any other roff
    markup up is. This change obviates the need for the
    marker system. It also requires a lot less RAM during
    processing (for large files, the marker mechanism
    ending up requiring gigabytes of memory).

    Closes bug #1661177. Thanks to Scott Smedley for
    providing a test case (the fvwm man page) that exposed
    the problem with the marker mechanism.

    Also moved the mechanism for converting non-breaking
    spaces back into the same area of the stylesheet code.

  • Michael(tm) Smith: lists.xsl

    Fixed problem with incorrect formatting of nested variablelist.
    Closes bug #1650931. Thanks to Daniel "Eagle Eye" Leidert.

  • Michael(tm) Smith: lists.xsl

    Make sure that all listitems in itemizedlist and orderedlist are
    preceded by a blank line. This fixes a regression that occurred
    when instances of the TP macro that were use in a previous
    versions of the list-handling code were switched to RS/RE (because
    TP doesn't support nesting). TP automatically generates a blank
    line, but RS doesn't. So I added a .sp before each .RS

  • Michael(tm) Smith: block.xsl; inline.xsl; param.xweb; docbook.xsl;
    links.xsl; param.ent

    Made a number of changes related to elements with
    out-of-line content:

    - Added handling for mediaobject & inlinemediaobject.
      Each imagedata, audiodata, or videodata element
      within a mediaobject or inline mediaobject is now
      treated as a "notesource" and so handled in much the
      same way as links and annotation/alt/footnotes.

      That means a numbered marker is generated inline to
      mark the place in the main flow where the imagedata,
      audiodata, or videodata element occurs, and a
      corresponding numbered endnote for it is generated in
      the endnotes list at the end of the man page; the
      endnote contains the URL from the fileref attribute
      of the imagedata, audiodata, or videodata element.

      For mediobject and inlinemediaobject instances that
      have a textobject child, the textobject is displayed
      within the main text flow.

    - Renamed several man.link.* params to man.endnotes.*,
      to reflect that fact that the endnotes list now
      contains more than just links. Also did similar
      renaming for a number of stylesheet-internal vars.

    - Added support for xlink:href (along with existing
      support for the legacy ulink element).

    - Cleaned up and streamlined the endnotes-handling
      code. It's still messy and klunky and the basic
      mechanism it uses is very inefficent for documents
      that contain a lot of notesources, but at least it's
      a bit better than it was.

Eclipse

The following changes have been made to the eclipse code since the 1.72.0
release.

  • Mauritz Jeanson: Makefile

    Fixed bug #1715093: Makefile for creating profiled version of eclipse.xsl added.

  • David Cramer: eclipse.xsl

    Added normalize-space around  to avoid leading whitespace from appearing in the output if there's extra leading whitespace (e.g. <title> Foo</title>) in the source

JavaHelp

The following changes have been made to the javahelp code since the 1.72.0
release.

  • Mauritz Jeanson: javahelp.xsl

    Implemented FR #1230233 (sorted index in javahelp).

  • Mauritz Jeanson: javahelp.xsl

    Added normalize-space() around titles and index entries to work around whitespace problems.
    Added support for glossary and bibliography in toc and map files.

Roundtrip

The following changes have been made to the roundtrip code since the 1.72.0
release.

  • Steve Ball: blocks2dbk.xsl; wordml2normalise.xsl; normalise2sections.xsl;
    sections2blocks.⋯

    new stylesheets for better word processor support and easier maintenance

  • Steve Ball: template-pages.xml; dbk2wp.xsl; sections-spec.xml

    fixed bugs

Params

The following changes have been made to the params code since the 1.72.0
release.

  • Mauritz Jeanson: htmlhelp.button.back.xml; htmlhelp.button.forward.xml;
    htmlhelp.button.zo⋯

    Modified refpurpose text.

  • Mauritz Jeanson: htmlhelp.map.file.xml; htmlhelp.force.map.and.alias.xml;
    htmlhelp.alias.f⋯

    Fixed typos, made some small changes.

  • Mauritz Jeanson: javahelp.encoding.xml

    Moved declaration and documentation of javahelp.encoding from javahelp.xsl to the
    regular "parameter machinery".

  • Mauritz Jeanson: generate.id.attributes.xml

    Added refpurpose text.

  • Mauritz Jeanson: annotation.js.xml; annotation.graphic.open.xml;
    annotation.graphic.close.⋯

    Added better refpurpose texts.

  • Michael(tm) Smith: chunker.output.cdata-section-elements.xml;
    chunker.output.standalone.xm⋯

    Fixed some broken formatting in source files for chunker.* params,
    as pointed out by Dave Pawson.

  • Michael(tm) Smith: label.from.part.xml

    Changed handling of reference auto-labeling such that reference
    (when it appears at the component level) is now affected by the
    label.from.part param, just as preface, chapter, and appendix.

  • Mauritz Jeanson: callout.graphics.extension.xml

    Clarified that 'extension' refers to file names.

  • Michael(tm) Smith: abstract.notitle.enabled.xml

    Added new param abstract.notitle.enabled.
    If non-zero, in output of the abstract element on titlepages,
    display of the abstract title is suppressed.
    Because sometimes you really don't want or need that title
    there...

  • Michael(tm) Smith: man.string.subst.map.xml

    Updated manpages string-substitute map to reflect fact that
    because of another recent change to suppress bold markup in .SH
    output, we no longer need to add a workaround for the accidental
    uppercasing of roff escapes that occurred previously.

  • Jirka Kosek: margin.note.float.type.xml; title.font.family.xml;
    table.frame.border.color.x⋯

    Improved parameter metadata

  • Robert Stayton: profile.wordsize.xml; profile.audience.xml

    Add support for profiling on new attributes audience and wordsize.

  • Robert Stayton: callout.graphics.number.limit.xml;
    callout.graphics.extension.xml

    Added SVG graphics for fo output.

  • Robert Stayton: callout.icon.size.xml

    Set size of callout graphics.

  • Jirka Kosek: default.units.xml; chunker.output.method.xml;
    toc.list.type.xml; output.inden⋯

    Updated parameter metadata to the new format.

  • Jirka Kosek: man.output.quietly.xml; title.font.family.xml;
    footnote.sep.leader.properties⋯

    Added type annotations into parameter definition files.

  • Robert Stayton: section.container.element.xml

    Support spans in sections for certain processors.

  • Robert Stayton: component.titlepage.properties.xml

    Empty attribute set for top level component titlepage block.
    Allows setting a span on title info.

  • Jirka Kosek: bibliography.style.xml

    Added link to WiKi page with description of special markup needed for ISO690 biblioentries

  • Robert Stayton: make.year.ranges.xml

    Clarify that multiple year elements are required.

  • Robert Stayton: id.warnings.xml

    Turn off id.warnings by default.

  • Jirka Kosek: bibliography.style.xml

    Added support for formatting biblioentries according to ISO690 citation style.
    New bibliography style can be turned on by setting parameter bibliography.style to "iso690"
    The code was provided by Jana Dvorakova

  • Robert Stayton: header.table.properties.xml; footer.table.properties.xml

    Support adding table properties to header and footer tables.

Highlighting

The following changes have been made to the highlighting code since the 1.72.0
release.

  • Jirka Kosek: c-hl.xml; xslthl-config.xml

    Added support for C language. Provided by Bruno Guegan.

Profiling

The following changes have been made to the profiling code since the 1.72.0
release.

  • Robert Stayton: profile-mode.xsl

    Add support for new profiling attributes audience and wordsize.

Lib

The following changes have been made to the lib code since the 1.72.0 release.

  • Michael(tm) Smith: lib.xweb

    Changed name of prepend-pad template to pad-string and twheeked so
    it can do both right/left padding.

Tools

The following changes have been made to the tools code since the 1.72.0
release.

  • Michael(tm) Smith: bin; bin/docbook-xsl-update

    Did some cleanup to the install.sh source and added a
    docbook-xsl-update script to the docbook-xsl distro, the purpose
    of which is to facilitate easy sync-up to the latest docbook-xsl
    snapshot (by means of rsync).

XSL-Saxon

The following changes have been made to the xsl-saxon code since the 1.72.0
release.

  • Mauritz Jeanson: xalan27/src/com/nwalsh/xalan/Verbatim.java; xalan27/src/
    com/nwalsh/xalan/⋯

    Added modifications so that the new callout.icon.size parameter is taken into account. This
    parameter is used for FO output (where SVG now is the default graphics format for callouts).

  • Mauritz Jeanson: saxon65/src/com/nwalsh/saxon/FormatCallout.java; xalan27/
    src/com/nwalsh/x⋯

    Added code for generating id attributes on callouts in HTML and FO output.
    These patches enable cross-references to callouts placed by area coordinates.
    It works for graphic, unicode and text callouts.
    Part of fix for bug #1675513 (xref to area broken).

  • Michael(tm) Smith: saxon65/src/com/nwalsh/saxon/Website.java; xalan27/src/
    com/nwalsh/xalan⋯

    Copied over Website XSL Java extensions.

XSL-Xalan

The following changes have been made to the xsl-xalan code since the 1.72.0
release.

  • Michael(tm) Smith: Makefile; xalan2

    Turned off xalan2.jar build. This removes DocBook XSL
    Java extensions support for versions of Xalan prior to
    Xalan 2.7. If you are currently using the extensions
    with an earlier version of Xalan, you need to upgrade
    to Xalan 2.7.

  • Mauritz Jeanson: xalan27/src/com/nwalsh/xalan/Verbatim.java; xalan27/src/
    com/nwalsh/xalan/⋯

    Added modifications so that the new callout.icon.size parameter is taken into account. This
    parameter is used for FO output (where SVG now is the default graphics format for callouts).

  • Mauritz Jeanson: saxon65/src/com/nwalsh/saxon/FormatCallout.java; xalan27/
    src/com/nwalsh/x⋯

    Added code for generating id attributes on callouts in HTML and FO output.
    These patches enable cross-references to callouts placed by area coordinates.
    It works for graphic, unicode and text callouts.
    Part of fix for bug #1675513 (xref to area broken).

  • Michael(tm) Smith: saxon65/src/com/nwalsh/saxon/Website.java; xalan27/src/
    com/nwalsh/xalan⋯

    Copied over Website XSL Java extensions.

Release: 1.72.0

This release includes important bug fixes and adds the following significant
feature changes:

Automatic sorting of glossary entries

    The HTML and FO stylesheets now support automatic sorting of glossary
    entries. To enable glossary sorting, set the value of the glossary.sort 
    parameter to 1 (by default, it’s value is 0). When you enable glossary
    sorting, glossentry elements within a glossary, glossdiv, or glosslist are
    sorted on the glossterm, using the current language setting. If you don’t
    enable glossary sorting, then the order of glossentry elements is left “as
    is” — that is, they are not sorted but are instead just displayed in
    document order.

WordML renamed to Roundtrip, OpenOffice support added

    Stylesheets for “roundtrip” conversion between documents in OpenOffice
    format (ODF) and DocBook XML have been added to the set of stylesheets that
    formerly had the collective title WordML, and that set of stylesheets has
    been renamed to Roundtrip to better reflect the actual scope and purpose of
    its contents.

    So the DocBook XSL Stylesheets now support roundtrip conversion (with
    certain limitations) of WordML, OpenOffice, and Apple Pages documents to
    and from DocBook XML.

Including QandASet questions in TOCs

    The HTML stylesheet now provides support for including QandASet questions
    in the document TOC. To enable display of questions in the document TOC,
    set the value of the qanda.in.toc to 1 (by default, it’s 0). When you
    enable qanda.in.toc, then the generated table of contents for a document
    will include qandaset titles, qandadiv titles, and question elements. The
    default value of zero excludes them from the TOC.

    Note

    The qanda.in.toc parameter does not affect any tables of contents that may
    be generated within a qandaset or qandadiv (only in the document TOC).

Language identifier in man-page filenames and pathnames

    Added new parameter man.output.lang.in.name.enabled, which controls whether
    a language identifier is included in man-page filenames and pathnames. It
    works like this:

    If the value of man.output.lang.in.name.enabled is non-zero, man-page files
    are output with a language identifier included in their filenames or
    pathnames as follows:

      □ if man.output.subdirs.enabled is non-zero, each file is output to,
        e.g., a /$lang/man8/foo.8 pathname

      □ if man.output.subdirs.enabled is zero, each file is output with a
        foo.$lang.8 filename

index.page.number.properties property set

    For FO output, use the index.page.number.properties to control formatting
    of page numbers in index output — to (for example) to display page numbers
    in index output in a different color (to indicate that they are links).

Crop marks in output from Antenna House XSL Formatter

    Support has been added for generating crop marks in print/PDF output
    generated using Antenna House XSL Formatter

More string-substitution hooks in manpages output

    The man.string.subst.map.local.pre and man.string.subst.map.local.post
    parameters have been added to enable easier control over custom string
    substitutions.

Moved verbatim properties to attribute-set

    The hardcoded properties used in verbatim elements (literallayout,
    programlisting, screen) were moved to the verbatim.properties attribute-set
    so they can be more easily customized.

enhanced simple.xlink template

    Now the simple.xlink template in inline.xsl works with cross reference
    elements xref and link as well. Also, more elements call simple.xlink,
    which enables DB5 xlink functionality.

DocBook 5 compatibility

    Stylesheets now consistently support DocBook 5 attributes (such as xml:id).
    Also, DocBook 5 info elements are now checked along with other *info
    elements, and the use of name() function was replaced by local-name() so it
    also matches on DocBook 5 elements. These changes enable reusing the
    stylesheets with DocBook 5 documents with minimal fixup.

HTML class attributes now handled in class.attribute mode

    The HTML class attributes were formerly hardcoded to the element name. Now
    the class attribute is generated by applying templates in class.attribute
    mode so class attribute names can be customized. The default is still the
    element name.

arabic-indic numbering enabled in autolabels

    Numbering of chapter, sections, and pages can now use arabic-indic
    numbering when number format is set to 'arabicindic' or to ١.

The following is a detailed list of changes (not including bug fixes) that have
been made since the 1.71.1 release.

Common

The following changes have been made to the common code since the 1.71.1
release.

  • Add support for arabicindic numbering to autolabel.format template.

  • Finish support for @xml:id everywhere @id is used.

  • replace name() with local-name() in most cases.

  • Add support for info.

  • Add utility template tabstyle to return the tabstyle from
    any table element.

FO

The following changes have been made to the fo code since the 1.71.1 release.

  • Add support for sorting glossary entries

  • Add table.row.properties template to customize table rows.

  • Moved all properties to attribute-sets so can be customized more easily.

  • Add index.page.number.properties attribute-set to format page numbers.

  • xref now supports xlink:href, using simple.xlink template.

  • Rewrote simple.xlink, and call it with all charseq templates.

  • Add simple.xlink processing to term and member elements.

  • Add support for crop marks in Antenna House.

HTML

The following changes have been made to the html code since the 1.71.1 release.

  • Add support for sorting glossary entries

  • Add support for qanda.in.toc to add qandaentry questions to document TOC.

  • add simple.xlink support to variablelist term and simplelist member.

  • *.propagates.style now handled in class.attribute mode.

  • add class parameter to class.attribute mode to set default class.

  • Convert all class attributes to use the class.attribute mode
    so class names can be customized more easily.

  • Add class.attribute mode to generate class attributes.

  • Added simple.xlink to most remaining inlines.
    Changed class attributes to applying class.attributes mode.

  • Changed xref template to use simple.xlink tempalte.

  • Improve generate.html.title to work with link targets too.

  • Improved simple.xlink to support link and xref.

  • Use new link.title.attribute now.

  • Rewrote simple.xlink to handle linkend also.
    Better computation of title attribute on link too.

  • Handle Xalan quirk as special case.

  • Add support for info.

  • Fixed imagemaps so they work properly going from calspair coords
    to HTML area coords.

Manpages

The following changes have been made to the manpages code since the 1.71.1
release.

  • Added doc for man.output.lang.in.name.enabled parameter. This
    checkin completes support for writing file/pathnames for man-pages
    with $lang include in the names. Closes #1585967. knightly
    accolades to Daniel Leidert for providing the feature request.

  • Added new param man.output.lang.in.name.enabled, which
    controls whether $LANG value is included in manpages
    filenames and pathnames. It works like this:

    If the value of man.output.lang.in.name.enabled is non-zero,
    man-page files are output with the $lang value included in
    their filenames or pathnames as follows;

    - if man.output.subdirs.enabled is non-zero, each file is
      output to, e.g., a /$lang/man8/foo.8 pathname

    - if man.output.subdirs.enabled is zero, each file is output
      with a foo.$lang.8 filename

  • Use "\e" instead of "\\" for backslash output, because the
    groff docs say that's the correct thing to do; also because
    testing (thanks, Paul Dubois) shows that "\\" doesn't always
    work as expected; for example, "\\" within a table seems to
    mess things up.

  • Added the man.string.subst.map.local.pre and
    man.string.subst.map.local.post parameters. Those parameters
    enable local additions and changes to string-substitution mappings
    without the need to change the value of man.string.subst.map
    parameter (which is for standard system mappings). Closes
    #1456738. Thanks to Sam Steingold for constructing a true
    stylesheet torture test (the clisp docs) that exposed the need for
    these params.

  • Added the Markup element to the list of elements that get output
    in bold. Thanks to Eric S. Raymond.

  • Replaced all dots in roff requests with U+2302 ("house"
    character), and added escaping in output for all instances of dot
    that are not in roff requests. This fixes the problem case where a
    string beginning with a dot (for example, the string ".bashrc")
    might occur at the beginning of a line in output, in which case 
    would mistakenly get interpreted as a roff request. Thanks to Eric
    S. Raymond for pushing to fix this.

  • Made change to ensure that list content nested in
    itemizedlist and orderedlist instances is properly indented. This
    is a switch from using .TP to format those lists to using .RS/.RE
    to format them instead (because .TP does not allow nesting). Closes bug #
    1602616.
    Thanks to Daniel Leidert.

Params

The following changes have been made to the params code since the 1.71.1
release.

  • Added doc for man.output.lang.in.name.enabled parameter. This
    checkin completes support for writing file/pathnames for man-pages
    with $lang include in the names. Closes #1585967. knightly
    accolades to Daniel Leidert for providing the feature request.

  • Added new param man.output.lang.in.name.enabled, which
    controls whether $LANG value is included in manpages
    filenames and pathnames. It works like this:

    If the value of man.output.lang.in.name.enabled is non-zero,
    man-page files are output with the $lang value included in
    their filenames or pathnames as follows;

    - if man.output.subdirs.enabled is non-zero, each file is
      output to, e.g., a /$lang/man8/foo.8 pathname

    - if man.output.subdirs.enabled is zero, each file is output
      with a foo.$lang.8 filename

  • Added the man.string.subst.map.local.pre and
    man.string.subst.map.local.post parameters. Those parameters
    enable local additions and changes to string-substitution mappings
    without the need to change the value of man.string.subst.map
    parameter (which is for standard system mappings). Closes
    #1456738. Thanks to Sam Steingold for constructing a true
    stylesheet torture test (the clisp docs) that exposed the need for
    these params.

  • Add index.page.number.properties by default.

  • Added index.page.number.properties
     to allow customizations of page numbers in indexes.

  • Move show-destination="replace" property from template to attribute-set
    so it can be customized.

  • Add support for sorting glossary entries

  • Add option to include qanda in tables of contents.

  • Moved all properties to attribute-sets so can be customized more easily.

Template

The following changes have been made to the template code since the 1.71.1
release.

  • Added workaround for Xalan bug: use for-each and copy instead of copy-of (#
    1604770).

Roundtrip

The following changes have been made to the roundtrip code since the 1.71.1
release.

  • rename to roundtrip, add OpenOffice support

Release: 1.71.1

This is a minor update to the 1.71.0 release. Along with a number of bug fixes,
it includes two feature changes:

  • Added support for profiling based on xml:lang and status attributes.

  • Added initial support in manpages output for footnote, annotation, and alt
    instances. Basically, they all now get handled the same way ulink instances
    are. They are treated as a class as "note sources": A numbered marker is
    generated at the place in the main text flow where they occur, then their
    contents are displayed in an endnotes section at the end of the man page.

Common

The following changes have been made to the common code since the 1.71.1
release.

  • For backward compatability autoidx-ng.xsl is invoking "kosek" indexing method again.

  • Add support for Xalan generating a root xml:base like saxon.

FO

The following changes have been made to the fo code since the 1.71.1 release.

  • For backward compatability autoidx-ng.xsl is invoking "kosek" indexing method again.

  • Add support for Xalan to add root node xml:base for db5 docs.

  • Added support for profiling based on xml:lang and status attributes.

HTML

The following changes have been made to the html code since the 1.71.1 release.

  • For backward compatability autoidx-ng.xsl is invoking "kosek" indexing method again.

  • Add support for Xalan to add root node xml:base for db5 docs.

  • Added support for profiling based on xml:lang and status attributes.

  • Made changes in namespace declarations to prevent xmllint's
    canonicalizer from treating them as relative namespace URIs.

      - Changed xmlns:k="java:com.isogen.saxoni18n.Saxoni18nService"
        to xmlns:k="http://www.isogen.com/functions/
    com.isogen.saxoni18n.Saxoni18nService";
        Saxon accepts either form
        (see http://www.saxonica.com/documentation/extensibility/
    functions.html);
        to Saxon, "the part of the URI before the final '/' is immaterial".

      - Changed, e.g. xmlns:xverb="com.nwalsh.xalan.Verbatim" to
        xmlns:xverb="xalan://com.nwalsh.xalan.Verbatim"; Xalan accepts
        either form
        (see http://xml.apache.org/xalan-j/extensions.html#
    java-namespace-declare);
        just as Saxon does, it will "simply use the string to the
        right of the rightmost forward slash as the Java class name".

      - Changed xmlns:xalanredirect="org.apache.xalan.xslt.extensions.Redirect"
        to xmlns:redirect="http://xml.apache.org/xalan/redirect", and
        adjusted associated code to make the current Xalan redirect spec.
        (see http://xml.apache.org/xalan-j/apidocs/org/apache/xalan/lib/
    Redirect.html)

  • Added the html.append and chunk.append parameters. By default, the
    value of both is empty; but the internal DocBook XSL stylesheets
    build sets their value to "<xsl:text>&#x0a;</xsl:text>", in order
    to ensure that all files in the docbook-xsl-doc package end in a
    newline character. (Because diff and some other tools may emit
    error messages and/or not behave as expected when processing
    files that are not newline-terminated.)

Highlighting

The following changes have been made to the highlighting code since the 1.71.1
release.

  • Added license information

Manpages

The following changes have been made to the manpages code since the 1.71.1
release.

  • Added initial support in manpages output for footnote, annotation,
    and alt instances. Basically, they all now get handled the same
    way ulink instances are. They are treated as a class as "note
    sources": A numbered marker is generated at the place in the main
    text flow where they occur, then their contents are displayed in
    an endnotes section at the end of the man page (currently titled
    REFERENCES, for English output, but will be changed to NOTES).

    This support is not yet complete. It works for most "normal"
    cases, but probably mishandles a good number of cases. More
    testing will be needed to expose the problems. It may well also
    introduce some bugs and regressions in other areas, including
    basic paragraph handling, handling of "mixed block" content,
    handling of other indented content, and handling of authorblurb
    and personblurb in the AUTHORS section.

Params

The following changes have been made to the params code since the 1.71.1
release.

  • Added support for profiling based on xml:lang and status attributes.

  • Added the html.append and chunk.append parameters. By default, the
    value of both is empty; but the internal DocBook XSL stylesheets
    build sets their value to "<xsl:text>&#x0a;</xsl:text>", in order
    to ensure that all files in the docbook-xsl-doc package end in a
    newline character. (Because diff and some other tools may emit
    error messages and/or not behave as expected when processing
    files that are not newline-terminated.)

Profiling

The following changes have been made to the profiling code since the 1.71.1
release.

  • Added support for profiling based on xml:lang and status attributes.

Release: 1.71.0

This is mainly a bug fix release, but it also includes two significant feature
changes:

Highlighting support added

    The stylesheets now include support for source-code highlighting in output
    of programlisting instances (controlled through the highlight.source
    parameter). The Java-based implementation requires Saxon and makes use of
    Michal Molhanec’s XSLTHL. More details are available at Jirka Kosek’s
    website:

        http://xmlguru.cz/2006/07/docbook-syntax-highlighting

    The support is currently limited to highlighting of XML, Java, PHP, Delphi,
    Modula-2 sources, and INI files.

Changes to autoindexing

    The templates that handle alternative indexing methods were reworked to
    avoid errors produced by certain processors not being able to tolerate the
    presence of unused functions. With this release, none of the code for the
    'kimber' or 'kosek' methods is included in the default stylesheets. In
    order to use one of those methods, your customization layer must import one
    of the optional stylesheet modules:

      □ html/autoidx-kosek.xsl
      □ html/autoidx-kimber.xsl
      □ fo/autoidx-kosek.xsl
      □ fo/autoidx-kimber.xsl

    See the index.method parameter reference page for more information.

    Two other changes to note:

      □ The default indexing method now can handle accented characters in
        latin-based alphabets, not just English. This means accented latin
        letters will group and sort with their unaccented counterpart.
      □ The default value for the index.method parameter was changed from
        'english' to 'basic' because now the default method can handle
        latin-based alphabets, not just English.

The following is a list of changes that have been made since the 1.70.1
release.

Common

The following changes have been made to the common code since the 1.70.1
release.

  • Added reference.autolabel parameter for controlling labels on
    reference output.

  • Support rows that are *completely* overlapped by the preceding row

  • New modules for supporting indexing extensions.

  • Support startinglinenumber on orderedlist

Extensions

The following changes have been made to the extensions code since the 1.70.1
release.

  • Completely reworked extensions build system; now uses NetBeans and ant

FO

The following changes have been made to the fo code since the 1.70.1 release.

  • xsl:sort lang attribute now uses two-char substring of lang attribute.

  • Support titlecase "Java", "Perl", and "IDL" as values for the
    language attribute on classsynopsis, etc. (instead of just
    lowercase "java", "perl", and "idl"). Also support "c++" and "C++"
    (instead of just "cpp").

    Affects HTML, FO, and manpages output. Closes bug 1552332. Thanks
    to "Brian A. Vanderburg II".

  • Added support for the reference.autolabel param in (X)HTML and FO
    output.

  • Support rows that are *completely* overlapped by the preceding row

  • Rearranged templates for the 3 indexing methods
    and changed method named 'english' to 'basic'.

  • New modules for supporting indexing extensions.

  • Turn off blank-body for fop1.extensions too since fop 0.92
    does not support it either.

  • Add Xalan variant to test for exslt:node-set function.
    Xalan can use function named node-set(), but doesn't
    recognize it using function-available().

  • Added support to FO stylesheets for handling instances of Org
    where it occurs outside of *info content. In HTML stylesheets,
    moved handling of Org out of info.xsl and into inline.xsl. In both
    FO and HTML stylesheets, added support for correctly processing
    Affiliation and Jobtitle.

  • Don't output punctuation between Refname and Refpurpose if
    Refpurpose is empty. Also corrected handling of Refsect2/title
    instances, and removed some debugging stuff that was generated in
    manpages output to mark the ends of sections.

  • Added new email.delimiters.enabled param. If non-zero (the
    default), delimiters are generated around e-mail addresses (output
    of the email element). If zero, the delimiters are suppressed.

  • Initial support of syntax highlighting of programlistings.

  • Chapter after preface should restart numbering of pages.

HTML

The following changes have been made to the html code since the 1.70.1 release.

  • xsl:sort lang attribute now uses two-char substring of lang attribute.

  • Support titlecase "Java", "Perl", and "IDL" as values for the
    language attribute on classsynopsis, etc. (instead of just
    lowercase "java", "perl", and "idl"). Also support "c++" and "C++"
    (instead of just "cpp").

    Affects HTML, FO, and manpages output. Closes bug 1552332. Thanks
    to "Brian A. Vanderburg II".

  • Added support for the reference.autolabel param in (X)HTML and FO
    output.

  • Support rows that are *completely* overlapped by the preceding row

  • Rearranged templates for the 3 indexing methods
    and changed method named 'english' to 'basic'.

  • New modules for supporting indexing extensions.

  • Added several new HTML parameters for controlling appearance of
    content on HTML title pages:

    contrib.inline.enabled:
      If non-zero (the default), output of the contrib element is
      displayed as inline content rather than as block content.

    othercredit.like.author.enabled:
      If non-zero, output of the othercredit element on titlepages is
      displayed in the same style as author and editor output. If zero
      (the default), othercredit output is displayed using a style
      different than that of author and editor.

    blurb.on.titlepage.enabled:
      If non-zero, output from authorblurb and personblurb elements is
      displayed on title pages. If zero (the default), output from
      those elements is suppressed on title pages (unless you are
      using a titlepage customization that causes them to be included).

    editedby.enabled
      If non-zero (the default), a localized Edited by heading is
      displayed above editor names in output of the editor element.

  • Add Xalan variant to test for exslt:node-set function.
    Xalan can use function named node-set(), but doesn't
    recognize it using function-available().

  • Added support to FO stylesheets for handling instances of Org
    where it occurs outside of *info content. In HTML stylesheets,
    moved handling of Org out of info.xsl and into inline.xsl. In both
    FO and HTML stylesheets, added support for correctly processing
    Affiliation and Jobtitle.

  • Don't output punctuation between Refname and Refpurpose if
    Refpurpose is empty. Also corrected handling of Refsect2/title
    instances, and removed some debugging stuff that was generated in
    manpages output to mark the ends of sections.

  • Added new email.delimiters.enabled param. If non-zero (the
    default), delimiters are generated around e-mail addresses (output
    of the email element). If zero, the delimiters are suppressed.

  • Added qanda.nested.in.toc param. Default value is zero. If
    non-zero, instances of "nested" Qandaentry (ones that are children
    of Answer elements) are displayed in the TOC. Closes patch 1509018
    (from Daniel Leidert). Currently on affects HTML output (no patch
    for FO output provided).

  • Improved handling of relative locations generated files

  • Initial support of syntax highlighting of programlistings.

  • Support org

  • Support person

  • Support $keep.relative.image.uris also when chunking

Highlighting

The following changes have been made to the highlighting code since the 1.70.1
release.

  • Initial support of syntax highlighting of programlistings.

Manpages

The following changes have been made to the manpages code since the 1.70.1
release.

  • Suppress footnote markers and output warning that footnotes are
    not yet supported.

  • Handle instances of address/otheraddr/ulink in author et al in the
    same way as email instances; that is, display them on the same
    linke as the author, editor, etc., name.

  • Don't number or link-list any Ulink instance whose string value is
    identical to the value of its url attribute. Just display it inline.

  • Don't output punctuation between Refname and Refpurpose if
    Refpurpose is empty. Also corrected handling of Refsect2/title
    instances, and removed some debugging stuff that was generated in
    manpages output to mark the ends of sections.

  • Added new email.delimiters.enabled param. If non-zero (the
    default), delimiters are generated around e-mail addresses (output
    of the email element). If zero, the delimiters are suppressed.

  • In manpages output, if the last/nearest *info element for
    particular Refentry has multiple Copyright and/or Legalnotice
    children, process them all (not just the first ones). Closes bug
    1524576. Thanks to Sam Steingold for the report and to Daniel
    Leidert for providing a patch.

Params

The following changes have been made to the params code since the 1.70.1
release.

  • Added reference.autolabel parameter for controlling labels on
    reference output.

  • Added namespace declarations to document elements for all param files.

  • Updated index.method doc to describe revised setup for importing index
     extensions.

  • Added several new HTML parameters for controlling appearance of
    content on HTML title pages:

    contrib.inline.enabled:
      If non-zero (the default), output of the contrib element is
      displayed as inline content rather than as block content.

    othercredit.like.author.enabled:
      If non-zero, output of the othercredit element on titlepages is
      displayed in the same style as author and editor output. If zero
      (the default), othercredit output is displayed using a style
      different than that of author and editor.

    blurb.on.titlepage.enabled:
      If non-zero, output from authorblurb and personblurb elements is
      displayed on title pages. If zero (the default), output from
      those elements is suppressed on title pages (unless you are
      using a titlepage customization that causes them to be included).

    editedby.enabled
      If non-zero (the default), a localized Edited by heading is
      displayed above editor names in output of the editor element.

  • Added new email.delimiters.enabled param. If non-zero (the
    default), delimiters are generated around e-mail addresses (output
    of the email element). If zero, the delimiters are suppressed.

  • Added qanda.nested.in.toc param. Default value is zero. If
    non-zero, instances of "nested" Qandaentry (ones that are children
    of Answer elements) are displayed in the TOC. Closes patch 1509018
    (from Daniel Leidert). Currently on affects HTML output (no patch
    for FO output provided).

  • Initial support of syntax highlighting of programlistings.

Tools

The following changes have been made to the tools code since the 1.70.1
release.

  • Racheted down font sizes of headings in example makefile FO output.

  • Added param and attribute set to example makefile, for getting
    wrapping in verbatims in FO output.

  • Renamed Makefile.paramDoc to Makefile.docParam.

  • Added Makefile.paramDoc file, for creating versions of param.xsl
    files with doc embedded.

  • Added variable to example makefile for controlling whether HTML or
    XHTML is generated.

Release: 1.70.1

This is a stable release of the 1.70 stylesheets. It includes only a few small
changes from 1.70.0.

The following is a list of changes that have been made since the 1.70.0
release.

FO

The following changes have been made to the fo code since the 1.70.0 release.

  • Added three new attribute sets (revhistory.title.properties,
    revhistory.table.properties and revhistory.table.cell.properties) for
    controlling appearance of revhistory in FO output.

    Modified: fo/block.xsl,1.34; fo/param.ent,1.101; fo/param.xweb,1.114; fo/
    titlepage.xsl,1.41; params/revhistory.table.cell.properties.xml,1.1; params
    /revhistory.table.properties.xml,1.1; params/
    revhistory.title.properties.xml,1.1 - Jirka Kosek

  • Support DBv5 revisions with full author name (not only authorinitials)

    Modified: fo/block.xsl,1.33; fo/titlepage.xsl,1.40 - Jirka Kosek

HTML

The following changes have been made to the html code since the 1.70.0 release.

  • Support DBv5 revisions with full author name (not only authorinitials)

    Modified: html/block.xsl,1.23; html/titlepage.xsl,1.34 - Jirka Kosek

HTMLHelp

The following changes have been made to the htmlhelp code since the 1.70.0
release.

  • htmlhelp.generate.index is now param, not variable. This means that you can
    override its setting from outside. This is useful when you generate
    indexterms on the fly (see http://www.xml.com/pub/a/2004/07/14/dbndx.html?
    page=3).

    Modified: htmlhelp/htmlhelp-common.xsl,1.38 - Jirka Kosek

  • Support chunk.tocs.and.lots in HTML Help

    Modified: htmlhelp/htmlhelp-common.xsl,1.37 - Jirka Kosek

Params

The following changes have been made to the params code since the 1.70.0
release.

  • Added three new attribute sets (revhistory.title.properties,
    revhistory.table.properties and revhistory.table.cell.properties) for
    controlling appearance of revhistory in FO output.

    Modified: fo/block.xsl,1.34; fo/param.ent,1.101; fo/param.xweb,1.114; fo/
    titlepage.xsl,1.41; params/revhistory.table.cell.properties.xml,1.1; params
    /revhistory.table.properties.xml,1.1; params/
    revhistory.title.properties.xml,1.1 - Jirka Kosek

Release: 1.70.0

As with all DocBook Project dot-zero releases, this is an experimental release.
It will be followed shortly by a stable release.

This release adds a number of new features, including:

  • support for selecting alternative index-collation methods (in particular,
    support for using a collation library developed by Eliot Kimber)

  • improved handling of DocBook 5 document instances (through a
    namespace-stripping mechanism)

  • full support for CALS and HTML tables in manpages output

  • a mechanism for preserving relative URIs in documents that make use of
    XInclude

  • support for the "new" .90 version of FOP

  • enhanced capabilities for controlling formatting of lists in HTML and FO
    output

  • autogeneration of AUTHOR and COPYRIGHT sections in manpages output

  • support for generating crop marks in FO/PDF output

  • support for qandaset as a root element in FO output

  • support for floatstyle and orient on all table types

  • support for floatstyle in figure, and example

  • pgwide.properties attribute-set supports extending figure, example and
    table into the left indent area instead of spanning multiple columns.

The following is a detailed list of enhancements and API changes that have been
made since the 1.69.1 release.

Common

The following changes have been made to the common code since the 1.69.1
release.

  • Add the xsl:key for the kimber indexing method.

    Modified: common/autoidx-ng.xsl,1.2 - Robert Stayton

  • Add support for qandaset.

    Modified: common/labels.xsl,1.37; common/subtitles.xsl,1.7; common/
    titles.xsl,1.35 - Robert Stayton

  • Support dbhtml/dbfo start PI for orderedlist numbering in both HTML and FO

    Modified: common/common.xsl,1.61; html/lists.xsl,1.50 - Norman Walsh

  • Added CVS header.

    Modified: common/stripns.xsl,1.12 - Robert Stayton

  • Changed content model of text element to ANY rather than #PCDATA because
    they could contain markup.

    Modified: common/targetdatabase.dtd,1.7 - Robert Stayton

  • Added refentry.meta.get.quietly param.

    If zero (the default), notes and warnings about "missing" markup are
    generated during gathering of refentry metadata. If non-zero, the metadata
    is gathered "quietly" -- that is, the notes and warnings are suppressed.

    NOTE: If you are processing a large amount of refentry content, you may be
    able to speed up processing significantly by setting a non-zero value for
    refentry.meta.get.quietly.

    Modified: common/refentry.xsl,1.17; manpages/param.ent,1.15; manpages/
    param.xweb,1.17; params/refentry.meta.get.quietly.xml,1.1 - Michael(tm)
    Smith

  • After namespace stripping, the source document is the temporary tree
    created by the stripping process and it has the wrong base URI for relative
    references. Earlier versions of this code used to try to fix that by
    patching the elements with relative @fileref attributes. That was
    inadequate because it calculated an absolute base URI without considering
    that there might be xml:base attributes already in effect. It seems obvious
    now that the right thing to do is simply to put the xml:base on the root of
    the document. And that seems to work.

    Modified: common/stripns.xsl,1.7 - Norman Walsh

  • Added support for "software" and "sectdesc" class values on refmiscinfo;
    "software" is treated identically to "source", and "setdesc" is treated
    identically to "manual".

    Modified: common/refentry.xsl,1.10; params/
    man.th.extra2.max.length.xml,1.3; params/
    refentry.source.name.profile.xml,1.4 - Michael(tm) Smith

  • Added support for DocBook 5 namespace-stripping in manpages stylesheet.
    Closes request #1210692.

    Modified: common/common.xsl,1.56; manpages/docbook.xsl,1.57 - Michael(tm)
    Smith

  • Added <xsl:template match="/"> to make stripns.xsl usable as a standalone
    stylesheet for stripping out DocBook 5/NG to DocBook 4. Note that DocBook
    XSLT drivers that include this stylesheet all override the match="/"
    template.

    Modified: common/stripns.xsl,1.4 - Michael(tm) Smith

  • Number figures, examples, and tables from book if there is no prefix (i.e.
    if chapter.autolabel is set to 0). This avoids having the list of figures
    where the figures mysteriously restart their numeration periodically when
    chapter.autolabel is set to 0.

    Modified: common/labels.xsl,1.36 - David Cramer

  • Add task template in title.markup mode.

    Modified: common/titles.xsl,1.34 - Robert Stayton

  • Add children (with ids) of formal objects to target data.

    Modified: common/targets.xsl,1.10 - Robert Stayton

  • Added support for case when personname doesn't contain specific name markup
    (as allowed in DocBook 5.0)

    Modified: common/common.xsl,1.54 - Jirka Kosek

Extensions

The following changes have been made to the extensions code since the 1.69.1
release.

  • Support Xalan 2.7

    Modified: extensions/xalan27/.cvsignore,1.1; extensions/xalan27/
    build.xml,1.1; extensions/xalan27/nbproject/.cvsignore,1.1; extensions/
    xalan27/nbproject/build-impl.xml,1.1; extensions/xalan27/nbproject/
    genfiles.properties,1.1; extensions/xalan27/nbproject/
    project.properties,1.1; extensions/xalan27/nbproject/project.xml,1.1;
    extensions/xalan27/src/com/nwalsh/xalan/CVS.java,1.1; extensions/xalan27/
    src/com/nwalsh/xalan/Callout.java,1.1; extensions/xalan27/src/com/nwalsh/
    xalan/FormatCallout.java,1.1; extensions/xalan27/src/com/nwalsh/xalan/
    FormatDingbatCallout.java,1.1; extensions/xalan27/src/com/nwalsh/xalan/
    FormatGraphicCallout.java,1.1; extensions/xalan27/src/com/nwalsh/xalan/
    FormatTextCallout.java,1.1; extensions/xalan27/src/com/nwalsh/xalan/
    FormatUnicodeCallout.java,1.1; extensions/xalan27/src/com/nwalsh/xalan/
    Func.java,1.1; extensions/xalan27/src/com/nwalsh/xalan/
    ImageIntrinsics.java,1.1; extensions/xalan27/src/com/nwalsh/xalan/
    Params.java,1.1; extensions/xalan27/src/com/nwalsh/xalan/Table.java,1.1;
    extensions/xalan27/src/com/nwalsh/xalan/Text.java,1.1; extensions/xalan27/
    src/com/nwalsh/xalan/Verbatim.java,1.1 - Norman Walsh

  • Handle the case where the imageFn is actually a URI. This still needs work.

    Modified: extensions/saxon643/com/nwalsh/saxon/ImageIntrinsics.java,1.4 -
    Norman Walsh

FO

The following changes have been made to the fo code since the 1.69.1 release.

  • Adapted to the new indexing code. Now works just like a wrapper that calls
    kosek indexing method, originally implemented here.

    Modified: fo/autoidx-ng.xsl,1.5 - Jirka Kosek

  • Added parameters for header/footer table minimum height.

    Modified: fo/pagesetup.xsl,1.60; fo/param.ent,1.100; fo/param.xweb,1.113 -
    Robert Stayton

  • Add the index.method parameter.

    Modified: fo/param.ent,1.99; fo/param.xweb,1.112 - Robert Stayton

  • Integrate support for three indexing methods: - the original English-only
    method. - Jirka Kosek's method using EXSLT extensions. - Eliot Kimber's
    method using Saxon extensions. Use the 'index.method' parameter to select.

    Modified: fo/autoidx.xsl,1.38 - Robert Stayton

  • Add support for TOC for qandaset in fo output.

    Modified: fo/autotoc.xsl,1.30; fo/qandaset.xsl,1.20 - Robert Stayton

  • Added parameter ulink.hyphenate.chars. Added parameter insert.link
    .page.number.

    Modified: fo/param.ent,1.98; fo/param.xweb,1.111 - Robert Stayton

  • Implemented feature request #942524 to add insert.link.page.number to allow
    link element cross references to have a page number.

    Modified: fo/xref.xsl,1.67 - Robert Stayton

  • Add support for ulink.hyphenate.chars so more characters can be break
    points in urls.

    Modified: fo/xref.xsl,1.66 - Robert Stayton

  • Implemented patch #1075144 to make the url text in a ulink in FO output an
    active link as well.

    Modified: fo/xref.xsl,1.65 - Robert Stayton

  • table footnotes now have their own table.footnote.properties attribute set.

    Modified: fo/footnote.xsl,1.23 - Robert Stayton

  • Add qandaset to root.elements.

    Modified: fo/docbook.xsl,1.41 - Robert Stayton

  • Added mode="page.sequence" to make it easier to put content into a page
    sequence. First used for qandaset.

    Modified: fo/component.xsl,1.37 - Robert Stayton

  • Implemented feature request #1434408 to support formatting of biblioentry.

    Modified: fo/biblio.xsl,1.35 - Robert Stayton

  • Added biblioentry.properties.

    Modified: fo/param.ent,1.97; fo/param.xweb,1.110 - Robert Stayton

  • Support PTC/Arbortext bookmarks

    Modified: fo/docbook.xsl,1.40; fo/ptc.xsl,1.1 - Norman Walsh

  • Added table.footnote.properties to permit table footnotes to format
    differently from regular footnotes.

    Modified: fo/param.ent,1.96; fo/param.xweb,1.109 - Robert Stayton

  • Refactored table templates to unify their processing and support all
    options in all types. Now table and informaltable, in both Cals and Html
    markup, use the same templates where possible, and all support pgwide,
    rotation, and floats. There is also a placeholder table.container template
    to support wrapping a table in a layout table, so the XEP table title
    "continued" extension can be more easily implemented.

    Modified: fo/formal.xsl,1.52; fo/htmltbl.xsl,1.9; fo/table.xsl,1.48 -
    Robert Stayton

  • Added new attribute set toc.line.properties for controlling appearance of
    lines in ToC/LoT

    Modified: fo/autotoc.xsl,1.29; fo/param.ent,1.95; fo/param.xweb,1.108 -
    Jirka Kosek

  • Added support for float to example and equation. Added support for pgwide
    to figure, example, and equation (the latter two via a dbfo pgwide="1"
    processing instruction).

    Modified: fo/formal.xsl,1.51 - Robert Stayton

  • Add pgwide.properties attribute-set.

    Modified: fo/param.ent,1.94; fo/param.xweb,1.107 - Robert Stayton

  • Added refclass.suppress param.

    If the value of refclass.suppress is non-zero, then display refclass
    contents is suppressed in output. Affects HTML and FO output only.

    Modified: fo/param.ent,1.93; fo/param.xweb,1.106; html/param.ent,1.90; html
    /param.xweb,1.99; params/refclass.suppress.xml,1.1 - Michael(tm) Smith

  • Improved support for task subelements

    Modified: fo/task.xsl,1.3; html/task.xsl,1.3 - Jirka Kosek

  • Adjusted spacing around K&R-formatted Funcdef and Paramdef output such that
    it can more easily be discerned where one ends and the other begins. Closes
    #1213264.

    Modified: fo/synop.xsl,1.18 - Michael(tm) Smith

  • Made handling of paramdef/parameter in FO output consistent with that in
    HTML and manpages output. Closes #1213259.

    Modified: fo/synop.xsl,1.17 - Michael(tm) Smith

  • Made handling of Refnamediv consistent with formatting in HTML and manpages
    output; specifically, changed so that Refname (comma-separated list of
    multiple instances found) is used (instead of Refentrytitle as previously),
    then em-dash, then the Refpurpose. Closes #1212562.

    Modified: fo/refentry.xsl,1.30 - Michael(tm) Smith

  • Added output of Releaseinfo to recto titlepage ("copyright" page) for Book
    in FO output. This makes it consistent with HTML output. Closes #1327034.
    Thanks to Paul DuBois for reporting.

    Modified: fo/titlepage.templates.xml,1.28 - Michael(tm) Smith

  • Added condition for setting block-progression-dimension.minimum on
    table-row, instead of height, when fop1.extensions is non-zero. For an
    explanation of the reason for the change, see: http://wiki.apache.org/
    xmlgraphics-fop/Troubleshooting/CommonLogMessages

    Modified: fo/pagesetup.xsl,1.59 - Michael(tm) Smith

  • Added new refclass.suppress param for suppressing display of Refclass in
    HTML and FO output. Did not add it to manpages because manpages stylesheet
    is currently just silently ignoring Refclass anyway. Closes request #
    1461065. Thanks to Davor Ocelic (docelic) for reporting.

    Modified: fo/refentry.xsl,1.29; html/refentry.xsl,1.23 - Michael(tm) Smith

  • Add support for keep-together PI to informal objects.

    Modified: fo/formal.xsl,1.50 - Robert Stayton

  • Add support for fop1.extensions.

    Modified: fo/formal.xsl,1.49; fo/graphics.xsl,1.44; fo/table.xsl,1.47 -
    Robert Stayton

  • Add support for fop1 bookmarks.

    Modified: fo/docbook.xsl,1.39 - Robert Stayton

  • Add fop1.extentions parameter to add support for fop development version.

    Modified: fo/param.ent,1.92; fo/param.xweb,1.105 - Robert Stayton

  • Start supporting fop development version, which will become fop version 1.

    Modified: fo/fop1.xsl,1.1 - Robert Stayton

  • Add template for task in mode="xref-to".

    Modified: fo/xref.xsl,1.63; html/xref.xsl,1.57 - Robert Stayton

  • table footnotes now also get footnote.properties attribute-set.

    Modified: fo/footnote.xsl,1.22 - Robert Stayton

  • Added index.separator named template to compute the separator punctuation
    based on locale.

    Modified: fo/autoidx.xsl,1.36 - Robert Stayton

  • Added support for link, olink, and xref within OO Classsynopsis and
    children. (Because DocBook NG/5 allows it).

    Modified: fo/synop.xsl,1.15; html/synop.xsl,1.19 - Michael(tm) Smith

  • Support date as an inline

    Modified: fo/inline.xsl,1.43; html/inline.xsl,1.46 - Norman Walsh

  • Added new parameter keep.relative.image.uris

    Modified: fo/param.ent,1.91; fo/param.xweb,1.104; html/param.ent,1.87; html
    /param.xweb,1.96; params/keep.relative.image.uris.xml,1.1 - Norman Walsh

  • Map Unicode space characters U+2000-U+200A to fo:leaders.

    Modified: fo/docbook.xsl,1.38; fo/passivetex.xsl,1.4; fo/spaces.xsl,1.1 -
    Jirka Kosek

  • Output a real em dash for em-dash dingbat (instead of two hypens).

    Modified: fo/fo.xsl,1.7 - Michael(tm) Smith

  • Support default label width parameters for itemized and ordered lists

    Modified: fo/lists.xsl,1.64; fo/param.ent,1.90; fo/param.xweb,1.103; params
    /itemizedlist.label.width.xml,1.1; params/orderedlist.label.width.xml,1.1 -
    Norman Walsh

  • Generate localized title for Refsynopsisdiv if no appropriate Title
    descendant found in source. Closes #1212398. This change makes behavior for
    the Synopsis title consistent with the behavior of HTML and manpages
    output.

    Also, added xsl:use-attribute-sets="normal.para.spacing" to block generated
    for Cmdsynopsis output. Previously, that block had no spacing at all
    specified, which resulted it being crammed up to closely to the Synopsis
    head.

    Modified: fo/refentry.xsl,1.28; fo/synop.xsl,1.13 - Michael(tm) Smith

  • Added parameters to support localization of index item punctuation.

    Modified: fo/autoidx.xsl,1.35 - Robert Stayton

  • Added index.number.separator, index.range.separator, and
    index.term.separator parameters to support localization of punctuation in
    index entries.

    Modified: fo/param.ent,1.89; fo/param.xweb,1.102 - Robert Stayton

  • Added "Cross References" section in HTML doc (for consistency with the FO
    doc). Also, moved the existing FO "Cross References" section to follow the
    "Linking" section.

    Modified: fo/param.xweb,1.101; html/param.xweb,1.95 - Michael(tm) Smith

  • Added ID attribues to all Reference elements (e.g., id="tables" for the doc
    for section on Table params). So pages for all subsections of ref docs now
    have stable filenames instead of arbitrary generated filenames.

    Modified: fo/param.xweb,1.100; html/param.xweb,1.94 - Michael(tm) Smith

  • Added two new parameters for handling of multi-term varlistentry elements:

    variablelist.term.break.after: When the variablelist.term.break.after is
    non-zero, it will generate a line break after each term multi-term
    varlistentry.

    variablelist.term.separator: When a varlistentry contains multiple term
    elements, the string specified in the value of the
    variablelist.term.separator parameter is placed after each term except the
    last. The default is ", " (a comma followed by a space). To suppress
    rendering of the separator, set the value of variablelist.term.separator to
    the empty string ("").

    These parameters are primarily intended to be useful if you have multi-term
    varlistentries that have long terms.

    Closes #1306676. Thanks to Sam Steingold for providing an example "lots of
    long terms" doc that demonstrated the value of having these options.

    Also, added normalize-space() call to processing of each term.

    This change affects all output formats (HTML, PDF, manpages). The default
    behavior should pretty much remain the same as before, but it is possible
    (as always) that the change may introduce some new bugginess.

    Modified: fo/lists.xsl,1.62; fo/param.ent,1.88; fo/param.xweb,1.99; html/
    lists.xsl,1.48; html/param.ent,1.86; html/param.xweb,1.93; manpages/
    lists.xsl,1.22; manpages/param.ent,1.14; manpages/param.xweb,1.16; params/
    variablelist.term.break.after.xml,1.1; params/
    variablelist.term.separator.xml,1.1 - Michael(tm) Smith

  • Add sidebar titlepage placeholder attset for styles.

    Modified: fo/titlepage.xsl,1.37 - Robert Stayton

  • Add titlepage for sidebar.

    Modified: fo/titlepage.templates.xml,1.27 - Robert Stayton

  • Implemented RFE #1292615.

    Added bunch of new parameters (attribute sets) that affect list
    presentation: list.block.properties, itemizedlist.properties, orderedlist
    .properties, itemizedlist.label.properties and orderedlist.label
    .properties. Default behaviour of stylesheets has not been changed but
    further customizations will be much more easier.

    Modified: fo/lists.xsl,1.61; fo/param.ent,1.87; fo/param.xweb,1.98; params/
    itemizedlist.label.properties.xml,1.1; params/
    itemizedlist.properties.xml,1.1; params/list.block.properties.xml,1.1;
    params/orderedlist.label.properties.xml,1.1; params/
    orderedlist.properties.xml,1.1 - Jirka Kosek

  • Implemented RFE #1242092.

    You can enable crop marks in your document by setting crop.marks=1 and
    xep.extensions=1. Appearance of crop marks can be controlled by parameters
    crop.mark.bleed (6pt), crop.mark.offset (24pt) and crop.mark.width (0.5pt).

    Also there is new named template called user-xep-pis. You can overwrite it
    in order to produce some PIs that can control XEP as described in http://
    www.renderx.com/reference.html#Output_Formats

    Modified: fo/docbook.xsl,1.36; fo/param.ent,1.86; fo/param.xweb,1.97; fo/
    xep.xsl,1.23; params/crop.mark.bleed.xml,1.1; params/
    crop.mark.offset.xml,1.1; params/crop.mark.width.xml,1.1; params/
    crop.marks.xml,1.1 - Jirka Kosek

HTML

The following changes have been made to the html code since the 1.69.1 release.

  • implemented index.method parameter and three methods.

    Modified: html/autoidx.xsl,1.28 - Robert Stayton

  • added index.method parameter to support 3 indexing methods.

    Modified: html/param.ent,1.94; html/param.xweb,1.103 - Robert Stayton

  • Implemented feature request #1072510 as a processing instruction to permit
    including external HTML content into HTML output.

    Modified: html/pi.xsl,1.9 - Robert Stayton

  • Added new parameter chunk.tocs.and.lots.has.title which controls presence
    of title in a separate chunk with ToC/LoT. Disabling title can be very
    useful if you are generating frameset output (well, yes those frames, but
    some customers really want them ;-).

    Modified: html/chunk-code.xsl,1.15; html/param.ent,1.93; html/
    param.xweb,1.102; params/chunk.tocs.and.lots.has.title.xml,1.1 - Jirka
    Kosek

  • Support dbhtml/dbfo start PI for orderedlist numbering in both HTML and FO

    Modified: common/common.xsl,1.61; html/lists.xsl,1.50 - Norman Walsh

  • Allow ToC without title also for set and book.

    Modified: html/autotoc.xsl,1.37; html/division.xsl,1.12 - Jirka Kosek

  • Implemented floats uniformly for figure, example, equation and
    informalfigure, informalexample, and informalequation.

    Modified: html/formal.xsl,1.22 - Robert Stayton

  • Added the autotoc.label.in.hyperlink param.

    If the value of autotoc.label.in.hyperlink is non-zero, labels are included
    in hyperlinked titles in the TOC. If it is instead zero, labels are still
    displayed prior to the hyperlinked titles, but are not hyperlinked along
    with the titles.

    Closes patch #1065868. Thanks to anatoly techtonik for the patch.

    Modified: html/autotoc.xsl,1.36; html/param.ent,1.92; html/
    param.xweb,1.101; params/autotoc.label.in.hyperlink.xml,1.1 - Michael(tm)
    Smith

  • Added two new params: html.head.legalnotice.link.types and html.head.
    legalnotice.link.multiple.

    If the value of the generate.legalnotice.link is non-zero, then the
    stylesheet generates (in the head section of the HTML source) either a
    single HTML link element or, if the value of the html.head.legalnotice.link
    .multiple is non-zero, one link element for each link type specified. Each
    link has the following attributes:

    - a rel attribute whose value is derived from the value of html.head.
    legalnotice.link.types

    - an href attribute whose value is set to the URL of the file containing
    the legalnotice

    - a title attribute whose value is set to the title of the corresponding
    legalnotice (or a title programatically determined by the stylesheet)

    For example:

    <link rel="copyright" href="ln-id2524073.html" title="Legal Notice">

    Closes #1476450. Thanks to Sam Steingold.

    Modified: html/chunk-common.xsl,1.45; html/param.ent,1.91; html/
    param.xweb,1.100; params/generate.legalnotice.link.xml,1.4; params/
    html.head.legalnotice.link.multiple.xml,1.1; params/
    html.head.legalnotice.link.types.xml,1.1 - Michael(tm) Smith

  • Added refclass.suppress param.

    If the value of refclass.suppress is non-zero, then display refclass
    contents is suppressed in output. Affects HTML and FO output only.

    Modified: fo/param.ent,1.93; fo/param.xweb,1.106; html/param.ent,1.90; html
    /param.xweb,1.99; params/refclass.suppress.xml,1.1 - Michael(tm) Smith

  • Improved support for task subelements

    Modified: fo/task.xsl,1.3; html/task.xsl,1.3 - Jirka Kosek

  • Added new refclass.suppress param for suppressing display of Refclass in
    HTML and FO output. Did not add it to manpages because manpages stylesheet
    is currently just silently ignoring Refclass anyway. Closes request #
    1461065. Thanks to Davor Ocelic (docelic) for reporting.

    Modified: fo/refentry.xsl,1.29; html/refentry.xsl,1.23 - Michael(tm) Smith

  • Process alt text with normalize-space(). Replace tab indents with spaces.

    Modified: html/graphics.xsl,1.57 - Robert Stayton

  • Content of citation element is automatically linked to the bibliographic
    entry with the corresponding abbrev.

    Modified: html/biblio.xsl,1.26; html/inline.xsl,1.47; html/xref.xsl,1.58 -
    Jirka Kosek

  • Add template for task in mode="xref-to".

    Modified: fo/xref.xsl,1.63; html/xref.xsl,1.57 - Robert Stayton

  • Suppress ID warnings if the .warnings parameter is 0

    Modified: html/html.xsl,1.17 - Norman Walsh

  • Add support for floatstyle to figure.

    Modified: html/formal.xsl,1.21 - Robert Stayton

  • Handling of xref to area/areaset need support in extensions code also. I
    currently have no time to touch extensions code, so code is here to be
    enabled when extension is fixed also.

    Modified: html/xref.xsl,1.56 - Jirka Kosek

  • Added 3 parameters for overriding gentext for index punctuation.

    Modified: html/param.ent,1.89; html/param.xweb,1.98 - Robert Stayton

  • Added parameters to support localization of index item punctuation. Added
    index.separator named template to compute the separator punctuation based
    on locale.

    Modified: html/autoidx.xsl,1.27 - Robert Stayton

  • Added a <div class="{$class}-contents"> wrapper around output of contents
    of all formal objects. Also, added an optional <br class="{class}-break"/>
    linebreak after all formal objects.

    WARNING: Because this change places an additional DIV between the DIV
    wrapper for the equation and the equation contents, it may break some
    existing CSS stylesheets that have been created with the assumption that
    there would never be an intervening DIV there.

    The following is an example of what Equation output looks like as a result
    of the changes described above.

    <div class="equation"> <a name="three" id="three"></a>

    <p class="title"><b>(1.3)</b></p>

    <div class="equation-contents"> <span class="mathphrase">1+1=3</span> </
    div> </div><br class="equation-break">

    Rationale: These changes allow CSS control of the placement of the
    formal-object title relative to the formal-object contents. For example,
    using the CSS "float" property enables the title and contents to be
    rendered on the same line. Example stylesheet:

    .equation { margin-top: 20px; margin-bottom: 20px; } .equation-contents {
    float: left; }

    .equation .title { margin-top: 0; float: right; margin-right: 200px; }

    .equation .title b { font-weight: normal; }

    .equation-break { clear: both; }

    Note that the purpose of the ".equation-break" class is to provide a way to
    clear off the floats.

    If you want to instead have the equation title rendered to the left of the
    equation contents, you can do something like this:

    .equation { margin-top: 20px; width: 300px; margin-bottom: 20px; }
    .equation-contents { float: right; }

    .equation .title { margin-top: 0; float: left; margin-right: 200px; }

    .equation .title b { font-weight: normal; }

    .equation-break { clear: both; }

    Modified: html/formal.xsl,1.20 - Michael(tm) Smith

  • Added a chunker.output.quiet top-level parameter so that the chunker can be
    made quiet by default

    Modified: html/chunker.xsl,1.26 - Norman Walsh

  • Added support for link, olink, and xref within OO Classsynopsis and
    children. (Because DocBook NG/5 allows it).

    Modified: fo/synop.xsl,1.15; html/synop.xsl,1.19 - Michael(tm) Smith

  • New parameter: id.warnings. If non-zero, warnings are generated for titled
    objects that don't have titles. True by default; I wonder if this will be
    too aggressive?

    Modified: html/biblio.xsl,1.25; html/component.xsl,1.27; html/
    division.xsl,1.11; html/formal.xsl,1.19; html/glossary.xsl,1.20; html/
    html.xsl,1.13; html/index.xsl,1.16; html/param.ent,1.88; html/
    param.xweb,1.97; html/refentry.xsl,1.22; html/sections.xsl,1.30; params/
    id.warnings.xml,1.1 - Norman Walsh

  • If the keep.relative.image.uris parameter is true, don't use the absolute
    URI (as calculated from xml:base) in the img src attribute, us the value
    the author specified. Note that we still have to calculate the absolute
    filename for use in the image intrinsics extension.

    Modified: html/graphics.xsl,1.56 - Norman Walsh

  • Support date as an inline

    Modified: fo/inline.xsl,1.43; html/inline.xsl,1.46 - Norman Walsh

  • Added new parameter keep.relative.image.uris

    Modified: fo/param.ent,1.91; fo/param.xweb,1.104; html/param.ent,1.87; html
    /param.xweb,1.96; params/keep.relative.image.uris.xml,1.1 - Norman Walsh

  • Added two new parameters for handling of multi-term varlistentry elements:

    variablelist.term.break.after: When the variablelist.term.break.after is
    non-zero, it will generate a line break after each term multi-term
    varlistentry.

    variablelist.term.separator: When a varlistentry contains multiple term
    elements, the string specified in the value of the
    variablelist.term.separator parameter is placed after each term except the
    last. The default is ", " (a comma followed by a space). To suppress
    rendering of the separator, set the value of variablelist.term.separator to
    the empty string ("").

    These parameters are primarily intended to be useful if you have multi-term
    varlistentries that have long terms.

    Closes #1306676. Thanks to Sam Steingold for providing an example "lots of
    long terms" doc that demonstrated the value of having these options.

    Also, added normalize-space() call to processing of each term.

    This change affects all output formats (HTML, PDF, manpages). The default
    behavior should pretty much remain the same as before, but it is possible
    (as always) that the change may introduce some new bugginess.

    Modified: fo/lists.xsl,1.62; fo/param.ent,1.88; fo/param.xweb,1.99; html/
    lists.xsl,1.48; html/param.ent,1.86; html/param.xweb,1.93; manpages/
    lists.xsl,1.22; manpages/param.ent,1.14; manpages/param.xweb,1.16; params/
    variablelist.term.break.after.xml,1.1; params/
    variablelist.term.separator.xml,1.1 - Michael(tm) Smith

  • Added "wrapper-name" param to inline.charseq named template, enabling it to
    output inlines other than just "span". Acronym and Abbrev templates now use
    inline.charseq to output HTML "acronym" and "abbr" elements (instead of
    "span"). Closes #1305468. Thanks to Sam Steingold for suggesting the
    change.

    Modified: html/inline.xsl,1.45 - Michael(tm) Smith

Manpages

The following changes have been made to the manpages code since the 1.69.1
release.

  • Added the following params:

    - man.indent.width (string-valued) - man.indent.refsect (boolean) -
    man.indent.blurbs (boolean) - man.indent.lists (boolean) -
    man.indent.verbatims (boolean)

    Note that in earlier snapshots, man.indent.width was named
    man.indentation.default.value and the boolean params had names like
    man.indentation.*.adjust. Also the man.indent.blurbs param was called
    man.indentation.authors.adjust (or something).

    The behavior now is: If the value of a particular man.indent.* boolean
    param is non-zero, the corresponding contents (refsect*, list items,
    authorblurb/personblurb, vervatims) are displayed with a left margin
    indented by a width equal to the value of man.indent.width.

    Modified: params/man.indent.blurbs.xml,1.1; manpages/docbook.xsl,1.74;
    manpages/info.xsl,1.20; manpages/lists.xsl,1.30; manpages/other.xsl,1.20;
    manpages/param.ent,1.22; manpages/param.xweb,1.24; manpages/
    refentry.xsl,1.14; params/man.indent.lists.xml,1.1; params/
    man.indent.refsect.xml,1.1; params/man.indent.verbatims.xml,1.1; params/
    man.indent.width.xml,1.1 - Michael(tm) Smith

  • Added man.table.footnotes.divider param.

    In each table that contains footenotes, the string specified by the man.
    table.footnotes.divider parameter is output before the list of footnotes
    for the table.

    Modified: manpages/docbook.xsl,1.73; manpages/links.xsl,1.6; manpages/
    param.ent,1.21; manpages/param.xweb,1.23; params/
    man.table.footnotes.divider.xml,1.1 - Michael(tm) Smith

  • Added the man.output.in.separate.dir, man.output.base.dir, and
    man.output.subdirs.enabled parameters.

    The man.output.base.dir parameter specifies the base directory into which
    man-page files are output. The man.output.subdirs.enabled parameter
    controls whether the files are output in subdirectories within the base
    directory.

    The values of the man.output.base.dir and man.output.subdirs.enabled
    parameters are used only if the value of man.output.in.separate.dir
    parameter is non-zero. If the value of man.output.in.separate.dir is zero,
    man-page files are not output in a separate directory.

    Modified: manpages/docbook.xsl,1.72; manpages/param.ent,1.20; manpages/
    param.xweb,1.22; params/man.output.base.dir.xml,1.1; params/
    man.output.in.separate.dir.xml,1.1; params/
    man.output.subdirs.enabled.xml,1.1 - Michael(tm) Smith

  • Added man.font.table.headings and man.font.table.title params, for
    controlling font in table headings and titles.

    Modified: manpages/docbook.xsl,1.71; manpages/param.ent,1.19; manpages/
    param.xweb,1.21; params/man.font.table.headings.xml,1.1; params/
    man.font.table.title.xml,1.1 - Michael(tm) Smith

  • Added man.font.funcsynopsisinfo and man.font.funcprototype params, for
    specifying the roff font (for example, BI, B, I) for funcsynopsisinfo and
    funcprototype output.

    Modified: manpages/block.xsl,1.19; manpages/docbook.xsl,1.69; manpages/
    param.ent,1.18; manpages/param.xweb,1.20; manpages/synop.xsl,1.29; manpages
    /table.xsl,1.21; params/man.font.funcprototype.xml,1.1; params/
    man.font.funcsynopsisinfo.xml,1.1 - Michael(tm) Smith

  • Added man.segtitle.suppress param.

    If the value of man.segtitle.suppress is non-zero, then display of segtitle
    contents is suppressed in output.

    Modified: manpages/docbook.xsl,1.68; manpages/param.ent,1.17; manpages/
    param.xweb,1.19; params/man.segtitle.suppress.xml,1.1 - Michael(tm) Smith

  • Added man.output.manifest.enabled and man.output.manifest.filename params.

    If man.output.manifest.enabled is non-zero, a list of filenames for man
    pages generated by the stylesheet transformation is written to the file
    named by man.output.manifest.filename

    Modified: manpages/docbook.xsl,1.67; manpages/other.xsl,1.19; manpages/
    param.ent,1.16; manpages/param.xweb,1.18; params/
    man.output.manifest.enabled.xml,1.1; params/
    man.output.manifest.filename.xml,1.1; tools/make/Makefile.DocBook,1.4 -
    Michael(tm) Smith

  • Added refentry.meta.get.quietly param.

    If zero (the default), notes and warnings about "missing" markup are
    generated during gathering of refentry metadata. If non-zero, the metadata
    is gathered "quietly" -- that is, the notes and warnings are suppressed.

    NOTE: If you are processing a large amount of refentry content, you may be
    able to speed up processing significantly by setting a non-zero value for
    refentry.meta.get.quietly.

    Modified: common/refentry.xsl,1.17; manpages/param.ent,1.15; manpages/
    param.xweb,1.17; params/refentry.meta.get.quietly.xml,1.1 - Michael(tm)
    Smith

  • Changed names of all boolean indentation params to man.indent.* Also
    discarded individual man.indent.*.value params and switched to just using a
    common man.indent.width param (3n by default).

    Modified: manpages/docbook.xsl,1.66; manpages/info.xsl,1.19; manpages/
    lists.xsl,1.29; manpages/other.xsl,1.18; manpages/refentry.xsl,1.13 -
    Michael(tm) Smith

  • Added boolean man.output.in.separate.dir param, to control whether or not
    man files are output in separate directory.

    Modified: manpages/docbook.xsl,1.65; manpages/utility.xsl,1.14 - Michael
    (tm) Smith

  • Added options for controlling indentation of verbatim output. Controlled
    through the man.indentation.verbatims.adjust and
    man.indentation.verbatims.value params. Closes #1242997

    Modified: manpages/block.xsl,1.15; manpages/docbook.xsl,1.64 - Michael(tm)
    Smith

  • Added options for controlling indentation in lists and in *blurb output in
    the AUTHORS section. Controlled through the man.indentation.lists.adjust,
    man.indentation.lists.value, man.indentation.authors.adjust, and
    man.indentation.authors.value parameters. Default is 3 characters (instead
    of the roff default of 8 characters). Closes #1449369.

    Also, removed the indent that was being set on informalexample outuput. I
    will instead add an option for indenting verbatims, which I think is what
    the informalexample indent was intended for originally.

    Modified: manpages/block.xsl,1.14; manpages/docbook.xsl,1.63; manpages/
    info.xsl,1.18; manpages/lists.xsl,1.28 - Michael(tm) Smith

  • Changed line-spacing call before synopfragment to use ".sp -1n" ("n" units
    specified) instead of plain ".sp -1"

    Modified: manpages/synop.xsl,1.28 - Michael(tm) Smith

  • Added support for writing man files into a specific output directory and
    into appropriate subdirectories within that output directory. Controlled
    through the man.base.dir parameter (similar to the base.dir support in the
    HTML stylesheet) and the man.subdirs.enabled parameter, which automatically
    determines the name of an appropriate subdir (for example, man/man7, man/
    man1, etc.) based on the section number/manvolnum of the source Refentry.

    Closes #1255036 and #1170317. Thanks to Denis Bradford for the original
    feature request, and to Costin Stroie for submitting a patch that was very
    helpful in implementing the support.

    Modified: manpages/docbook.xsl,1.62; manpages/utility.xsl,1.13 - Michael
    (tm) Smith

  • Refined XPath statements and notification messages for refentry metadata
    handling.

    Modified: common/common.xsl,1.59; common/refentry.xsl,1.14; manpages/
    docbook.xsl,1.61; manpages/other.xsl,1.17 - Michael(tm) Smith

  • Added support for copyright and legalnotice. The manpages stylesheets now
    output a COPYRIGHT section, after the AUTHORS section, if a copyright or
    legalnotice is found in the source. The section contains the copyright
    contents followed by the legalnotice contents. Closes #1450209.

    Modified: manpages/docbook.xsl,1.59; manpages/info.xsl,1.17 - Michael(tm)
    Smith

  • Drastically reworked all of the XPath expressions used in refentry metadata
    gathering -- completely removed $parentinfo and turned $info into a set of
    nodes that includes the *info contents of the Refentry plus the *info
    contents all all of its ancestor elements. The basic XPath expression now
    used throughout is (using the example of checking for a date):

    (($info[//date])[last()]/date)[1].

    That selects the "last" *info/date date in document order -- that is, the
    one eitther on the Refentry itself or on the closest ancestor to the
    Refentry.

    It's likely this change may break some things; may need to pick up some
    pieces later.

    Also, changed the default value for the man.th.extra2.max.length from 40 to
    30.

    Modified: common/common.xsl,1.58; common/refentry.xsl,1.7; params/
    man.th.extra2.max.length.xml,1.2; params/refentry.date.profile.xml,1.2;
    params/refentry.manual.profile.xml,1.2; params/
    refentry.source.name.profile.xml,1.2; params/
    refentry.version.profile.xml,1.2; manpages/docbook.xsl,1.58; manpages/
    other.xsl,1.15 - Michael(tm) Smith

  • Added support for DocBook 5 namespace-stripping in manpages stylesheet.
    Closes request #1210692.

    Modified: common/common.xsl,1.56; manpages/docbook.xsl,1.57 - Michael(tm)
    Smith

  • Fixed handling of table footnotes. With this checkin, the table support in
    the manpages stylesheet is now basically feature complete. So this change
    closes request #619532, "No support for tables" -- the oldest currently
    open manpages feature request, submitted by Ben Secrest (blsecres) on
    2002-10-07. Congratulations to me [patting myself on the back].

    Modified: manpages/block.xsl,1.11; manpages/docbook.xsl,1.55; manpages/
    table.xsl,1.15 - Michael(tm) Smith

  • Added handling for table titles. Also fixed handling of nested tables; nest
    tables are now "extracted" and displayed just after their parent tables.

    Modified: manpages/docbook.xsl,1.54; manpages/table.xsl,1.14 - Michael(tm)
    Smith

  • Added option for turning off bold formatting in Funcsynopsis. Boldface
    formatting in function synopsis is mandated in the man(7) man page and is
    used almost universally in existing man pages. Despite that, it really does
    look like crap to have an entire Funcsynopsis output in bold, so I added
    params for turning off the bold formatting and/or replacing it with a
    different roff special font (e.g., "RI" for alternating roman/italic
    instead of the default "BI" for alternating bold/italic). The new params
    are "man.funcprototype.font" and "man.funcsynopsisinfo.font". To be
    documented later.

    Closes #1452247. Thanks to Joe Orton for the feature request.

    Modified: params/man.string.subst.map.xml,1.16; manpages/block.xsl,1.10;
    manpages/docbook.xsl,1.51; manpages/inline.xsl,1.16; manpages/
    synop.xsl,1.27 - Michael(tm) Smith

  • Use AUTHORS instead of AUTHOR if we have multiple people to attribute.
    Also, fixed checking such that we generate author section even if we don't
    have an author (as long as there is at least one other person/entity we can
    put in the section). Also adjusted assembly of content for Author metainfo
    field such that we now not only use author, but try to find a "best match"
    if we can't find an author name to put there.

    Closes #1233592. Thanks to Sam Steingold for the request.

    Modified: manpages/info.xsl,1.12 - Michael(tm) Smith

  • Changes for request #1243027, "Impove handling of AUTHOR section." This
    adds support for Collab, Corpauthor, Corpcredt, Orgname, Publishername, and
    Publisher. Also adds support for output of Affiliation and its children,
    and support for using gentext strings for auto-attributing roles (Author,
    Editor, Publisher, Translator, etc.). Also did a lot of code cleanup and
    modularization of all the AUTHOR handling code. And fixed a bug that was
    causing Author info to not be picked up correctly for metainfo comment we
    embed in man-page source.

    Modified: manpages/info.xsl,1.11 - Michael(tm) Smith

  • Support bold output for "emphasis remap='B'". (because Eric Raymond's
    doclifter(1) tool converts groff source marked up with ".B" request or "\
    fB" escapes to DocBook "emphasis remap='B'".)

    Modified: manpages/inline.xsl,1.14 - Michael(tm) Smith

  • Added support for Segmentedlist. Details: Output is tabular, with no option
    for "list" type output. Output for Segtitle elements can be supressed by
    setting man.segtitle.suppress. If Segtitle content is output, it is
    rendered in italic type (not bold because not all terminals support bold
    and so italic ensures the stand out on those terminals). Extra space (.sp
    line) at end of table code ensures that it gets handled correctly in the
    case where its source is the child of a Para. Closes feature-request #
    1400097. Thanks to Daniel Leidert for the patch and push, and to Alastair
    Rankine for filing the original feature request.

    Modified: manpages/lists.xsl,1.23; manpages/utility.xsl,1.10 - Michael(tm)
    Smith

  • Improved handling or Author/Editor/Othercredit.

    Reworked content of (non-visible) comment added at top of each page
    (metadata stuff).

    Added support for generating a manifest file (useful for cleaning up after
    builds, etc.)

    Modified: manpages/docbook.xsl,1.46; manpages/info.xsl,1.9; manpages/
    other.xsl,1.12; manpages/utility.xsl,1.6 - Michael(tm) Smith

  • Added two new parameters for handling of multi-term varlistentry elements:

    variablelist.term.break.after: When the variablelist.term.break.after is
    non-zero, it will generate a line break after each term multi-term
    varlistentry.

    variablelist.term.separator: When a varlistentry contains multiple term
    elements, the string specified in the value of the
    variablelist.term.separator parameter is placed after each term except the
    last. The default is ", " (a comma followed by a space). To suppress
    rendering of the separator, set the value of variablelist.term.separator to
    the empty string ("").

    These parameters are primarily intended to be useful if you have multi-term
    varlistentries that have long terms.

    Closes #1306676. Thanks to Sam Steingold for providing an example "lots of
    long terms" doc that demonstrated the value of having these options.

    Also, added normalize-space() call to processing of each term.

    This change affects all output formats (HTML, PDF, manpages). The default
    behavior should pretty much remain the same as before, but it is possible
    (as always) that the change may introduce some new bugginess.

    Modified: fo/lists.xsl,1.62; fo/param.ent,1.88; fo/param.xweb,1.99; html/
    lists.xsl,1.48; html/param.ent,1.86; html/param.xweb,1.93; manpages/
    lists.xsl,1.22; manpages/param.ent,1.14; manpages/param.xweb,1.16; params/
    variablelist.term.break.after.xml,1.1; params/
    variablelist.term.separator.xml,1.1 - Michael(tm) Smith

Params

The following changes have been made to the params code since the 1.69.1
release.

  • New parameters to set header/footer table minimum height.

    Modified: params/footer.table.height.xml,1.1; params/
    header.table.height.xml,1.1 - Robert Stayton

  • Support multiple indexing methods for different languages.

    Modified: params/index.method.xml,1.1 - Robert Stayton

  • Remove qandaset and qandadiv from generate.toc for fo output because
    formerly it wasn't working, but now it is and the default behavior should
    stay the same.

    Modified: params/generate.toc.xml,1.8 - Robert Stayton

  • add support for page number references to link element too.

    Modified: params/insert.link.page.number.xml,1.1 - Robert Stayton

  • Add support for more characters to hyphen on when ulink.hyphenate is turned
    on.

    Modified: params/ulink.hyphenate.chars.xml,1.1; params/
    ulink.hyphenate.xml,1.3 - Robert Stayton

  • New attribute-set to format biblioentry and bibliomixed.

    Modified: params/biblioentry.properties.xml,1.1 - Robert Stayton

  • Added new parameter chunk.tocs.and.lots.has.title which controls presence
    of title in a separate chunk with ToC/LoT. Disabling title can be very
    useful if you are generating frameset output (well, yes those frames, but
    some customers really want them ;-).

    Modified: html/chunk-code.xsl,1.15; html/param.ent,1.93; html/
    param.xweb,1.102; params/chunk.tocs.and.lots.has.title.xml,1.1 - Jirka
    Kosek

  • Added new attribute set toc.line.properties for controlling appearance of
    lines in ToC/LoT

    Modified: params/toc.line.properties.xml,1.1 - Jirka Kosek

  • Allow table footnotes to have different properties from regular footnotes.

    Modified: params/table.footnote.properties.xml,1.1 - Robert Stayton

  • Set properties for pgwide="1" objects.

    Modified: params/pgwide.properties.xml,1.1 - Robert Stayton

  • Added the autotoc.label.in.hyperlink param.

    If the value of autotoc.label.in.hyperlink is non-zero, labels are included
    in hyperlinked titles in the TOC. If it is instead zero, labels are still
    displayed prior to the hyperlinked titles, but are not hyperlinked along
    with the titles.

    Closes patch #1065868. Thanks to anatoly techtonik for the patch.

    Modified: html/autotoc.xsl,1.36; html/param.ent,1.92; html/
    param.xweb,1.101; params/autotoc.label.in.hyperlink.xml,1.1 - Michael(tm)
    Smith

  • Added two new params: html.head.legalnotice.link.types and html.head.
    legalnotice.link.multiple.

    If the value of the generate.legalnotice.link is non-zero, then the
    stylesheet generates (in the head section of the HTML source) either a
    single HTML link element or, if the value of the html.head.legalnotice.link
    .multiple is non-zero, one link element for each link type specified. Each
    link has the following attributes:

    - a rel attribute whose value is derived from the value of html.head.
    legalnotice.link.types

    - an href attribute whose value is set to the URL of the file containing
    the legalnotice

    - a title attribute whose value is set to the title of the corresponding
    legalnotice (or a title programatically determined by the stylesheet)

    For example:

    <link rel="copyright" href="ln-id2524073.html" title="Legal Notice">

    Closes #1476450. Thanks to Sam Steingold.

    Modified: html/chunk-common.xsl,1.45; html/param.ent,1.91; html/
    param.xweb,1.100; params/generate.legalnotice.link.xml,1.4; params/
    html.head.legalnotice.link.multiple.xml,1.1; params/
    html.head.legalnotice.link.types.xml,1.1 - Michael(tm) Smith

  • Added the following params:

    - man.indent.width (string-valued) - man.indent.refsect (boolean) -
    man.indent.blurbs (boolean) - man.indent.lists (boolean) -
    man.indent.verbatims (boolean)

    Note that in earlier snapshots, man.indent.width was named
    man.indentation.default.value and the boolean params had names like
    man.indentation.*.adjust. Also the man.indent.blurbs param was called
    man.indentation.authors.adjust (or something).

    The behavior now is: If the value of a particular man.indent.* boolean
    param is non-zero, the corresponding contents (refsect*, list items,
    authorblurb/personblurb, vervatims) are displayed with a left margin
    indented by a width equal to the value of man.indent.width.

    Modified: params/man.indent.blurbs.xml,1.1; manpages/docbook.xsl,1.74;
    manpages/info.xsl,1.20; manpages/lists.xsl,1.30; manpages/other.xsl,1.20;
    manpages/param.ent,1.22; manpages/param.xweb,1.24; manpages/
    refentry.xsl,1.14; params/man.indent.lists.xml,1.1; params/
    man.indent.refsect.xml,1.1; params/man.indent.verbatims.xml,1.1; params/
    man.indent.width.xml,1.1 - Michael(tm) Smith

  • Added man.table.footnotes.divider param.

    In each table that contains footenotes, the string specified by the man.
    table.footnotes.divider parameter is output before the list of footnotes
    for the table.

    Modified: manpages/docbook.xsl,1.73; manpages/links.xsl,1.6; manpages/
    param.ent,1.21; manpages/param.xweb,1.23; params/
    man.table.footnotes.divider.xml,1.1 - Michael(tm) Smith

  • Added the man.output.in.separate.dir, man.output.base.dir, and
    man.output.subdirs.enabled parameters.

    The man.output.base.dir parameter specifies the base directory into which
    man-page files are output. The man.output.subdirs.enabled parameter
    controls whether the files are output in subdirectories within the base
    directory.

    The values of the man.output.base.dir and man.output.subdirs.enabled
    parameters are used only if the value of man.output.in.separate.dir
    parameter is non-zero. If the value of man.output.in.separate.dir is zero,
    man-page files are not output in a separate directory.

    Modified: manpages/docbook.xsl,1.72; manpages/param.ent,1.20; manpages/
    param.xweb,1.22; params/man.output.base.dir.xml,1.1; params/
    man.output.in.separate.dir.xml,1.1; params/
    man.output.subdirs.enabled.xml,1.1 - Michael(tm) Smith

  • Added man.font.table.headings and man.font.table.title params, for
    controlling font in table headings and titles.

    Modified: manpages/docbook.xsl,1.71; manpages/param.ent,1.19; manpages/
    param.xweb,1.21; params/man.font.table.headings.xml,1.1; params/
    man.font.table.title.xml,1.1 - Michael(tm) Smith

  • Added man.font.funcsynopsisinfo and man.font.funcprototype params, for
    specifying the roff font (for example, BI, B, I) for funcsynopsisinfo and
    funcprototype output.

    Modified: manpages/block.xsl,1.19; manpages/docbook.xsl,1.69; manpages/
    param.ent,1.18; manpages/param.xweb,1.20; manpages/synop.xsl,1.29; manpages
    /table.xsl,1.21; params/man.font.funcprototype.xml,1.1; params/
    man.font.funcsynopsisinfo.xml,1.1 - Michael(tm) Smith

  • Changed to select="0" in refclass.suppress (instead of ..>0</..)

    Modified: params/refclass.suppress.xml,1.3 - Michael(tm) Smith

  • Added man.segtitle.suppress param.

    If the value of man.segtitle.suppress is non-zero, then display of segtitle
    contents is suppressed in output.

    Modified: manpages/docbook.xsl,1.68; manpages/param.ent,1.17; manpages/
    param.xweb,1.19; params/man.segtitle.suppress.xml,1.1 - Michael(tm) Smith

  • Added man.output.manifest.enabled and man.output.manifest.filename params.

    If man.output.manifest.enabled is non-zero, a list of filenames for man
    pages generated by the stylesheet transformation is written to the file
    named by man.output.manifest.filename

    Modified: manpages/docbook.xsl,1.67; manpages/other.xsl,1.19; manpages/
    param.ent,1.16; manpages/param.xweb,1.18; params/
    man.output.manifest.enabled.xml,1.1; params/
    man.output.manifest.filename.xml,1.1; tools/make/Makefile.DocBook,1.4 -
    Michael(tm) Smith

  • Added refclass.suppress param.

    If the value of refclass.suppress is non-zero, then display refclass
    contents is suppressed in output. Affects HTML and FO output only.

    Modified: fo/param.ent,1.93; fo/param.xweb,1.106; html/param.ent,1.90; html
    /param.xweb,1.99; params/refclass.suppress.xml,1.1 - Michael(tm) Smith

  • Added refentry.meta.get.quietly param.

    If zero (the default), notes and warnings about "missing" markup are
    generated during gathering of refentry metadata. If non-zero, the metadata
    is gathered "quietly" -- that is, the notes and warnings are suppressed.

    NOTE: If you are processing a large amount of refentry content, you may be
    able to speed up processing significantly by setting a non-zero value for
    refentry.meta.get.quietly.

    Modified: common/refentry.xsl,1.17; manpages/param.ent,1.15; manpages/
    param.xweb,1.17; params/refentry.meta.get.quietly.xml,1.1 - Michael(tm)
    Smith

  • Added support for "software" and "sectdesc" class values on refmiscinfo;
    "software" is treated identically to "source", and "setdesc" is treated
    identically to "manual".

    Modified: common/refentry.xsl,1.10; params/
    man.th.extra2.max.length.xml,1.3; params/
    refentry.source.name.profile.xml,1.4 - Michael(tm) Smith

  • Drastically reworked all of the XPath expressions used in refentry metadata
    gathering -- completely removed $parentinfo and turned $info into a set of
    nodes that includes the *info contents of the Refentry plus the *info
    contents all all of its ancestor elements. The basic XPath expression now
    used throughout is (using the example of checking for a date):

    (($info[//date])[last()]/date)[1].

    That selects the "last" *info/date date in document order -- that is, the
    one eitther on the Refentry itself or on the closest ancestor to the
    Refentry.

    It's likely this change may break some things; may need to pick up some
    pieces later.

    Also, changed the default value for the man.th.extra2.max.length from 40 to
    30.

    Modified: common/common.xsl,1.58; common/refentry.xsl,1.7; params/
    man.th.extra2.max.length.xml,1.2; params/refentry.date.profile.xml,1.2;
    params/refentry.manual.profile.xml,1.2; params/
    refentry.source.name.profile.xml,1.2; params/
    refentry.version.profile.xml,1.2; manpages/docbook.xsl,1.58; manpages/
    other.xsl,1.15 - Michael(tm) Smith

  • Added option for turning off bold formatting in Funcsynopsis. Boldface
    formatting in function synopsis is mandated in the man(7) man page and is
    used almost universally in existing man pages. Despite that, it really does
    look like crap to have an entire Funcsynopsis output in bold, so I added
    params for turning off the bold formatting and/or replacing it with a
    different roff special font (e.g., "RI" for alternating roman/italic
    instead of the default "BI" for alternating bold/italic). The new params
    are "man.funcprototype.font" and "man.funcsynopsisinfo.font". To be
    documented later.

    Closes #1452247. Thanks to Joe Orton for the feature request.

    Modified: params/man.string.subst.map.xml,1.16; manpages/block.xsl,1.10;
    manpages/docbook.xsl,1.51; manpages/inline.xsl,1.16; manpages/
    synop.xsl,1.27 - Michael(tm) Smith

  • fop.extensions now only for FOP version 0.20.5 and earlier.

    Modified: params/fop.extensions.xml,1.4 - Robert Stayton

  • Support for fop1 different from fop 0.20.5 and earlier.

    Modified: params/fop1.extensions.xml,1.1 - Robert Stayton

  • Reset default value to empty string so template uses gentext first, then
    the parameter value if not empty.

    Modified: params/index.number.separator.xml,1.2; params/
    index.range.separator.xml,1.2; params/index.term.separator.xml,1.2 - Robert
    Stayton

  • New parameter: id.warnings. If non-zero, warnings are generated for titled
    objects that don't have titles. True by default; I wonder if this will be
    too aggressive?

    Modified: html/biblio.xsl,1.25; html/component.xsl,1.27; html/
    division.xsl,1.11; html/formal.xsl,1.19; html/glossary.xsl,1.20; html/
    html.xsl,1.13; html/index.xsl,1.16; html/param.ent,1.88; html/
    param.xweb,1.97; html/refentry.xsl,1.22; html/sections.xsl,1.30; params/
    id.warnings.xml,1.1 - Norman Walsh

  • Added new parameter keep.relative.image.uris

    Modified: fo/param.ent,1.91; fo/param.xweb,1.104; html/param.ent,1.87; html
    /param.xweb,1.96; params/keep.relative.image.uris.xml,1.1 - Norman Walsh

  • Support default label width parameters for itemized and ordered lists

    Modified: fo/lists.xsl,1.64; fo/param.ent,1.90; fo/param.xweb,1.103; params
    /itemizedlist.label.width.xml,1.1; params/orderedlist.label.width.xml,1.1 -
    Norman Walsh

  • Added parameters to localize punctuation in indexes.

    Modified: params/index.number.separator.xml,1.1; params/
    index.range.separator.xml,1.1; params/index.term.separator.xml,1.1 - Robert
    Stayton

  • Added two new parameters for handling of multi-term varlistentry elements:

    variablelist.term.break.after: When the variablelist.term.break.after is
    non-zero, it will generate a line break after each term multi-term
    varlistentry.

    variablelist.term.separator: When a varlistentry contains multiple term
    elements, the string specified in the value of the
    variablelist.term.separator parameter is placed after each term except the
    last. The default is ", " (a comma followed by a space). To suppress
    rendering of the separator, set the value of variablelist.term.separator to
    the empty string ("").

    These parameters are primarily intended to be useful if you have multi-term
    varlistentries that have long terms.

    Closes #1306676. Thanks to Sam Steingold for providing an example "lots of
    long terms" doc that demonstrated the value of having these options.

    Also, added normalize-space() call to processing of each term.

    This change affects all output formats (HTML, PDF, manpages). The default
    behavior should pretty much remain the same as before, but it is possible
    (as always) that the change may introduce some new bugginess.

    Modified: fo/lists.xsl,1.62; fo/param.ent,1.88; fo/param.xweb,1.99; html/
    lists.xsl,1.48; html/param.ent,1.86; html/param.xweb,1.93; manpages/
    lists.xsl,1.22; manpages/param.ent,1.14; manpages/param.xweb,1.16; params/
    variablelist.term.break.after.xml,1.1; params/
    variablelist.term.separator.xml,1.1 - Michael(tm) Smith

  • Convert 'no' to string in default value.

    Modified: params/olink.doctitle.xml,1.4 - Robert Stayton

  • Implemented RFE #1292615.

    Added bunch of new parameters (attribute sets) that affect list
    presentation: list.block.properties, itemizedlist.properties, orderedlist
    .properties, itemizedlist.label.properties and orderedlist.label
    .properties. Default behaviour of stylesheets has not been changed but
    further customizations will be much more easier.

    Modified: fo/lists.xsl,1.61; fo/param.ent,1.87; fo/param.xweb,1.98; params/
    itemizedlist.label.properties.xml,1.1; params/
    itemizedlist.properties.xml,1.1; params/list.block.properties.xml,1.1;
    params/orderedlist.label.properties.xml,1.1; params/
    orderedlist.properties.xml,1.1 - Jirka Kosek

  • Implemented RFE #1242092.

    You can enable crop marks in your document by setting crop.marks=1 and
    xep.extensions=1. Appearance of crop marks can be controlled by parameters
    crop.mark.bleed (6pt), crop.mark.offset (24pt) and crop.mark.width (0.5pt).

    Also there is new named template called user-xep-pis. You can overwrite it
    in order to produce some PIs that can control XEP as described in http://
    www.renderx.com/reference.html#Output_Formats

    Modified: fo/docbook.xsl,1.36; fo/param.ent,1.86; fo/param.xweb,1.97; fo/
    xep.xsl,1.23; params/crop.mark.bleed.xml,1.1; params/
    crop.mark.offset.xml,1.1; params/crop.mark.width.xml,1.1; params/
    crop.marks.xml,1.1 - Jirka Kosek

  • Changed short descriptions in doc for *autolabel* params to match new
    autolabel behavior.

    Modified: params/appendix.autolabel.xml,1.5; params/
    chapter.autolabel.xml,1.4; params/part.autolabel.xml,1.5; params/
    preface.autolabel.xml,1.4 - Michael(tm) Smith

Profiling

The following changes have been made to the profiling code since the 1.69.1
release.

  • Profiling now works together with namespace stripping (V5 documents).
    Namespace striping should work with all stylesheets named profile-, even if
    they are not supporting namespace stripping in a non-profiling variant.

    Modified: profiling/profile-mode.xsl,1.4; profiling/xsl2profile.xsl,1.7 -
    Jirka Kosek

  • Moved profiling stage out of templates. This make possible to reuse
    profiled content by several templates and still maintaing node indentity
    (needed for example for HTML Help where content is processed multiple
    times).

    I don't know why this was not on the top level before. Maybe some XSLT
    processors choked on it. I hope this will be OK now.

    Modified: profiling/xsl2profile.xsl,1.5 - Jirka Kosek

Tools

The following changes have been made to the tools code since the 1.69.1
release.

  • Moved Makefile.DocBook from contrib module to xsl module.

    Modified: tools/make/Makefile.DocBook,1.1 - Michael(tm) Smith

WordML

The following changes have been made to the wordml code since the 1.69.1
release.

  • added contrib element, better handling of default paragraph style

    Modified: wordml/pages-normalise.xsl,1.6; wordml/supported.xml,1.2; wordml/
    wordml-final.xsl,1.14 - Steve Ball

  • added bridgehead

    Modified: wordml/docbook-pages.xsl,1.6; wordml/docbook.xsl,1.17; wordml/
    pages-normalise.xsl,1.5; wordml/template-pages.xml,1.7; wordml/
    template.dot,1.4; wordml/template.xml,1.14; wordml/wordml-final.xsl,1.13 -
    Steve Ball

  • added blocks stylesheet to support bibliographies, glossaries and qandasets

    Modified: wordml/Makefile,1.4; wordml/README,1.3; wordml/
    blocks-spec.xml,1.1; wordml/docbook-pages.xsl,1.5; wordml/docbook.xsl,1.16;
    wordml/pages-normalise.xsl,1.4; wordml/sections-spec.xml,1.3; wordml/
    specifications.xml,1.13; wordml/template-pages.xml,1.6; wordml/
    template.dot,1.3; wordml/template.xml,1.13; wordml/wordml-blocks.xsl,1.1;
    wordml/wordml-final.xsl,1.12; wordml/wordml-sections.xsl,1.3 - Steve Ball

  • added mediaobject caption

    Modified: wordml/docbook-pages.xsl,1.4; wordml/docbook.xsl,1.15; wordml/
    specifications.xml,1.12; wordml/template-pages.xml,1.5; wordml/
    template.dot,1.2; wordml/template.xml,1.12; wordml/wordml-final.xsl,1.11 -
    Steve Ball

  • added callouts

    Modified: wordml/docbook-pages.xsl,1.3; wordml/docbook.xsl,1.14; wordml/
    pages-normalise.xsl,1.3; wordml/specifications.xml,1.11; wordml/
    template-pages.xml,1.4; wordml/wordml-final.xsl,1.10 - Steve Ball

  • added Word template file

    Modified: wordml/template.dot,1.1 - Steve Ball

  • added abstract, fixed itemizedlist, ulink

    Modified: wordml/specifications.xml,1.10; wordml/wordml-final.xsl,1.9 -
    Steve Ball

  • fixed Makefile added many features to Pages support added revhistory,
    inlines, highlights, abstract

    Modified: wordml/Makefile,1.2; wordml/docbook-pages.xsl,1.2; wordml/
    pages-normalise.xsl,1.2; wordml/sections-spec.xml,1.2; wordml/
    specifications.xml,1.9; wordml/template-pages.xml,1.3; wordml/
    template.xml,1.11; wordml/wordml-final.xsl,1.8; wordml/
    wordml-sections.xsl,1.2 - Steve Ball

  • fixed handling linebreaks when generating WordML added Apple Pages support

    Modified: wordml/docbook.xsl,1.13; wordml/template-pages.xml,1.2 - Steve
    Ball

Release 1.69.1

This release is a minor bug-fix update to the 1.69.0 release. Along with bug
fixes, it includes one configuration-parameter change: The default value of the
annotation.support parameter is now 0 (off). The reason for that change is that
there have been reports that annotation handling is causing a significant
performance degradation in processing of large documents with xsltproc.

Release 1.69.0

The release includes major feature changes, particularly in the manpages
stylesheets, as well as a large number of bug fixes.

As with all DocBook Project “dot zero” releases, this is an experimental
release .

Common

  • This release adds localizations for the following languages: Albanian,
    Amharic, Azerbaijani, Hindi, Irish (Gaelic), Gujarati, Kannada, Mongolian,
    Oriya, Punjabi, Tagalog, Tamil, and Welsh.

  • Added support for specifying number format for auto labels for chapter,
    appendix, part, and preface. Contolled with the appendix.autolabel,
    chapter.autolabel, part.autolabel, and preface.autolabel parameters.

  • Added basic support for biblioref cross referencing.

  • Added support for align on caption in mediaobject.

  • Added support for processing documents that use the DocBook V5 namespace.

  • Added support for termdef and mathphrase.

  • EXPERIMENTAL: Incorporated the Slides and Website stylesheets into the
    DocBook XSL stylesheets package. So, for example, Website documents can now
    be processed using the following URI for the driver Website tabular.xsl
    file:

    http://docbook.sourceforge.net/release/xsl/current/website/tabular.xsl

  • A procedure without a title is now treated as an “informal” procedure
    (meaning that it is not added to any generated “list of procedures” and has
    no affect on numbering of generated labels for other procedures).

  • docname is no longer added to olink when pointing to a root element.

  • Added support for generation of choice separator in inline simplelist. This
    enables auto-generation of an appropriate localized “choice separator” (for
    example, “and” or “or”) before the final item in an inline simplelist.

    To indicate that you want a choice separator generated for a particular
    list, you need to put a processing instruction (PI) of the form <?
    dbchoice choice="foo"?> as a child of the list. For example:

      <para>Choose from
      ONE and ONLY ONE of the following:
      <simplelist type="inline">
      <?dbchoice choice="or" ?>
      <member>A</member>
      <member>B</member>
      <member>C</member>.</simplelist></para>

    Output (for English):

        Choose from ONE and only ONE of the following choices: A, B, or C.

    As a temporary workaround for the fact that most of the DocBook non-English
    locale files don't have a localization for the word “or”, you can put in a
    literal string to be used; example for French: <?dbchoice choice="ou">.
    That is, use “ou” instead of “or”.

FO

  • Added content-type property to external-graphic element, based on imagedata
    format attribute.

  • Added support for generating <rx:meta-field creator="$VERSION"/> field for
    XEP output. This makes the DocBook XSL stylesheet version information
    available through the Document Properties menu in Acrobat Reader and other
    PDF viewers.

  • Trademark symbol handling made consistent with handling of same in HTML
    stylesheets. Prior to this change, if you processed a document that
    contained no value for the class attribute on the trademark element, the
    HTML stylesheets would default to rendering a superscript TM symbol after
    the trademark contents, but the FO stylesheets would render nothing.

  • Added support for generating XEP bookmarks for refentry.

  • Added support for HTML markup table border attribute, applied to each table
    cell.

  • The table.width template can now sum column specs if none use % or *.

  • Added fox:destination extension inside fox:outline to support linking to
    internal destinations.

  • Added support for customizing abstract with property sets. Controlled with
    the abstract.properties and abstract.title.properties parameters.

  • Add footnotes in table title to table footnote set, and add support for
    table footnotes to HTML table markup.

  • Added support for title in glosslist.

  • Added support for itemizedlist symbol none.

  • Implemented the new graphical.admonition.properties and
    nongraphical.admonition.properties attribute sets.

  • Added id to formalpara and some other blocks that were missing it.

  • Changed the anchor template to output fo:inline instead of fo:wrapper.

  • Added support for toc.max.depth parameter.

Help

  • Eclipse Help: Added support for generating olink database.

HTML

  • Added a first cut at support in HTML output for DocBook 5 style annotation
    s. Controlled using the annotation.support parameter, and implemented using
    JavaScript and CSS styling. For more details, see the documentation for the
    annotation.js, annotation.css, annotation.graphic.open, and
    annotation.graphic.close parameters.

  • Generate client-side image map for imageobjectco with areas using calspair
    units

  • Added support for <?img.src.path?> PI.

  • Added support for passing img.src.path to DocBook Java XSLT image
    extensions when appropriate. Controlled using the
    graphicsize.use.img.src.path parameter.

  • Added support for (not valid for DocBook 4) xlink:href on area and (not
    valid for DocBook 4) alt in area.

  • Added new parameter default.table.frame to control table framing if there
    is no frame attribute on a table.

  • Added initial, experimental support for generating content for the HTML
    title attribute from content of the alt element. This change adds support
    for the following inline elements only (none of them are block elements):
    abbrev, accel, acronym, action, application, authorinitials, beginpage,
    citation, citerefentry, citetitle, city, classname, code, command,
    computeroutput, constant, country, database, email, envar, errorcode,
    errorname, errortext, errortype, exceptionname, fax, filename, firstname,
    firstterm, foreignphrase, function, glossterm, guibutton, guiicon, guilabel
    , guimenu, guimenuitem, guisubmenu, hardware, honorific, interface,
    interfacename, keycap, keycode, keysym, lineage, lineannotation, literal,
    markup, medialabel, methodname, mousebutton, option, optional, otheraddr,
    othername, package, parameter, personname, phone, pob, postcode,
    productname, productnumber, prompt, property, quote, refentrytitle, remark,
    replaceable, returnvalue, tag, shortcut, state, street, structfield,
    structname, subscript, superscript, surname, symbol, systemitem, tag,
    termdef, token, trademark, type, uri, userinput, varname, and wordasword

  • Added support for chunking revhistory into separate file (similar to the
    support for doing same with legalnotice). Patch from Thomas Schraitle.
    Controlled through new generate.revhistory.link parameter.

  • l10n.xsl: Made language codes RFC compliant. Added a new boolean config
    parameter, l10n.lang.value.rfc.compliant. If it is non-zero (the default),
    any underscore in a language code will be converted to a hyphen in HTML
    output. If it is zero, the language code will be left as-is.

man

This release closes out 44 manpages stylesheet bug reports and feature
requests. It adds more than 35 new configuration parameters for controlling
aspects of man-page output -- including hyphenation and justification, handling
of links, conversion of Unicode characters, and contents of man-page headers
and footers.

  • New options for globally disabling/enabling hyphenation and justification:
    man.justify and man.hyphenate.

    Note that the default for the both of those is zero (off), because
    justified text looks good only when it is also hyphenated; to quote the
    “Hyphenation” node from the groff info page:

        Since the odds are not great for finding a set of words, for every
        output line, which fit nicely on a line without inserting excessive
        amounts of space between words, `gtroff' hyphenates words so that it
        can justify lines without inserting too much space between words.

    The problem is that groff can end up hyphenating a lot of things that you
    don't want hyphenated (variable names and command names, for example).
    Keeping both justification and hyphenation disabled ensures that hyphens
    won't get inserted where you don't want to them, and you don't end up with
    lines containing excessive amounts of space between words. These default
    settings run counter to how most existing man pages are formatted. But
    there are some notable exceptions, such as the perl man pages.

  • Added parameters for controlling hyphenation of computer inlines,
    filenames, and URLs. By default, even when hyphenation is enabled
    (globally), hyphenation is now suppressed for "computer inlines"
    (currently, just classname, constant, envar, errorcode, option, replaceable
    , userinput, type, and varname, and for filenames, and for URLs from link.
    It can be (re)enabled using the man.hyphenate.computer.inlines,
    man.hyphenate.filenames, and man.hyphenate.urls parameters.

  • Implemented a new system for replacing Unicode characters. There are two
    parts to the new system: a “string substitution map” for doing “essential”
    replacements, and a “character map” that can optionally be disabled and
    enabled.

    The new system fixes all open bugs that had to do with literal Unicode
    numbered entities such as &#8220; and &#8221; showing up in output, and
    greatly expands the ability of the stylesheets to generate “good” roff
    equivalents for Unicode symbols and special characters.

    Here are some details...

    The previous manpages mechanism for replacing Unicode symbols and special
    characters with roff equivalents (the replace-entities template) was not
    scalable and not complete. The mechanism handled a somewhat arbitrary
    selection of less than 20 or so Unicode characters. But there are
    potentially more than 800 Unicode special characters that have some groff
    equivalent they can be mapped to. And there are about 34 symbols in the
    Latin-1 (ISO-8859-1) block alone. Users might reasonably expect that if
    they include any of those Latin-1 characters in their DocBook source
    documents, they will get correctly converted to known roff equivalents in
    output.

    In addition to those common symbols, certain users may have a need to use
    symbols from other Unicode blocks. Say, somebody who is documenting an
    application related to math might need to use a bunch of symbols from the
    “Mathematical Operators” Unicode block (there are about 65 characters in
    that block that have reasonable roff equivalents). Or somebody else might
    really like Dingbats -- such as the checkmark character -- and so might use
    a bunch of things from the “Dingbat” block (141 characters in that that
    have roff equivalents or that can at least be “degraded” somewhat
    gracefully into roff).

    So, the old replace-entities mechanism was replaced with a completely
    different mechanism that is based on use of two “maps”: a “substitution
    map” and a “character map” (the latter in a format compliant with the XSLT
    2.0 spec and therefore completely “forward compatible” with XSLT 2.0).

    The substitution map is controlled through the man.string.subst.map
    parameter, and is used to replace things like the backslash character
    (which needs special handling to prevent it from being interpreted as a
    roff escape). The substitution map cannot be disabled, because disabling it
    will cause the output to be broken. However, you can add to it and change
    it if needed.

    The “character map” mechanism, on the other hand, can be completely
    disabled. It is enabled by default, and, by default, does replacement of
    all Latin-1 symbols, along with most special spaces, dashes, and quotes
    (about 75 characters by default). Also, you can optionally enable a “full”
    character map that provides support for converting all 800 or so of the
    characters that have some reasonable groff equivalent.

    The character-map mechanism is controlled through the following parameters:

    man.charmap.enabled

        turns character-map support on/off

    man.charmap.use.subset

        specifies that a subset of the character map is used instead of the
        full map

    man.charmap.subset.profile

        specifies profile of character-map subset

    man.charmap.uri

        specifies an alternate character map to use instead of the “standard”
        character map provided in the distribution

  • Implemented out-of-line handling of display of URLs for links (currently,
    only for ulink). This gives you three choices for handling of links:

     1. Number and list links. Each link is numbered inline, with a number in
        square brackets preceding the link contents, and a numbered list of all
        links is added to the end of the document.

     2. Only list links. Links are not numbered, but an (unnumbered) list of
        links is added to the end of the document.

     3. Suppress links. Don't number links and don't add any list of links to
        the end of the document.

    You can also choose whether links should be underlined. The default is “the
    works” -- list, number, and underline links. You can use the
    man.links.list.enabled, man.links.are.numbered, and
    man.links.are.underlined parameters to change the defaults. The default
    heading for the link list is REFERENCES. You can be change that using the
    man.links.list.heading parameter.

  • Changed default output encoding to UTF-8. This does not mean that man pages
    are output in raw UTF-8, because the character map is applied before final
    output, causing all UTF-8 characters covered in the map to be converted to
    roff equivalents.

  • Added support for processing refsect3 and formalpara and nested refsection
    elements, down to any arbitrary level of nesting.

  • Output of the NAME and SYNOPSIS and AUTHOR headings and the headings for
    admonitions (note, caution, etc.) are no longer hard-coded for English.
    Instead, headings are generated for those in the correct locale (just as
    the FO and HTML stylesheets do).

  • Re-worked mechanism for assembling page headers/footers (the contents of
    the .TH macro “title line”).

    Here are some details...

    All man pages contain a .TH roff macro whose contents are used for
    rendering the “title line” displayed in the header and footer of each page.
    Here are a couple of examples of real-world man pages that have useful page
    headers/footers:

      gtk-options(7)    GTK+ User's Manual   gtk-options(7) <-- header
      GTK+ 1.2              2003-10-20       gtk-options(7) <-- footer

      svgalib(7)       Svgalib User Manual       svgalib(7) <-- header
      Svgalib 1.4.1      16 December 1999        svgalib(7) <-- footer

    And here are the terms with which the groff_man(7) man page refers to the
    various parts of the header/footer:

      title(section)  extra3  title(section)  <- header
      extra2          extra1  title(section)  <- footer

    Or, using the names with which the man(7) man page refers to those same
    fields:

      title(section)  manual  title(section)  <- page header
      source          date    title(section)  <- page footer

    The easiest way to control the contents of those fields is to mark up your
    refentry content like the following (note that this is a “minimal”
    example).

      <refentry>
        <info>
          <date>2003-10-20</date> 1
        </info>
        <refmeta>
          <refentrytitle>gtk-options</refentrytitle> 2
          <manvolnum>7</manvolnum> 3
          <refmiscinfo class="source-name">GTK+</refmiscinfo> 4
          <refmiscinfo class="version">1.2</refmiscinfo> 5
          <refmiscinfo class="manual">GTK+ User's Manual</refmiscinfo> 6
        </refmeta>
        <refnamediv>
          <refname>gtk-options</refname>
          <refpurpose>Standard Command Line Options for GTK+ Programs</refpurpose>
        </refnamediv>
        <refsect1>
          <title>Description</title>
          <para>This manual page describes the command line options, which
          are common to all GTK+ based applications.</para>
        </refsect1>
      </refentry>

    1  Sets the “date” part of the header/footer.

    2  Sets the “title” part.

    3  Sets the “section” part.

    4  Sets the “source name” part.

    5  Sets the “version” part.

    6  Sets the “manual” part.

    Below are explanations of the steps the stylesheets take to attempt to
    assemble and display “good” headers and footer. [In the descriptions, note
    that *info is the refentry “info” child (whatever its name), and parentinfo
    is the “info” child of its parent (again, whatever its name).]

    extra1 field (date)

        Content of the “extra1” field is what shows up in the center footer
        position of each page. The man(7) man page describes it as “the date of
        the last revision”.

        To provide this content, if the refentry.date.profile.enabled is
        non-zero, the stylesheets check the value of refentry.date.profile.

        Otherwise, by default, they check for a date or pubdate not only in the
        *info contents, but also in the parentinfo contents.

        If a date cannot be found, the stylesheets now automatically generate a
        localized “long format” date, ensuring that this field always has
        content in output.

        However, if for some reason you want to suppress this field, you can do
        so by setting a non-zero value for man.th.extra1.suppress.

    extra2 field (source)

        On Linux systems and on systems with a modern groff, the content of the
        “extra2” field are what shows up in the left footer position of each
        page.

        The man(7) man page describes this as “the source of the command”, and
        provides the following examples:

          ☆ For binaries, use somwething like: GNU, NET-2, SLS Distribution,
            MCC Distribution.

          ☆ For system calls, use the version of the kernel that you are
            currently looking at: Linux 0.99.11.

          ☆ For library calls, use the source of the function: GNU, BSD 4.3,
            Linux DLL 4.4.1.

        In practice, there are many pages that simply have a version number in
        the “source” field. So, it looks like what we have is a two-part field,
        Name Version, where:

        Name

            product name (e.g., BSD) or org. name (e.g., GNU)

        Version

            version name

        Each part is optional. If the Name is a product name, then the Version
        is probably the version of the product. Or there may be no Name, in
        which case, if there is a Version, it is probably the version of the
        item itself, not the product it is part of. Or, if the Name is an
        organization name, then there probably will be no Version.

        To provide this content, if the refentry.source.name.profile.enabled
        and refentry.version.profile.enabled parameter are non-zero, the
        stylesheets check the value of refentry.source.name.profile
        refentry.version.profile.

        Otherwise, by default, they check the following places, in the
        following order:

         1. *info/productnumber

         2. *info/productnumber

         3. refmeta/refmiscinfo[@class = 'version']

         4. parentinfo/productnumber

         5. *info/productname

         6. parentinfo/productname

         7. refmeta/refmiscinfo

         8. [nothing found, so leave it empty]

    extra3 field

        On Linux systems and on systems with a modern groff, the content of the
        “extra3” field are what shows up in the center header position of each
        page. Some man pages have “extra2” content, some don't. If a particular
        man page has it, it is most often “context” data about some larger
        system the documented item belongs to (for example, the name or
        description of a group of related applications). The stylesheets now
        check the following places, in the following order, to look for content
        to add to the “extra3” field.

         1. parentinfo/title

         2. parent's title

         3. refmeta/refmiscinfo

         4. [nothing found, so leave it empty]

  • Reworked *info gathering. For each refentry found, the stylesheets now
    cache its *info content, then check for any valid parent of it that might
    have metainfo content and cache that, if found; they then then do all
    further matches against those node-sets (rather than re-selecting the
    original *info nodes each time they are needed).

  • New option for breaking strings after forward slashes. This enables long
    URLs and pathnames to be broken across lines. Controlled through
    man.break.after.slash parameter.

  • Output for servicemark and trademark are now (SM) and (TM). There is a
    groff "\(tm" escape, but output from that is not acceptable.

  • New option for controlling the length of the title part of the .TH title
    line. Controlled through the man.th.title.max.length parameter.

  • New option for specifying output encoding of each man page; controlled with
    man.output.encoding (similar to the HTML chunker.output.encoding 
    parameter).

  • New option for suppressing filename messages when generating output;
    controlled with man.output.quietly (similar to the HTML chunk.quietly
    parameter).

  • The text of cross-references to first-level refentry (refsect1, top-level
    refsection, refnamediv, and refsynopsisdiv) are now capitalized.

  • Cross-references to refnamediv now use the localized NAME title instead of
    using the first refname child. This makes the output inconsistent with HTML
    and FO output, but for man-page output, it seems to make better sense to
    have the NAME. (It may actually make better sense to do it that way in HTML
    and FO output as well...)

  • Added support for processing funcparams.

  • Removed the space that was being output between funcdef and paramdef;
    example: was: float rand (void); now: float rand(void)

  • Turned off bold formatting for the type element when it occurs within a
    funcdef or paramdef

  • Corrected rendering of simplelist. Any <simplelist type="inline" instance
    is now rendered as a comma-separated list (also with an optional localized
    “and” or “or” before the last item -- see description elsewhere in these
    release notes). Any simplelist instance whose type is not inline is
    rendered as a one-column vertical list (ignoring the values of the type and
    columns attributes if present)

  • Comment added at top of roff source for each page now includes DocBook XSL
    stylesheets version number (as in the HTML stylesheets)

  • Made change to prevent “sticky” fonts changes. Now, when the manpages
    stylesheets encounter node sets that need to be boldfaced or italicized,
    they put the \fBfoo\fR and \fIbar\fR groff bold/italic instructions
    separately around each node in the set.

  • synop.xsl: Boldface everything in funcsynopsis output except parameters
    (which are in ital). The man(7) man page says:

        For functions, the arguments are always specified using italics, even
        in the SYNOPSIS section, where the rest of the function is specified in
        bold.

    A look through the contents of the man/man2 directory shows that most (all)
    existing pages do follow this “everything in funcsynopsis bold” rule. That
    means the type content and any punctuation (parens, semicolons, varargs)
    also must be bolded.

  • Removed code for adding backslashes before periods/dots in roff source,
    because backslashes in front of periods/dots in roff source are needed only
    in the very rare case where a period is the very first character in a line,
    without any space in front of it. A better way to deal with that rare case
    is for you to add a zero-width space in front of the offending dot(s) in
    your source

  • Removed special handling of the quote element. That was hard-coded to cause
    anything marked up with the quote element to be output preceded by two
    backticks and followed by two apostrophes -- that is, that old-school
    kludge for generating “curly” quotes in Emacs and in X-Windows fonts. While
    Emacs still seems to support that, I don't think X-Windows has for a long
    time now. And, anyway, it looks (and has always looked) like crap when
    viewed on a normal tty/console. In addition, it breaks localiztion of quote
    . By default, quote content is output with localized quotation marks,
    which, depending on the locale, may or may not be left and right double
    quotation marks.

  • Changed mappings for left and right single quotation marks. Those had
    previously been incorrectly mapped to the backtick (&#96;) and apostrophe
    (&39;) characters (for kludgy reasons -- see above). They are now correctly
    mapped to the \(oq and \(cq roff escapes. If you want the old (broken)
    behavior, you need to manually change the mappings for those in the value
    of the man.string.subst.map parameter.

  • Removed xref.xsl file. Now, of the various cross-reference elements, only
    the ulink element is handled differently; the rest are handled exactly as
    the HTML stylesheets handle them, except that no hypertext links are
    generated. (Because there is no equivalent hypertext mechanism is man
    pages.)

  • New option for making “subheading dividers” in generated roff source. The
    dividers are not visible in the rendered man page; they are just there to
    make the source readable. Controlled using man.subheading.divider.

  • Fixed many places where too much space was being added between lines.

Release 1.68.1

The release adds localization support for Farsi (thanks to Sina Heshmati) and
improved support for the XLink-based DocBook NG db:link element. Other than
that, it is a minor bug-fix update to the 1.68.0 release. The main thing it
fixes is a build error that caused the XSLT Java extensions to be jarred up
with the wrong package structure. Thanks to Jens Stavnstrup for quickly
reporting the problem, and to Mauritz Jeanson for investigating and finding the
cause.

Release 1.68.0

This release includes some features changes, particularly for FO/PDF output,
and a number of bug fixes.

FO

  • Moved footnote properties to attribute-sets.

  • Added support for side floats, margin notes, and custom floats.

  • Added new parameters body.start.indent and body.end.indent to the
    set.flow.properties template.

  • Added support for xml:id

  • Added support for refdescriptor.

  • Added support for multiple refnamedivs.

  • Added index.entry.properties attribute-set to support customization of
    index entries.

  • Added set.flow.properties template call to each fo:flow to support
    customizations entry point.

  • Add support for @floatstyle in figure

  • Moved hardcoded properties for index division titles to the
    index.div.title.properties attribute-set.

  • Added support for table-layout="auto" for XEP.

  • Added index.div.title.properties attribute-set.

  • $verbose parameter is now passed to most elements.

  • Added refentry to toc in part, as it is permitted by the DocBook schema/
    DTD.

  • Added backmatter elements and article to toc in part, since they are
    permitted by the DocBook schema/DTD.

  • Added mode="toc" for simplesect, since it is now permitted in the toc if
    simplesect.in.toc is set.

  • Moved hard-coded properties to nongraphical.admonintion.properties and
    graphical.admonition.properties attribute sets.

  • Added support for sidebar-width and float-type processing instructions in
    sidebar.

  • For tables with HTML markup elements, added support for dbfo bgcolor PI,
    the attribute-sets named table.properties, informaltable.properties,
    table.table.properties, and table.cell.padding. Also added support for the
    templates named table.cell.properties and table.cell.block.properties so
    that tabstyles can be implemented. Also added support for tables containing
    only tr instead of tbody with tr.

  • Added new paramater hyphenate.verbatim.characters which can specify
    characters after which a line break can occur in verbatim environments.
    This parameter can be used to extend the initial set of characters which
    contain only space and non-breakable space.

  • Added itemizedlist.label.markup to enable selection of different bullet
    symbol. Also added several potential bullet characters, commented out by
    default.

  • Enabled all id's in XEP output for external olinking.

HTML

  • Added support for refdescriptor.

  • Added support for multiple refnamedivs.

  • Added support for xml:id

  • refsynopsisdiv as a section for counting section levels

Images

  • Added new SVG admonition graphics and navigation images.

Release 1.67.2

This release fixes a table bug introduced in the 1.67.1 release.

Release 1.67.1

This release includes a number of bug fixes.

The following lists provide details about API and feature changes.

FO

  • Tables: Inherited cell properties are now passed to the
    table.cell.properties template so they can be overridden by a
    customization.

  • Tables: Added support for bgcolor PI on table row element.

  • TOCs: Added new parameter simplesect.in.toc; default value of 0 causes
    simplesect to be omitted from TOCs; to cause simplesect to be included in
    TOCs, you must set the value of simplesect.in.toc to 1.Comment from Norm:

        Simplesect elements aren't supposed to appear in the ToC at all... The
        use case for simplesect is when, for example, every chapter in a book
        ends with "Exercises" or "For More Information" sections and you don't
        want those to appear in the ToC.

  • Sections: Reverted change that caused a variable reference to be used in a
    template match and rewrote code to preserve intended semantics.

  • Lists: Added workaround to prevent "* 0.60 + 1em" garbage in list output
    from PassiveTeX

  • Moved the literal attributes from component.title to the
    component.title.properties attribute-set so they can be customized.

  • Lists: Added glossdef's first para to special handling in
    fo:list-item-body.

HTML

  • TOCs: Added new parameter simplesect.in.toc; for details, see the list of
    FO changes for this release.

  • Indexing: Added new parameter index.prefer.titleabbrev; when set to 1,
    index references will use titleabbrev instead of title when available.

HTML Help

  • Added support for generating windows-1252-encoded output using Saxon; for
    more details, see the list of XSL Java extensions changes for this release.

man pages

  • Replaced named/numeric character-entity references for non-breaking space
    with groff equivalent (backslash-tilde).

XSL Java extensions

  • Saxon extensions: Added the Windows1252 class. It extends Saxon 6.5.x with
    the windows-1252 character set, which is particularly useful when
    generating HTML Help for Western European Languages (code from Pontus
    Haglund and contributed to the DocBook community by Sectra AB, Sweden).

    To use:

     1. Make sure that the Saxon 6.5.x jar file and the jar file for the
        DocBook XSL Java extensions are in your CLASSPATH

     2. Create a DocBook XSL customization layer -- a file named
        mystylesheet.xsl or whatever -- that, at a minimum, contains the
        following:

          <xsl:stylesheet
            xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            version='1.0'>
            <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/htmlhelp/htmlhelp.xsl"/>
            <xsl:output method="html" encoding="WINDOWS-1252" indent="no"/>
            <xsl:param name="htmlhelp.encoding" select="'WINDOWS-1252'"></xsl:param>
            <xsl:param name="chunker.output.encoding" select="'WINDOWS-1252'"></xsl:param>
            <xsl:param name="saxon.character.representation" select="'native'"></xsl:param>
          </xsl:stylesheet>

        Invoke Saxon with the encoding.windows-1252 Java system property set to
        com.nwalsh.saxon.Windows1252; for example

          java \
            -Dencoding.windows-1252=com.nwalsh.saxon.Windows1252 \
          com.icl.saxon.StyleSheet \
          mydoc.xml mystylesheet.xsl

        Or, for a more complete "real world" case showing other options you'll
        typically want to use:

          java \
            -Dencoding.windows-1252=com.nwalsh.saxon.Windows1252 \
            -Djavax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl \
            -Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl \
            -Djavax.xml.transform.TransformerFactory=com.icl.saxon.TransformerFactoryImpl \
          com.icl.saxon.StyleSheet \
            -x org.apache.xml.resolver.tools.ResolvingXMLReader \
            -y org.apache.xml.resolver.tools.ResolvingXMLReader \
            -r org.apache.xml.resolver.tools.CatalogResolver \
          mydoc.xml mystylesheet.xsl

        In both cases, the "mystylesheet.xsl" file should be a DocBook
        customization layer containing the parameters show in step 2.

  • Saxon extensions: Removed Saxon 8 extensions from release package

Release 1.67.0

  • A number of important bug fixes.

  • Added Saxon8 extensions

  • Enabled dbfo table-width on entrytbl in FO output

  • Added support for role=strong on emphasis in FO output

  • Added new FO parameter hyphenate.verbatim that can be used to turn on
    "intelligent" wrapping of verbatim environments.

  • Replaced all <tt></tt> output with <code></code>

  • Changed admon.graphic.width template to a mode so that different
    admonitions can have different graphical widths.

  • Deprecated the HTML shade.verbatim parameter (use CSS instead)

  • Wrapped ToC refentrytitle/refname and refpurpose in span with class values.
    This makes it possible to style them using a CSS stylesheet.

  • Use strong/em instead of b/i in HTML output

  • Added support for converting Emphasis to groff italic and Emphasis role=
    'bold' to bold. Controlled by emphasis.propagates.style param, but not
    documented yet using litprog system. Will do that next (planning to add
    some other parameter-controllable options for hyphenation and handling of
    line spacing).

  • callout.graphics.number.limit.xml param: Changed the default from 10 to 15.

  • verbatim.properties: Added hyphenate=false

  • Saxon and Xalan Text.java extensions: Added support for URIResolver() on
    insertfile href's

  • Added generated RELEASE-NOTES.txt file.

  • Added INSTALL file (executable file for generating catalog.xml)

  • Removed obsolete tools directory from package

Release 1.66.1

  • A number of important bug fixes.

  • Now xml:base attributes that are generated by an XInclude processor are
    resolved for image files.

  • Rewrote olink templates to support several new features.

      □ Extended full olink support to FO output.

      □ Add support for xrefstyle attribute in olinks.

      □ New parameters to support new olink features: insert.olink.page.number,
        insert.olink.pdf.frag, olink.debug, olink.lang.fallback.sequence,
        olink.properties, prefer.internal.olink. See the reference page for
        each parameter for more information.

  • Added index.on.type parameter for new type attribute introduced in DocBook
    4.3 for indexterms and index. This allows you to create multiple indices
    containing different categories of entries. For users of 4.2 and earlier,
    you can use the new parameter index.on.role instead.

  • Added new section.autolabel.max.depth parameter to turn off section
    numbering below a certain depth. This permits you to number major section
    levels and leave minor section levels unnumbered.

  • Added footnote.sep.leader.properties attribute set to format the line
    separating footnotes in printed output.

  • Added parameter img.src.path as a prefix to HTML img src attributes. The
    prefix is added to whatever path is already generated by the stylesheet for
    each image file.

  • Added new attribute-sets informalequation.properties,
    informalexample.properties, informalfigure.properties, and
    informaltable.properties, so each such element type can be formatted
    individually if needed.

  • Add component.label.includes.part.label parameter to add any part number to
    chapter, appendix and other component labels when the label.from.part
    parameter is nonzero. This permits you to distinguish multiple chapters
    with the same chapter number in cross references and the TOC.

  • Added chunk.separate.lots parameter for HTML output. This parameter lets
    you generate separate chunk files for each LOT (list of tables, list of
    figures, etc.).

  • Added several table features:

      □ Added table.table.properties attribute set to add properties to the
        fo:table element.

      □ Added placeholder templates named table.cell.properties and
        table.cell.block.properties to enable adding properties to any
        fo:table-cell or the cell's fo:block, respectively. These templates are
        a start for implementing table styles.

  • Added new attribute set component.title.properties for easy modifications
    of component's title formatting in FO output.

  • Added Saxon support for an encoding attribute on the textdata element.
    Added new parameter textdata.default.encoding which specifies encoding when
    encoding attribute on textdata is missing.

  • Template label.this.section now controls whole section label, not only
    sub-label which corresponds to particular label. Former behaviour was IMHO
    bug as it was not usable.

  • Formatting in titleabbrev for TOC and headers is preserved when there are
    no hotlink elements in the title. Formerly the title showed only the text
    of the title, no font changes or other markup.

  • Added intial.page.number template to set the initial-page-number property
    for page sequences in print output. Customizing this template lets you
    change when page numbering restarts. This is similar to the
    format.page.number template that lets you change how the page number
    formatting changes in the output.

  • Added force.page.count template to set the force-page-count property for
    page sequences in print output. This is similar to the format.page.number
    template.

  • Sort language for localized index sorting in autoidx-ng.xsl is now taken
    from document lang, not from system environment.

  • Numbering and formatting of normal and ulink footnotes (if turned on) has
    been unified. Now ulink footnotes are mixed in with any other footnotes.

  • Added support for renderas attribute in section and sect1 et al. This
    permits you to render a given section title as if it were a different
    level.

  • Added support for label attribute in footnote to manually supply the
    footnote mark.

  • Added support for DocBook 4.3 corpcredit element.

  • Added support for a dbfo keep-together PI for formal objects (table,
    figure, example, equation, programlisting). That permits a formal object to
    be kept together if it is not already, or to be broken if it is very long
    and the default keep-together is not appropriate.

  • For graphics files, made file extension matching case insensitive, and
    updated the list of graphics extensions.

  • Allow calloutlist to have block content before the first callout

  • Added dbfo-need processing instruction to provide soft page breaks.

  • Added implementation of existing but unused default.image.width parameter
    for graphics.

  • Support DocBook NG tag inline element.

  • It appears that XEP now supports Unicode characters in bookmarks. There is
    no further need to strip accents from characters.

  • Make segmentedlist HTML markup more semantic and available to CSS styles.

  • Added user.preroot placeholder template to permit xsl-stylesheet and other
    PIs and comments to be output before the HTML root element.

  • Non-chunked legalnotice now gets an <a name="id"> element in HTML output so
    it can be referenced with xref or link.

  • In chunked HTML output, changed link rel="home" to rel="start", and link
    rel="previous" to rel="prev", per W3C HTML 4.01 spec.

  • Added several patches to htmlhelp from W. Borgert

  • Added Bosnian locale file as common/bs.xml.

Release 1.65.0

  • A number of important bug fixes.

  • Added a workaround to allow these stylesheets to process DocBook NG
    documents. (It’s a hack that pre-processes the document to strip off the
    namespace and then uses exsl:node-set to process the result.)

  • Added alternative indexing mechanism which has better internationalization
    support. New indexing method allows grouping of accented letters like e, é,
    ë into the same group under letter "e". It can also treat special letters
    (e.g. "ch") as one character and place them in the correct position (e.g.
    between "h" and "i" in Czech language).

    In order to use this mechanism you must create customization layer which
    imports some base stylesheet (like fo/docbook.xsl, html/chunk.xsl) and then
    includes appropriate stylesheet with new indexing code (fo/autoidx-ng.xsl
    or html/autoidx-ng.xsl). For example:

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                    version="1.0">

    <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/fo/docbook.xsl"/>
    <xsl:include href="http://docbook.sourceforge.net/release/xsl/current/fo/autoidx-ng.xsl"/>

    </xsl:stylesheet>

    New method is known to work with Saxon and it should also work with
    xsltproc 1.1.1 and later. Currently supported languages are English, Czech,
    German, French, Spanish and Danish.

Release 1.64.1

General bug fixes and improvements. Sorry about the failure to produce an
updated release notes file for 1.62.0—1.63.2

  • In the course of fixing bug #849787, wrapping Unicode callouts with an
    appropriate font change in the Xalan extensions, I discovered that the
    Xalan APIs have changed a bit. So xalan2.jar will work with older Xalan 2
    implementations, xalan25.jar works with Xalan 2.5.

Release 1.61.0

Lots of bug fixes and improvements.

  • Initial support for timestamp PI. From now you can use <?dbtimestamp format
    ="Y-m-d H:M:S"?> to get current datetime in your document. Added
    localization support for datetime PI

  • Added level 6 to test for section depth in section.level template so that
    section.title.level6.properties will be used for sections that are 6 deep
    or deeper. This should also cause a h6 to be created in html output.

  • Don't use SVG graphics if use.svg=0

  • Now uses number-and-title-template for sections only if section.autolabel
    is not zero.

  • Added missing 'english-language-name' attribute to the l10n element, and
    the missing 'style' attribute to the template element so the current
    gentext documents will validate.

  • Corrected several references to parameter qanda.defaultlabel that were
    missing the "$".

  • Now accepts admon.textlabel parameter to turn off Note, Warning, etc.
    label.

  • FeatReq #684561: support more XEP metadata

  • Added hyphenation support. Added support for coref. Added beginpage
    support. (does nothing; see TDG).

  • Added support for hyphenation-character, hyphenation-push-character-count,
    and hyphenation-remain-character-count

  • Added root.properties, ebnf.assignment, and ebnf.statement.terminator

  • Support bgcolor PI in table cells; make sure rowsep and colsep don't have
    any effect on the last row or column

  • Handle othercredit on titlepage a little better

  • Applied fix from Jeff Beal that fixed the bug that put secondary page
    numbers on primary entries. Same with tertiary page numbers on secondary
    entries.

  • Added definition of missing variable collection.

  • Make footnote formatting 'normal' even when it occurs in a context that has
    special formatting

  • Added warning when glossary.collection is not blank, but it cannot open the
    specified file.

  • Pick up the frame attribute on table and informaltable.

  • indexdiv/title in non-autogenerated indexes are now picked up.

  • Removed (unused) component.title.properties

  • Move IDs from page-sequences down to titlepage blocks

  • Use proportional-column-width(1) on more tables.

    Use proportional-column-width() for header/footer tables; suppress
    relative-align when when using FOP

  • Check for glossterm.auto.link when linking firstterms; don't output gl.
    prefix on glossterm links

  • Generate Part ToCs

  • Support glossary, bibliography, and index in component ToCs.

  • Refactored chunking code so that customization of chunk algorithm and chunk
    elements is more practical

  • Support textobject/phrase on inlinemediaobject.

  • Support 'start' PI on ordered lists

  • Fixed test of $toc PI to turn on qandaset TOC.

  • Added process.chunk.footnotes to sect2 through 5 to fix bug of missing
    footnotes when chunk level greater than 1.

  • Added paramater toc.max.depth which controls maximal depth of ToC as
    requested by PHP-DOC group.

  • Exempted titleabbrev from preamble processing in lists, and fixed
    variablelist preamble code to use the same syntax as the other lists.

  • Added support for elements between variablelist and first varlistentry
    since DocBook 4.2 supports that now.

Release 1.60.1

Lots of bug fixes.

  • The format of the titlepage.templates.xml files and the stylesheet that
    transforms them have been significantly changed. All of the attributes used
    to control the templates are now namespace qualified. So what used to be:

    <t:titlepage element="article" wrapper="fo:block">

    is now:

    <t:titlepage t:element="article" t:wrapper="fo:block">

    Attributes from other namespaces (including those that are unqualified) are
    now copied directly through. In practice, this means that the names that
    used to be “fo:” qualified:

    <title named-template="component.title"
           param:node="ancestor-or-self::article[1]"
           fo:text-align="center"
           fo:keep-with-next="always"
           fo:font-size="&hsize5;"
           fo:font-weight="bold"
           fo:font-family="{$title.font.family}"/>

    are now unqualified:

    <title t:named-template="component.title"
           param:node="ancestor-or-self::article[1]"
           text-align="center"
           keep-with-next="always"
           font-size="&hsize5;"
           font-weight="bold"
           font-family="{$title.font.family}"/>

    The t:titlepage and t:titlepage-content elements both generate wrappers
    now. And unqualified attributes on those elements are passed through. This
    means that you can now make the title font apply to ane entire titlepage
    and make the entire “recto” titlepage centered by specifying the font and
    alignment on the those elements:

    <t:titlepage t:element="article" t:wrapper="fo:block"
                 font-family="{$title.font.family}">

      <t:titlepage-content t:side="recto"
                 text-align="center">

  • Support use of titleabbrev in running headers and footers.

  • Added (experimental) xref.with.number.and.title parameter to enable number/
    title cross references even when the default would be just the number.

  • Generate part ToCs if they're requested.

  • Use proportional-column-width() in header/footer tables.

  • Handle alignment correctly when screenshot wraps a graphic in a figure.

  • Format chapter and appendix cross references consistently.

  • Attempt to support tables with multiple tgroups in FO.

  • Output fo:table-columns in simplelist tables.

  • Use titlepage.templates.xml for indexdiv and glossdiv formatting.

  • Improve support for new bibliography elements.

  • Added footnote.number.format, table.footnote.number.format,
    footnote.number.symbols, and table.footnote.number.symbols for better
    control of footnote markers.

  • Added glossentry.show.acronyms.

  • Suppress the draft-mode page masters when draft-mode is “no”.

  • Make blank pages verso not recto. D'Oh!

  • Improved formatting of ulink footnotes.

  • Fixed bugs in graphic width/height calculations.

  • Added class attributes to inline elements.

  • Don't add “.html” to the filenames identified with the “dbhtml” PI.

  • Don't force a ToC when sections contain refentrys.

  • Make section title sizes a function of the body.master.size.

Release 1.59.2

The 1.59.2 fixes an FO bug in the page masters that causes FOP to fail.

  • Removed the region-name from the region-body of blank pages. There's no
    reason to give the body of blank pages a unique name and doing so causes a
    mismatch that FOP detects.

  • Output IDs for the first paragraphs in listitems.

  • Fixed some small bugs in the handling of page numbers in double-sided mode.

  • Attempt to prevent duplicated IDs from being produced when endterm on xref
    points to something with nested structure.

  • Fix aligment problems in equations.

  • Output the type attribute on unordered lists (UL) in HTML only if the
    css.decoration parameter is true.

  • Calculate the font size in formal.title.properties so that it's 1.2 times
    the base font size, not a fixed "12pt".

Release 1.59.1

The 1.59.1 fixes a few bugs.

  • Added Bulgarian localization.

  • Indexing improvements; localize book indexes to books but allow setindex to
    index an entire set.

  • The default value for rowsep and colsep is now "1" as per CALS.

  • Added support for titleabbrev (use them for cross references).

  • Improvements to mediaobject for selecting print vs. online images.

  • Added seperate property sets for figures, examples, equations, tabless, and
    procedures.

  • Make lineannotations italic.

  • Support xrefstyle attribute.

  • Make endterm on xref higher priority than xreflabel target.

  • Glossary formatting improvements.

Release 1.58.0

The 1.58.0 adds some initial support for extensions in xsltproc, adds a few
features, and fixes bugs.

  • This release contains the first attempt at extension support for xsltproc.
    The only extension available to date is the one that adjusts table column
    widths. Run extensions/xsltproc/python/xslt.py.

  • Fixed bugs in calculation of adjusted column widths to correct for rounding
    errors.

  • Support nested refsection elements correctly.

  • Reworked gentext.template to take context into consideration. The name of
    elements in localization files is now an xpath-like context list, not just
    a simple name.

  • Made some improvements to bibliography formatting.

  • Improved graphical formatting of admonitions.

  • Added support for entrytbl.

  • Support spanning index terms.

  • Support bibliosource.

Release 1.57.0

  • The 1.57.0 release wasn't documented here. Oops.

Release 1.56.0

The 1.56.0 release fixes bugs.

  • Reworked chunking. This will break all existing customizations layers that
    change the chunking algorithm. If you're customizing chunking, look at the
    new “content” parameter that's passed to process-chunk-element and friends.

  • Support continued and inherited numeration in orderedlist formatting for
    FOs.

  • Added Thai localization.

  • Tweaked stylesheet documentation stylesheets to link to TDG and the
    parameter references.

  • Allow title on tables of contents ("Table of Contents") to be optional.
    Added new keyword to generate.toc. Support tables of contents on sections.

  • Made separate parameters for table borders and table cell borders:
    table.frame.border.color, table.frame.border.style,
    table.frame.border.thickness, table.cell.border.color,
    table.cell.border.style, and table.cell.border.thickness.

  • Suppress formatting of “endofrange” indexterms. This is only half-right.
    They should generate a range, but I haven't figured out how to do that yet.

  • Support revdescription. (Bug #582192)

  • Added default.float.class and fixed figure floats. (Bug #497603)

  • Fixed formatting of sbr in FOs.

  • Added context to the “missing template” error message.

  • Process arg correctly in a group. (Bug #605150)

  • Removed 'keep-with-next' from formal.title.properties attribute set now
    that the stylesheets support the option of putting such titles below the
    object. Now the $placement value determines if 'keep-with-next' or
    'keep-with-previous' is used in the title block.

  • Wrap “url()” around external-destinations when appropriate.

  • Fixed typo in compact list spacing. (Bug #615464)

  • Removed spurious hash in anchor name. (Bug #617717)

  • Address is now displayed verbatim on title pages. (Bug #618600)

  • The bridgehead.in.toc parameter is now properly supported.

  • Improved effectiveness of HTML cleanup by increasing the number of places
    where it is used. Improve use of HTML cleanup in XHTML stylesheets.

  • Support table of contents for appendix in article. (Bug #596599)

  • Don't duplicate footnotes in bibliographys and glossarys. (Bug #583282)

  • Added default.image.width. (Bug #516859)

  • Totally reworked funcsynopsis code; it now supports a 'tabular'
    presentation style for 'wide' prototypes; see
    funcsynopsis.tabular.threshold. (HTML only right now, I think, FO support,
    uh, real soon now.)

  • Reworked support for difference marking; toned down the colors a bit and
    added a “system.head.content” template so that the diff CSS wasn't
    overriding “user.head.content”. (Bug #610660)

  • Added call to the “*.head.content” elements when writing out long
    description chunks.

  • Make sure legalnotice link is correct even when chunking to a different
    base.dir.

  • Use CSS to set viewport characteristics if css.decoration is non-zero, use
    div instead of p for making graphic a block element; make figure titles the
    default alt text for images in a figure.

  • Added space-after to list.block.spacing.

  • Reworked section.level template to give “correct” answer instead of being
    off by one.

  • When processing tables, use the tabstyle attribute as the division class.

  • Fixed bug in html2xhtml.xsl that was causing the XHTML chunker to output
    HTML instead of XHTML.

Older releases

To view the release notes for older releases, see http://cvs.sourceforge.net/
viewcvs.py/docbook/xsl/RELEASE-NOTES.xml. Be aware that there were no release
notes for releases prior to the 1.50.0 release.

About dot-zero releases

DocBook Project “dot zero” releases should be considered experimental and are
always followed by stable “dot one plus” releases, usually within two or three
weeks. Please help to ensure the stability of “dot one plus” releases by
carefully testing each “dot zero” release and reporting back about any problems
you find.

It is not recommended that you use a “dot zero” release in a production system.
Instead, you should wait for the “dot one” or greater versions.

