Re: [docbook-apps] striped table border colors

From
Bob Stayton <>
Date
2012-06-05T17:10:26+00:00
ID
056901cd433e$154529e0$6600a8c0@pazu
Thread
Re: [docbook-apps] striped table border colors
Hi Gregorio,

Border properties for each side can be 
specified with three individual properties, or with a shortcut property that 
combines them.  For example, these three properties:

 

<xsl:attribute 
name="border-right-width">0.5pt</xsl:attribute>

<xsl:attribute 
name="border-right-style">solid</xsl:attribute>

<xsl:attribute 
name="border-right-color">white</xsl:attribute>

 

are equivalent to this shortcut:

 

<xsl:attribute name="border-right">0.5pt solid 
white</xsl:attribute>

 

with the three values specified in this order, as defined by the 
standard.  Your example only specified two property values, so it did not 
work.

 

Another shortcut applies the properties to all sides if that is what you 
want:

 

<xsl:attribute name="border">0.5pt solid 
white</xsl:attribute>

 

The DocBook template named 'border' is in 
fo/table.xsl and is just a convenience for generating the three separate 
properties from the stylesheet parameters that set the default border 
properties.  If you want non-default border properties, then you cannot use 
the template named "border".  Also, in general a template will not accept 
being passed a param for which it does not have a param declaration.  The 
"border" template only has a param declared for "side", so trying to pass the 
color would not work as there is nothing to receive it in the 
template.

 

In table processing, each cell generally takes care 
of its own right-side and bottom-side borders only.  The top border is 
instead handled by the cell above or the table frame if it is the first cell in 
a column. Likewise, the left border is handled by the cell to the left or the 
table frame if it is the first cell in a row.  That avoids conflicts 
between neighboring cells, and follows the way CALS tables specify borders as 
rowsep (bottom) and colsep (right).

 

The DocBook XSL template named 
'table.cell.properties' is called for each cell in the table, with the context 
node being the "entry" element of a CALS table or a "td" element of an 
HTML-markup table.  That template should be 
copied from fo/table.xsl to your customization layer and modified there.  
If you aren't familiar with "customization layer", see:

 

http://www.sagehill.net/docbookxsl/CustomMethods.html#CustomizationLayer

 

There is also an example of customizing this 
template:

 

http://www.sagehill.net/docbookxsl/PrintTableStyles.html#table.cell.properties

 

In your case, you want to set the column separator 
to white, so something like the following could be added to your customization 
of the template named 'table.cell.properties'.  It first sets a variable to 
count rows, and then decides the border attribute with an xsl:choose statement 
to alternate white and black column borders.  

 

<xsl:template name="table.cell.properties">
  <xsl:param 
name="bgcolor.pi" select="''"/>
  <xsl:param name="rowsep.inherit" 
select="1"/>
  <xsl:param name="colsep.inherit" 
select="1"/>
  <xsl:param name="col" select="1"/>
  
<xsl:param name="valign.inherit" select="''"/>
  <xsl:param 
name="align.inherit" select="''"/>
  <xsl:param 
name="char.inherit" select="''"/>

 

  <variable name="rownumber">

    <xsl:number count="row" from="tbody"/>

  </xsl:variable>

 

  <xsl:choose>
    <xsl:when 
test="$rownumber mod 2">

      <xsl:attribute 
name="border-right">0.5pt solid white</xsl:attribute>

    </xsl:when>

    <xsl:otherwise>

      <xsl:attribute 
name="border-right">0.5pt solid black</xsl:attribute>

   </xsl:otherwise>

  </xsl:choose>

 

...

 

 

Bob Stayton
Sagehill Enterprises


 

 

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

  
From: 
  Gregorio Pevaco 
  

  
To:  ;  
  

  
Sent: Monday, June 04, 2012 1:11 PM

  
Subject: Re: [docbook-apps] striped table 
  border colors

  

  

  
    
      
I realize it has been several 
      months since I broached this subject. As this was a back-burner issue I 
      have only recently revisited this. However, I have not been able to 
      generate the results I had hoped for yet. 

      

I am trying to customize 
      the fo/table.xsl to address the cell.border.color as is the subject 
      here. 

      

      
