code-srv-test/dita-ot-3.6/plugins/org.lwdita/xsl/dita2markdownImpl.xsl
2021-03-23 22:38:58 +00:00

2362 lines
101 KiB
XML

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:dita-ot="http://dita-ot.sourceforge.net/ns/201007/dita-ot"
xmlns:dita2html="http://dita-ot.sourceforge.net/ns/200801/dita2html"
xmlns:ditamsg="http://dita-ot.sourceforge.net/ns/200704/ditamsg"
exclude-result-prefixes="xs dita-ot dita2html ditamsg">
<!-- =========== OTHER STYLESHEET INCLUDES/IMPORTS =========== -->
<xsl:import href="plugin:org.dita.base:xsl/common/output-message.xsl"/>
<xsl:import href="plugin:org.dita.base:xsl/common/dita-utilities.xsl"/>
<xsl:import href="plugin:org.dita.base:xsl/common/related-links.xsl"/>
<xsl:import href="plugin:org.dita.base:xsl/common/dita-textonly.xsl"/>
<xsl:include href="get-meta.xsl"/>
<xsl:include href="rel-links.xsl"/>
<xsl:include href="tables.xsl"/>
<!-- =========== DEFAULT VALUES FOR EXTERNALLY MODIFIABLE PARAMETERS =========== -->
<!-- Preserve DITA class ancestry in XHTML output; values are 'yes' or 'no' -->
<xsl:param name="PRESERVE-DITA-CLASS" select="'no'"/>
<!-- default "hide draft & cleanup content" processing parameter ('no' = hide them)-->
<xsl:param name="DRAFT" select="'no'"/><!-- "no" and "yes" are valid values; non-'yes' is ignored -->
<!-- default "hide index entries" processing parameter ('no' = hide them)-->
<xsl:param name="INDEXSHOW" select="'no'"/><!-- "no" and "yes" are valid values; non-'yes' is ignored -->
<!-- for now, disable breadcrumbs pending link group descision -->
<xsl:param name="BREADCRUMBS" select="'no'"/> <!-- "no" and "yes" are valid values; non-'yes' is ignored -->
<!-- the year for the copyright -->
<xsl:param name="YEAR" select="format-date(current-date(), '[Y]')"/>
<!-- default "output extension" processing parameter ('.html')-->
<xsl:param name="OUTEXT" select="'.md'"/><!-- "htm" and "html" are valid values -->
<!-- the working directory that contains the document being transformed.
Needed as a directory prefix for the @conref "document()" function calls.
default is '../doc/')-->
<xsl:param name="WORKDIR">
<xsl:apply-templates select="/processing-instruction('workdir-uri')[1]" mode="get-work-dir"/>
</xsl:param>
<!-- the path back to the project. Used for c.gif, delta.gif, css to allow user's to have
these files in 1 location. -->
<xsl:param name="PATH2PROJ">
<xsl:apply-templates select="/processing-instruction('path2project-uri')[1]" mode="get-path2project"/>
</xsl:param>
<!-- the file name (file name and extension only - no path) of the document being transformed.
Needed to help with debugging.
default is 'myfile.xml')-->
<xsl:param name="FILENAME"/>
<xsl:param name="FILEDIR"/>
<xsl:param name="CURRENTFILE" select="concat($FILEDIR, '/', $FILENAME)"/>
<!-- the file name containing filter/flagging/revision information
(file name and extension only - no path). - testfile: revflag.dita -->
<!--xsl:param name="FILTERFILE"/-->
<!-- Switch to enable or disable the generation of default meta message in html header -->
<xsl:param name="genDefMeta" select="'no'"/>
<xsl:param name="BASEDIR"/>
<xsl:param name="OUTPUTDIR"/>
<!-- get destination dir with BASEDIR and OUTPUTDIR-->
<xsl:variable name="desDir">
<xsl:choose>
<xsl:when test="not($BASEDIR)"/> <!-- If no filterfile leave empty -->
<xsl:when test="starts-with($BASEDIR, 'file:')">
<xsl:value-of select="translate(concat($BASEDIR, '/', $OUTPUTDIR, '/'), '\', '/')"/>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="contains($OUTPUTDIR, ':\') or contains($OUTPUTDIR, ':/')">
<xsl:value-of select="'file:/'"/><xsl:value-of select="concat($OUTPUTDIR, '/')"/>
</xsl:when>
<xsl:when test="starts-with($OUTPUTDIR, '/')">
<xsl:value-of select="'file://'"/><xsl:value-of select="concat($OUTPUTDIR, '/')"/>
</xsl:when>
<xsl:when test="starts-with($BASEDIR, '/')">
<xsl:text>file://</xsl:text><xsl:value-of select="concat($BASEDIR, '/', $OUTPUTDIR, '/')"/>
</xsl:when>
<xsl:otherwise>
<xsl:text>file:/</xsl:text><xsl:value-of select="translate(concat($BASEDIR, '/', $OUTPUTDIR, '/'), '\', '/')"/>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- Define the error message prefix identifier -->
<xsl:variable name="msgprefix">DOTX</xsl:variable>
<!-- these elements are never processed in a conventional presentation. can be overridden. -->
<xsl:template match="*[contains(@class, ' topic/no-topic-nesting ')]"/>
<!-- =========== ROOT RULE (just fall through; no side effects for new delivery contexts =========== -->
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<!-- =========== NESTED TOPIC RULES =========== -->
<!-- This first template rule generates the outer-level shell for a delivery context.
In an override stylesheet, the same call to "chapter-setup" must be issued to
maintain the consistency of overall look'n'feel of the output HTML.
Match on the first DITA element -or- the first root 'topic' element. -->
<xsl:template match="/dita | *[contains(@class, ' topic/topic ')]">
<xsl:choose>
<xsl:when test="not(parent::*)">
<xsl:apply-templates select="." mode="root_element"/>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="." mode="child.topic"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- Matches /dita or a root topic -->
<xsl:template match="*" mode="root_element" name="root_element">
<xsl:call-template name="chapter-setup"/>
</xsl:template>
<!-- child topics get a div wrapper and fall through -->
<xsl:template match="*[contains(@class, ' topic/topic ')]" mode="child.topic" name="child.topic">
<div>
<xsl:call-template name="gen-topic"/>
</div>
</xsl:template>
<xsl:template name="gen-topic">
<xsl:param name="nestlevel" as="xs:integer">
<xsl:choose>
<xsl:when test="count(ancestor::*[contains(@class, ' topic/topic ')]) > 9">9</xsl:when>
<xsl:otherwise><xsl:sequence select="count(ancestor::*[contains(@class, ' topic/topic ')])"/></xsl:otherwise>
</xsl:choose>
</xsl:param>
<xsl:choose>
<xsl:when test="parent::dita and not(preceding-sibling::*)">
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-startprop ')]/@outputclass" mode="add-ditaval-style"/>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="commonattributes">
<!--xsl:with-param name="default-output-class" select="concat('nested', $nestlevel)"/-->
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
<xsl:call-template name="gen-toc-id"/>
<xsl:call-template name="setidaname"/>
<xsl:apply-templates/>
</xsl:template>
<!-- NESTED TOPIC TITLES (sensitive to nesting depth, but are still processed for contained markup) -->
<!-- 1st level - topic/title -->
<!-- Condensed topic title into single template without priorities; use $headinglevel to set heading.
If desired, somebody could pass in the value to manually set the heading level -->
<xsl:template match="*[contains(@class, ' topic/topic ')]/*[contains(@class, ' topic/title ')]">
<xsl:param name="headinglevel" as="xs:integer">
<xsl:choose>
<xsl:when test="count(ancestor::*[contains(@class, ' topic/topic ')]) > 6">6</xsl:when>
<xsl:otherwise><xsl:sequence select="count(ancestor::*[contains(@class, ' topic/topic ')])"/></xsl:otherwise>
</xsl:choose>
</xsl:param>
<header level="{$headinglevel}">
<xsl:call-template name="commonattributes">
<xsl:with-param name="default-output-class">
<xsl:if test="$headinglevel eq 1 and name(..) ne 'topic'">
<xsl:value-of select="name(..)"/>
</xsl:if>
</xsl:with-param>
</xsl:call-template>
<xsl:attribute name="id" select="../@id"/>
<xsl:apply-templates/>
</header>
</xsl:template>
<!-- Hide titlealts - they need to get pulled into the proper places -->
<xsl:template match="*[contains(@class, ' topic/titlealts ')]"/>
<!-- =========== BODY/SECTION (not sensitive to nesting depth) =========== -->
<xsl:template match="*[contains(@class, ' topic/body ')]" name="topic.body">
<div>
<xsl:call-template name="commonattributes"/>
<xsl:call-template name="setidaname"/>
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-startprop ')]" mode="out-of-line"/>
<xsl:apply-templates select="preceding-sibling::*[contains(@class, ' topic/abstract ')]" mode="outofline"/>
<xsl:apply-templates select="preceding-sibling::*[contains(@class, ' topic/shortdesc ')]" mode="outofline"/>
<xsl:apply-templates select="following-sibling::*[contains(@class, ' topic/related-links ')]" mode="prereqs"/>
<xsl:apply-templates/>
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-endprop ')]" mode="out-of-line"/>
</div>
</xsl:template>
<xsl:template match="*[contains(@class, ' topic/abstract ')]">
<xsl:if test="not(following-sibling::*[contains(@class, ' topic/body ')])">
<xsl:apply-templates select="." mode="outofline"/>
<xsl:apply-templates select="following-sibling::*[contains(@class, ' topic/related-links ')]" mode="prereqs"/>
</xsl:if>
</xsl:template>
<xsl:template match="*[contains(@class, ' topic/abstract ')]" mode="outofline">
<div>
<xsl:call-template name="commonattributes"/>
<xsl:apply-templates/>
</div>
</xsl:template>
<xsl:template match="*[contains(@class, ' topic/shortdesc ')]">
<xsl:choose>
<xsl:when test="parent::*[contains(@class, ' topic/abstract ')]">
<xsl:apply-templates select="." mode="outofline.abstract"/>
</xsl:when>
<xsl:when test="not(following-sibling::*[contains(@class, ' topic/body ')])">
<xsl:apply-templates select="." mode="outofline"/>
<xsl:apply-templates select="following-sibling::*[contains(@class, ' topic/related-links ')]" mode="prereqs"/>
</xsl:when>
</xsl:choose>
</xsl:template>
<!-- called shortdesc processing when it is in abstract -->
<xsl:template match="*[contains(@class, ' topic/shortdesc ')]" mode="outofline.abstract">
<xsl:choose>
<xsl:when test="preceding-sibling::*[contains(@class, ' topic/p ') or contains(@class, ' topic/dl ') or
contains(@class, ' topic/fig ') or contains(@class, ' topic/lines ') or
contains(@class, ' topic/lq ') or contains(@class, ' topic/note ') or
contains(@class, ' topic/ol ') or contains(@class, ' topic/pre ') or
contains(@class, ' topic/simpletable ') or contains(@class, ' topic/sl ') or
contains(@class, ' topic/table ') or contains(@class, ' topic/ul ')]">
<div>
<xsl:call-template name="commonattributes"/>
<xsl:apply-templates/>
</div>
</xsl:when>
<xsl:when test="following-sibling::*[contains(@class, ' topic/p ') or contains(@class, ' topic/dl ') or
contains(@class, ' topic/fig ') or contains(@class, ' topic/lines ') or
contains(@class, ' topic/lq ') or contains(@class, ' topic/note ') or
contains(@class, ' topic/ol ') or contains(@class, ' topic/pre ') or
contains(@class, ' topic/simpletable ') or contains(@class, ' topic/sl ') or
contains(@class, ' topic/table ') or contains(@class, ' topic/ul ')]">
<div>
<xsl:call-template name="commonattributes"/>
<xsl:apply-templates/>
</div>
</xsl:when>
<xsl:otherwise>
<xsl:if test="preceding-sibling::* | preceding-sibling::text()">
<xsl:text> </xsl:text>
</xsl:if>
<span>
<xsl:call-template name="commonattributes"/>
<xsl:apply-templates/>
</span>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- called shortdesc processing - para at start of topic -->
<xsl:template match="*[contains(@class, ' topic/shortdesc ')]" mode="outofline">
<para>
<xsl:call-template name="commonattributes"/>
<xsl:apply-templates/>
</para>
</xsl:template>
<!-- section processor - div with no generated title -->
<xsl:template match="*[contains(@class, ' topic/section ')]" name="topic.section">
<div>
<xsl:call-template name="commonattributes">
<xsl:with-param name="default-output-class">section</xsl:with-param>
</xsl:call-template>
<xsl:call-template name="gen-toc-id"/>
<xsl:call-template name="setidaname"/>
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-startprop ')]" mode="out-of-line"/>
<xsl:apply-templates select="." mode="dita2html:section-heading"/>
<xsl:apply-templates select="*[not(contains(@class, ' topic/title '))] | text() | comment() | processing-instruction()"/>
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-endprop ')]" mode="out-of-line"/>
</div>
</xsl:template>
<!-- example processor - div with no generated title -->
<xsl:template match="*[contains(@class, ' topic/example ')]" name="topic.example">
<div>
<xsl:call-template name="commonattributes">
<xsl:with-param name="default-output-class">example</xsl:with-param>
</xsl:call-template>
<xsl:call-template name="gen-toc-id"/>
<xsl:call-template name="setidaname"/>
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-startprop ')]" mode="out-of-line"/>
<xsl:apply-templates select="." mode="dita2html:section-heading"/>
<xsl:apply-templates select="*[not(contains(@class, ' topic/title '))] | text() | comment() | processing-instruction()"/>
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-endprop ')]" mode="out-of-line"/>
</div>
</xsl:template>
<!-- ===================================================================== -->
<!-- =========== BASIC BODY ELEMENTS =========== -->
<xsl:template match="*[contains(@class, ' topic/div ')]">
<div>
<xsl:call-template name="commonattributes"/>
<xsl:call-template name="setid"/>
<xsl:apply-templates/>
</div>
</xsl:template>
<!-- paragraphs -->
<xsl:template match="*[contains(@class, ' topic/p ')]" name="topic.p">
<!-- To ensure XHTML validity, need to determine whether the DITA kids are block elements.
If so, use div_class="p" instead of p -->
<xsl:choose>
<xsl:when test="descendant::*[contains(@class, ' topic/pre ')] or
descendant::*[contains(@class, ' topic/ul ')] or
descendant::*[contains(@class, ' topic/sl ')] or
descendant::*[contains(@class, ' topic/ol ')] or
descendant::*[contains(@class, ' topic/lq ')] or
descendant::*[contains(@class, ' topic/dl ')] or
descendant::*[contains(@class, ' topic/note ')] or
descendant::*[contains(@class, ' topic/lines ')] or
descendant::*[contains(@class, ' topic/fig ')] or
descendant::*[contains(@class, ' topic/table ')] or
descendant::*[contains(@class, ' topic/simpletable ')]">
<div>
<xsl:call-template name="commonattributes">
<xsl:with-param name="default-output-class">p</xsl:with-param>
</xsl:call-template>
<xsl:call-template name="setid"/>
<xsl:apply-templates/>
</div>
</xsl:when>
<xsl:otherwise>
<para>
<xsl:call-template name="commonattributes"/>
<xsl:call-template name="setid"/>
<xsl:apply-templates/>
</para>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="*[contains(@class, ' topic/note ')]" name="topic.note">
<xsl:call-template name="spec-title"/>
<xsl:choose>
<xsl:when test="@type = 'note'">
<xsl:apply-templates select="." mode="process.note"/>
</xsl:when>
<xsl:when test="@type = 'tip'">
<xsl:apply-templates select="." mode="process.note.tip"/>
</xsl:when>
<xsl:when test="@type = 'fastpath'">
<xsl:apply-templates select="." mode="process.note.fastpath"/>
</xsl:when>
<xsl:when test="@type = 'important'">
<xsl:apply-templates select="." mode="process.note.important"/>
</xsl:when>
<xsl:when test="@type = 'remember'">
<xsl:apply-templates select="." mode="process.note.remember"/>
</xsl:when>
<xsl:when test="@type = 'restriction'">
<xsl:apply-templates select="." mode="process.note.restriction"/>
</xsl:when>
<xsl:when test="@type = 'attention'">
<xsl:apply-templates select="." mode="process.note.attention"/>
</xsl:when>
<xsl:when test="@type = 'caution'">
<xsl:apply-templates select="." mode="process.note.caution"/>
</xsl:when>
<xsl:when test="@type = 'danger'">
<xsl:apply-templates select="." mode="process.note.danger"/>
</xsl:when>
<xsl:when test="@type = 'warning'">
<xsl:apply-templates select="." mode="process.note.warning"/>
</xsl:when>
<xsl:when test="@type = 'trouble'">
<xsl:apply-templates select="." mode="process.note.trouble"/>
</xsl:when>
<xsl:when test="@type = 'other'">
<xsl:apply-templates select="." mode="process.note.other"/>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="." mode="process.note"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="*" mode="process.note.common-processing">
<xsl:param name="type" select="@type"/>
<xsl:param name="title">
<xsl:call-template name="getVariable">
<xsl:with-param name="id" select="concat(upper-case(substring($type, 1, 1)),
substring($type, 2))"/>
</xsl:call-template>
</xsl:param>
<div>
<xsl:call-template name="commonattributes">
<xsl:with-param name="default-output-class" select="$type"/>
</xsl:call-template>
<xsl:call-template name="setidaname"/>
<!-- Normal flags go before the generated title; revision flags only go on the content. -->
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-startprop ')]/prop" mode="ditaval-outputflag"/>
<strong>
<xsl:value-of select="$title"/>
<xsl:call-template name="getVariable">
<xsl:with-param name="id" select="'ColonSymbol'"/>
</xsl:call-template>
</strong>
<xsl:text> </xsl:text>
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-startprop ')]/revprop" mode="ditaval-outputflag"/>
<xsl:apply-templates/>
<!-- Normal end flags and revision end flags both go out after the content. -->
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-endprop ')]" mode="out-of-line"/>
</div>
</xsl:template>
<xsl:template match="*" mode="process.note">
<xsl:apply-templates select="." mode="process.note.common-processing">
<!-- Force the type to note, in case new unrecognized values are added
before translations exist (such as Warning) -->
<xsl:with-param name="type" select="'note'"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="*" mode="process.note.tip">
<xsl:apply-templates select="." mode="process.note.common-processing"/>
</xsl:template>
<xsl:template match="*" mode="process.note.fastpath">
<xsl:apply-templates select="." mode="process.note.common-processing"/>
</xsl:template>
<xsl:template match="*" mode="process.note.important">
<xsl:apply-templates select="." mode="process.note.common-processing"/>
</xsl:template>
<xsl:template match="*" mode="process.note.remember">
<xsl:apply-templates select="." mode="process.note.common-processing"/>
</xsl:template>
<xsl:template match="*" mode="process.note.restriction">
<xsl:apply-templates select="." mode="process.note.common-processing"/>
</xsl:template>
<xsl:template match="*" mode="process.note.warning">
<xsl:apply-templates select="." mode="process.note.common-processing"/>
</xsl:template>
<xsl:template match="*" mode="process.note.attention">
<xsl:apply-templates select="." mode="process.note.common-processing"/>
</xsl:template>
<xsl:template match="*" mode="process.note.trouble">
<xsl:apply-templates select="." mode="process.note.common-processing"/>
</xsl:template>
<xsl:template match="*" mode="process.note.other">
<xsl:choose>
<xsl:when test="@othertype">
<xsl:apply-templates select="." mode="process.note.common-processing">
<xsl:with-param name="type" select="'note'"/>
<xsl:with-param name="title" select="@othertype"/>
</xsl:apply-templates>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="." mode="process.note.common-processing">
<xsl:with-param name="type" select="'note'"/>
</xsl:apply-templates>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- Caution and Danger both use a div for the title, so they do not
use the common note processing template. -->
<xsl:template match="*" mode="process.note.caution">
<div>
<xsl:call-template name="commonattributes">
<xsl:with-param name="default-output-class">cautiontitle</xsl:with-param>
</xsl:call-template>
<xsl:call-template name="setidaname"/>
<!-- Normal flags go before the generated title; revision flags only go on the content. -->
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-startprop ')]/prop" mode="ditaval-outputflag"/>
<xsl:call-template name="getVariable">
<xsl:with-param name="id" select="'Caution'"/>
</xsl:call-template>
<xsl:call-template name="getVariable">
<xsl:with-param name="id" select="'ColonSymbol'"/>
</xsl:call-template>
</div>
<div>
<xsl:call-template name="commonattributes">
<xsl:with-param name="default-output-class">caution</xsl:with-param>
</xsl:call-template>
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-startprop ')]/revprop" mode="ditaval-outputflag"/>
<xsl:apply-templates/>
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-endprop ')]" mode="out-of-line"/>
</div>
</xsl:template>
<xsl:template match="*" mode="process.note.danger">
<div>
<xsl:call-template name="commonattributes">
<xsl:with-param name="default-output-class">dangertitle</xsl:with-param>
</xsl:call-template>
<xsl:call-template name="setidaname"/>
<!-- Normal flags go before the generated title; revision flags only go on the content. -->
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-startprop ')]/prop" mode="ditaval-outputflag"/>
<xsl:call-template name="getVariable">
<xsl:with-param name="id" select="'Danger'"/>
</xsl:call-template>
</div>
<div>
<xsl:call-template name="commonattributes">
<xsl:with-param name="default-output-class">danger</xsl:with-param>
</xsl:call-template>
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-startprop ')]/revprop" mode="ditaval-outputflag"/>
<xsl:apply-templates/>
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-endprop ')]" mode="out-of-line"/>
</div>
</xsl:template>
<!-- long quote (bibliographic association).
@reftitle contains the citation for the excerpt.
With a link if @href is used. -->
<xsl:template match="*[contains(@class, ' topic/lq ')]" name="topic.lq">
<blockquote>
<xsl:call-template name="commonattributes"/>
<xsl:call-template name="setidaname"/>
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-startprop ')]" mode="out-of-line"/>
<xsl:apply-templates/>
<xsl:choose>
<xsl:when test="@href">
<div>
<link>
<xsl:attribute name="href">
<xsl:call-template name="href"/>
</xsl:attribute>
<cite>
<xsl:choose>
<xsl:when test="@reftitle">
<xsl:value-of select="@reftitle"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="@href"/>
</xsl:otherwise>
</xsl:choose>
</cite>
</link>
</div>
</xsl:when>
<xsl:when test="@reftitle"> <!-- Insert citation text -->
<div>
<cite>
<xsl:value-of select="@reftitle"/>
</cite>
</div>
</xsl:when>
</xsl:choose>
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-endprop ')]" mode="out-of-line"/>
</blockquote>
</xsl:template>
<!-- =========== SINGLE PART LISTS =========== -->
<!-- Unordered List -->
<!-- handle all levels thru browser processing -->
<xsl:template match="*[contains(@class, ' topic/ul ')]" name="topic.ul">
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-startprop ')]" mode="out-of-line"/>
<bulletlist>
<xsl:call-template name="commonattributes"/>
<xsl:apply-templates select="@compact"/>
<xsl:call-template name="setid"/>
<xsl:apply-templates/>
</bulletlist>
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-endprop ')]" mode="out-of-line"/>
</xsl:template>
<!-- Simple List -->
<!-- handle all levels thru browser processing -->
<xsl:template match="*[contains(@class, ' topic/sl ')]" name="topic.sl">
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-startprop ')]" mode="out-of-line"/>
<bulletlist class="simple">
<xsl:call-template name="commonattributes">
<xsl:with-param name="default-output-class" select="'simple'"/>
</xsl:call-template>
<xsl:apply-templates select="@compact"/>
<xsl:call-template name="setid"/>
<xsl:apply-templates/>
</bulletlist>
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-endprop ')]" mode="out-of-line"/>
</xsl:template>
<!-- Ordered List - 1st level - Handle levels 1 to 9 thru OL-TYPE attribution -->
<!-- Updated to use a single template, use count and mod to set the list type -->
<xsl:template match="*[contains(@class, ' topic/ol ')]" name="topic.ol">
<xsl:variable name="olcount" select="count(ancestor-or-self::*[contains(@class, ' topic/ol ')])"/>
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-startprop ')]" mode="out-of-line"/>
<orderedlist>
<xsl:call-template name="commonattributes"/>
<xsl:apply-templates select="@compact"/>
<xsl:choose>
<xsl:when test="$olcount mod 3 = 1"/>
<xsl:when test="$olcount mod 3 = 2"><xsl:attribute name="type">a</xsl:attribute></xsl:when>
<xsl:otherwise><xsl:attribute name="type">i</xsl:attribute></xsl:otherwise>
</xsl:choose>
<xsl:call-template name="setid"/>
<xsl:apply-templates/>
</orderedlist>
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-endprop ')]" mode="out-of-line"/>
</xsl:template>
<!-- list item -->
<xsl:template match="*[contains(@class, ' topic/li ')]" name="topic.li">
<li>
<xsl:choose>
<xsl:when test="parent::*/@compact = 'no'">
<xsl:attribute name="class">liexpand</xsl:attribute>
<!-- handle non-compact list items -->
<xsl:call-template name="commonattributes">
<xsl:with-param name="default-output-class" select="'liexpand'"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="commonattributes"/>
</xsl:otherwise>
</xsl:choose>
<xsl:call-template name="setidaname"/>
<xsl:apply-templates/>
</li>
</xsl:template>
<!-- simple list item -->
<xsl:template match="*[contains(@class, ' topic/sli ')]" name="topic.sli">
<li>
<xsl:choose>
<xsl:when test="parent::*/@compact = 'no'">
<xsl:attribute name="class">sliexpand</xsl:attribute>
<!-- handle non-compact list items -->
<xsl:call-template name="commonattributes">
<xsl:with-param name="default-output-class" select="'sliexpand'"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="commonattributes"/>
</xsl:otherwise>
</xsl:choose>
<xsl:call-template name="commonattributes"/>
<xsl:call-template name="setidaname"/>
<xsl:apply-templates/>
</li>
</xsl:template>
<!-- special case of getting the number of a list item referenced by xref -->
<xsl:template match="*[contains(@class, ' topic/li ')]" mode="xref">
<xsl:number/>
</xsl:template>
<!-- list item section is like li/lq but without presentation (indent) -->
<xsl:template match="*[contains(@class, ' topic/itemgroup ')]" name="topic.itemgroup">
<!-- insert a space before all but the first itemgroups in a LI -->
<xsl:variable name="itemgroupcount">
<xsl:number count="*[contains(@class, ' topic/itemgroup ')]"/>
</xsl:variable>
<xsl:if test="$itemgroupcount > 1">
<xsl:text> </xsl:text>
</xsl:if>
<xsl:choose>
<xsl:when test="*[contains(@class, ' ditaot-d/ditaval-startprop ')]/revprop |
*[contains(@class, ' ditaot-d/ditaval-startprop ')]/@outputclass">
<span>
<xsl:call-template name="commonattributes"/>
<xsl:apply-templates/>
</span>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- =========== DEFINITION LIST =========== -->
<!-- DL -->
<xsl:template match="*[contains(@class, ' topic/dl ')]" name="topic.dl">
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-startprop ')]" mode="out-of-line"/>
<definitionlist>
<!-- handle DL compacting - default=yes -->
<xsl:if test="@compact = 'no'">
<xsl:attribute name="class">dlexpand</xsl:attribute>
</xsl:if>
<xsl:call-template name="commonattributes"/>
<xsl:apply-templates select="@compact"/>
<xsl:call-template name="setid"/>
<xsl:apply-templates/>
</definitionlist>
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-endprop ')]" mode="out-of-line"/>
</xsl:template>
<!-- DL entry -->
<xsl:template match="*[contains(@class, ' topic/dlentry ')]" name="topic.dlentry">
<dlentry>
<xsl:apply-templates/>
</dlentry>
</xsl:template>
<!-- SF Patch 2185423: condensed code so that dt processing is not repeated for keyref or when $dtcount!=1
Code could be reduced further by compressing the flagging templates. -->
<xsl:template match="*[contains(@class, ' topic/dt ')]" mode="output-dt">
<xsl:variable name="is-first-dt" select="empty(preceding-sibling::*[contains(@class, ' topic/dt ')])"/>
<dt>
<!-- Get xml:lang and ditaval styling from DLENTRY, then override with local -->
<xsl:apply-templates select="../*[contains(@class, ' ditaot-d/ditaval-startprop ')]/@outputclass" mode="add-ditaval-style"/>
<xsl:for-each select="..">
<xsl:call-template name="commonattributes"/>
</xsl:for-each>
<xsl:call-template name="commonattributes">
</xsl:call-template>
<!-- handle ID on a DLENTRY -->
<xsl:choose>
<xsl:when test="$is-first-dt and exists(../@id) and exists(@id)">
<xsl:call-template name="setidaname"/>
<link id="{../@id}"/>
</xsl:when>
<xsl:when test="$is-first-dt and exists(../@id) and empty(@id)">
<xsl:for-each select="..">
<xsl:call-template name="setidaname"/>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="setidaname"/>
</xsl:otherwise>
</xsl:choose>
<!-- Use flags from parent dlentry, if present -->
<xsl:apply-templates select="../*[contains(@class, ' ditaot-d/ditaval-startprop ')]" mode="out-of-line"/>
<xsl:apply-templates/>
<xsl:apply-templates select="../*[contains(@class, ' ditaot-d/ditaval-endprop ')]" mode="out-of-line"/>
</dt>
</xsl:template>
<!-- DL term -->
<xsl:template match="*[contains(@class, ' topic/dt ')]" name="topic.dt">
<xsl:choose>
<xsl:when test="@keyref and @href">
<link>
<xsl:apply-templates select="." mode="add-linking-attributes"/>
<xsl:apply-templates select="." mode="output-dt"/>
</link>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="." mode="output-dt"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- DL description -->
<xsl:template match="*[contains(@class, ' topic/dd ')]" name="topic.dd">
<xsl:variable name="is-first-dd" select="empty(preceding-sibling::*[contains(@class, ' topic/dd ')])"/>
<dd>
<xsl:for-each select="..">
<xsl:call-template name="commonattributes"/>
</xsl:for-each>
<xsl:call-template name="commonattributes">
</xsl:call-template>
<xsl:call-template name="setidaname"/>
<xsl:apply-templates select="../*[contains(@class, ' ditaot-d/ditaval-startprop ')]" mode="out-of-line"/>
<xsl:apply-templates/>
<xsl:apply-templates select="../*[contains(@class, ' ditaot-d/ditaval-endprop ')]" mode="out-of-line"/>
</dd>
</xsl:template>
<!-- DL heading -->
<xsl:template match="*[contains(@class, ' topic/dlhead ')]" name="topic.dlhead">
<xsl:apply-templates/>
</xsl:template>
<!-- DL heading, term -->
<xsl:template match="*[contains(@class, ' topic/dthd ')]" name="topic.dthd">
<dt>
<!-- Get ditaval style and xml:lang from DLHEAD, then override with local -->
<xsl:apply-templates select="../*[contains(@class, ' ditaot-d/ditaval-startprop ')]/@outputclass" mode="add-ditaval-style"/>
<xsl:call-template name="commonattributes"/>
<xsl:call-template name="setidaname"/>
<xsl:apply-templates select="../*[contains(@class, ' ditaot-d/ditaval-startprop ')]" mode="out-of-line"/>
<strong>
<xsl:apply-templates/>
</strong>
<xsl:apply-templates select="../*[contains(@class, ' ditaot-d/ditaval-endprop ')]" mode="out-of-line"/>
</dt>
</xsl:template>
<!-- DL heading, description -->
<xsl:template match="*[contains(@class, ' topic/ddhd ')]" name="topic.ddhd">
<dd>
<!-- Get ditaval style and xml:lang from DLHEAD, then override with local -->
<xsl:apply-templates select="../*[contains(@class, ' ditaot-d/ditaval-startprop ')]/@outputclass" mode="add-ditaval-style"/>
<xsl:call-template name="commonattributes"/>
<xsl:call-template name="setidaname"/>
<xsl:apply-templates select="../*[contains(@class, ' ditaot-d/ditaval-startprop ')]" mode="out-of-line"/>
<strong>
<xsl:apply-templates/>
</strong>
<xsl:apply-templates select="../*[contains(@class, ' ditaot-d/ditaval-endprop ')]" mode="out-of-line"/>
</dd>
</xsl:template>
<!-- =========== PHRASES =========== -->
<!-- phrase presentational style - have to use a low priority otherwise topic/ph always wins -->
<!-- should not need priority, default is low enough -->
<xsl:template match="*[contains(@class, ' topic/ph ')]" name="topic.ph">
<xsl:choose>
<xsl:when test="@keyref and @href">
<xsl:apply-templates select="." mode="turning-to-link">
<xsl:with-param name="type" select="'ph'"/>
</xsl:apply-templates>
</xsl:when>
<xsl:otherwise>
<span>
<xsl:call-template name="commonattributes"/>
<xsl:call-template name="setidaname"/>
<xsl:apply-templates/>
</span>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- keyword presentational style - have to use priority else topic/keyword always wins -->
<!-- should not need priority, default is low enough -->
<xsl:template match="*[contains(@class, ' topic/keyword ')]" name="topic.keyword">
<xsl:choose>
<xsl:when test="@keyref and @href">
<xsl:apply-templates select="." mode="turning-to-link">
<xsl:with-param name="type" select="'keyword'"/>
</xsl:apply-templates>
</xsl:when>
<xsl:otherwise>
<span class="keyword">
<xsl:call-template name="commonattributes"/>
<xsl:call-template name="setidaname"/>
<xsl:apply-templates/>
</span>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- trademarks -->
<!-- prepare a key for each trademark tag -->
<xsl:key name="tm" match="*[contains(@class, ' topic/tm ')]" use="."/>
<!-- process the TM tag -->
<!-- removed priority 1 : should not be needed -->
<xsl:template match="*[contains(@class, ' topic/tm ')]" name="topic.tm">
<xsl:param name="root" select="root()" as="document-node()" tunnel="yes"/>
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-startprop ')]" mode="out-of-line"/>
<xsl:apply-templates/> <!-- output the TM content -->
<!-- Test for TM area's language -->
<xsl:variable name="tmtest">
<xsl:apply-templates select="." mode="mark-tm-in-this-area"/>
</xsl:variable>
<!-- If this language should get trademark markers, continue... -->
<xsl:if test="$tmtest = 'tm'">
<xsl:variable name="tmvalue" select="@trademark"/>
<!-- Determine if this is in a title, and should be marked -->
<!-- TODO: should return boolean -->
<xsl:variable name="usetitle">
<xsl:if test="ancestor::*[contains(@class, ' topic/title ')]/parent::*[contains(@class, ' topic/topic ')]">
<xsl:choose>
<!-- Not the first one in a title -->
<xsl:when test="generate-id(.) != generate-id($root/key('tm', .)[1])">skip</xsl:when>
<!-- First one in the topic, BUT it appears in a shortdesc or body -->
<xsl:when test="//*[contains(@class, ' topic/shortdesc ') or contains(@class, ' topic/body ')]//*[contains(@class, ' topic/tm ')][@trademark = $tmvalue]">skip</xsl:when>
<xsl:otherwise>use</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:variable>
<!-- Determine if this is in a body, and should be marked -->
<!-- TODO: should return boolean -->
<xsl:variable name="usebody">
<xsl:choose>
<!-- If in a title or prolog, skip -->
<xsl:when test="ancestor::*[contains(@class, ' topic/title ') or contains(@class, ' topic/prolog ')]/parent::*[contains(@class, ' topic/topic ')]">skip</xsl:when>
<!-- If first in the document, use it -->
<xsl:when test="generate-id(.) = generate-id($root/key('tm', .)[1])">use</xsl:when>
<!-- If there is another before this that is in the body or shortdesc, skip -->
<xsl:when test="preceding::*[contains(@class, ' topic/tm ')][@trademark = $tmvalue][ancestor::*[contains(@class, ' topic/body ') or contains(@class, ' topic/shortdesc ')]]">skip</xsl:when>
<!-- Otherwise, any before this must be in a title or ignored section -->
<xsl:otherwise>use</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- If it should be used in a title or used in the body, output your favorite TM marker based on the attributes -->
<xsl:if test="$usetitle = 'use' or $usebody = 'use'">
<xsl:choose> <!-- ignore @tmtype=service or anything else -->
<xsl:when test="@tmtype = 'tm'">&#x2122;</xsl:when>
<xsl:when test="@tmtype = 'reg'">&#174;</xsl:when>
<xsl:when test="@tmtype = 'service'">&#8480;</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:if>
</xsl:if>
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-endprop ')]" mode="out-of-line"/>
</xsl:template>
<!-- TODO: this should return boolean, not "tm" or something else -->
<xsl:template match="*" mode="mark-tm-in-this-area" as="xs:string">
<xsl:text>tm</xsl:text>
</xsl:template>
<!-- phrase "semantic" classes -->
<!-- citations -->
<xsl:template match="*[contains(@class, ' topic/cite ')]" name="topic.cite">
<xsl:choose>
<xsl:when test="@keyref and @href">
<xsl:apply-templates select="." mode="turning-to-link">
<xsl:with-param name="type" select="'cite'"/>
</xsl:apply-templates>
</xsl:when>
<xsl:otherwise>
<cite>
<xsl:call-template name="commonattributes"/>
<xsl:call-template name="setidaname"/>
<xsl:apply-templates/>
</cite>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- quotes - only do 1 level, no flip-flopping -->
<xsl:template match="*[contains(@class, ' topic/q ')]" name="topic.q">
<span>
<xsl:call-template name="commonattributes">
<xsl:with-param name="default-output-class">q</xsl:with-param>
</xsl:call-template>
<xsl:call-template name="getVariable">
<xsl:with-param name="id" select="'OpenQuote'"/>
</xsl:call-template>
<xsl:apply-templates/>
<xsl:call-template name="getVariable">
<xsl:with-param name="id" select="'CloseQuote'"/>
</xsl:call-template>
</span>
</xsl:template>
<xsl:template match="*[contains(@class, ' topic/term ')]" mode="output-term">
<!-- Deprecated since 2.1 -->
<xsl:param name="displaytext"/>
<span>
<xsl:call-template name="commonattributes">
<xsl:with-param name="default-output-class">term</xsl:with-param>
</xsl:call-template>
<xsl:call-template name="setidaname"/>
<xsl:choose>
<xsl:when test="normalize-space($displaytext)">
<xsl:value-of select="$displaytext"/>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates/>
</xsl:otherwise>
</xsl:choose>
</span>
</xsl:template>
<!-- Templates for internal usage in terms/abbreviation resolving -->
<xsl:template name="getMatchingTarget" as="element()?">
<xsl:param name="m_glossid" select="''" as="xs:string"/>
<xsl:param name="m_entry-file-contents" as="document-node()?"/>
<xsl:param name="m_reflang" select="'en-US'" as="xs:string"/>
<xsl:variable name="glossentries" select="$m_entry-file-contents//*[contains(@class, ' glossentry/glossentry ')]" as="element()*"/>
<xsl:choose>
<xsl:when test="$m_glossid = '' and $glossentries[lang($m_reflang)]">
<xsl:sequence select="$glossentries[lang($m_reflang)]"/>
</xsl:when>
<xsl:when test="not($m_glossid = '') and $glossentries[@id = $m_glossid][lang($m_reflang)]">
<xsl:sequence select="$glossentries[@id = $m_glossid][lang($m_reflang)]"/>
</xsl:when>
<xsl:when test="$m_glossid = '' and $glossentries[lang($DEFAULTLANG)]">
<xsl:sequence select="$glossentries[lang($DEFAULTLANG)]"/>
</xsl:when>
<xsl:when test="not($m_glossid = '') and $glossentries[@id = $m_glossid][lang($DEFAULTLANG)]">
<xsl:sequence select="$glossentries[@id = $m_glossid][lang($DEFAULTLANG)]"/>
</xsl:when>
<xsl:when test="$m_glossid = '' and $glossentries[not(@xml:lang) or normalize-space(@xml:lang) = '']">
<xsl:sequence select="$glossentries[not(@xml:lang) or normalize-space(@xml:lang) = ''][1]"/>
</xsl:when>
<xsl:when test="not($m_glossid = '') and $glossentries[@id = $m_glossid][not(@xml:lang) or normalize-space(@xml:lang) = '']">
<xsl:sequence select="$glossentries[@id = $m_glossid][not(@xml:lang) or normalize-space(@xml:lang) = ''][1]"/>
</xsl:when>
<!--xsl:otherwise>
<xsl:value-of select="'#none#'"/>
</xsl:otherwise-->
</xsl:choose>
</xsl:template>
<xsl:template match="*" mode="getMatchingSurfaceForm">
<xsl:param name="m_matched-target" as="element()?"/>
<xsl:param name="m_keys"/>
<xsl:choose>
<xsl:when test="exists($m_matched-target)">
<xsl:variable name="glossentry" select="$m_matched-target"/>
<xsl:choose>
<xsl:when test="$glossentry//*[contains(@class, ' glossentry/glossSurfaceForm ')][normalize-space(.) != '']">
<xsl:apply-templates select="$glossentry//*[contains(@class, ' glossentry/glossSurfaceForm ')][normalize-space(.) != '']" mode="dita-ot:text-only"/>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="$glossentry//*[contains(@class, ' glossentry/glossterm ')]" mode="dita-ot:text-only"/>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="." mode="ditamsg:no-glossentry-for-key">
<xsl:with-param name="matching-keys" select="$m_keys"/>
</xsl:apply-templates>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="*" mode="getMatchingGlossdef">
<xsl:param name="m_matched-target" as="element()?"/>
<xsl:param name="m_keys"/>
<xsl:choose>
<xsl:when test="exists($m_matched-target)">
<xsl:variable name="glossentry" select="$m_matched-target" as="element()?"/>
<xsl:choose>
<xsl:when test="$glossentry/*[contains(@class, ' glossentry/glossdef ')]">
<xsl:apply-templates select="$glossentry/*[contains(@class, ' glossentry/glossdef ')]" mode="dita-ot:text-only"/>
</xsl:when>
<xsl:when test="$glossentry//*[contains(@class, ' glossentry/glossSurfaceForm ')][normalize-space(.) != '']">
<!-- Second choice: surface form, as it may contain *slightly* more information than the original term -->
<xsl:apply-templates select="$glossentry//*[contains(@class, ' glossentry/glossSurfaceForm ')][normalize-space(.) != '']" mode="dita-ot:text-only"/>
</xsl:when>
<xsl:otherwise>
<!-- Fall back to term if there is no definition and no surface form -->
<xsl:apply-templates select="$glossentry//*[contains(@class, ' glossentry/glossterm ')]" mode="dita-ot:text-only"/>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:when test="normalize-space(.) = '' and
(boolean(ancestor::*[contains(@class, ' topic/copyright ')]) or generate-id(.) = generate-id(key('keyref', @keyref)[1]))">
<!-- Already generating a message when looking for the term, do not generate a "missing glossentry" message here too -->
</xsl:when>
<xsl:when test="boolean(ancestor::*[contains(@class, ' topic/copyright ')]) or generate-id(.) = generate-id(key('keyref', @keyref)[1])">
<!-- Didn't look up term because it was specified, but this is the first occurrence
and the glossentry was not found, so generate "missing glossentry" message -->
<xsl:apply-templates select="." mode="ditamsg:no-glossentry-for-key">
<xsl:with-param name="matching-keys" select="$m_keys"/>
</xsl:apply-templates>
</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template match="*" mode="getMatchingAcronym">
<xsl:param name="m_matched-target" as="element()?"/>
<xsl:param name="m_keys"/>
<xsl:choose>
<xsl:when test="exists($m_matched-target)">
<xsl:variable name="glossentry" select="$m_matched-target"/>
<xsl:choose>
<xsl:when test="$glossentry//*[contains(@class, ' glossentry/glossStatus ')][@value = 'preferred'][1]/preceding-sibling::*[contains(@class, ' glossentry/glossAcronym ') or contains(@class, ' glossentry/glossAbbreviation ')][normalize-space(.) != '']">
<xsl:apply-templates select="$glossentry//*[contains(@class, ' glossentry/glossStatus ')][@value = 'preferred'][1]/preceding-sibling::*[contains(@class, ' glossentry/glossAcronym ') or contains(@class, ' glossentry/glossAbbreviation ')][normalize-space(.) != '']" mode="dita-ot:text-only"/>
</xsl:when>
<xsl:when test="$glossentry//*[contains(@class, ' glossentry/glossStatus ')][@value != 'prohibited' and @value != 'obsolete'][1]/preceding-sibling::*[contains(@class, ' glossentry/glossAcronym ') or contains(@class, ' glossentry/glossAbbreviation ')][normalize-space(.) != '']">
<xsl:apply-templates select="$glossentry//*[contains(@class, ' glossentry/glossStatus ')][@value != 'prohibited' and @value != 'obsolete'][1]/preceding-sibling::*[contains(@class, ' glossentry/glossAcronym ') or contains(@class, ' glossentry/glossAbbreviation ')][normalize-space(.) != '']" mode="dita-ot:text-only"/>
</xsl:when>
<xsl:when test="$glossentry//*[contains(@class, ' glossentry/glossAlt ')][1]/*[contains(@class, ' glossentry/glossAcronym ') or contains(@class, ' glossentry/glossAbbreviation ')][not(following-sibling::glossStatus)][normalize-space(.) != '']">
<xsl:apply-templates select="$glossentry//*[contains(@class, ' glossentry/glossAlt ')][1]/*[contains(@class, ' glossentry/glossAcronym ') or contains(@class, ' glossentry/glossAbbreviation ')][count(following-sibling::glossStatus) = 0][normalize-space(.) != '']" mode="dita-ot:text-only"/>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="$glossentry/*[contains(@class, ' glossentry/glossterm ')]" mode="dita-ot:text-only"/>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<!-- No matching entries found with reference language or default language. -->
<xsl:apply-templates select="." mode="ditamsg:no-glossentry-for-key">
<xsl:with-param name="matching-keys" select="$m_keys"/>
</xsl:apply-templates>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- Note: processing for the term specialization abbreviated-form is located in abbrev-d.xsl. -->
<xsl:key name="keyref" match="*[contains(@class, ' topic/term ')]" use="@keyref"/>
<!-- terms and abbreviated-forms -->
<xsl:template match="*[contains(@class, ' topic/term ')]" name="topic.term">
<xsl:variable name="keys" select="@keyref" as="attribute()?"/>
<xsl:choose>
<xsl:when test="@keyref and @href">
<xsl:variable name="updatedTarget" as="xs:string">
<xsl:apply-templates select="." mode="find-keyref-target"/>
</xsl:variable>
<xsl:variable name="entry-file-contents" as="document-node()?">
<xsl:if test="empty(@scope) or @scope = 'local'">
<xsl:variable name="entry-file-uri" select="concat($WORKDIR, $PATH2PROJ, @href)"/>
<xsl:sequence select="document($entry-file-uri, /)"/>
</xsl:if>
</xsl:variable>
<!-- Glossary id defined in <glossentry> -->
<xsl:variable name="glossid" select="substring-after($updatedTarget, '#')" as="xs:string"/>
<!--
Language preference.
NOTE: glossid overrides language preference.
-->
<xsl:variable name="reflang" as="xs:string?">
<xsl:call-template name="getLowerCaseLang"/>
</xsl:variable>
<xsl:variable name="matched-target" as="element()?">
<xsl:call-template name="getMatchingTarget">
<xsl:with-param name="m_entry-file-contents" select="$entry-file-contents"/>
<xsl:with-param name="m_glossid" select="$glossid"/>
<xsl:with-param name="m_reflang" select="$reflang"/>
</xsl:call-template>
</xsl:variable>
<!-- End: Language preference. -->
<!-- Text should be displayed -->
<xsl:variable name="displaytext">
<xsl:choose>
<xsl:when test="normalize-space(.) != '' and empty(processing-instruction('ditaot')[. = 'gentext'])">
<xsl:apply-templates mode="dita-ot:text-only"/>
</xsl:when>
<xsl:when test="exists(ancestor::*[contains(@class, ' topic/copyright ')]) or generate-id(.) = generate-id(key('keyref', @keyref)[1])">
<xsl:apply-templates select="." mode="getMatchingSurfaceForm">
<xsl:with-param name="m_matched-target" select="$matched-target"/>
<xsl:with-param name="m_keys" select="$keys"/>
</xsl:apply-templates>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="." mode="getMatchingAcronym">
<xsl:with-param name="m_matched-target" select="$matched-target"/>
<xsl:with-param name="m_keys" select="$keys"/>
</xsl:apply-templates>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- End of displaytext -->
<!-- hovertip text -->
<xsl:variable name="hovertext">
<xsl:apply-templates select="." mode="getMatchingGlossdef">
<xsl:with-param name="m_matched-target" select="$matched-target"/>
<xsl:with-param name="m_keys" select="$keys"/>
</xsl:apply-templates>
</xsl:variable>
<!-- End of hovertip text -->
<link>
<xsl:apply-templates select="." mode="add-linking-attributes"/>
<xsl:apply-templates select="." mode="add-desc-as-hoverhelp">
<xsl:with-param name="hovertext" select="$hovertext">
</xsl:with-param>
</xsl:apply-templates>
<xsl:apply-templates select="." mode="output-term">
<xsl:with-param name="displaytext" select="normalize-space($displaytext)"/>
</xsl:apply-templates>
</link>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="." mode="output-term">
<xsl:with-param name="displaytext">
<xsl:apply-templates select="." mode="dita-ot:text-only"/>
</xsl:with-param>
</xsl:apply-templates>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- =========== BOOLEAN-STATE DATA TYPES =========== -->
<!-- Use color to indicate these types for now -->
<!-- output the tag & it's state -->
<xsl:template match="*[contains(@class, ' topic/boolean ')]" name="topic.boolean">
<span>
<xsl:call-template name="commonattributes">
<xsl:with-param name="default-output-class">boolean</xsl:with-param>
</xsl:call-template>
<xsl:call-template name="setidaname"/>
<xsl:value-of select="name()"/>
<xsl:text>: </xsl:text>
<xsl:value-of select="@state"/>
</span>
</xsl:template>
<!-- output the tag, it's name & value -->
<xsl:template match="*[contains(@class, ' topic/state ')]" name="topic.state">
<span>
<xsl:call-template name="commonattributes">
<xsl:with-param name="default-output-class">state</xsl:with-param>
</xsl:call-template>
<xsl:call-template name="setidaname"/>
<xsl:value-of select="name()"/>
<xsl:text>: </xsl:text>
<xsl:value-of select="@name"/>
<xsl:text>=</xsl:text>
<xsl:value-of select="@value"/>
</span>
</xsl:template>
<!-- =========== RECORD END RESPECTING DATA =========== -->
<!-- PRE -->
<xsl:template match="*[contains(@class, ' topic/pre ')]" name="topic.pre">
<xsl:if test="contains(@frame, 'top')">
<horizontalrule/>
</xsl:if>
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-startprop ')]" mode="out-of-line"/>
<xsl:call-template name="spec-title-nospace"/>
<codeblock>
<xsl:attribute name="xml:space">preserve</xsl:attribute>
<xsl:call-template name="commonattributes"/>
<xsl:call-template name="setscale"/>
<xsl:call-template name="setidaname"/>
<xsl:apply-templates/>
</codeblock>
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-endprop ')]" mode="out-of-line"/>
<xsl:if test="contains(@frame, 'bot')">
<horizontalrule/>
</xsl:if>
</xsl:template>
<!-- lines - body font -->
<xsl:template match="*[contains(@class, ' topic/lines ')]" name="topic.lines">
<xsl:if test="contains(@frame, 'top')">
<horizontalrule/>
</xsl:if>
<xsl:call-template name="spec-title-nospace"/>
<para>
<xsl:call-template name="commonattributes"/>
<xsl:call-template name="setscale"/>
<xsl:call-template name="setidaname"/>
<xsl:apply-templates/>
</para>
<xsl:if test="contains(@frame, 'bot')">
<horizontalrule/>
</xsl:if>
</xsl:template>
<xsl:template match="*[contains(@class, ' topic/lines ')]//text()">
<xsl:variable name="linetext" select="."/>
<xsl:variable name="linetext2">
<xsl:call-template name="sp-replace"><xsl:with-param name="sptext" select="$linetext"/></xsl:call-template>
</xsl:variable>
<xsl:call-template name="br-replace">
<xsl:with-param name="brtext" select="$linetext2"/>
</xsl:call-template>
</xsl:template>
<!-- =========== FIGURE =========== -->
<xsl:template match="*[contains(@class, ' topic/fig ')]" name="topic.fig">
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-startprop ')]" mode="out-of-line"/>
<para>
<!--xsl:call-template name="commonattributes"/>
<xsl:call-template name="setscale"/>
<xsl:call-template name="setidaname"/>
<xsl:call-template name="place-fig-lbl"/-->
<xsl:apply-templates select="node() except *[contains(@class, ' topic/title ') or contains(@class, ' topic/desc ')]"/>
</para>
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-endprop ')]" mode="out-of-line"/>
</xsl:template>
<!-- should not need priority, default is low enough; was set to 1 -->
<xsl:template match="*[contains(@class, ' topic/figgroup ')]" name="topic.figgroup">
<!-- Figgroup can contain blocks, maybe this should be a div? -->
<span>
<xsl:call-template name="commonattributes"/>
<xsl:call-template name="setidaname"/>
<!-- Allow title to fallthrough -->
<xsl:apply-templates/>
</span>
</xsl:template>
<!-- =========== IMAGE/OBJECT =========== -->
<xsl:template match="*[contains(@class, ' topic/image ')]" name="topic.image">
<xsl:choose>
<xsl:when test="@placement = 'break'"><!--Align only works for break-->
<para>
<xsl:call-template name="topic-image"/>
</para>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="topic-image"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="topic-image">
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-startprop ')]" mode="out-of-line"/>
<image>
<xsl:call-template name="commonattributes"/>
<xsl:copy-of select="@keyref"/>
<xsl:call-template name="setid"/>
<xsl:choose>
<xsl:when test="*[contains(@class, ' topic/longdescref ')]">
<xsl:apply-templates select="*[contains(@class, ' topic/longdescref ')]"/>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="@longdescref"/>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates select="@href|@height|@width"/>
<xsl:apply-templates select="@scale"/>
<xsl:choose>
<xsl:when test="*[contains(@class, ' topic/alt ')]">
<xsl:variable name="alt-content"><xsl:apply-templates select="*[contains(@class, ' topic/alt ')]" mode="text-only"/></xsl:variable>
<xsl:attribute name="alt" select="normalize-space($alt-content)"/>
</xsl:when>
<xsl:when test="@alt">
<xsl:attribute name="alt" select="@alt"/>
</xsl:when>
</xsl:choose>
<xsl:for-each select="parent::*[contains(@class, ' topic/fig ')]/*[contains(@class, ' topic/title ')]">
<xsl:attribute name="title">
<xsl:apply-templates select="." mode="text-only"/>
</xsl:attribute>
</xsl:for-each>
</image>
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-endprop ')]" mode="out-of-line"/>
</xsl:template>
<xsl:template match="*[contains(@class, ' topic/alt ')]">
<xsl:apply-templates select="." mode="text-only"/>
</xsl:template>
<xsl:template match="*[contains(@class, ' topic/image ')]/@href">
<xsl:attribute name="href" select="."/>
</xsl:template>
<xsl:template match="*[contains(@class, ' topic/image ')]/@scale">
<xsl:variable name="width" select="../@dita-ot:image-width"/>
<xsl:variable name="height" select="../@dita-ot:image-height"/>
<xsl:if test="not(../@width) and not(../@height)">
<xsl:attribute name="height" select="floor(number($height) * number(.) div 100)"/>
<xsl:attribute name="width" select="floor(number($width) * number(.) div 100)"/>
</xsl:if>
</xsl:template>
<xsl:template match="*[contains(@class, ' topic/image ')]/@height">
<xsl:variable name="height-in-pixel">
<xsl:call-template name="length-to-pixels">
<xsl:with-param name="dimen" select="."/>
</xsl:call-template>
</xsl:variable>
<xsl:if test="not($height-in-pixel = '100%')">
<xsl:attribute name="height">
<xsl:value-of select="number($height-in-pixel)"/>
</xsl:attribute>
</xsl:if>
</xsl:template>
<xsl:template match="*[contains(@class, ' topic/image ')]/@width">
<xsl:variable name="width-in-pixel">
<xsl:call-template name="length-to-pixels">
<xsl:with-param name="dimen" select="."/>
</xsl:call-template>
</xsl:variable>
<xsl:if test="not($width-in-pixel = '100%')">
<xsl:attribute name="width">
<xsl:value-of select="number($width-in-pixel)"/>
</xsl:attribute>
</xsl:if>
</xsl:template>
<xsl:template match="*[contains(@class, ' topic/image ')]/@longdescref">
<xsl:attribute name="longdesc">
<xsl:choose>
<!-- Guess whether link target is a DITA topic or something else -->
<xsl:when test="contains(., '.dita') or contains(., '.xml')">
<xsl:call-template name="replace-extension">
<xsl:with-param name="filename" select="."/>
<xsl:with-param name="extension" select="$OUTEXT"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
</xsl:template>
<xsl:template match="*[contains(@class, ' topic/image ')]/*[contains(@class, ' topic/longdescref ')]">
<xsl:if test="@href and not (@href = '')">
<xsl:attribute name="longdesc">
<xsl:choose>
<xsl:when test="not(@format) or @format = 'dita'">
<xsl:call-template name="replace-extension">
<xsl:with-param name="filename" select="@href"/>
<xsl:with-param name="extension" select="$OUTEXT"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="@href"/>
</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
</xsl:if>
</xsl:template>
<!-- object, desc, & param -->
<xsl:template match="*[contains(@class, ' topic/object ')]" name="topic.object">
<object>
<xsl:copy-of select="@id | @declare | @codebase | @type | @archive | @height | @usemap | @tabindex | @classid | @data | @codetype | @standby | @width | @name"/>
<xsl:if test="@longdescref or *[contains(@class, ' topic/longdescref ')]">
<xsl:apply-templates select="." mode="ditamsg:longdescref-on-object"/>
</xsl:if>
<xsl:apply-templates/>
<!-- Test for Flash movie; include EMBED statement for non-IE browsers -->
<xsl:if test="contains(@codebase, 'swflash.cab')">
<embed>
<xsl:if test="@id"><xsl:attribute name="name" select="@id"/></xsl:if>
<xsl:copy-of select="@height | @width"/>
<xsl:attribute name="type"><xsl:text>application/x-shockwave-flash</xsl:text></xsl:attribute>
<xsl:attribute name="pluginspage"><xsl:text>http://www.macromedia.com/go/getflashplayer</xsl:text></xsl:attribute>
<xsl:if test="*[contains(@class, ' topic/param ')]/@name = 'movie'">
<xsl:attribute name="src" select="*[contains(@class, ' topic/param ')][@name = 'movie']/@value"/>
</xsl:if>
<xsl:if test="*[contains(@class, ' topic/param ')]/@name = 'quality'">
<xsl:attribute name="quality" select="*[contains(@class, ' topic/param ')][@name = 'quality']/@value"/>
</xsl:if>
<xsl:if test="*[contains(@class, ' topic/param ')]/@name = 'bgcolor'">
<xsl:attribute name="bgcolor" select="*[contains(@class, ' topic/param ')][@name = 'bgcolor']/@value"/>
</xsl:if>
</embed>
</xsl:if>
</object>
</xsl:template>
<xsl:template match="*[contains(@class, ' topic/param ')]" name="topic.param">
<param>
<xsl:copy-of select="@name | @id | @value"/>
</param>
</xsl:template>
<!-- need to add test for object/desc to avoid conflicts -->
<xsl:template match="*[contains(@class, ' topic/object ')]/*[contains(@class, ' topic/desc ')]" name="topic.object_desc">
<span>
<xsl:copy-of select="@name | @id | value"/>
<xsl:apply-templates/>
</span>
</xsl:template>
<!-- =========== FOOTNOTE =========== -->
<xsl:template match="*[contains(@class, ' topic/fn ')]" name="topic.fn">
<xsl:param name="xref"/>
<!-- when FN has an ID, it can only be referenced, otherwise, output an a-name & a counter -->
<xsl:if test="not(@id) or $xref = 'yes'">
<xsl:variable name="fnid"><xsl:number from="/" level="any"/></xsl:variable>
<xsl:variable name="callout" select="@callout"/>
<xsl:variable name="convergedcallout" select="if (string-length($callout)> 0) then $callout else $fnid"/>
<link name="fnsrc_{$fnid}" href="#fntarg_{$fnid}">
<superscript>
<xsl:value-of select="$convergedcallout"/>
</superscript>
</link>
</xsl:if>
</xsl:template>
<!-- =========== REQUIRED CLEANUP and REVIEW COMMENT =========== -->
<xsl:template match="*[contains(@class, ' topic/required-cleanup ')]" name="topic.required-cleanup">
<xsl:if test="$DRAFT = 'yes'">
<xsl:apply-templates select="." mode="ditamsg:required-cleanup-in-content"/>
<div>
<xsl:call-template name="commonattributes"/>
<xsl:call-template name="setidaname"/>
<strong>
<xsl:call-template name="getVariable">
<xsl:with-param name="id" select="'Required cleanup'"/>
</xsl:call-template>
<xsl:call-template name="getVariable">
<xsl:with-param name="id" select="'ColonSymbol'"/>
</xsl:call-template>
<xsl:text> </xsl:text>
</strong>
<xsl:if test="@remap">[<xsl:value-of select="@remap"/>] </xsl:if>
<xsl:apply-templates/>
</div>
</xsl:if>
</xsl:template>
<xsl:template match="*[contains(@class, ' topic/draft-comment ')]" name="topic.draft-comment">
<xsl:if test="$DRAFT = 'yes'">
<xsl:apply-templates select="." mode="ditamsg:draft-comment-in-content"/>
<div>
<xsl:call-template name="commonattributes"/>
<xsl:call-template name="setidaname"/>
<strong>
<xsl:call-template name="getVariable">
<xsl:with-param name="id" select="'Draft comment'"/>
</xsl:call-template>
<xsl:call-template name="getVariable">
<xsl:with-param name="id" select="'ColonSymbol'"/>
</xsl:call-template>
<xsl:text> </xsl:text>
</strong>
<xsl:if test="@author"><xsl:value-of select="@author"/><xsl:text> </xsl:text></xsl:if>
<xsl:if test="@disposition"><xsl:value-of select="@disposition"/><xsl:text> </xsl:text></xsl:if>
<xsl:if test="@time"><xsl:value-of select="@time"/></xsl:if>
<linebreak/>
<xsl:apply-templates/>
</div>
</xsl:if>
</xsl:template>
<!--Dita comment passthru-->
<xsl:template match="processing-instruction()">
<xsl:if test="name()='dita-comment'"><xsl:comment><xsl:value-of select="."/></xsl:comment></xsl:if>
</xsl:template>
<!-- =========== INDEX =========== -->
<!-- TBD: this needs practical implementation. currently the support merely
echoes the content back, indicating any nesting. Useful view for authoring!-->
<xsl:template match="*[contains(@class, ' topic/indexterm ')]" name="topic.indexterm">
<xsl:if test="$INDEXSHOW = 'yes'">
<xsl:choose>
<xsl:when test="@keyref and @href">
<link>
<xsl:apply-templates select="." mode="add-linking-attributes"/>
<span>
<xsl:call-template name="commonattributes"/>
<xsl:apply-templates/>
</span>
</link>
</xsl:when>
<xsl:otherwise>
<span>
<xsl:call-template name="commonattributes"/>
<xsl:apply-templates/>
</span>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:template>
<xsl:template match="*[contains(@class, ' topic/indextermref ')]"/>
<!-- ===================================================================== -->
<!-- =========== PROLOG =========== -->
<!-- all handled in get-meta.xsl -->
<xsl:template match="*[contains(@class, ' topic/prolog ')]"/>
<!-- ===================================================================== -->
<!-- ================= COMMON ATTRIBUTE PROCESSORS ====================== -->
<xsl:function name="dita-ot:generate-html-id" as="xs:string">
<xsl:param name="element" as="element()"/>
<xsl:sequence
select="if (exists($element/@id))
then $element/@id
else generate-id($element)"/>
</xsl:function>
<!-- If the element has an ID, set it as an ID and anchor-->
<!-- Set ID and output A-name -->
<xsl:template name="setidaname">
<xsl:if test="@id">
<xsl:call-template name="setidattr">
<xsl:with-param name="idvalue" select="@id"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<!-- Set ID only -->
<xsl:template name="setid">
<xsl:if test="@id">
<xsl:call-template name="setidattr">
<xsl:with-param name="idvalue" select="@id"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<!-- Set the ID attr for IE -->
<xsl:template name="setidattr">
<xsl:param name="idvalue"/>
<xsl:attribute name="id" select="$idvalue"/>
</xsl:template>
<!-- Create & insert an ID for the generated table of contents -->
<xsl:template name="gen-toc-id">
</xsl:template>
<!-- Process standard attributes that may appear anywhere. Previously this was "setclass" -->
<xsl:template name="commonattributes">
<xsl:param name="default-output-class"/>
<!--xsl:apply-templates select="@xml:lang"/>
<xsl:apply-templates select="@dir"/-->
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-startprop ')]/@outputclass" mode="add-ditaval-style"/>
<xsl:apply-templates select="." mode="set-output-class">
<xsl:with-param name="default" select="$default-output-class"/>
</xsl:apply-templates>
</xsl:template>
<!-- Set the class attribute on the resulting output element. The default for a class of elements
may be passed in with $default, but that default can be overridden with mode="get-output-class". -->
<xsl:template match="*" mode="set-output-class">
<xsl:param name="default"/>
<xsl:variable name="output-class">
<xsl:apply-templates select="." mode="get-output-class"/>
</xsl:variable>
<xsl:variable name="draft-revs">
<!-- If draft is on, add revisions to default class. Simplifies processing in DITA-OT 1.6 and earlier
that created an extra div or span around revised content, just to hold @class with revs. -->
<xsl:if test="$DRAFT = 'yes'">
<xsl:for-each select="*[contains(@class, ' ditaot-d/ditaval-startprop ')]/revprop">
<xsl:value-of select="@val"/>
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:if>
</xsl:variable>
<xsl:variable name="using-output-class">
<xsl:choose>
<xsl:when test="string-length(normalize-space($output-class)) > 0"><xsl:value-of select="$output-class"/></xsl:when>
<xsl:when test="string-length(normalize-space($default)) > 0"><xsl:value-of select="$default"/></xsl:when>
</xsl:choose>
<xsl:if test="$draft-revs != ''">
<xsl:text> </xsl:text>
<xsl:value-of select="normalize-space($draft-revs)"/>
</xsl:if>
</xsl:variable>
<xsl:variable name="outputclass-attribute">
<xsl:apply-templates select="@outputclass" mode="get-value-for-class"/>
</xsl:variable>
<xsl:if test="string-length(normalize-space(concat($outputclass-attribute, $using-output-class))) > 0">
<xsl:attribute name="class">
<xsl:value-of select="normalize-space($using-output-class)"/>
<xsl:if test="string-length(normalize-space($using-output-class)) > 0 and
string-length(normalize-space($outputclass-attribute)) > 0"><xsl:text> </xsl:text></xsl:if>
<xsl:value-of select="$outputclass-attribute"/>
</xsl:attribute>
</xsl:if>
</xsl:template>
<!-- If an element has @outputclass, create a class value -->
<xsl:template match="@outputclass">
<xsl:attribute name="class" select="."/>
</xsl:template>
<!-- Determine what @outputclass value goes into XHTML's @class. If the value should
NOT fall through, override this template to remove it. -->
<xsl:template match="@outputclass" mode="get-value-for-class">
<xsl:value-of select="."/>
</xsl:template>
<!-- Most elements don't get a class attribute. -->
<xsl:template match="*" mode="get-output-class"/>
<!-- if the element has a compact=yes attribute, assert it in XHTML form -->
<xsl:template match="@compact">
<xsl:if test=". = 'yes'">
<xsl:attribute name="compact">compact</xsl:attribute><!-- assumes that no compaction is default -->
</xsl:if>
</xsl:template>
<xsl:template name="setscale">
</xsl:template>
<!-- ===================================================================== -->
<!-- ========== GENERAL SUPPORT/DOC CONTENT MANAGEMENT ========== -->
<!-- ===================================================================== -->
<!-- =========== CATCH UNDEFINED ELEMENTS (for stylesheet maintainers) =========== -->
<!-- (this rule should NOT produce output in production setting) -->
<xsl:template match="*" name="topic.undefined_element">
<span style="background-color: yellow;">
<span style="font-weight: bold">
<xsl:text>[</xsl:text>
<xsl:for-each select="ancestor-or-self::*">
<xsl:text>/</xsl:text>
<xsl:value-of select="name()" />
</xsl:for-each>
{"<xsl:value-of select="@class"/>"}<xsl:text>) </xsl:text>
</span>
<xsl:apply-templates/>
<span style="font-weight: bold">
<xsl:text> (</xsl:text><xsl:value-of select="name()"/><xsl:text>]</xsl:text>
</span>
</span>
</xsl:template>
<!-- ========= NAMED TEMPLATES (call by name, only) ========== -->
<!-- named templates that can be used anywhere -->
<!-- Process spectitle attribute - if one exists - needs to be called on tags that allow it -->
<xsl:template name="spec-title">
<xsl:if test="@spectitle"><div style="margin-top: 1em;"><strong><xsl:value-of select="@spectitle"/></strong></div></xsl:if>
</xsl:template>
<xsl:template name="spec-title-nospace">
<xsl:if test="@spectitle"><div style="margin-bottom: 0;"><strong><xsl:value-of select="@spectitle"/></strong></div></xsl:if>
</xsl:template>
<xsl:template name="spec-title-cell"> <!-- not used - was a cell 'title' -->
<xsl:if test="@specentry"><xsl:value-of select="@specentry"/><xsl:text> </xsl:text></xsl:if>
</xsl:template>
<xsl:variable name="cr" as="xs:string"><xsl:text>
</xsl:text></xsl:variable>
<!-- Break replace - used for LINES -->
<!-- this replaces newlines with the BR element. Forces breaks. -->
<xsl:template name="br-replace">
<xsl:param name="brtext"/>
<!-- capture an actual newline within the xsl:text element -->
<xsl:choose>
<xsl:when test="contains($brtext, $cr)">
<xsl:value-of select="substring-before($brtext, $cr)"/>
<linebreak/>
<xsl:value-of select="$cr"/>
<xsl:call-template name="br-replace"> <!-- call again to get remaining CRs -->
<xsl:with-param name="brtext" select="substring-after($brtext, $cr)"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$brtext"/> <!-- No CRs, just output -->
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- Space replace - used for LINES -->
<!-- add checks for repeating leading blanks & converts them to &nbsp;&nbsp; -->
<!-- this replaces newlines with the BR element. Forces breaks. -->
<xsl:template name="sp-replace">
<xsl:param name="sptext"/>
<!-- capture 2 spaces -->
<xsl:choose>
<xsl:when test="contains($sptext, ' ')">
<xsl:value-of select="substring-before($sptext, ' ')"/>
<xsl:text>&#xA0;&#xA0;</xsl:text>
<xsl:call-template name="sp-replace"> <!-- call again to get remaining spaces -->
<xsl:with-param name="sptext" select="substring-after($sptext, ' ')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$sptext"/> <!-- No spaces, just output -->
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- diagnostic: call this to generate a path-like view of an element's ancestry -->
<xsl:template name="breadcrumbs">
<xsl:variable name="full-path">
<xsl:for-each select="ancestor-or-self::*">
<xsl:value-of select="concat('/', name())"/>
</xsl:for-each>
</xsl:variable>
<para>
<strong>
<xsl:value-of select="$full-path"/>
</strong>
</para>
</xsl:template>
<!-- the following named templates generate inline content for the delivery context -->
<!-- named templates for labels and titles related to topic structures -->
<!-- test processors for HTML title element -->
<xsl:template match="*|text()|processing-instruction()" mode="text-only">
<!-- Redirect to common dita-ot module -->
<xsl:apply-templates select="." mode="dita-ot:text-only"/>
</xsl:template>
<!-- Process a section heading - H4 based on: 1) title element 2) @spectitle attr -->
<xsl:template name="sect-heading">
<xsl:param name="defaulttitle"/> <!-- get param by reference -->
<xsl:call-template name="output-message">
<xsl:with-param name="id">DOTX066W</xsl:with-param>
<xsl:with-param name="msgparams">%1=sect-heading</xsl:with-param>
</xsl:call-template>
<xsl:apply-templates select="." mode="dita2html:section-heading">
<xsl:with-param name="defaulttitle" select="$defaulttitle"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="*" mode="dita2html:section-heading">
<xsl:param name="defaulttitle"/> <!-- get param by reference -->
<xsl:variable name="heading">
<xsl:choose>
<xsl:when test="*[contains(@class, ' topic/title ')]">
<xsl:apply-templates select="*[contains(@class, ' topic/title ')][1]" mode="text-only"/>
<xsl:if test="*[contains(@class, ' topic/title ')][2]">
<xsl:apply-templates select="." mode="ditamsg:section-with-multiple-titles"/>
</xsl:if>
</xsl:when>
<xsl:when test="@spectitle">
<xsl:value-of select="@spectitle"/>
</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:variable>
<xsl:variable name="headCount" select="count(ancestor::*[contains(@class, ' topic/topic ')]) + 1"/>
<xsl:variable name="headLevel">
<xsl:choose>
<xsl:when test="$headCount > 6">6</xsl:when>
<xsl:otherwise><xsl:value-of select="$headCount"/></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- based on graceful defaults, build an appropriate section-level heading -->
<xsl:choose>
<xsl:when test="not($heading = '')">
<xsl:if test="normalize-space($heading) = ''">
<!-- hack: a title with whitespace ALWAYS overrides as null -->
<xsl:comment>no heading</xsl:comment>
</xsl:if>
<xsl:apply-templates select="*[contains(@class, ' topic/title ')][1]">
<xsl:with-param name="headLevel" select="$headLevel"/>
</xsl:apply-templates>
<xsl:if test="@spectitle and not(*[contains(@class, ' topic/title ')])">
<header level="{$headLevel}">
<xsl:for-each select="..">
<xsl:call-template name="commonattributes"/>
</xsl:for-each>
<xsl:value-of select="@spectitle"/>
</header>
</xsl:if>
</xsl:when>
<xsl:when test="$defaulttitle">
<header level="{$headLevel}">
<xsl:for-each select="..">
<xsl:call-template name="commonattributes"/>
</xsl:for-each>
<xsl:value-of select="$defaulttitle"/>
</header>
</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template match="*[contains(@class, ' topic/section ')]/*[contains(@class, ' topic/title ')] |
*[contains(@class, ' topic/example ')]/*[contains(@class, ' topic/title ')]" name="topic.section_title">
<xsl:param name="headLevel" as="xs:integer">
<xsl:variable name="headCount" select="count(ancestor::*[contains(@class, ' topic/topic ')]) + 1"/>
<xsl:choose>
<xsl:when test="$headCount > 6">6</xsl:when>
<xsl:otherwise><xsl:value-of select="$headCount"/></xsl:otherwise>
</xsl:choose>
</xsl:param>
<header level="{$headLevel}">
<xsl:call-template name="commonattributes">
<xsl:with-param name="default-output-class" select="name(..)"/>
</xsl:call-template>
<xsl:copy-of select="../@id"/>
<xsl:apply-templates/>
</header>
</xsl:template>
<!-- Test for in BIDI area: returns "bidi" when parent's @xml:lang is a bidi language;
Otherwise, leave blank -->
<xsl:template name="bidi-area" as="xs:boolean">
<xsl:param name="parentlang">
<xsl:call-template name="getLowerCaseLang"/>
</xsl:param>
<xsl:variable name="direction">
<xsl:apply-templates select="." mode="get-render-direction">
<xsl:with-param name="lang" select="$parentlang"/>
</xsl:apply-templates>
</xsl:variable>
<xsl:sequence select="$direction = 'rtl'"/>
</xsl:template>
<!-- Test for URL: returns "url" when the content starts with a URL;
Otherwise, leave blank -->
<xsl:template name="url-string" as="xs:boolean">
<xsl:param name="urltext"/>
<xsl:sequence select="contains($urltext, 'http://') or contains($urltext, 'https://')"/>
</xsl:template>
<!-- ========== Section-like generated content =========== -->
<!-- render any contained footnotes as endnotes. Links back to reference point -->
<xsl:template name="gen-endnotes">
<!-- Skip any footnotes that are in draft elements when draft = no -->
<xsl:apply-templates select="//*[contains(@class, ' topic/fn ')][not( (ancestor::*[contains(@class, ' topic/draft-comment ')] or ancestor::*[contains(@class, ' topic/required-cleanup ')]) and $DRAFT = 'no')]" mode="genEndnote"/>
</xsl:template>
<!-- Catch footnotes that should appear at the end of the topic, and output them. -->
<xsl:template match="*[contains(@class, ' topic/fn ')]" mode="genEndnote">
<note>
<xsl:variable name="fnid"><xsl:number from="/" level="any"/></xsl:variable>
<xsl:variable name="callout" select="@callout"/>
<xsl:variable name="convergedcallout" select="if (string-length($callout) > 0) then $callout else $fnid"/>
<xsl:call-template name="commonattributes"/>
<xsl:choose>
<xsl:when test="@id and not(@id = '')">
<xsl:variable name="topicid" select="ancestor::*[contains(@class, ' topic/topic ')][1]/@id"/>
<xsl:variable name="refid" select="concat($topicid, '/', @id)"/>
<xsl:choose>
<xsl:when test="key('xref', $refid)">
<link>
<xsl:call-template name="setid"/>
<superscript>
<xsl:value-of select="$convergedcallout"/>
</superscript>
</link>
<xsl:text> </xsl:text>
</xsl:when>
<xsl:otherwise>
<superscript>
<xsl:value-of select="$convergedcallout"/>
</superscript>
<xsl:text> </xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<link>
<xsl:attribute name="name" select="concat('fntarg_', $fnid)"/>
<xsl:attribute name="href" select="concat('#fnsrc_', $fnid)"/>
<superscript>
<xsl:value-of select="$convergedcallout"/>
</superscript>
</link>
<xsl:text> </xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates/>
</note>
</xsl:template>
<!-- listing of topics from calling context only; can be expanded for nesting -->
<xsl:template name="gen-toc">
<div>
<header class="sectiontitle">
<xsl:call-template name="getVariable">
<xsl:with-param name="id" select="'Contents'"/>
</xsl:call-template>
</header>
<bulletlist>
<xsl:for-each select="//topic/title">
<li>
<!-- this directive provides a "depth" indicator without doing recursive nesting -->
<xsl:value-of select="substring('------', 1, count(ancestor::*))"/>
<link>
<xsl:attribute name="href">#<xsl:value-of select="generate-id()"/></xsl:attribute>
<xsl:value-of select="."/>
</link>
<!--recursive call for subtopics here"/-->
</li>
</xsl:for-each>
</bulletlist>
</div>
</xsl:template>
<!-- ========== SETTINGS ========== -->
<xsl:variable name="trace">no</xsl:variable> <!--set string to 'yes' to turn on trace -->
<!-- set up keys based on xref's "type" attribute: %info-types;|hd|fig|table|li|fn -->
<xsl:key name="topic" match="*[contains(@class, ' topic/topic ')]" use="@id"/> <!-- uses "title" -->
<xsl:key name="fig" match="*[contains(@class, ' topic/fig ')]" use="@id"/> <!-- uses "title" -->
<xsl:key name="table" match="*[contains(@class, ' topic/table ')]" use="@id"/> <!-- uses "title" -->
<xsl:key name="li" match="*[contains(@class, ' topic/li ')]" use="@id"/> <!-- uses "?" -->
<xsl:key name="fn" match="*[contains(@class, ' topic/fn ')]" use="@id"/> <!-- uses "callout?" -->
<xsl:key name="xref" match="*[contains(@class, ' topic/xref ')]" use="substring-after(@href, '#')"/> <!-- find xref which refers to footnote. -->
<!-- ========== FORMATTER DECLARATIONS AND GLOBALS ========== -->
<!-- ========== "FORMAT" GLOBAL DECLARATIONS ========== -->
<xsl:variable name="link-top-section">no</xsl:variable><!-- values: yes, no (or any not "yes") -->
<!-- ========== "FORMAT" MACROS - Table title, figure title, InfoNavGraphic ========== -->
<!--
| These macros support globally-defined formatting constants for
| document content. Some elements have attributes that permit local
| control of formatting; such logic is part of the pertinent template rule.
+-->
<xsl:template name="place-tbl-width">
<xsl:variable name="twidth-fixed">100%</xsl:variable>
<xsl:if test="$twidth-fixed != ''">
<xsl:attribute name="width" select="$twidth-fixed"/>
</xsl:if>
</xsl:template>
<!-- table caption -->
<xsl:template name="place-tbl-lbl">
<xsl:param name="id"/>
<!-- Number of table/title's before this one -->
<xsl:variable name="tbl-count-actual" select="count(preceding::*[contains(@class, ' topic/table ')]/*[contains(@class, ' topic/title ')])+1"/>
<!-- normally: "Table 1. " -->
<xsl:variable name="ancestorlang">
<xsl:call-template name="getLowerCaseLang"/>
</xsl:variable>
<xsl:choose>
<!-- title -or- title & desc -->
<xsl:when test="*[contains(@class, ' topic/title ')]">
<caption>
<span class="tablecap">
<xsl:choose> <!-- Hungarian: "1. Table " -->
<xsl:when test="$ancestorlang = ('hu', 'hu-hu')">
<xsl:value-of select="$tbl-count-actual"/>
<xsl:text>. </xsl:text>
<xsl:call-template name="getVariable">
<xsl:with-param name="id" select="'Table'"/>
</xsl:call-template>
<xsl:text> </xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="getVariable">
<xsl:with-param name="id" select="'Table'"/>
</xsl:call-template>
<xsl:text> </xsl:text>
<xsl:value-of select="$tbl-count-actual"/>
<xsl:text>. </xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates select="*[contains(@class, ' topic/title ')]" mode="tabletitle"/>
<xsl:if test="*[contains(@class, ' topic/desc ')]">
<xsl:text>. </xsl:text>
</xsl:if>
</span>
<xsl:for-each select="*[contains(@class, ' topic/desc ')]">
<span class="tabledesc">
<xsl:call-template name="commonattributes"/>
<xsl:apply-templates select="." mode="tabledesc"/>
</span>
</xsl:for-each>
</caption>
</xsl:when>
<!-- desc -->
<xsl:when test="*[contains(@class, ' topic/desc ')]">
<xsl:for-each select="*[contains(@class, ' topic/desc ')]">
<span class="tabledesc">
<xsl:call-template name="commonattributes"/>
<xsl:apply-templates select="." mode="tabledesc"/>
</span>
</xsl:for-each>
</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template match="*[contains(@class, ' topic/table ')]/*[contains(@class, ' topic/title ')]" mode="tabletitle">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="*[contains(@class, ' topic/table ')]/*[contains(@class, ' topic/desc ')]" mode="tabledesc">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="*[contains(@class, ' topic/table ')]/*[contains(@class, ' topic/desc ')]" mode="get-output-class">tabledesc</xsl:template>
<!-- These 2 rules are not actually used, but could be picked up by an override -->
<xsl:template match="*[contains(@class, ' topic/table ')]/*[contains(@class, ' topic/title ')]" name="topic.table_title">
<span><xsl:apply-templates/></span>
</xsl:template>
<!-- These rules are not actually used, but could be picked up by an override -->
<xsl:template match="*[contains(@class, ' topic/table ')]/*[contains(@class, ' topic/desc ')]" name="topic.table_desc">
<span><xsl:apply-templates/></span>
</xsl:template>
<!-- Figure caption -->
<xsl:template name="place-fig-lbl">
<xsl:param name="id"/>
<!-- Number of fig/title's including this one -->
<xsl:variable name="fig-count-actual" select="count(preceding::*[contains(@class, ' topic/fig ')]/*[contains(@class, ' topic/title ')])+1"/>
<xsl:variable name="ancestorlang">
<xsl:call-template name="getLowerCaseLang"/>
</xsl:variable>
<xsl:choose>
<!-- title -or- title & desc -->
<xsl:when test="*[contains(@class, ' topic/title ')]">
<span class="figcap">
<xsl:choose> <!-- Hungarian: "1. Figure " -->
<xsl:when test="$ancestorlang = ('hu', 'hu-hu')">
<xsl:value-of select="$fig-count-actual"/>
<xsl:text>. </xsl:text>
<xsl:call-template name="getVariable">
<xsl:with-param name="id" select="'Figure'"/>
</xsl:call-template>
<xsl:text> </xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="getVariable">
<xsl:with-param name="id" select="'Figure'"/>
</xsl:call-template>
<xsl:text> </xsl:text>
<xsl:value-of select="$fig-count-actual"/>
<xsl:text>. </xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates select="*[contains(@class, ' topic/title ')]" mode="figtitle"/>
<xsl:if test="*[contains(@class, ' topic/desc ')]">
<xsl:text>. </xsl:text>
</xsl:if>
</span>
<xsl:for-each select="*[contains(@class, ' topic/desc ')]">
<span class="figdesc">
<xsl:call-template name="commonattributes"/>
<xsl:apply-templates select="." mode="figdesc"/>
</span>
</xsl:for-each>
</xsl:when>
<!-- desc -->
<xsl:when test="*[contains(@class, ' topic/desc ')]">
<xsl:for-each select="*[contains(@class, ' topic/desc ')]">
<span class="figdesc">
<xsl:call-template name="commonattributes"/>
<xsl:apply-templates select="." mode="figdesc"/>
</span>
</xsl:for-each>
</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template match="*[contains(@class, ' topic/fig ')]/*[contains(@class, ' topic/title ')]" mode="figtitle">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="*[contains(@class, ' topic/fig ')]/*[contains(@class, ' topic/desc ')]" mode="figdesc">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="*[contains(@class, ' topic/fig ')]/*[contains(@class, ' topic/desc ')]" mode="get-output-class">figdesc</xsl:template>
<!-- These 2 rules are not actually used, but could be picked up by an override -->
<xsl:template match="*[contains(@class, ' topic/fig ')]/*[contains(@class, ' topic/title ')]" name="topic.fig_title">
<span><xsl:apply-templates/></span>
</xsl:template>
<!-- These rules are not actually used, but could be picked up by an override -->
<xsl:template match="*[contains(@class, ' topic/fig ')]/*[contains(@class, ' topic/desc ')]" name="topic.fig_desc">
<span><xsl:apply-templates/></span>
</xsl:template>
<xsl:template match="*[contains(@class, ' topic/figgroup ')]/*[contains(@class, ' topic/title ')]" name="topic.figgroup_title">
<xsl:apply-templates/>
</xsl:template>
<!-- ===================================================================== -->
<!-- ========== STUBS FOR USER PROVIDED OVERRIDE EXTENSIONS ========== -->
<xsl:template name="gen-user-external-link">
<xsl:apply-templates select="." mode="gen-user-external-link"/>
</xsl:template>
<xsl:template match="/|node()|@*" mode="gen-user-external-link">
<!-- to customize: copy this to your override transform, add the content you want. -->
<!-- It will be placed after an external LINK or XREF -->
</xsl:template>
<xsl:template name="gen-user-panel-title-pfx">
<xsl:apply-templates select="." mode="gen-user-panel-title-pfx"/>
</xsl:template>
<xsl:template match="/|node()|@*" mode="gen-user-panel-title-pfx">
<!-- to customize: copy this to your override transform, add the content you want. -->
<!-- It will be placed immediately after TITLE tag, in the title -->
</xsl:template>
<!-- ===================================================================== -->
<!-- ========== DEFAULT PAGE LAYOUT ========== -->
<xsl:template name="chapter-setup">
<pandoc>
<xsl:apply-templates select="." mode="chapterHead"/>
<xsl:apply-templates select="." mode="chapterBody"/>
</pandoc>
</xsl:template>
<xsl:template match="*" mode="chapterHead">
<!--xsl:call-template name="getMeta"/-->
</xsl:template>
<xsl:template match="*" mode="chapterBody">
<xsl:apply-templates select="." mode="addContentToHtmlBodyElement"/>
</xsl:template>
<!-- Add all attributes. To add your own additional attributes, use mode="addAttributesToBody". -->
<xsl:template match="*" mode="addAttributesToHtmlBodyElement">
<!-- Already put xml:lang on <html>; do not copy to body with commonattributes -->
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-startprop ')]/@outputclass" mode="add-ditaval-style"/>
<!--output parent or first "topic" tag's outputclass as class -->
<xsl:if test="@outputclass">
<xsl:attribute name="class" select="@outputclass"/>
</xsl:if>
<xsl:if test="self::dita">
<xsl:if test="*[contains(@class, ' topic/topic ')][1]/@outputclass">
<xsl:attribute name="class" select="*[contains(@class, ' topic/topic ')][1]/@outputclass"/>
</xsl:if>
</xsl:if>
<xsl:call-template name="setid"/>
</xsl:template>
<xsl:template match="*" mode="addContentToHtmlBodyElement">
<div>
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-startprop ')]" mode="out-of-line"/>
<xsl:apply-templates/>
<xsl:call-template name="gen-endnotes"/>
<xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-endprop ')]" mode="out-of-line"/>
</div>
</xsl:template>
<xsl:template name="get-file-name">
<xsl:param name="file-path"/>
<xsl:choose>
<xsl:when test="contains($file-path, '\')">
<xsl:call-template name="get-file-name">
<xsl:with-param name="file-path" select="substring-after($file-path, '\')"/>
</xsl:call-template>
</xsl:when>
<xsl:when test="contains($file-path, '/')">
<xsl:call-template name="get-file-name">
<xsl:with-param name="file-path" select="substring-after($file-path, '/')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$file-path"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- Add for "New <data> element (#9)" in DITA 1.1 -->
<xsl:template match="*[contains(@class, ' topic/data ')]" />
<!-- Add for "Support foreign content vocabularies such as
MathML and SVG with <unknown> (#35) " in DITA 1.1 -->
<xsl:template match="*[contains(@class, ' topic/foreign ') or contains(@class, ' topic/unknown ')]"/>
<!-- Add for index-base element. This template is used to prevent
any processing applied on index-base element -->
<xsl:template match="*[contains(@class, ' topic/index-base ')]"/>
<!-- Add for text element. -->
<xsl:template match="*[contains(@class, ' topic/text ')]">
<xsl:apply-templates/>
</xsl:template>
<!-- By default, ignore desc and force pull-processing -->
<xsl:template match="*[contains(@class, ' topic/desc ')]" name="topic.desc" priority="-10"/>
<!-- Add for bodydiv and sectiondiv-->
<xsl:template match="*[contains(@class, ' topic/bodydiv ') or contains(@class, ' topic/sectiondiv ')]">
<div>
<xsl:call-template name="commonattributes"/>
<xsl:call-template name="setid"/>
<xsl:apply-templates/>
</div>
</xsl:template>
<!-- Function to look up a target in the keyref file -->
<xsl:template match="*" mode="find-keyref-target">
<!-- Deprecated since 2.1 -->
<xsl:param name="keys" select="@keyref"/>
<!-- Deprecated since 2.1 -->
<xsl:param name="target" select="@href"/>
<xsl:choose>
<xsl:when test="contains($target, '://')">
<xsl:value-of select="$target"/>
</xsl:when>
<!-- edited on 2010-12-17 for keyref bug:3114411 start-->
<xsl:when test="contains($target, '#')">
<xsl:value-of select="concat($PATH2PROJ, substring-before(substring-before($target, '#'), '.'), $OUTEXT, '#', substring-after($target, '#'))"/>
</xsl:when>
<xsl:when test="$target = ''">
<xsl:value-of select="$OUTEXT"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat($PATH2PROJ, substring-before($target, '.'), $OUTEXT)"/>
</xsl:otherwise>
<!-- edited on 2010-12-17 for keyref bug:3114411 end-->
</xsl:choose>
</xsl:template>
<!-- This template converts phrase-like elements into links based on keyref. -->
<!-- 20090331: Update to ensure cite with keyref continues to use <cite>,
plus move common code to single template -->
<xsl:template match="*" mode="turning-to-link">
<xsl:param name="keys" select="@keyref" as="xs:string?"/>
<xsl:param name="type" select="name()" as="xs:string"/>
<xsl:variable name="elementName" as="xs:string">
<xsl:choose>
<xsl:when test="$type = 'cite'">cite</xsl:when>
<xsl:otherwise>span</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<link>
<xsl:apply-templates select="." mode="add-linking-attributes"/>
<xsl:apply-templates select="." mode="add-desc-as-hoverhelp"/>
<xsl:element name="{$elementName}">
<xsl:call-template name="commonattributes">
<xsl:with-param name="default-output-class">
<xsl:if test="normalize-space($type) != name()">
<xsl:value-of select="$type"/>
</xsl:if>
</xsl:with-param>
</xsl:call-template>
<xsl:apply-templates/>
</xsl:element>
</link>
</xsl:template>
<!-- Deprecated since 2.1 -->
<xsl:template match="*" mode="common-processing-phrase-within-link">
<xsl:param name="type"/>
<xsl:call-template name="commonattributes">
<xsl:with-param name="default-output-class">
<xsl:if test="normalize-space($type) != name()">
<xsl:value-of select="$type"/>
</xsl:if>
</xsl:with-param>
</xsl:call-template>
<xsl:call-template name="setidaname"/>
<xsl:apply-templates/>
</xsl:template>
<!-- MESSAGES: Refactoring places each message in a moded template, so that users
may more easily override a message for one or all cases. -->
<xsl:template match="*" mode="ditamsg:no-glossentry-for-key">
<xsl:param name="matching-keys"/>
<xsl:call-template name="output-message">
<xsl:with-param name="id">DOTX058W</xsl:with-param>
<xsl:with-param name="msgparams">%1=<xsl:value-of select="$matching-keys"/>;%2=<xsl:value-of select="name()"/></xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template match="*" mode="ditamsg:no-title-for-topic">
<xsl:call-template name="output-message">
<xsl:with-param name="id">DOTX037W</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template match="*" mode="ditamsg:longdescref-on-object">
<xsl:call-template name="output-message">
<xsl:with-param name="id">DOTX038I</xsl:with-param>
<xsl:with-param name="msgparams">%1=<xsl:value-of select="name(.)"/></xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template match="*" mode="ditamsg:required-cleanup-in-content">
<xsl:call-template name="output-message">
<xsl:with-param name="id">DOTX039W</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template match="*" mode="ditamsg:draft-comment-in-content">
<xsl:call-template name="output-message">
<xsl:with-param name="id">DOTX040I</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template match="*" mode="ditamsg:section-with-multiple-titles">
<xsl:call-template name="output-message">
<xsl:with-param name="id">DOTX041W</xsl:with-param>
</xsl:call-template>
</xsl:template>
</xsl:stylesheet>