dita2html5Impl.xsl 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- This file is part of the DITA Open Toolkit project.
  3. See the accompanying license.txt file for applicable licenses. -->
  4. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  5. xmlns:xs="http://www.w3.org/2001/XMLSchema"
  6. xmlns:dita-ot="http://dita-ot.sourceforge.net/ns/201007/dita-ot"
  7. version="2.0"
  8. exclude-result-prefixes="xs dita-ot">
  9. <xsl:import href="css-class.xsl"/>
  10. <xsl:import href="topic.xsl"/>
  11. <xsl:import href="task.xsl"/>
  12. <xsl:import href="reference.xsl"/>
  13. <xsl:variable name="newline" select="()" as="xs:string?"/>
  14. <xsl:key name="enumerableByClass"
  15. match="*[contains(@class, ' topic/fig ')][*[contains(@class, ' topic/title ')]] |
  16. *[contains(@class, ' topic/table ')][*[contains(@class, ' topic/title ')]] |
  17. *[contains(@class,' topic/fn ') and empty(@callout)]"
  18. use="tokenize(@class, '\s+')"/>
  19. <xsl:template name="generateCharset">
  20. <meta charset="UTF-8"/>
  21. </xsl:template>
  22. <xsl:template match="*[contains(@class,' topic/copyright ')]" mode="gen-metadata">
  23. <meta name="rights">
  24. <xsl:attribute name="content">
  25. <xsl:text>&#xA9; </xsl:text>
  26. <xsl:apply-templates select="*[contains(@class,' topic/copyryear ')][1]" mode="gen-metadata"/>
  27. <xsl:text> </xsl:text>
  28. <xsl:if test="*[contains(@class,' topic/copyrholder ')]">
  29. <xsl:value-of select="*[contains(@class,' topic/copyrholder ')]"/>
  30. </xsl:if>
  31. </xsl:attribute>
  32. </meta>
  33. </xsl:template>
  34. <xsl:template match="*[contains(@class,' topic/copyryear ')]" mode="gen-metadata">
  35. <xsl:param name="previous" select="/.."/>
  36. <xsl:param name="open-sequence" select="false()"/>
  37. <xsl:variable name="next" select="following-sibling::*[contains(@class,' topic/copyryear ')][1]"/>
  38. <xsl:variable name="begin-sequence" select="@year + 1 = number($next/@year)"/>
  39. <xsl:choose>
  40. <xsl:when test="$begin-sequence">
  41. <xsl:if test="not($open-sequence)">
  42. <xsl:value-of select="@year"/>
  43. <xsl:text>&#x2013;</xsl:text>
  44. </xsl:if>
  45. </xsl:when>
  46. <xsl:when test="$next">
  47. <xsl:value-of select="@year"/>
  48. <xsl:text>, </xsl:text>
  49. </xsl:when>
  50. <xsl:otherwise>
  51. <xsl:value-of select="@year"/>
  52. </xsl:otherwise>
  53. </xsl:choose>
  54. <xsl:apply-templates select="$next" mode="gen-metadata">
  55. <xsl:with-param name="previous" select="."/>
  56. <xsl:with-param name="open-sequence" select="$begin-sequence"/>
  57. </xsl:apply-templates>
  58. </xsl:template>
  59. <xsl:template match="*[contains(@class,' topic/title ')]" mode="gen-metadata"/>
  60. <xsl:template match="*[contains(@class,' topic/shortdesc ')]" mode="gen-metadata">
  61. <xsl:variable name="shortmeta">
  62. <xsl:apply-templates select="*|text()" mode="text-only"/>
  63. </xsl:variable>
  64. <meta name="description">
  65. <xsl:attribute name="content">
  66. <xsl:value-of select="normalize-space($shortmeta)"/>
  67. </xsl:attribute>
  68. </meta>
  69. </xsl:template>
  70. <!-- Notes -->
  71. <xsl:template match="*" mode="process.note.common-processing">
  72. <xsl:param name="type" select="@type"/>
  73. <xsl:param name="title">
  74. <xsl:call-template name="getVariable">
  75. <xsl:with-param name="id" select="concat(upper-case(substring($type, 1, 1)), substring($type, 2))"/>
  76. </xsl:call-template>
  77. </xsl:param>
  78. <div>
  79. <xsl:call-template name="commonattributes">
  80. <xsl:with-param name="default-output-class" select="string-join(($type, concat('note_', $type)), ' ')"/>
  81. </xsl:call-template>
  82. <xsl:call-template name="setidaname"/>
  83. <!-- Normal flags go before the generated title; revision flags only go on the content. -->
  84. <xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-startprop ')]/prop" mode="ditaval-outputflag"/>
  85. <!-- Deprecated since 2.2: {$type}title is for backwards compatibility -->
  86. <span class="note__title {$type}title">
  87. <xsl:copy-of select="$title"/>
  88. <xsl:call-template name="getVariable">
  89. <xsl:with-param name="id" select="'ColonSymbol'"/>
  90. </xsl:call-template>
  91. </span>
  92. <xsl:text> </xsl:text>
  93. <xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-startprop ')]/revprop" mode="ditaval-outputflag"/>
  94. <xsl:apply-templates/>
  95. <!-- Normal end flags and revision end flags both go out after the content. -->
  96. <xsl:apply-templates select="*[contains(@class, ' ditaot-d/ditaval-endprop ')]" mode="out-of-line"/>
  97. </div>
  98. </xsl:template>
  99. <xsl:template match="*" mode="process.note.caution">
  100. <xsl:apply-templates select="." mode="process.note.common-processing"/>
  101. </xsl:template>
  102. <xsl:template match="*" mode="process.note.danger">
  103. <xsl:apply-templates select="." mode="process.note.common-processing"/>
  104. </xsl:template>
  105. <!-- Figure -->
  106. <!-- Figure caption -->
  107. <xsl:template name="place-fig-lbl">
  108. <xsl:param name="stringName"/>
  109. <!-- Number of fig/title's including this one -->
  110. <xsl:variable name="fig-count-actual" select="count(preceding::*[contains(@class, ' topic/fig ')]/*[contains(@class, ' topic/title ')])+1"/>
  111. <xsl:variable name="ancestorlang">
  112. <xsl:call-template name="getLowerCaseLang"/>
  113. </xsl:variable>
  114. <xsl:choose>
  115. <!-- title -or- title & desc -->
  116. <xsl:when test="*[contains(@class, ' topic/title ')]">
  117. <figcaption>
  118. <span class="fig--title-label">
  119. <xsl:choose> <!-- Hungarian: "1. Figure " -->
  120. <xsl:when test="$ancestorlang = ('hu', 'hu-hu')">
  121. <xsl:value-of select="$fig-count-actual"/>
  122. <xsl:text>. </xsl:text>
  123. <xsl:call-template name="getVariable">
  124. <xsl:with-param name="id" select="'Figure'"/>
  125. </xsl:call-template>
  126. <xsl:text> </xsl:text>
  127. </xsl:when>
  128. <xsl:otherwise>
  129. <xsl:call-template name="getVariable">
  130. <xsl:with-param name="id" select="'Figure'"/>
  131. </xsl:call-template>
  132. <xsl:text> </xsl:text>
  133. <xsl:value-of select="$fig-count-actual"/>
  134. <xsl:text>. </xsl:text>
  135. </xsl:otherwise>
  136. </xsl:choose>
  137. </span>
  138. <xsl:apply-templates select="*[contains(@class, ' topic/title ')]" mode="figtitle"/>
  139. <xsl:if test="*[contains(@class, ' topic/desc ')]">
  140. <xsl:text>. </xsl:text>
  141. </xsl:if>
  142. <xsl:for-each select="*[contains(@class, ' topic/desc ')]">
  143. <span class="figdesc">
  144. <xsl:call-template name="commonattributes"/>
  145. <xsl:apply-templates select="." mode="figdesc"/>
  146. </span>
  147. </xsl:for-each>
  148. </figcaption>
  149. </xsl:when>
  150. <!-- desc -->
  151. <xsl:when test="*[contains(@class, ' topic/desc ')]">
  152. <xsl:for-each select="*[contains(@class, ' topic/desc ')]">
  153. <figcaption>
  154. <xsl:call-template name="commonattributes"/>
  155. <xsl:apply-templates select="." mode="figdesc"/>
  156. </figcaption>
  157. </xsl:for-each>
  158. </xsl:when>
  159. </xsl:choose>
  160. </xsl:template>
  161. <xsl:template mode="generate-table-header" priority="10"
  162. match="*[contains(@class, ' topic/simpletable ')]">
  163. <xsl:variable name="gen" as="element(gen)">
  164. <!--
  165. Generated header needs to be wrapped in gen element to allow correct
  166. language detection.
  167. -->
  168. <gen>
  169. <xsl:copy-of select="ancestor-or-self::*[@xml:lang][1]/@xml:lang"/>
  170. <xsl:next-match/>
  171. </gen>
  172. </xsl:variable>
  173. <xsl:apply-templates select="$gen/*"/>
  174. </xsl:template>
  175. <xsl:template match="*" mode="css-class" priority="100">
  176. <xsl:param name="default-output-class"/>
  177. <xsl:variable name="outputclass" as="attribute(class)?">
  178. <xsl:apply-templates select="." mode="set-output-class">
  179. <xsl:with-param name="default" select="$default-output-class"/>
  180. </xsl:apply-templates>
  181. </xsl:variable>
  182. <xsl:if test="$outputclass">
  183. <xsl:variable name="class">
  184. <xsl:sequence select="data($outputclass)"/>
  185. <xsl:next-match/>
  186. </xsl:variable>
  187. <xsl:attribute name="class" select="string-join($class, ' ')"/>
  188. </xsl:if>
  189. </xsl:template>
  190. <xsl:include href="functions.xsl"/>
  191. <xsl:include href="nav.xsl"/>
  192. </xsl:stylesheet>