Next in thread → Next in month →

Re: [docbook-apps] toc for glossary

From
Bob Stayton <>
Date
2011-05-12T16:05:34+00:00
ID
022701cc10be$63ee1600$6600a8c0@pazu
Thread
Re: [docbook-apps] toc for glossary
Hi,

In DocBook XSL, the term 'label' usually refers to 
a number, like chapter number or table number. Those are generally included in 
an entry in a table of contents. The template named 'toc.line' in fo/autotoc.xsl 
that is used to generate each entry has this:

 

  <xsl:variable 
name="label">
    <xsl:apply-templates select="." 
mode="label.markup"/>
  </xsl:variable>

 

Apparently the elements glossdiv and glossentry do 
not have a template with mode="label.markup".  So the processor falls back 
to the template with match="*" and mode="label.markup" in common/labels.xsl, 
which generates that error message.

 

As you found, that isn't a problem because if the 
$label variable is empty, it is not used.  You could add your own empty 
template to avoid the noise:

 

   <xsl:template match="d:glossdiv | 
d:glossentry" mode="label.markup"/>

 

This empty template will prevent the default template from being 
used.

Bob Stayton
Sagehill Enterprises


 

 

  
----- Original Message ----- 

  
From: 
  Benno Wolf 

  
To:  
  

  
Sent: Thursday, May 12, 2011 7:30 
AM

  
Subject: [docbook-apps] toc for 
  glossary

  

Hi,
I have a couple of standalone Glossaries for my docus to 
  be printed out as kind of a lexicon. So I wanted a nice table of content made 
  out of glossdivs and glossentries. I therefor took a template and changed it 
  to what I thought was the right way to get what I wanted; here's the 
  customized template:

      <!-- writes a table of contents for 
    the glossary -->
    <xsl:template 
    match="d:glossary|d:glossdiv|d:glossentry|d:glossterm" 
    mode="toc">
        <xsl:param 
    name="toc-context" select="."/>
        
    <xsl:variable name="id">
        
        <xsl:call-template name="object.id"/>
    
        </xsl:variable>
    
        <xsl:variable name="cid">
    
            <xsl:call-template name="object.id">
    
                <xsl:with-param 
    name="object" select="$toc-context"/>
    
            
    </xsl:call-template>
        
    </xsl:variable>
        
    <xsl:call-template name="toc.line">
    
            <xsl:with-param name="toc-context" 
    select="$toc-context"/>
        
    </xsl:call-template>

        
    <xsl:variable name="nodes" 
    select="d:glossary|d:glossdiv|d:glossentry"/>

    
        <xsl:variable 
    name="depth.from.context"
        
        
    select="count(ancestor::*)-count($toc-context/ancestor::*)"/>

    
        <xsl:if
        
        test="$toc.section.depth > 0 
    
            and $toc.max.depth > 
    $depth.from.context
        
        and $nodes">
        
        <fo:block 
    id="toc.{$cid}.{$id}">
        
            <xsl:attribute 
    name="margin-{$direction.align.start}">
    
                    
    <xsl:call-template name="set.toc.indent"/>
    
                
    </xsl:attribute>

        
            <xsl:apply-templates 
    select="$nodes" mode="toc">
        
                <xsl:with-param 
    name="toc-context" select="$toc-context"/>
    
                
    </xsl:apply-templates>
        
        </fo:block>
    
        </xsl:if>
    
    </xsl:template>

  

This works fine, the glossary toc looks like it should: 

But 
  I get a lot of errors during generation, saying labels for glossdiv and 
  glossentries are missing:

  Request for label of unexpected element: 
    glossdiv
Request for label of unexpected element: 
  glossentry

  

Probably a daft question, but where are the labels being called in 
  the template?
As I said, the outcome is not affected by these messages, but 
  the data generation process looks a bit messy - and it can't be right.
Any 
  comment is 
appreciated!

Thanks,
Benno
Next in thread → Next in month →