My first question is that 
      there seem to be two areas that refer to table.cell.properties, I am 
      assuming the one I want is the 2nd one following the <!-- Expand 
      this template to add properties to any fo:table-cell --> 
      comment. 

      

      
OK, now from the comment, and 
      some dabbling, should I assume the right approach is to add that structure 
      to my custom layer... or do I want to modify the table.xsl straight 
      away?

      

      
The second and biggest problem 
      I am having is that I am not sure what the right 'call' to get the column 
      separators other than black. 

      
My first attempt as 
      illustrated in my first letter: 

      
<xsl:attribute 
      name="border-right">0.5pt white</xsl:attribute> <xsl:attribute 
      name="border-left">0.5pt white</xsl:attribute> 

      
did 
      not work, but seems like it might be going down the right road. 
      

      

      
I have tried something along these 
      lines:

      

      
      <xsl:call-template 
      name="border">

      
          
      <xsl:with-param name="table.cell.border.color" 
      select="'white'"/>

      
        
      </xsl:call-template>

      

      
Not to throw more confusion at this with bad code, 
      than necessary. What would be the correct structure to get the the column 
      rules to turn white? 

      
I wonder if you might be able to supply some 
      example of the code to do that? 

      

      
I hope that is not too much to ask, but it would 
      really help as I have run into a wall here. 

      

      
Thank you kindly!

      

      
/G. 

  
-----Original 
  Message-----
From: Bob Stayton <>
To: 
  docbook-apps <>; Gregorio Pevaco 
  <>
Sent: Thu, Mar 1, 2012 1:55 am
Subject: Re: 
  [docbook-apps] striped table border colors

  

  
Hi Gregorio,

  
Borders within a table are set on table cells, 
  not on rows.  I believe the reason for that must be cell spans, which can 
  put the bottom of a cell in one row in the next row or several 
  rows.

  
 

  
Customize the template 'table.cell.properties' 
  from fo/table.xsl to set the custom borders.

  
 

  
Bob Stayton
Sagehill Enterprises


  
 

  
 

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

    
From: 
    Gregorio Pevaco 
    

    
To:  
    

    
Sent: Wednesday, February 29, 2012 2:05 
    PM

    
Subject: [docbook-apps] striped table 
    border colors

    

Hello: 

I 
    have a particular style of table I am attempting to generate into PDF using 
    the fo stylesheets.  
    
Specifically I am getting custom striped rows, but I also need to 
    generate white rowsep/colsep or cell borders. I am trying to do this in my 
    custom layer, and here is a piece of the xsl:

    
 

    

    

    
<xsl:template name="table.row.properties">

    
  <xsl:variable name="tabstyle">

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

    
  </xsl:variable>

    
   <xsl:variable name="rownum">

    
    <xsl:number from="tgroup" count="row"/>

    
  </xsl:variable>

    
  <xsl:choose>

    
    <xsl:when test="$tabstyle = 'striped'">

    
      <xsl:if test="$rownum mod 2 = 0">

    
        <xsl:attribute 
    name="background-color">#939598</xsl:attribute>

    

    
        <!--attributes to change border 
    colors?-->

    
<xsl:attribute name="border-right">0.5pt 
    white</xsl:attribute>

    
        <xsl:attribute 
    name="border-left">0.5pt white</xsl:attribute>

    
      </xsl:if>

    
    <xsl:if test="$rownum mod 2 != 0">

    
      <xsl:attribute 
    name="background-color">#bcbec0</xsl:attribute>

    
<!--?attributes to change border 
    colors?-->  
      

    
    </xsl:if>

    
   </xsl:when>

    
 </xsl:choose>

    
</xsl:template>

    

    

    

    
Obviously this is not working, the portions following <!--attributes to change border 
    colors?--> are simply variations of my attempts to get some sort of 
    change to the table.cell.properties, 

    
however I could not find any sort of 
    combination to get the result I wish for, which would be white colored rules 
    between the cells of the table. 

    

    
Is this even possible? Any 
    suggestions?

    

    
Thank you for taking the time to read my questions.

    
/Gregorio