2016-08-18 18:00:00 +02:00
<?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" />
2016-08-24 18:00:00 +02:00
<!-- Optimization for pgsql - docs: this call adds nothing but fails with docbook - xsl 1.76 -->
<!-- <xsl:call - template name="id.attribute"/> -->
2016-08-18 18:00:00 +02:00
<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" />
2016-08-24 18:00:00 +02:00
<!-- Optimization for pgsql - docs: this call adds nothing but fails with docbook - xsl 1.76 -->
<!-- <xsl:call - template name="id.attribute"/> -->
2016-08-18 18:00:00 +02:00
<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>
2016-12-22 18:00:00 +01:00
<xsl:template name= "href.target" >
<xsl:param name= "context" select= "." />
<xsl:param name= "object" select= "." />
<xsl:param name= "toc-context" select= "." />
<!-- Optimization for pgsql - docs: Remove support for dbhtml processing
instruction here -->
<xsl:variable name= "href.to.uri" >
<xsl:call-template name= "href.target.uri" >
<xsl:with-param name= "object" select= "$object" />
</xsl:call-template>
</xsl:variable>
<xsl:variable name= "href.from.uri" >
<xsl:choose >
<xsl:when test= "not($toc-context = .)" >
<xsl:call-template name= "href.target.uri" >
<xsl:with-param name= "object" select= "$toc-context" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise >
<xsl:call-template name= "href.target.uri" >
<xsl:with-param name= "object" select= "$context" />
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name= "href.to" >
<xsl:value-of select= "$href.to.uri" />
</xsl:variable>
<xsl:variable name= "href.from" >
<xsl:call-template name= "trim.common.uri.paths" >
<xsl:with-param name= "uriA" select= "$href.to.uri" />
<xsl:with-param name= "uriB" select= "$href.from.uri" />
<xsl:with-param name= "return" select= "'B'" />
</xsl:call-template>
</xsl:variable>
<xsl:variable name= "depth" >
<xsl:call-template name= "count.uri.path.depth" >
<xsl:with-param name= "filename" select= "$href.from" />
</xsl:call-template>
</xsl:variable>
<xsl:variable name= "href" >
<xsl:call-template name= "copy-string" >
<xsl:with-param name= "string" select= "'../'" />
<xsl:with-param name= "count" select= "$depth" />
</xsl:call-template>
<xsl:value-of select= "$href.to" />
</xsl:variable>
<xsl:value-of select= "$href" />
</xsl:template>
2016-11-16 21:00:00 +01:00
<xsl:template name= "html.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>
2016-08-18 18:00:00 +02:00
</xsl:stylesheet>