css-class.xsl 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!--
  3. This file is part of the DITA Open Toolkit project.
  4. Copyright 2016 Eero Helenius
  5. See the accompanying LICENSE file for applicable license.
  6. -->
  7. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  8. xmlns:xs="http://www.w3.org/2001/XMLSchema"
  9. xmlns:dita-ot="http://dita-ot.sourceforge.net/ns/201007/dita-ot"
  10. version="2.0"
  11. exclude-result-prefixes="xs dita-ot">
  12. <xsl:function name="dita-ot:css-class" as="xs:string">
  13. <xsl:param name="block-name" as="xs:string?"/>
  14. <xsl:param name="attr" as="attribute()"/>
  15. <xsl:sequence select="
  16. string-join(($block-name, concat(node-name($attr), '-', $attr)), '--')
  17. "/>
  18. </xsl:function>
  19. <xsl:function name="dita-ot:css-class" as="xs:string">
  20. <xsl:param name="attr" as="attribute()"/>
  21. <xsl:sequence select="
  22. dita-ot:css-class(xs:string(node-name($attr/parent::*)), $attr)
  23. "/>
  24. </xsl:function>
  25. <!-- Don't generate CSS classes for any element or attribute by default. -->
  26. <xsl:template match="* | @*" mode="css-class"/>
  27. <!-- Display attributes group -->
  28. <xsl:template match="@frame | @expanse | @scale" mode="css-class">
  29. <xsl:sequence select="dita-ot:css-class((), .)"/>
  30. </xsl:template>
  31. <xsl:template match="*" mode="css-class" priority="100">
  32. <xsl:param name="default-output-class"/>
  33. <xsl:variable name="outputclass" as="attribute(class)?">
  34. <xsl:apply-templates select="." mode="set-output-class">
  35. <xsl:with-param name="default" select="$default-output-class"/>
  36. </xsl:apply-templates>
  37. </xsl:variable>
  38. <xsl:variable name="class" as="xs:string*">
  39. <xsl:if test="$outputclass">
  40. <xsl:sequence select="data($outputclass)"/>
  41. </xsl:if>
  42. <xsl:next-match/>
  43. </xsl:variable>
  44. <xsl:if test="exists($class)">
  45. <xsl:attribute name="class" select="string-join($class, ' ')"/>
  46. </xsl:if>
  47. </xsl:template>
  48. </xsl:stylesheet>