Hello,I have some progress with the "Port all DSSSL customizations to XSLT" step. I still think that we should avoid manual comparison of old and new outputs when we can align them and have all differences observable, countable and manageable. I had developed XSLT's that allows us to do it. Please look at the patch (with all the XSLT's) and the comparison script attached. (There are a several dozens of changes in XSLTs and some in the script. Some differences still remain but they are observable and can be eliminated too)
Btw, can I hope to get some feedback on my previous letter regarding error fixes (https://www.postgresql.org/message-id/5736C475.3030405%40gmail.com)?
Best regards, Alexander 19.06.2016 23:22, Jürgen Purtz пишет:
On 05.05.2016 03:09, Peter Eisentraut wrote:I think the process should be something like this:- Apply your XSLT performance patch. The patch should be submitted to the next commit fest.- Wait a while to make sure everyone is happy with the performance. Keep tweaking if necessary.- Port all DSSSL customizations to XSLT. Manually evaluate output for quality.- Switch to XSLT build for official HTML documentation. [milestone 1] - Convert sources to XML. (There could be substeps here.) [milestone 2]- Then consider upgrading to DocBook 5. [milestone 3]Alexander and I continue to work on this path. In the meanwhile we have reached a state where xml files are well formed and valid against docbook 4 dtd - each single file as well as the big postgres_all.xml file. Thanks to Alexander's performance patch all XSLT processes run very fast (the slowest is fo+pdf with 6:30 min).On this basis I actually work on the HTML generation. But in opposite to the previous steps (where we create identical copies of the sgml files) the new css file is very different from the old one. This results from the following:* The XSLT process generates other HTML elements and other classes in comparison to the dsssl process. * XML files are case sensitive. All object names (id, ulink, linkend, zone, ...) are now lower case. * Sometimes the order of elements changed. * As the previous css file was constructed (some years ago) from three different css files, he contains redundant and sometimes contradictory information. I did a complete review.To get a feedback from the community I have published the resulting postgres_all.html and its pgdoc_online.css file. Please refer to https://github.com/JuergenPurtz/pgdoc_db5/blob/master/postgresql-9.5.3/doc/src/db4_xml/postgres_all.html respective pgdoc_online.css to get the files. Please compare the html file with pages you are familiar with. And remember: the look-and-feel is similar, but far from identical.Jürgen Purtz
compare_dsssl_xslt.sh
Description: application/shellscript
diff --git a/doc/src/sgml/stylesheet-common.xsl b/doc/src/sgml/stylesheet-common.xsl index de36376..adc82c1 100644 --- a/doc/src/sgml/stylesheet-common.xsl +++ b/doc/src/sgml/stylesheet-common.xsl @@ -7,6 +7,7 @@ all output formats (HTML, HTML Help, XSL-FO, etc.). --> +<xsl:include href="stylesheet-speedup-common.xsl" /> <!-- Parameters --> diff --git a/doc/src/sgml/stylesheet-speedup-common.xsl b/doc/src/sgml/stylesheet-speedup-common.xsl new file mode 100644 index 0000000..007fdf6 --- /dev/null +++ b/doc/src/sgml/stylesheet-speedup-common.xsl @@ -0,0 +1,94 @@ +<?xml version="1.0" encoding="utf-8"?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + version='1.0'> + +<!-- Performance-optimized versions of some upstream templates from common/ + directory --> + +<!-- from common/labels.xsl --> + +<xsl:template match="chapter" mode="label.markup"> + <xsl:choose> + <xsl:when test="@label"> + <xsl:value-of select="@label"/> + </xsl:when> + <xsl:when test="string($chapter.autolabel) != 0"> + <xsl:if test="$component.label.includes.part.label != 0 and + ancestor::part"> + <xsl:variable name="part.label"> + <xsl:apply-templates select="ancestor::part" + mode="label.markup"/> + </xsl:variable> + <xsl:if test="$part.label != ''"> + <xsl:value-of select="$part.label"/> + <xsl:apply-templates select="ancestor::part" + mode="intralabel.punctuation"> + <xsl:with-param name="object" select="."/> + </xsl:apply-templates> + </xsl:if> + </xsl:if> + <xsl:variable name="format"> + <xsl:call-template name="autolabel.format"> + <xsl:with-param name="format" select="$chapter.autolabel"/> + </xsl:call-template> + </xsl:variable> + <xsl:choose> + <xsl:when test="$label.from.part != 0 and ancestor::part"> + <xsl:number from="part" count="chapter" format="{$format}" level="any"/> + </xsl:when> + <xsl:otherwise> + <!-- Optimization for pgsql-docs: When counting to get label for + this chapter, preceding chapters can only be our siblings or + children of a preceding part, so only count those instead of + scanning the entire node tree. --> + <!-- <xsl:number from="book" count="chapter" format="{$format}" level="any"/> --> + <xsl:number value="count(../preceding-sibling::part/chapter) + count(preceding-sibling::chapter) + 1" format="{$format}"/> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + </xsl:choose> +</xsl:template> + +<xsl:template match="appendix" mode="label.markup"> + <xsl:choose> + <xsl:when test="@label"> + <xsl:value-of select="@label"/> + </xsl:when> + <xsl:when test="string($appendix.autolabel) != 0"> + <xsl:if test="$component.label.includes.part.label != 0 and + ancestor::part"> + <xsl:variable name="part.label"> + <xsl:apply-templates select="ancestor::part" + mode="label.markup"/> + </xsl:variable> + <xsl:if test="$part.label != ''"> + <xsl:value-of select="$part.label"/> + <xsl:apply-templates select="ancestor::part" + mode="intralabel.punctuation"> + <xsl:with-param name="object" select="."/> + </xsl:apply-templates> + </xsl:if> + </xsl:if> + <xsl:variable name="format"> + <xsl:call-template name="autolabel.format"> + <xsl:with-param name="format" select="$appendix.autolabel"/> + </xsl:call-template> + </xsl:variable> + <xsl:choose> + <xsl:when test="$label.from.part != 0 and ancestor::part"> + <xsl:number from="part" count="appendix" format="{$format}" level="any"/> + </xsl:when> + <xsl:otherwise> + <!-- Optimization for pgsql-docs: When counting to get label for + this appendix, preceding appendixes can only be our siblings or + children of a preceding part, so only count those instead of + scanning the entire node tree. --> + <!-- <xsl:number from="book|article" count="appendix" format="{$format}" level="any"/> --> + <xsl:number value="count(../preceding-sibling::part/appendix) + count(preceding-sibling::appendix) + 1" format="{$format}"/> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + </xsl:choose> +</xsl:template> + +</xsl:stylesheet> diff --git a/doc/src/sgml/stylesheet-speedup-xhtml.xsl b/doc/src/sgml/stylesheet-speedup-xhtml.xsl new file mode 100644 index 0000000..c91741d --- /dev/null +++ b/doc/src/sgml/stylesheet-speedup-xhtml.xsl @@ -0,0 +1,293 @@ +<?xml version="1.0" encoding="utf-8"?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns="http://www.w3.org/1999/xhtml" + version='1.0'> + +<!-- Performance-optimized versions of some upstream templates from xhtml/ + directory --> + +<!-- from xhtml/autoidx.xsl --> + +<xsl:template match="indexterm" mode="reference"> + <xsl:param name="scope" select="."/> + <xsl:param name="role" select="''"/> + <xsl:param name="type" select="''"/> + <xsl:param name="position"/> + <xsl:param name="separator" select="''"/> + + <xsl:variable name="term.separator"> + <xsl:call-template name="index.separator"> + <xsl:with-param name="key" select="'index.term.separator'"/> + </xsl:call-template> + </xsl:variable> + + <xsl:variable name="number.separator"> + <xsl:call-template name="index.separator"> + <xsl:with-param name="key" select="'index.number.separator'"/> + </xsl:call-template> + </xsl:variable> + + <xsl:variable name="range.separator"> + <xsl:call-template name="index.separator"> + <xsl:with-param name="key" select="'index.range.separator'"/> + </xsl:call-template> + </xsl:variable> + + <xsl:choose> + <xsl:when test="$separator != ''"> + <xsl:value-of select="$separator"/> + </xsl:when> + <xsl:when test="$position = 1"> + <xsl:value-of select="$term.separator"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$number.separator"/> + </xsl:otherwise> + </xsl:choose> + + <xsl:choose> + <xsl:when test="@zone and string(@zone)"> + <xsl:call-template name="reference"> + <xsl:with-param name="zones" select="normalize-space(@zone)"/> + <xsl:with-param name="position" select="position()"/> + <xsl:with-param name="scope" select="$scope"/> + <xsl:with-param name="role" select="$role"/> + <xsl:with-param name="type" select="$type"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <a> + <xsl:apply-templates select="." mode="class.attribute"/> + <xsl:variable name="title"> + <xsl:choose> + <xsl:when test="$index.prefer.titleabbrev != 0"> + <xsl:apply-templates select="(ancestor-or-self::set|ancestor-or-self::book|ancestor-or-self::part|ancestor-or-self::reference|ancestor-or-self::partintro|ancestor-or-self::chapter|ancestor-or-self::appendix|ancestor-or-self::preface|ancestor-or-self::article|ancestor-or-self::section|ancestor-or-self::sect1|ancestor-or-self::sect2|ancestor-or-self::sect3|ancestor-or-self::sect4|ancestor-or-self::sect5|ancestor-or-self::refentry|ancestor-or-self::refsect1|ancestor-or-self::refsect2|ancestor-or-self::refsect3|ancestor-or-self::simplesect|ancestor-or-self::bibliography|ancestor-or-self::glossary|ancestor-or-self::index|ancestor-or-self::webpage|ancestor-or-self::topic)[last()]" mode="titleabbrev.markup"/> + </xsl:when> + <xsl:otherwise> + <xsl:apply-templates select="(ancestor-or-self::set|ancestor-or-self::book|ancestor-or-self::part|ancestor-or-self::reference|ancestor-or-self::partintro|ancestor-or-self::chapter|ancestor-or-self::appendix|ancestor-or-self::preface|ancestor-or-self::article|ancestor-or-self::section|ancestor-or-self::sect1|ancestor-or-self::sect2|ancestor-or-self::sect3|ancestor-or-self::sect4|ancestor-or-self::sect5|ancestor-or-self::refentry|ancestor-or-self::refsect1|ancestor-or-self::refsect2|ancestor-or-self::refsect3|ancestor-or-self::simplesect|ancestor-or-self::bibliography|ancestor-or-self::glossary|ancestor-or-self::index|ancestor-or-self::webpage|ancestor-or-self::topic)[last()]" mode="title.markup"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:attribute name="href"> + <xsl:choose> + <xsl:when test="$index.links.to.section = 1"> + <xsl:call-template name="href.target"> + <xsl:with-param name="object" select="(ancestor-or-self::set|ancestor-or-self::book|ancestor-or-self::part|ancestor-or-self::reference|ancestor-or-self::partintro|ancestor-or-self::chapter|ancestor-or-self::appendix|ancestor-or-self::preface|ancestor-or-self::article|ancestor-or-self::section|ancestor-or-self::sect1|ancestor-or-self::sect2|ancestor-or-self::sect3|ancestor-or-self::sect4|ancestor-or-self::sect5|ancestor-or-self::refentry|ancestor-or-self::refsect1|ancestor-or-self::refsect2|ancestor-or-self::refsect3|ancestor-or-self::simplesect|ancestor-or-self::bibliography|ancestor-or-self::glossary|ancestor-or-self::index|ancestor-or-self::webpage|ancestor-or-self::topic)[last()]"/> + <!-- Optimization for pgsql-docs: We only have an index as a + child of book, so look that up directly instead of + scanning the entire node tree. Also, don't look for + setindex. --> + <!-- <xsl:with-param name="context" select="(//index[count(ancestor::node()|$scope) = count(ancestor::node()) and ($role = @role or $type = @type or (string-length($role) = 0 and string-length($type) = 0))] | //setindex[count(ancestor::node()|$scope) = count(ancestor::node()) and ($role = @role or $type = @type or (string-length($role) = 0 and string-length($type) = 0))])[1]"/> --> + <xsl:with-param name="context" select="(/book/index[count(ancestor::node()|$scope) = count(ancestor::node()) and ($role = @role or $type = @type or (string-length($role) = 0 and string-length($type) = 0))])[1]"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="href.target"> + <xsl:with-param name="object" select="."/> + <xsl:with-param name="context" select="(//index[count(ancestor::node()|$scope) = count(ancestor::node()) and ($role = @role or $type = @type or (string-length($role) = 0 and string-length($type) = 0))] | //setindex[count(ancestor::node()|$scope) = count(ancestor::node()) and ($role = @role or $type = @type or (string-length($role) = 0 and string-length($type) = 0))])[1]"/> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + + </xsl:attribute> + + <xsl:value-of select="$title"/> <!-- text only --> + </a> + + <xsl:variable name="id" select="(@id|@xml:id)[1]"/> + <xsl:if test="key('endofrange', $id)[count(ancestor::node()|$scope) = count(ancestor::node()) and ($role = @role or $type = @type or (string-length($role) = 0 and string-length($type) = 0))]"> + <xsl:apply-templates select="key('endofrange', $id)[count(ancestor::node()|$scope) = count(ancestor::node()) and ($role = @role or $type = @type or (string-length($role) = 0 and string-length($type) = 0))][last()]" mode="reference"> + <xsl:with-param name="position" select="position()"/> + <xsl:with-param name="scope" select="$scope"/> + <xsl:with-param name="role" select="$role"/> + <xsl:with-param name="type" select="$type"/> + <xsl:with-param name="separator" select="$range.separator"/> + </xsl:apply-templates> + </xsl:if> + </xsl:otherwise> + </xsl:choose> +</xsl:template> + +<xsl:template name="reference"> + <xsl:param name="scope" select="."/> + <xsl:param name="role" select="''"/> + <xsl:param name="type" select="''"/> + <xsl:param name="zones"/> + + <xsl:choose> + <xsl:when test="contains($zones, ' ')"> + <xsl:variable name="zone" select="substring-before($zones, ' ')"/> + <xsl:variable name="target" select="key('sections', $zone)"/> + + <a> + <xsl:apply-templates select="." mode="class.attribute"/> + <xsl:call-template name="id.attribute"/> + <xsl:attribute name="href"> + <xsl:call-template name="href.target"> + <xsl:with-param name="object" select="$target[1]"/> + <xsl:with-param name="context" select="//index[count(ancestor::node()|$scope) = count(ancestor::node()) and ($role = @role or $type = @type or (string-length($role) = 0 and string-length($type) = 0))][1]"/> + </xsl:call-template> + </xsl:attribute> + <xsl:apply-templates select="$target[1]" mode="index-title-content"/> + </a> + <xsl:text>, </xsl:text> + <xsl:call-template name="reference"> + <xsl:with-param name="zones" select="substring-after($zones, ' ')"/> + <xsl:with-param name="position" select="position()"/> + <xsl:with-param name="scope" select="$scope"/> + <xsl:with-param name="role" select="$role"/> + <xsl:with-param name="type" select="$type"/> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:variable name="zone" select="$zones"/> + <xsl:variable name="target" select="key('sections', $zone)"/> + + <a> + <xsl:apply-templates select="." mode="class.attribute"/> + <xsl:call-template name="id.attribute"/> + <xsl:attribute name="href"> + <xsl:call-template name="href.target"> + <xsl:with-param name="object" select="$target[1]"/> + <!-- Optimization for pgsql-docs: Only look for index under book + instead of searching the whole node tree. --> + <!-- <xsl:with-param name="context" select="//index[count(ancestor::node()|$scope) = count(ancestor::node()) and ($role = @role or $type = @type or (string-length($role) = 0 and string-length($type) = 0))][1]"/> --> + <xsl:with-param name="context" select="/book/index[count(ancestor::node()|$scope) = count(ancestor::node()) and ($role = @role or $type = @type or (string-length($role) = 0 and string-length($type) = 0))][1]"/> + </xsl:call-template> + </xsl:attribute> + <xsl:apply-templates select="$target[1]" mode="index-title-content"/> + </a> + </xsl:otherwise> + </xsl:choose> +</xsl:template> + + +<!-- from xhtml/chunk-common.xsl --> + +<xsl:template name="chunk-all-sections"> + <xsl:param name="content"> + <xsl:apply-imports/> + </xsl:param> + + <!-- Optimization for pgsql-docs: Since we set a fixed $chunk.section.depth, + we can do away with a bunch of complicated XPath searches for the + previous and next sections at various levels. --> + + <xsl:if test="$chunk.section.depth != 1"> + <xsl:message terminate="yes"> + <xsl:text>Error: If you change $chunk.section.depth, then you must update the performance-optimized chunk-all-sections-template.</xsl:text> + </xsl:message> + </xsl:if> + + <xsl:variable name="prev" + select="(preceding::book[1] + |preceding::preface[1] + |preceding::chapter[1] + |preceding::appendix[1] + |preceding::part[1] + |preceding::reference[1] + |preceding::refentry[1] + |preceding::colophon[1] + |preceding::article[1] + |preceding::topic[1] + |preceding::bibliography[parent::article or parent::book or parent::part][1] + |preceding::glossary[parent::article or parent::book or parent::part][1] + |preceding::index[$generate.index != 0] + [parent::article or parent::book or parent::part][1] + |preceding::setindex[$generate.index != 0][1] + |ancestor::set + |ancestor::book[1] + |ancestor::preface[1] + |ancestor::chapter[1] + |ancestor::appendix[1] + |ancestor::part[1] + |ancestor::reference[1] + |ancestor::article[1] + |ancestor::topic[1] + |preceding::sect1[1] + |ancestor::sect1[1])[last()]"/> + + <xsl:variable name="next" + select="(following::book[1] + |following::preface[1] + |following::chapter[1] + |following::appendix[1] + |following::part[1] + |following::reference[1] + |following::refentry[1] + |following::colophon[1] + |following::bibliography[parent::article or parent::book or parent::part][1] + |following::glossary[parent::article or parent::book or parent::part][1] + |following::index[$generate.index != 0] + [parent::article or parent::book][1] + |following::article[1] + |following::topic[1] + |following::setindex[$generate.index != 0][1] + |descendant::book[1] + |descendant::preface[1] + |descendant::chapter[1] + |descendant::appendix[1] + |descendant::article[1] + |descendant::topic[1] + |descendant::bibliography[parent::article or parent::book][1] + |descendant::glossary[parent::article or parent::book or parent::part][1] + |descendant::index[$generate.index != 0] + [parent::article or parent::book][1] + |descendant::colophon[1] + |descendant::setindex[$generate.index != 0][1] + |descendant::part[1] + |descendant::reference[1] + |descendant::refentry[1] + |following::sect1[1] + |descendant::sect1[1])[1]"/> + + <xsl:call-template name="process-chunk"> + <xsl:with-param name="prev" select="$prev"/> + <xsl:with-param name="next" select="$next"/> + <xsl:with-param name="content" select="$content"/> + </xsl:call-template> +</xsl:template> + +<xsl:template name="xxhtml.head"> + <xsl:param name="prev" select="/foo"/> + <xsl:param name="next" select="/foo"/> + + <!-- Optimization for pgsql-docs: Cut out a bunch of things we don't need + here, including an expensive //legalnotice search. --> + + <head> + <xsl:call-template name="system.head.content"/> + <xsl:call-template name="head.content"/> + + <xsl:if test="$prev"> + <link rel="prev"> + <xsl:attribute name="href"> + <xsl:call-template name="href.target"> + <xsl:with-param name="object" select="$prev"/> + </xsl:call-template> + </xsl:attribute> + <xsl:attribute name="title"> + <xsl:apply-templates select="$prev" mode="object.title.markup.textonly"/> + </xsl:attribute> + </link> + </xsl:if> + + <xsl:if test="$next"> + <link rel="next"> + <xsl:attribute name="href"> + <xsl:call-template name="href.target"> + <xsl:with-param name="object" select="$next"/> + </xsl:call-template> + </xsl:attribute> + <xsl:attribute name="title"> + <xsl:apply-templates select="$next" mode="object.title.markup.textonly"/> + </xsl:attribute> + </link> + </xsl:if> + + <xsl:call-template name="user.head.content"/> + </head> +</xsl:template> + +</xsl:stylesheet> diff --git a/doc/src/sgml/stylesheet-xhtml-dsssl-like-imports.xsl b/doc/src/sgml/stylesheet-xhtml-dsssl-like-imports.xsl new file mode 100644 index 0000000..9c63aeb --- /dev/null +++ b/doc/src/sgml/stylesheet-xhtml-dsssl-like-imports.xsl @@ -0,0 +1,161 @@ +<?xml version="1.0" encoding="ASCII"?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" version="1.0"> + +<!-- ==================================================================== --> +<!-- from component.xsl --> +<!-- No chapter toc when there is only one sect1 +xplang.html: + Chapter 39. Procedural Languages + Table of Contents + [9]39.1. Installing Procedural Languages +-> + Chapter 39. Procedural Languages +--> +<xsl:template match="chapter"> + <xsl:call-template name="id.warning"/> + + <xsl:element name="{$div.element}" namespace="http://www.w3.org/1999/xhtml"> + <xsl:call-template name="common.html.attributes"> + <xsl:with-param name="inherit" select="1"/> + </xsl:call-template> + <xsl:call-template name="id.attribute"> + <xsl:with-param name="conditional" select="0"/> + </xsl:call-template> + + <xsl:call-template name="component.separator"/> + <xsl:call-template name="chapter.titlepage"/> + + <xsl:variable name="toc.params"> + <xsl:call-template name="find.path.params"> + <xsl:with-param name="table" select="normalize-space($generate.toc)"/> + </xsl:call-template> + </xsl:variable> + <xsl:if test="contains($toc.params, 'toc') and count(sect1) > 1"> + <xsl:call-template name="component.toc"> + <xsl:with-param name="toc.title.p" select="contains($toc.params, 'title')"/> + </xsl:call-template> + <xsl:call-template name="component.toc.separator"/> + </xsl:if> + <xsl:apply-templates/> + <xsl:call-template name="process.footnotes"/> + </xsl:element> +</xsl:template> + +<!-- from sections.xsl --> +<!-- +spi-memory.html: + 44.3. Memory Management +-> + 44.3. Memory Management + Table of Contents + SPI_palloc — allocate memory in the upper executor context + SPI_repalloc — reallocate memory in the upper executor context +--> +<xsl:template match="sect1"> + <xsl:call-template name="id.warning"/> + + <xsl:element name="{$div.element}" namespace="http://www.w3.org/1999/xhtml"> + <xsl:call-template name="common.html.attributes"> + <xsl:with-param name="inherit" select="1"/> + </xsl:call-template> + <xsl:call-template name="id.attribute"> + <xsl:with-param name="conditional" select="0"/> + </xsl:call-template> + + <xsl:choose> + <xsl:when test="@renderas = 'sect2'"> + <xsl:call-template name="sect2.titlepage"/> + </xsl:when> + <xsl:when test="@renderas = 'sect3'"> + <xsl:call-template name="sect3.titlepage"/> + </xsl:when> + <xsl:when test="@renderas = 'sect4'"> + <xsl:call-template name="sect4.titlepage"/> + </xsl:when> + <xsl:when test="@renderas = 'sect5'"> + <xsl:call-template name="sect5.titlepage"/> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="sect1.titlepage"/> + </xsl:otherwise> + </xsl:choose> + + <xsl:variable name="toc.params"> + <xsl:call-template name="find.path.params"> + <xsl:with-param name="table" select="normalize-space($generate.toc)"/> + </xsl:call-template> + </xsl:variable> + + <xsl:if test="contains($toc.params, 'toc') and ($generate.section.toc.level >= 1 or count(refentry) > 0)"> + <xsl:call-template name="section.toc"> + <xsl:with-param name="toc.title.p" select="contains($toc.params, 'title')"/> + </xsl:call-template> + <xsl:call-template name="section.toc.separator"/> + </xsl:if> + <xsl:apply-templates/> + <xsl:call-template name="process.chunk.footnotes"/> + </xsl:element> +</xsl:template> + +<!-- from xhtml/component.xsl --> +<!-- +sourcerepo.html: + +Appendix I. The Source Code Repository + Table of Contents + [9]I.1. Getting The Source via Git +-> +Appendix I. The Source Code Repository +--> +<xsl:template match="appendix"> + <xsl:variable name="ischunk"> + <xsl:call-template name="chunk"/> + </xsl:variable> + + <xsl:call-template name="id.warning"/> + + <xsl:element name="{$div.element}" namespace="http://www.w3.org/1999/xhtml"> + <xsl:call-template name="common.html.attributes"> + <xsl:with-param name="inherit" select="1"/> + </xsl:call-template> + <xsl:call-template name="id.attribute"> + <xsl:with-param name="conditional" select="0"/> + </xsl:call-template> + + <xsl:choose> + <xsl:when test="parent::article and $ischunk = 0"> + <xsl:call-template name="section.heading"> + <xsl:with-param name="level" select="1"/> + <xsl:with-param name="title"> + <xsl:apply-templates select="." mode="object.title.markup"/> + </xsl:with-param> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="component.separator"/> + <xsl:call-template name="appendix.titlepage"/> + </xsl:otherwise> + </xsl:choose> + + <xsl:variable name="toc.params"> + <xsl:call-template name="find.path.params"> + <xsl:with-param name="table" select="normalize-space($generate.toc)"/> + </xsl:call-template> + </xsl:variable> + + <xsl:if test="contains($toc.params, 'toc') and count(sect1) > 1"> + <xsl:call-template name="component.toc"> + <xsl:with-param name="toc.title.p" select="contains($toc.params, 'title')"/> + </xsl:call-template> + <xsl:call-template name="component.toc.separator"/> + </xsl:if> + + <xsl:apply-templates/> + + <xsl:if test="not(parent::article) or $ischunk != 0"> + <xsl:call-template name="process.footnotes"/> + </xsl:if> + </xsl:element> +</xsl:template> + +</xsl:stylesheet> diff --git a/doc/src/sgml/stylesheet-xhtml-dsssl-like.xsl b/doc/src/sgml/stylesheet-xhtml-dsssl-like.xsl new file mode 100644 index 0000000..dbfcc2e --- /dev/null +++ b/doc/src/sgml/stylesheet-xhtml-dsssl-like.xsl @@ -0,0 +1,1043 @@ +<?xml version="1.0" encoding="utf-8"?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" + version="1.0" + xmlns="http://www.w3.org/1999/xhtml" + exclude-result-prefixes="#default"> +<xsl:import href="stylesheet-xhtml-dsssl-like-imports.xsl" /> + +<!-- from xhtml/chunk-common.xsl --> +<!-- align header with dsssl --> +<xsl:template name="header.navigation"> + <xsl:param name="prev" select="/foo"/> + <xsl:param name="next" select="/foo"/> + <xsl:param name="nav.context"/> + + <xsl:variable name="home" select="/*[1]"/> + <xsl:variable name="up" select="parent::*"/> + + <xsl:variable name="row1" select="$navig.showtitles != 0"/> + <xsl:variable name="row2" select="count($prev) > 0 or (count($up) > 0 and generate-id($up) != generate-id($home) and $navig.showtitles != 0) or count($next) > 0"/> + + <xsl:if test="$suppress.navigation = '0' and $suppress.header.navigation = '0' and not(self::book)"> + <div class="navheader"> + <xsl:if test="$row1 or $row2"> + <table width="100%" summary="Navigation header"> + <xsl:if test="$row1"> + <tr> + <th colspan="4" align="center"> + <a> + <xsl:attribute name="href"> + <xsl:call-template name="href.target"> + <xsl:with-param name="object" select="$home"/> + </xsl:call-template> + </xsl:attribute> + <xsl:apply-templates select="$home" mode="object.title.markup.textonly"/> + </a> + </th> + </tr> + </xsl:if> + + <xsl:if test="$row2"> + <tr> + <td width="10%" align="{$direction.align.start}"> + <xsl:if test="count($prev)>0"> + <a accesskey="p"> + <xsl:attribute name="href"> + <xsl:call-template name="href.target"> + <xsl:with-param name="object" select="$prev"/> + </xsl:call-template> + </xsl:attribute> + <xsl:call-template name="navig.content"> + <xsl:with-param name="direction" select="'prev'"/> + </xsl:call-template> + </a> + </xsl:if> + <xsl:text> </xsl:text> + </td> + <td width="10%" align="center"> + <xsl:choose> + <xsl:when test="count($up)>0 and generate-id($up) != generate-id($home)"> + <a accesskey="u"> + <xsl:attribute name="href"> + <xsl:call-template name="href.target"> + <xsl:with-param name="object" select="$up"/> + </xsl:call-template> + </xsl:attribute> + <xsl:call-template name="navig.content"> + <xsl:with-param name="direction" select="'up'"/> + </xsl:call-template> + </a> + </xsl:when> + <xsl:otherwise> + <a accesskey="h"> + <xsl:attribute name="href"> + <xsl:call-template name="href.target"> + <xsl:with-param name="object" select="$home"/> + </xsl:call-template> + </xsl:attribute> + <xsl:call-template name="navig.content"> + <xsl:with-param name="direction" select="'home'"/> + </xsl:call-template> + </a> +<!--   --> + </xsl:otherwise> + </xsl:choose> + </td> + <th width="60%" align="center"> + <xsl:choose> + <xsl:when test="count($up) > 0 and local-name($up) != 'part' and local-name($up) != 'sect1' and local-name($up) != 'reference' and generate-id($up) != generate-id($home) and $navig.showtitles != 0"> + <xsl:apply-templates select="$up" mode="object.title.markup"/> + </xsl:when> + <xsl:otherwise> </xsl:otherwise> + </xsl:choose> + </th> + <td width="20%" align="{$direction.align.end}"> + <xsl:text> </xsl:text> + <xsl:if test="count($next)>0"> + <a accesskey="n"> + <xsl:attribute name="href"> + <xsl:call-template name="href.target"> + <xsl:with-param name="object" select="$next"/> + </xsl:call-template> + </xsl:attribute> + <xsl:call-template name="navig.content"> + <xsl:with-param name="direction" select="'next'"/> + </xsl:call-template> + </a> + </xsl:if> + </td> + </tr> + </xsl:if> + </table> + </xsl:if> + <xsl:if test="$header.rule != 0"> + <hr/> + </xsl:if> + </div> + </xsl:if> +</xsl:template> + +<!-- from xhtml/chunk-common.xsl --> +<!-- align footer with dsssl --> +<xsl:template name="footer.navigation"> + <xsl:param name="prev" select="/foo"/> + <xsl:param name="next" select="/foo"/> + <xsl:param name="nav.context"/> + + <xsl:variable name="home" select="/*[1]"/> + <xsl:variable name="up" select="parent::*"/> + + <xsl:variable name="row1" select="count($prev) > 0 or count($up) > 0 or count($next) > 0"/> + + <xsl:variable name="row2" select="($prev and $navig.showtitles != 0) or (generate-id($home) != generate-id(.) or $nav.context = 'toc') or ($chunk.tocs.and.lots != 0 and $nav.context != 'toc') or ($next and $navig.showtitles != 0)"/> + + <xsl:if test="$suppress.navigation = '0' and $suppress.footer.navigation = '0'"> + <div class="navfooter"> + <xsl:if test="$footer.rule != 0"> + <hr/> + </xsl:if> + + <xsl:if test="$row1 or $row2"> + <table width="100%" summary="Navigation footer"> + <xsl:if test="$row1"> + <tr> + <td width="40%" align="{$direction.align.start}"> + <xsl:if test="count($prev)>0"> + <a accesskey="p"> + <xsl:attribute name="href"> + <xsl:call-template name="href.target"> + <xsl:with-param name="object" select="$prev"/> + </xsl:call-template> + </xsl:attribute> + <xsl:call-template name="navig.content"> + <xsl:with-param name="direction" select="'prev'"/> + </xsl:call-template> + </a> + </xsl:if> + <xsl:text> </xsl:text> + </td> + <td width="20%" align="center"> + <xsl:choose> + <xsl:when test="$home != . or $nav.context = 'toc'"> + <a accesskey="h"> + <xsl:attribute name="href"> + <xsl:call-template name="href.target"> + <xsl:with-param name="object" select="$home"/> + </xsl:call-template> + </xsl:attribute> + <xsl:call-template name="navig.content"> + <xsl:with-param name="direction" select="'home'"/> + </xsl:call-template> + </a> + <xsl:if test="$chunk.tocs.and.lots != 0 and $nav.context != 'toc'"> + <xsl:text> | </xsl:text> + </xsl:if> + </xsl:when> + <xsl:otherwise> </xsl:otherwise> + </xsl:choose> + + <xsl:if test="$chunk.tocs.and.lots != 0 and $nav.context != 'toc'"> + <a accesskey="t"> + <xsl:attribute name="href"> + <xsl:value-of select="$chunked.filename.prefix"/> + <xsl:apply-templates select="/*[1]" mode="recursive-chunk-filename"> + <xsl:with-param name="recursive" select="true()"/> + </xsl:apply-templates> + <xsl:text>-toc</xsl:text> + <xsl:value-of select="$html.ext"/> + </xsl:attribute> + <xsl:call-template name="gentext"> + <xsl:with-param name="key" select="'nav-toc'"/> + </xsl:call-template> + </a> + </xsl:if> + </td> + <td width="40%" align="{$direction.align.end}"> + <xsl:text> </xsl:text> + <xsl:if test="count($next)>0"> + <a accesskey="n"> + <xsl:attribute name="href"> + <xsl:call-template name="href.target"> + <xsl:with-param name="object" select="$next"/> + </xsl:call-template> + </xsl:attribute> + <xsl:call-template name="navig.content"> + <xsl:with-param name="direction" select="'next'"/> + </xsl:call-template> + </a> + </xsl:if> + </td> + </tr> + </xsl:if> + + <xsl:if test="$row2"> + <tr> + <td width="40%" align="{$direction.align.start}" valign="top"> + <xsl:if test="$navig.showtitles != 0"> + <xsl:apply-templates select="$prev" mode="object.title.markup.textonly"/> + </xsl:if> + <xsl:text> </xsl:text> + </td> + <td width="20%" align="center"> + <xsl:choose> + <xsl:when test="count($up)>0 and generate-id($up) != generate-id($home)"> + <a accesskey="u"> + <xsl:attribute name="href"> + <xsl:call-template name="href.target"> + <xsl:with-param name="object" select="$up"/> + </xsl:call-template> + </xsl:attribute> + <xsl:call-template name="navig.content"> + <xsl:with-param name="direction" select="'up'"/> + </xsl:call-template> + </a> + </xsl:when> + <xsl:otherwise> </xsl:otherwise> + </xsl:choose> + </td> + <td width="40%" align="{$direction.align.end}" valign="top"> + <xsl:text> </xsl:text> + <xsl:if test="$navig.showtitles != 0"> + <xsl:apply-templates select="$next" mode="object.title.markup.textonly"/> + </xsl:if> + </td> + </tr> + </xsl:if> + </table> + </xsl:if> + </div> + </xsl:if> +</xsl:template> +<!-- ==================================================================== --> + +<!-- from xhtml/chunk-common.xsl --> +<!-- Modify html.head --> +<xsl:template name="html.head"> + <xsl:param name="prev" select="/foo"/> + <xsl:param name="next" select="/foo"/> + <xsl:variable name="this" select="."/> + <xsl:variable name="home" select="/*[1]"/> + <xsl:variable name="up" select="parent::*"/> + + <head> + <xsl:call-template name="system.head.content"/> + <xsl:call-template name="head.content"/> + + <!-- home link not valid in HTML5 --> + <xsl:if test="$home and $div.element != 'section' and not(self::book)"> + <link rel="home"> + <xsl:attribute name="href"> + <xsl:call-template name="href.target"> + <xsl:with-param name="object" select="$home"/> + </xsl:call-template> + </xsl:attribute> + <xsl:attribute name="title"> + <xsl:apply-templates select="$home" mode="object.title.markup.textonly"/> + </xsl:attribute> + </link> + </xsl:if> + + <!-- up link not valid in HTML5 --> + <xsl:if test="$up and $div.element != 'section' and generate-id($up) != generate-id($home)"> <!-- LAW --> + <link rel="up"> + <xsl:attribute name="href"> + <xsl:call-template name="href.target"> + <xsl:with-param name="object" select="$up"/> + </xsl:call-template> + </xsl:attribute> + <xsl:attribute name="title"> + <xsl:apply-templates select="$up" mode="object.title.markup.textonly"/> + </xsl:attribute> + </link> + </xsl:if> + + <xsl:if test="$prev"> + <link rel="prev"> + <xsl:attribute name="href"> + <xsl:call-template name="href.target"> + <xsl:with-param name="object" select="$prev"/> + </xsl:call-template> + </xsl:attribute> + <xsl:attribute name="title"> + <xsl:apply-templates select="$prev" mode="object.title.markup.textonly"/> + </xsl:attribute> + </link> + </xsl:if> + + <xsl:if test="$next"> + <link rel="next"> + <xsl:attribute name="href"> + <xsl:call-template name="href.target"> + <xsl:with-param name="object" select="$next"/> + </xsl:call-template> + </xsl:attribute> + <xsl:attribute name="title"> + <xsl:apply-templates select="$next" mode="object.title.markup.textonly"/> + </xsl:attribute> + </link> + </xsl:if> + + <xsl:if test="$html.extra.head.links != 0"> + <xsl:for-each select="//part |//reference |//preface |//chapter |//article |//refentry |//appendix[not(parent::article)]|appendix |//glossary[not(parent::article)]|glossary |//index[not(parent::article)]|index"> + <link rel="{local-name(.)}"> + <xsl:attribute name="href"> + <xsl:call-template name="href.target"> + <xsl:with-param name="context" select="$this"/> + <xsl:with-param name="object" select="."/> + </xsl:call-template> + </xsl:attribute> + <xsl:attribute name="title"> + <xsl:apply-templates select="." mode="object.title.markup.textonly"/> + </xsl:attribute> + </link> + </xsl:for-each> + + <xsl:for-each select="section|sect1|refsection|refsect1"> + <link> + <xsl:attribute name="rel"> + <xsl:choose> + <xsl:when test="local-name($this) = 'section' or local-name($this) = 'refsection'"> + <xsl:value-of select="'subsection'"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="'section'"/> + </xsl:otherwise> + </xsl:choose> + </xsl:attribute> + <xsl:attribute name="href"> + <xsl:call-template name="href.target"> + <xsl:with-param name="context" select="$this"/> + <xsl:with-param name="object" select="."/> + </xsl:call-template> + </xsl:attribute> + <xsl:attribute name="title"> + <xsl:apply-templates select="." mode="object.title.markup.textonly"/> + </xsl:attribute> + </link> + </xsl:for-each> + + <xsl:for-each select="sect2|sect3|sect4|sect5|refsect2|refsect3"> + <link rel="subsection"> + <xsl:attribute name="href"> + <xsl:call-template name="href.target"> + <xsl:with-param name="context" select="$this"/> + <xsl:with-param name="object" select="."/> + </xsl:call-template> + </xsl:attribute> + <xsl:attribute name="title"> + <xsl:apply-templates select="." mode="object.title.markup.textonly"/> + </xsl:attribute> + </link> + </xsl:for-each> + </xsl:if> + + <!-- * if we have a legalnotice and user wants it output as a --> + <!-- * separate page and $html.head.legalnotice.link.types is --> + <!-- * non-empty, we generate a link or links for each value in --> + <!-- * $html.head.legalnotice.link.types --> +<!-- <xsl:if test="//legalnotice and not($generate.legalnotice.link = 0) and not($html.head.legalnotice.link.types = '')"> + <xsl:call-template name="make.legalnotice.head.links"/> + </xsl:if> --> + + <xsl:call-template name="user.head.content"/> + </head> +</xsl:template> + +<!-- ==================================================================== --> + +<!-- from common/gentext.xsl --> +<!-- admin.html: +"14.5. Non-Durable Settings" -> "Non-Durable Settings" +"Chapter 15. Installation from Source Code" -> "Installation from Source Code" + --> +<xsl:template match="*" mode="object.title.markup.textonly"> + <xsl:variable name="template"> + <xsl:call-template name="gentext.template"> + <xsl:with-param name="context"><xsl:choose> + <xsl:when test="local-name()='part' or + local-name()='chapter' or + local-name()='appendix' or + local-name()='sect1' or + local-name()='sect2' or + local-name()='sect3' or + local-name()='sect4' or + local-name()='sect5' or + local-name()='simplesect'">title-unnumbered</xsl:when> + <xsl:otherwise>title</xsl:otherwise> + </xsl:choose></xsl:with-param> + <xsl:with-param name="name"> + <xsl:call-template name="xpath.location"/> + </xsl:with-param> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="title"> + <xsl:call-template name="substitute-markup"> + <xsl:with-param name="allow-anchors" select="0"/> + <xsl:with-param name="template" select="$template"/> + </xsl:call-template> + </xsl:variable> + <xsl:value-of select="normalize-space($title)"/> +</xsl:template> + +<!-- from common/gentext.xsl (based on <xsl:template match="*" mode="object.title.markup">)--> +<!-- admin.html: "Part III. Server Administration -> III. Server Administration" --> +<xsl:template match="part" mode="object.title.markup"> + <xsl:param name="allow-anchors" select="0"/> + <xsl:variable name="template">%n. %t +<!-- <xsl:apply-templates select="." mode="object.title.template"/> --> + </xsl:variable> + +<!-- + <xsl:message> + <xsl:text>object.title.markup: </xsl:text> + <xsl:value-of select="local-name(.)"/> + <xsl:text>: </xsl:text> + <xsl:value-of select="$template"/> + </xsl:message> +--> + <xsl:call-template name="substitute-markup"> + <xsl:with-param name="allow-anchors" select="$allow-anchors"/> + <xsl:with-param name="template" select="$template"/> + </xsl:call-template> +</xsl:template> + +<!-- from common/gentext.xsl (based on <xsl:template match="*" mode="object.xref.template">) --> +<!-- contrib-prog-client.html: "see also PostgreSQL Client Applications" -> "see also Reference II, PostgreSQL Client Applications" --> +<xsl:template match="reference" + mode="object.xref.template"> + <xsl:variable name="title"> + <xsl:call-template name="gentext"> + <xsl:with-param name="key" select="'Reference'"/> + </xsl:call-template> + </xsl:variable> + <xsl:value-of select='concat($title, " %n, %t")' /> +</xsl:template> +<!-- ==================================================================== --> + +<!-- from xhtml/chunk-code.xsl (see stylesheet-xhtml-dsssl-like-imports.xsl) --> +<xsl:template match="chapter|sect1|appendix"> + <xsl:choose> + <xsl:when test="$onechunk != 0 and parent::*"> + <xsl:apply-imports/> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="process-chunk-element"/> + </xsl:otherwise> + </xsl:choose> +</xsl:template> +<!-- ==================================================================== --> + +<!-- from xhtml/admon.xsl --> +<!-- app-psql.html: + This mode is provided for those who insist on it, but you are + not necessarily encouraged to use it. In particular, if you mix + SQL and meta-commands on a line the order of execution might not + always be clear to the inexperienced user. +-> + This mode is provided for those who insist on it, but you are not + necessarily encouraged to use it. In particular, if you mix SQL and + meta-commands on a line the order of execution might not always be + clear to the inexperienced user. +--> +<xsl:template name="nongraphical.admonition"> + <div> + <xsl:call-template name="common.html.attributes"> + <xsl:with-param name="inherit" select="1"/> + </xsl:call-template> + <xsl:call-template name="id.attribute"/> + <xsl:if test="$admon.style != '' and $make.clean.html = 0"> + <xsl:attribute name="style"> + <xsl:value-of select="$admon.style"/> + </xsl:attribute> + </xsl:if> + + <xsl:choose> + <xsl:when test="local-name()='warning' or local-name()='caution'"> + <table> + <xsl:call-template name="common.html.attributes"> + <xsl:with-param name="inherit" select="1"/> + </xsl:call-template> + <xsl:attribute name="width">90%</xsl:attribute> + <xsl:attribute name="border">1</xsl:attribute> + <xsl:if test="$admon.textlabel != 0 or title or info/title"> + <tr><td align="center"><b> + <xsl:call-template name="anchor"/> + <xsl:apply-templates select="." mode="object.title.markup"/> + </b></td></tr> + </xsl:if> + <tr><td align="left"> + <xsl:apply-templates/> + </td></tr> + </table> + </xsl:when> + <xsl:otherwise> + <blockquote> + <xsl:call-template name="common.html.attributes"> + <xsl:with-param name="inherit" select="1"/> + </xsl:call-template> + <xsl:if test="$admon.textlabel != 0 or title or info/title"> + <h3 class="title"> + <xsl:call-template name="anchor"/> + <xsl:apply-templates select="." mode="object.title.markup"/> + </h3> + </xsl:if> + <xsl:apply-templates/> + </blockquote> + </xsl:otherwise> + </xsl:choose> + </div> +</xsl:template> + +<xsl:param name="admon.style"> + <xsl:value-of select="concat('margin-', $direction.align.start, ': 0px; margin-', $direction.align.end, ': 0px;')"/> +</xsl:param> + +<!-- ==================================================================== --> +<!-- from xhtml/block.xsl --> +<!-- +auth-pg-hba-conf.htm: + Users sometimes wonder why host names are handled in this + seemingly complicated way, with two name resolutions including a + reverse lookup of the client's IP address. This complicates use +-> + Users sometimes wonder why host names are handled in this seemingly + complicated way, with two name resolutions including a reverse lookup + of the client's IP address. This complicates use of the feature in case + +--> +<xsl:template match="sidebar"> + <table cellpadding="5" border="1"> + <xsl:call-template name="common.html.attributes"/> + <tr><td> + <div> + <xsl:call-template name="common.html.attributes"/> + <xsl:call-template name="id.attribute"/> + <xsl:call-template name="anchor"/> + <xsl:call-template name="sidebar.titlepage"/> + <xsl:apply-templates/> + </div> + </td></tr></table> +</xsl:template> + +<!-- ==================================================================== --> +<!-- from xhtml/refentry.xsl --> +<!-- + +app-clusterdb.html: + __________________________________________________________________ +-> + _______________________________________________________________________ + + clusterdb +--> +<xsl:template match="refnamediv"> + <div> + <xsl:call-template name="common.html.attributes"> + <xsl:with-param name="inherit" select="1"/> + </xsl:call-template> + <xsl:call-template name="id.attribute"/> + <xsl:call-template name="anchor"/> + <xsl:choose> + <xsl:when test="preceding-sibling::refnamediv"> + <!-- no title on secondary refnamedivs! --> + </xsl:when> + <xsl:when test="$refentry.generate.title != 0"> + <h1 align="center"> + <xsl:choose> + <xsl:when test="../refmeta/refentrytitle"> + <xsl:apply-templates select="../refmeta/refentrytitle"/> + </xsl:when> + <xsl:otherwise> + <xsl:apply-templates select="refname[1]"/> + </xsl:otherwise> + </xsl:choose> + </h1> + </xsl:when> + </xsl:choose> + <h2> + <xsl:call-template name="gentext"> + <xsl:with-param name="key" select="'RefName'"/> + </xsl:call-template> + </h2> + + <p> + <xsl:apply-templates/> + </p> + </div> +</xsl:template> + +<!-- ==================================================================== --> + +<!-- from common/common.xsl --> +<!-- app-clusterdb.html: + clusterdb [connection-option...] [ -_-verbose | -v ] -_-all | -a +-> + clusterdb [connection-option...] [-_-verbose | -v] -_-all | -a +--> +<xsl:param name="arg.choice.plain.open.str"><xsl:text></xsl:text></xsl:param> +<xsl:param name="arg.choice.plain.close.str"><xsl:text></xsl:text></xsl:param> + +<!-- ==================================================================== --> + +<!-- from xhml/autotoc.xls --> +<!-- Add subtoc for sect1/refentry and sect1/simplesect +ecpg.html: + 33.14. Embedded SQL Commands + 33.15. Informix Compatibility Mode +-> + 33.14. Embedded SQL Commands + ALLOCATE DESCRIPTOR â allocate an SQL descriptor area + CONNECT â establish a database connection +... + 33.15. Informix Compatibility Mode + +--> +<xsl:template match="sect1" mode="toc"> + <xsl:param name="toc-context" select="."/> + <xsl:call-template name="subtoc"> + <xsl:with-param name="toc-context" select="$toc-context"/> + <xsl:with-param name="nodes" select="sect2|refentry|simplesect |bridgehead[$bridgehead.in.toc != 0]"/> + </xsl:call-template> +</xsl:template> + +<!-- from xhtml/autotoc.xsl --> +<!-- Change subtoc output condition +contrib.html: + F.1. adminpack + F.1.1. Functions Implemented + F.2. auth_delay + F.2.1. Configuration Parameters + F.2.2. Author + F.3. auto_explain +-> + F.1. adminpack + F.2. auth_delay + F.3. auto_explain + +--> +<xsl:template name="subtoc"> + <xsl:param name="toc-context" select="."/> + <xsl:param name="nodes" select="NOT-AN-ELEMENT"/> + + <xsl:variable name="nodes.plus" select="$nodes | qandaset"/> + + <xsl:variable name="subtoc"> + <xsl:element name="{$toc.list.type}" namespace="http://www.w3.org/1999/xhtml"> + <xsl:choose> + <xsl:when test="$qanda.in.toc != 0"> + <xsl:apply-templates mode="toc" select="$nodes.plus"> + <xsl:with-param name="toc-context" select="$toc-context"/> + </xsl:apply-templates> + </xsl:when> + <xsl:otherwise> + <xsl:apply-templates mode="toc" select="$nodes"> + <xsl:with-param name="toc-context" select="$toc-context"/> + </xsl:apply-templates> + </xsl:otherwise> + </xsl:choose> + </xsl:element> + </xsl:variable> + + <xsl:variable name="depth"> + <xsl:choose> + <xsl:when test="local-name(.) = 'section'"> + <xsl:value-of select="count(ancestor::section) + 1"/> + </xsl:when> + <xsl:when test="local-name(.) = 'sect1'">1</xsl:when> + <xsl:when test="local-name(.) = 'sect2'">2</xsl:when> + <xsl:when test="local-name(.) = 'sect3'">3</xsl:when> + <xsl:when test="local-name(.) = 'sect4'">4</xsl:when> + <xsl:when test="local-name(.) = 'sect5'">5</xsl:when> + <xsl:when test="local-name(.) = 'refsect1'">1</xsl:when> + <xsl:when test="local-name(.) = 'refsect2'">2</xsl:when> + <xsl:when test="local-name(.) = 'refsect3'">3</xsl:when> + <xsl:when test="local-name(.) = 'topic'">1</xsl:when> + <xsl:when test="local-name(.) = 'simplesect'"> + <!-- sigh... --> + <xsl:choose> + <xsl:when test="local-name(..) = 'section'"> + <xsl:value-of select="count(ancestor::section)"/> + </xsl:when> + <xsl:when test="local-name(..) = 'sect1'">2</xsl:when> + <xsl:when test="local-name(..) = 'sect2'">3</xsl:when> + <xsl:when test="local-name(..) = 'sect3'">4</xsl:when> + <xsl:when test="local-name(..) = 'sect4'">5</xsl:when> + <xsl:when test="local-name(..) = 'sect5'">6</xsl:when> + <xsl:when test="local-name(..) = 'topic'">2</xsl:when> + <xsl:when test="local-name(..) = 'refsect1'">2</xsl:when> + <xsl:when test="local-name(..) = 'refsect2'">3</xsl:when> + <xsl:when test="local-name(..) = 'refsect3'">4</xsl:when> + <xsl:otherwise>1</xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:otherwise>0</xsl:otherwise> + </xsl:choose> + </xsl:variable> + + <xsl:variable name="depth.from.context" select="count(ancestor::*)-count($toc-context/ancestor::*)"/> + + <xsl:variable name="subtoc.list"> + <xsl:choose> + <xsl:when test="$toc.dd.type = ''"> + <xsl:copy-of select="$subtoc"/> + </xsl:when> + <xsl:otherwise> + <xsl:element name="{$toc.dd.type}" namespace="http://www.w3.org/1999/xhtml"> + <xsl:copy-of select="$subtoc"/> + </xsl:element> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="output.subtoc"><xsl:value-of select=" + ( (self::set or self::book or self::part) or + ($toc.section.depth > $depth and local-name($toc-context)!='appendix' and local-name($toc-context)!='preface') ) and + ( ($qanda.in.toc = 0 and (count($nodes)>1 or (count($nodes)>0 and ($toc.section.depth - 1 > $depth)) )) or + ($qanda.in.toc != 0 and (count($nodes.plus)>1 or (count($nodes)>0 and $toc.section.depth - 1 > $depth) ))) and + $toc.max.depth > $depth.from.context + "/></xsl:variable> + <xsl:element name="{$toc.listitem.type}" namespace="http://www.w3.org/1999/xhtml"> + <xsl:call-template name="toc.line"> + <xsl:with-param name="toc-context" select="$toc-context"/> + </xsl:call-template> + <xsl:if test="$toc.listitem.type = 'li' and $output.subtoc = 'true'"> + <xsl:copy-of select="$subtoc.list"/> + </xsl:if> + </xsl:element> + <xsl:if test="$toc.listitem.type != 'li' and $output.subtoc = 'true'"> + <xsl:copy-of select="$subtoc.list"/> + </xsl:if> +</xsl:template> + +<!-- from common/labels.xsl --> +<!-- +preface.html: +1. What is PostgreSQL? +2. A Brief History of PostgreSQL +3. Conventions +-> +What is PostgreSQL? +A Brief History of PostgreSQL +Conventions +--> +<xsl:template name="label.this.section"> + <xsl:param name="section" select="."/> + + <xsl:variable name="level"> + <xsl:call-template name="section.level"/> + </xsl:variable> + + <xsl:choose> + <!-- bridgeheads are not numbered --> + <xsl:when test="$section/self::bridgehead">0</xsl:when> + <xsl:when test="ancestor::preface">0</xsl:when> + <xsl:when test="$level <= $section.autolabel.max.depth"> + <xsl:value-of select="$section.autolabel"/> + </xsl:when> + <xsl:otherwise>0</xsl:otherwise> + </xsl:choose> +</xsl:template> + + +<!-- from common/gentext.xsl --> +<!-- error-style-guide.html: +What Goes Where +-> +51.3.1. What Goes Where +--> +<xsl:template match="simplesect" + mode="object.title.template"> +<xsl:text>%n. %t</xsl:text> +</xsl:template> + +<!-- based on xhtml/component.xsl: <xsl:template match="topic/title|topic/info/title" mode="titlepage.mode" priority="2"> --> +<!-- sql-commands.html: +SQL Commands +-> +I. SQL Commands +--> +<xsl:template match="reference/title" mode="titlepage.mode" priority="2"> + <xsl:call-template name="component.title"> + <xsl:with-param name="node" select="ancestor::reference[1]"/> + </xsl:call-template> +</xsl:template> + +<xsl:template match="reference" + mode="object.title.template"> +<xsl:text>%n. %t</xsl:text> +</xsl:template> + +<!-- from xhtml/footnote.xsl --> +<!-- +<sup>[1]</sup> -> <span>[1]</span> + +datatype-json.html: +each value in the data. ^[16] +-> +each value in the data. [16] +--> +<xsl:template match="footnote"> + <xsl:variable name="name"> + <xsl:call-template name="object.id"> + <xsl:with-param name="conditional" select="0"/> + </xsl:call-template> + </xsl:variable> + <xsl:variable name="href"> + <xsl:text>#ftn.</xsl:text> + <xsl:value-of select="$name"/> + </xsl:variable> + + <a href="{$href}"> + <xsl:apply-templates select="." mode="class.attribute"/> + <xsl:if test="$generate.id.attributes = 0"> + <xsl:attribute name="id"> + <xsl:value-of select="$name"/> + </xsl:attribute> + </xsl:if> + + <span> <!-- instead of <sup> --> + <xsl:apply-templates select="." mode="class.attribute"/> + <xsl:call-template name="id.attribute"> + <xsl:with-param name="conditional" select="0"/> + </xsl:call-template> + <xsl:text>[</xsl:text> + <xsl:apply-templates select="." mode="footnote.number"/> + <xsl:text>]</xsl:text> + </span> + </a> +</xsl:template> + +<!-- from xhtml/footnote.xsl --> +<!-- +<sup>[1]</sup> -> <span>[1]</span> + +datatype-json.html: ++ ^[1] For this purpose, the term "value" includes array elements, ++ though JSON terminology sometimes considers array elements distinct +-> ++ [1] For this purpose, the term "value" includes array elements, ++ though JSON terminology sometimes considers array elements distinct +--> +<xsl:template match="footnote/para[1]|footnote/simpara[1]" priority="2"> + <!-- this only works if the first thing in a footnote is a para, --> + <!-- which is ok, because it usually is. --> + <xsl:variable name="href"> + <xsl:text>#</xsl:text> + <xsl:call-template name="object.id"> + <xsl:with-param name="object" select="ancestor::footnote"/> + </xsl:call-template> + </xsl:variable> + + <xsl:call-template name="paragraph"> + <xsl:with-param name="class"> + <xsl:if test="@role and $para.propagates.style != 0"> + <xsl:value-of select="@role"/> + </xsl:if> + </xsl:with-param> + <xsl:with-param name="content"> + <a href="{$href}"> + <xsl:apply-templates select="." mode="class.attribute"/> + <span> + <xsl:apply-templates select="." mode="class.attribute"/> + <xsl:text>[</xsl:text> + <xsl:apply-templates select="ancestor::footnote" mode="footnote.number"/> + <xsl:text>] </xsl:text> + </span> + </a> + <p> + <xsl:attribute name="style">margin-left:5%</xsl:attribute> + <xsl:apply-templates/> + </p> + </xsl:with-param> + </xsl:call-template> + +</xsl:template> + +<!-- Custom function for chunk numbering --> +<xsl:template name="footnote.in.chunk.number"> + <xsl:param name="node" select="."/> + <xsl:param name="footnote" select="."/> + + <xsl:variable name="is.chunk"> + <xsl:call-template name="chunk"> + <xsl:with-param name="node" select="$node"/> + </xsl:call-template> + </xsl:variable> + + <xsl:choose> + <xsl:when test="$is.chunk = 1"> + <xsl:value-of select="count($node//footnote[not(@label)][count(./preceding::node()) <= count($node//footnote[not(@label)][.=$footnote]/preceding::node())])" /> + </xsl:when> + <xsl:otherwise> + <xsl:if test="$node/parent::*"> + <xsl:call-template name="footnote.in.chunk.number"> + <xsl:with-param name="node" select="$node/parent::*"/> + <xsl:with-param name="footnote" select="$footnote"/> + </xsl:call-template> + </xsl:if> + </xsl:otherwise> + </xsl:choose> +</xsl:template> + +<!-- from xhtml/footnote.xsl +Independent footnote numbering inside chunks +error-message-reporting.html: + [11] %m does not require any corresponding entry in the parameter list for errmsg. +-> + [1] %m does not require any corresponding entry in the parameter list for errmsg. +--> +<xsl:template match="footnote" mode="footnote.number"> + <xsl:choose> + <xsl:when test="string-length(@label) != 0"> + <xsl:value-of select="@label"/> + </xsl:when> + <xsl:when test="ancestor::table or ancestor::informaltable"> + <xsl:variable name="tfnum"> + <xsl:number level="any" from="table|informaltable" format="1"/> + </xsl:variable> + + <xsl:choose> + <xsl:when test="string-length($table.footnote.number.symbols) >= $tfnum"> + <xsl:value-of select="substring($table.footnote.number.symbols, $tfnum, 1)"/> + </xsl:when> + <xsl:otherwise> + <xsl:number level="any" from="table | informaltable" format="{$table.footnote.number.format}"/> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:otherwise> + <xsl:variable name="fnum"> <!--"count($pfoot) - count($ptfoot) + 1"/> --> + <xsl:choose> + <xsl:when test="$onechunk != 0"> + <xsl:variable name="pfoot" select="preceding::footnote[not(@label)]"/> + <xsl:variable name="ptfoot" select="preceding::table//footnote | preceding::informaltable//footnote"/> + <xsl:value-of select="count($pfoot) - count($ptfoot) + 1"/> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="footnote.in.chunk.number"> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:choose> + <xsl:when test="string-length($footnote.number.symbols) >= $fnum"> + <xsl:value-of select="substring($footnote.number.symbols, $fnum, 1)"/> + </xsl:when> + <xsl:otherwise> + <xsl:number value="$fnum" format="{$footnote.number.format}"/> + </xsl:otherwise> + </xsl:choose> + </xsl:otherwise> + </xsl:choose> +</xsl:template> + +<!-- from xhtml/xref.xsl --> +<!-- +tutorial-sql-intro.html: + written on SQL, including [melt93] and [date97]. +-> + written on SQL, including Understanding the New SQL and A Guide + to the SQL Standard. +--> +<xsl:template match="biblioentry|bibliomixed" mode="xref-to"> + <xsl:param name="referrer"/> + <xsl:param name="xrefstyle"/> + <xsl:param name="verbose" select="1"/> + <!-- handles both biblioentry and bibliomixed --> + + <xsl:choose> + <xsl:when test="string(.) = ''"> + <xsl:variable name="bib" select="document($bibliography.collection,.)"/> + <xsl:variable name="id" select="(@id|@xml:id)[1]"/> + <xsl:variable name="entry" select="$bib/bibliography/ *[@id=$id or @xml:id=$id][1]"/> + <xsl:choose> + <xsl:when test="$entry"> + <xsl:choose> + <xsl:when test="$bibliography.numbered != 0"> + <xsl:number from="bibliography" count="biblioentry|bibliomixed" level="any" format="1"/> + </xsl:when> + <xsl:when test="local-name($entry/*[1]) = 'abbrev'"> + <xsl:apply-templates select="$entry/*[1]" mode="no.anchor.mode"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="(@id|@xml:id)[1]"/> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:otherwise> + <xsl:message> + <xsl:text>No bibliography entry: </xsl:text> + <xsl:value-of select="$id"/> + <xsl:text> found in </xsl:text> + <xsl:value-of select="$bibliography.collection"/> + </xsl:message> + <xsl:value-of select="(@id|@xml:id)[1]"/> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:otherwise> + <xsl:choose> + <xsl:when test="$bibliography.numbered != 0"> + <xsl:number from="bibliography" count="biblioentry|bibliomixed" level="any" format="1"/> + </xsl:when> + <xsl:when test="local-name(*[1]) = 'abbrev'"> + <xsl:apply-templates select="*[1]" mode="no.anchor.mode"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="normalize-space((title|(biblioset[1]/title))[1])"/> + </xsl:otherwise> + </xsl:choose> + </xsl:otherwise> + </xsl:choose> +</xsl:template> + +<!-- from xhtml/xref.xsl --> +<xsl:template match="biblioentry|bibliomixed" mode="xref-to-prefix"> +</xsl:template> + +<!-- from xhtml/xref.xsl --> +<xsl:template match="biblioentry|bibliomixed" mode="xref-to-suffix"> +</xsl:template> + + +</xsl:stylesheet> diff --git a/doc/src/sgml/stylesheet.xsl b/doc/src/sgml/stylesheet.xsl index 7967b36..70cdecf 100644 --- a/doc/src/sgml/stylesheet.xsl +++ b/doc/src/sgml/stylesheet.xsl @@ -7,6 +7,9 @@ <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/xhtml/chunk.xsl"/> <xsl:include href="stylesheet-common.xsl" /> +<xsl:include href="stylesheet-speedup-common.xsl" /> +<xsl:include href="stylesheet-speedup-xhtml.xsl" /> +<xsl:include href="stylesheet-xhtml-dsssl-like.xsl" /> <!-- Parameters --> <xsl:param name="base.dir" select="'html/'"></xsl:param> @@ -19,6 +22,9 @@ <xsl:param name="chunk.quietly" select="1"></xsl:param> <xsl:param name="toc.max.depth">2</xsl:param> +<xsl:param name="refentry.generate.name" select="1"/> +<xsl:param name="refentry.generate.title" select="1"/> +<xsl:param name="xref.with.number.and.title" select="0"></xsl:param> <xsl:param name="website.stylesheet" select="0"/> <xsl:param name="html.stylesheet"> @@ -49,7 +55,7 @@ preface toc,title qandadiv toc qandaset toc reference toc,title -sect1 toc +sect1 toc,title sect2 toc sect3 toc sect4 toc
-- Sent via pgsql-docs mailing list (pgsql-docs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-docs