Re: [docbook-apps] Aligning numbers in table cells with xsl

From
Bob Stayton <>
Date
2012-05-24T06:25:01+00:00
ID
19f201cd3975$e01bfd60$6600a8c0@pazu
Thread
Re: [docbook-apps] Aligning numbers in table cells with xsl
H Dave,

Can you supply the custom parameters that your 
template is using?  Thanks.

 

Bob Stayton
Sagehill Enterprises


 

 

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

  
From: 
  Xmplar 

  
To: DocBook Apps 

  
Sent: Wednesday, May 23, 2012 5:41 
  AM

  
Subject: [docbook-apps] Aligning numbers 
  in table cells with xsl

  

I have an xpath _expression_ in a customisation which is trying 
  to achieve the following:

In a CALS table I have a mixture of columns 
  with text and a column with numbers. I've created a tabstyle 'numbers' (and 
  also 'numberstripe') that should set, only for cells containing a number, a 
  text align of 'right' and an indent (set as a percentage of cell width from 
  the right margin). If a cell contains a text string, then it should not set a 
  right margin or indent. 

I have had the following coding working in a 
  previous document, but in another document it sets all text and numbers with a 
  text-align of 'right' and a margin-right equal to a user setting (e.g. 40% of 
  cell width). It is a complicated xpath _expression_ to select only the cells 
  contained within <tbody> (i.e. doesn't apply to cells in thead) and only 
  if a cell contains a number.

I don't know much about xpath and less 
  about whether the string selection is correct.

The XML is:
<table 
  frame="all" label="2" 
  tabstyle="numbers">
            
  <title>Mining and manufacturing water use in high and medium water 
  development SWMAs 
  </title>
            
  <tgroup 
  cols="4">
                
  <colspec colname="c1" colnum="1" 
  colwidth="1.0*"/>
                
  <colspec colname="c2" colnum="2" 
  colwidth="1.0*"/>
                
  <colspec colname="c3" colnum="3" 
  colwidth="1.0*"/>
                
  <colspec colname="c4" colnum="4" 
  colwidth="1.0*"/>
                
  <thead>
                    
  <row>
                        
  <entry align="center" valign="bottom">Drainage 
  division</entry>
                        
  <entry align="center" 
  valign="bottom">SWMA</entry>
                        
  <entry align="center" valign="bottom">Water use by mining and 
  manufacturing
                            
  (%)</entry>
                        
  <entry align="center" valign="bottom">Main commodities 
  mined</entry>
                    
  </row>
                
  </thead>
                
  <tbody>
                    
  <row>
                        
  <entry morerows="3">North-East 
  Coast</entry>
                        
  <entry valign="bottom">Barron 
  River</entry>
                        
  <entry 
  valign="bottom">10</entry>
                        
  <entry 
  valign="bottom">Metals</entry>
                    
  </row>
                    
  <row>
                        
  <entry valign="bottom">Burdekin 
  River</entry>
                        
  <entry 
  valign="bottom">1</entry>
                        
  <entry 
  valign="bottom">Coal</entry>
                    
  </row>
                    
  <row>
                        
  <entry valign="bottom">Fitzroy 
  River</entry>
                        
  <entry 
  valign="bottom">6</entry>
                        
  <entry 
  valign="bottom">Coal</entry>
                    
  </row>
                    
  <row>
                        
  <entry valign="bottom">Brisbane 
  River</entry>
                        
  <entry 
  valign="bottom">1</entry>
                        
  <entry 
  valign="bottom">Coal</entry>
                    
  </row>
                    
  <row>
                        
  <entry morerows="9">Murray?Darling 
  Basin</entry>
                        
  <entry valign="bottom">Condamine?Culgoa 
  rivers</entry>
                        
  <entry 
  valign="bottom">&lt;1</entry>
                        
  <entry 
  valign="bottom">Coal</entry>
                    
  </row>
                    
  <row>
                        
  <entry valign="bottom">Border 
  Rivers</entry>
                        
  <entry 
  valign="bottom">2</entry>
                        
  <entry 
  valign="bottom">Coal</entry>
                    
  </row>
                    
  <row>
                        
  <entry valign="bottom">Gwydir 
  River</entry>
                        
  <entry 
  valign="bottom">2</entry>
                        
  <entry 
  valign="bottom">Coal</entry>
                    
  </row>
                    
  <row>
                        
  <entry valign="bottom">Namoi 
  River</entry>
                        
  <entry 
  valign="bottom">2</entry>
                        
  <entry 
  valign="bottom">Coal</entry>
                    
  </row>
                    
  <row>
                        
  <entry valign="bottom">Lachlan 
  River</entry>
                        
  <entry 
  valign="bottom">4</entry>
                        
  <entry 
  valign="bottom">Metals</entry>
                    
  </row>
                    
  <row>
                        
  <entry valign="bottom">Murrumbidgee 
  River</entry>
                        
  <entry 
  valign="bottom">&lt;1</entry>
                        
  <entry 
  valign="bottom">Metals</entry>
                    
  </row>
                    
  <row>
                        
  <entry valign="bottom">Loddon 
  River</entry>
                        
  <entry 
  valign="bottom">&lt;1</entry>
                        
  <entry 
  valign="bottom">Gold</entry>
                    
  </row>
                    
  <row>
                        
  <entry valign="bottom">Campaspe 
  River</entry>
                        
  <entry 
  valign="bottom">&lt;1</entry>
                        
  <entry 
  valign="bottom">Gold</entry>
                    
  </row>
                    
  <row>
                        
  <entry valign="bottom">Avoca 
  River</entry>
                        
  <entry 
  valign="bottom">1</entry>
                        
  <entry 
  valign="bottom">Gold</entry>
                    
  </row>
                    
  <row>
                        
  <entry valign="bottom">Wimmera?Avon 
  rivers</entry>
                        
  <entry 
  valign="bottom">1</entry>
                        
  <entry valign="bottom">Mineral 
  sands</entry>
                    
  </row>
                    
  <row>
                        
  <entry morerows="3">South East 
  Coast</entry>
                        
  <entry valign="bottom">Hunter 
  River</entry>
                        
  <entry 
  valign="bottom">12</entry>
                        
  <entry 
  valign="bottom">Coal</entry>
                    
  </row>
                    
  <row>
                        
  <entry valign="bottom">Macquarie?Tuggerah 
  lakes</entry>
                        
  <entry 
  valign="bottom">6</entry>
                        
  <entry 
  valign="bottom">Coal</entry>
                    
  </row>
                    
  <row>
                        
  <entry valign="bottom">Hawkesbury 
  River</entry>
                        
  <entry 
  valign="bottom">4</entry>
                        
  <entry 
  valign="bottom">Coal</entry>
                    
  </row>
                    
  <row>
                        
  <entry valign="bottom">Latrobe 
  River</entry>
                        
  <entry 
  valign="bottom">25</entry>
                        
  <entry 
  valign="bottom">Coal</entry>
                    
  </row>
                    
  <row>
                        
  <entry morerows="2">South-West 
  Coast</entry>
                        
  <entry valign="bottom">Busselton Coast, Preston 
  River</entry>
                        
  <entry 
  valign="bottom">3</entry>
                        
  <entry valign="bottom">Mineral 
  sands</entry>
                    
  </row>
                    
  <row>
                        
  <entry valign="bottom">Collie 
  River</entry>
                        
  <entry 
  valign="bottom">3</entry>
                        
  <entry 
  valign="bottom">Coal</entry>
                    
  </row>
                    
  <row>
                        
  <entry valign="bottom">Murray 
  River</entry>
                        
  <entry 
  valign="bottom">13</entry>
                        
  <entry valign="bottom">Bauxite, gold, copper, mineral 
  sands</entry>
                    
  </row>
                    
  <row>
                        
  <entry 
  morerows="3">Others</entry>
                        
  <entry valign="bottom">Ord 
  (WA)</entry>
                        
  <entry 
  valign="bottom">15</entry>
                        
  <entry valign="bottom">Gold, 
  diamonds</entry>
                    
  </row>
                    
  <row>
                        
  <entry valign="bottom">Port Hedland 
  (WA)[1]</entry>
                        
  <entry 
  valign="bottom">47</entry>
                        
  <entry valign="bottom">Iron 
  ore</entry>
                    
  </row>
                    
  <row>
                        
  <entry valign="bottom">Onkaparinga River 
  (SA)</entry>
                        
  <entry 
  valign="bottom">1</entry>
                        
  <entry 
  valign="bottom">Metals</entry>
                    
  </row>
                    
  <row>
                        
  <entry valign="bottom">Torrens River 
  (SA)</entry>
                        
  <entry 
  valign="bottom">1</entry>
                        
  <entry 
  valign="bottom">Metals</entry>
                    
  </row>
                
  </tbody>
            
  </tgroup>
        
  </table>

And the customisation:

<xsl:template 
  name="table.cell.block.properties">
    <xsl:if 
  test="ancestor::d:thead">    
    
  <xsl:attribute name="font-weight">
      
  <xsl:value-of select="$tablehdrfontweight"/>
    
  </xsl:attribute> 
      <xsl:attribute 
  name="color">
        
  <xsl:value-of 
  select="$tablehdrfontcolour"/>
      
  </xsl:attribute>
    <xsl:attribute 
  name="font-size">
      <xsl:value-of 
  select="$tablehdrfontsize"></xsl:value-of><xsl:text>pt</xsl:text>
    
  </xsl:attribute>     <xsl:attribute 
  name="font-style">
      <xsl:value-of 
  select="$tablehdrfontstyle"/>
    </xsl:attribute> 
  
    </xsl:if>

  <!--If table has 
  numbers in the cells, set right-align for text and indent
  from 
  right-hand margin to centre the numbers-->
    
  
    <!--margin and indent for portrait format 
  tables-->
    <xsl:if 
  test="(ancestor-or-self::d:table/@tabstyle = 'numbers' or 
  
      ancestor-or-self::d:table/@tabstyle = 
  'numberstripe') and not(ancestor::d:thead or
      
  ancestor::d:tfoot) and preceding-sibling::d:entry and 
  string(number(.))">
      <xsl:attribute 
  name="text-align">right</xsl:attribute> 
  
      
      
  <xsl:attribute 
  name="margin-right">
        
  <xsl:choose>
          
  <xsl:when test="self::d:entry/d:footnote"> 
  
            
  <xsl:value-of select="$cellfootnoteindent"/> 
  
          
  </xsl:when>
          
  <xsl:otherwise>
            
  <xsl:value-of 
  select="$cellnumberindent"/>
          
  </xsl:otherwise>
        
  </xsl:choose>
        
  <xsl:text>%</xsl:text>
      
  </xsl:attribute> 
    </xsl:if>  
  
  </xsl:template>

Thanks.

  
-- 
Dave 
Gardiner