Processing an element in that mode generates a class attribute for the element 
being processed.  It is applied by the stylesheet just after the opening tag of 
the output element.  In the template with match="programlisting" in 
html/verbatim.xsl, its application looks like this:

  <pre>
    <xsl:apply-templates select="." mode="class.attribute"/>

That template in turn applies templates in mode="class.value" to generate the 
attribute value string before it assembles the <xsl:attribute> element.  You 
can customize the mode="class.value" to generate a different string value, and 
it will be used in the class attribute.  Because it uses a mode, you can add 
templates for specific element selectors.  For example:

<xsl:template match="[EMAIL PROTECTED]" mode="class.value">
  <xsl:value-of select="@role"/>
</xsl:template>

See this reference for more information:

http://www.sagehill.net/docbookxsl/HtmlCustomEx.html#CustomClassValues

Bob Stayton
Sagehill Enterprises
[EMAIL PROTECTED]


  ----- Original Message ----- 
  From: Alan Ezust 
  To: apps docbook 
  Sent: Tuesday, August 05, 2008 8:34 AM
  Subject: [docbook-apps] <xsl:apply-templates select="." 
mode="class.attribute" />


  Could someone explain to me what this does:
   
   <xsl:apply-templates select="." mode="class.attribute"/>
   
   I'm confused about how it transforms <programlisting> elements from docbook 
to html.
   
   I wanted to add a role attribute to my programlisting, so I have an element 
like this:
   
   
   <programlisting role="solution">
     something that has a solution
   </programlisting>
   
   But it seems that when it is processed by the rule in html/verbatim.xsl, the 
element gets replaced by
   
    <pre class="programlisting">
    
  And the "solution" attribute is lost.

  I would like to modify the template for programlisting to check the role, and 
if it exists, set the class= attrib of the resultant <pre> element to be the 
same thing. But i'm not sure where the best place is to put it in my 
customization layer. Any suggestions?

  Here is the template for programlisting from verbatim.xsl:
      
  <xsl:template match="programlisting|screen|synopsis">
    <xsl:param name="suppress-numbers" select="'0'"/>
    <xsl:variable name="id">
      <xsl:call-template name="object.id"/>
    </xsl:variable>

    <xsl:call-template name="anchor"/>

    <xsl:if test="$shade.verbatim != 0">
      <xsl:message>
        <xsl:text>The shade.verbatim parameter is deprecated. </xsl:text>
        <xsl:text>Use CSS instead,</xsl:text>
      </xsl:message>
      <xsl:message>
        <xsl:text>for example: pre.</xsl:text>
        <xsl:value-of select="local-name(.)"/>
        <xsl:text> { background-color: #E0E0E0; }</xsl:text>
      </xsl:message>
    </xsl:if>

    <xsl:choose>
      <xsl:when test="$suppress-numbers = '0'
              and @linenumbering = 'numbered'
              and $use.extensions != '0'
              and $linenumbering.extension != '0'">
        <xsl:variable name="rtf">
      <xsl:call-template name="apply-highlighting"/>
        </xsl:variable>
        <pre>
          <xsl:apply-templates select="." mode="class.attribute"/>
      <xsl:call-template name="number.rtf.lines">
        <xsl:with-param name="rtf" select="$rtf"/>
      </xsl:call-template>
        </pre>
      </xsl:when>
      <xsl:otherwise>
        <pre>
          <xsl:apply-templates select="." mode="class.attribute"/>
      <xsl:call-template name="apply-highlighting"/>
        </pre>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
      

Reply via email to