Next in thread → Next in month →

Re: [docbook-apps] <xsl:apply-templates select="." mode="class.attribute" />

From
Alan Ezust <>
Date
2008-08-05T17:40:04+00:00
ID
Thread
Re: [docbook-apps] <xsl:apply-templates select="." mode="class.attribute" />
Thank you so much for the quick reply and helpful response!
It works like a charm. So nice that I don't have to copy and paste the original template for <programlisting> also, but just add this extra template match.

--Alan

On Tue, Aug 5, 2008 at 12:14 PM, Bob Stayton <> wrote:

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="programlisting[@role]" 
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


 

 

  
----- 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>
Next in thread → Next in month →