[Checkins] SVN: z3c.rml/trunk/src/z3c/rml/ * Added <hr> tag support.

Stephan Richter srichter at cosmos.phy.tufts.edu
Fri Mar 16 03:19:19 EDT 2007


Log message for revision 73212:
  * Added <hr> tag support.
  
  * Worked a lot on tables cleaning up a lot of the style support to be almost 
    100% compatible with the commercial RML version.
  
  

Changed:
  U   z3c.rml/trunk/src/z3c/rml/attr.py
  U   z3c.rml/trunk/src/z3c/rml/flowable.py
  U   z3c.rml/trunk/src/z3c/rml/platypus.py
  U   z3c.rml/trunk/src/z3c/rml/stylesheet.py
  A   z3c.rml/trunk/src/z3c/rml/tests/input/rml-examples-008-tables.rml

-=-
Modified: z3c.rml/trunk/src/z3c/rml/attr.py
===================================================================
--- z3c.rml/trunk/src/z3c/rml/attr.py	2007-03-16 03:46:12 UTC (rev 73211)
+++ z3c.rml/trunk/src/z3c/rml/attr.py	2007-03-16 07:19:18 UTC (rev 73212)
@@ -32,8 +32,6 @@
 
 from z3c.rml import interfaces
 
-ALL_COLORS = reportlab.lib.colors.getAllNamedColors()
-
 DEFAULT = object()
 
 
@@ -54,6 +52,20 @@
             return default
         return self.convert(value, context)
 
+class Combination(Attribute):
+
+    def __init__(self, name=None, valueTypes=(), default=DEFAULT):
+        super(Combination, self).__init__(name, default)
+        self.valueTypes = valueTypes
+
+    def convert(self, value, context=None):
+        for valueType in self.valueTypes:
+            try:
+                return valueType.convert(value, context)
+            except ValueError:
+                pass
+        raise ValueError(value)
+
 class Text(Attribute):
 
     def convert(self, value, context=None):
@@ -83,7 +95,7 @@
 
 class Sequence(Attribute):
 
-    splitre = re.compile('[ \t\n,]*')
+    splitre = re.compile('[ \t\n,;]*')
     minLength = None
     maxLength = None
 
@@ -149,6 +161,12 @@
 
 class Measurement(Attribute):
 
+    def __init__(self, name=None, default=DEFAULT,
+                 allowPercentage=False, allowStar=False):
+        super(Measurement, self).__init__(name, default)
+        self.allowPercentage = allowPercentage
+        self.allowStar = allowStar
+
     units = [
 	(re.compile('^(-?[0-9\.]+)\s*in$'), reportlab.lib.units.inch),
 	(re.compile('^(-?[0-9\.]+)\s*cm$'), reportlab.lib.units.cm),
@@ -156,14 +174,22 @@
 	(re.compile('^(-?[0-9\.]+)\s*$'), 1)
         ]
 
+    allowPercentage = False
+    allowStar = False
+
     def convert(self, value, context=None):
+        if value == 'None':
+            return None
+        if value == '*' and self.allowStar:
+            return value
+        if value.endswith('%') and self.allowPercentage:
+            return value
 	for unit in self.units:
             res = unit[0].search(value, 0)
             if res:
                 return unit[1]*float(res.group(1))
         raise ValueError('The value %r is not a valid measurement.' %value)
 
-
 class File(Text):
 
     open = staticmethod(urllib.urlopen)
@@ -208,17 +234,9 @@
 class Color(Text):
 
     def convert(self, value, context=None):
-        # Color name
-        if value in ALL_COLORS:
-            return ALL_COLORS[value]
-        # Decimal triplet
-        rgb = Sequence(valueType=Float(), length=3).convert(value)
-        if len(rgb) == 3:
-            return [float(num) for num in rgb]
-        # Hexdecimal triplet
-        if value.startswith('#'):
-            return [float(int(value[i:i+1], 16)) for i in range(1, 7, 2)]
-        raise ValueError('%r not a valid color.' %value)
+        if value == 'None':
+            return None
+        return reportlab.lib.colors.toColor(value)
 
 
 class Style(Text):
@@ -331,7 +349,6 @@
     def convert(self, value, context=None):
         result = super(TextNodeGrid, self).convert(value, context)
         if len(result) % self.cols != 0:
-            import pdb; pdb.set_trace()
             raise ValueError(
                 'Number of elements must be divisible by %i.' %self.cols)
         return [result[i*self.cols:(i+1)*self.cols]

Modified: z3c.rml/trunk/src/z3c/rml/flowable.py
===================================================================
--- z3c.rml/trunk/src/z3c/rml/flowable.py	2007-03-16 03:46:12 UTC (rev 73211)
+++ z3c.rml/trunk/src/z3c/rml/flowable.py	2007-03-16 07:19:18 UTC (rev 73212)
@@ -17,12 +17,13 @@
 """
 __docformat__ = "reStructuredText"
 import copy
+import re
 import reportlab.platypus
 import reportlab.platypus.doctemplate
 import reportlab.platypus.flowables
 import reportlab.platypus.tables
 from reportlab.lib import styles
-from z3c.rml import attr, element, form, platypus, special
+from z3c.rml import attr, element, form, platypus, special, stylesheet
 
 try:
     import reportlab.graphics.barcode
@@ -40,7 +41,6 @@
         kw = self.getKeywordArguments()
         self.parent.flow.append(self.klass(*args, **kw))
 
-
 class Spacer(Flowable):
     klass = reportlab.platypus.Spacer
     args = ( attr.Measurement('width', 100), attr.Measurement('length'), )
@@ -98,6 +98,7 @@
     styleAttrs = (
         ('FONTNAME', (attr.Text('fontName'),)),
         ('FONTSIZE', (attr.Measurement('fontSize'),)),
+        ('TEXTCOLOR', (attr.Color('fontColor'),)),
         ('LEADING', (attr.Measurement('leading'),)),
         ('LEFTPADDING', (attr.Measurement('leftPadding'),)),
         ('RIGHTPADDING', (attr.Measurement('rightPadding'),)),
@@ -168,15 +169,38 @@
         self.processSubElements(None)
         self.parent.rows.append(self.cols)
 
+class TableBulkData(element.Element):
+
+    def process(self):
+        attribute = attr.TextNodeSequence(
+            splitre=re.compile('\n'),
+            valueType=attr.Sequence(
+                splitre=re.compile(','),
+                valueType=attr.Text()
+                ))
+        self.parent.rows = attribute.get(self.element)
+
+class BlockTableStyle(stylesheet.BlockTableStyle):
+
+    def setStyle(self, id, style):
+        self.parent.style = style
+
 class BlockTable(element.ContainerElement, Flowable):
     klass = reportlab.platypus.Table
     kw = (
         ('rowHeights', attr.Sequence('rowHeights', attr.Measurement())),
-        ('colWidths', attr.Sequence('colWidths', attr.Measurement())),
+        ('colWidths', attr.Sequence('colWidths',
+             attr.Measurement(allowPercentage=True, allowStar=True))),
         )
 
-    subElements = {'tr': TableRow}
+    attrs = ( ('repeatRows', attr.Int('repeatRows')), )
 
+
+    subElements = {
+        'tr': TableRow,
+        'bulkData': TableBulkData,
+        'blockTableStyle': BlockTableStyle}
+
     def process(self):
         # Get the table style; create a new one, if none is found
         self.style = attr.Style('style', 'table').get(self.element, None, self)
@@ -187,8 +211,13 @@
         self.processSubElements(None)
         # Create the table
         kw = self.getKeywordArguments()
+
         table = self.klass(self.rows, style=self.style, **kw)
 
+        attrs = element.extractKeywordArguments(self.attrs, self.element)
+        for name, value in attrs.items():
+            setattr(table, name, value)
+
         self.parent.flow.append(table)
 
 
@@ -322,7 +351,34 @@
         frame = self.klass(content=flow.flow, mode='shrink', *args)
         self.parent.flow.append(frame)
 
+class Bookmark(Flowable):
+    klass = platypus.BookmarkPage
+    args = ( attr.Text('name'), )
+    kw = (
+        ('fitType', attr.Choice('fitType', ('Fit', 'FitH', 'FitV', 'FitR'))),
+        ('left', attr.Measurement('left')),
+        ('right', attr.Measurement('right')),
+        ('top', attr.Measurement('top')),
+        ('bottom', attr.Measurement('bottom')),
+        ('zoom', attr.Float('zoom')),
+        )
 
+class HorizontalRow(Flowable):
+    klass = reportlab.platypus.flowables.HRFlowable
+    kw = (
+        ('width', attr.Measurement('width', allowPercentage=True)),
+        ('thickness', attr.Measurement('thickness')),
+        ('color', attr.Color('color')),
+        ('lineCap', attr.Choice('lineCap', ('butt', 'round', 'square') )),
+        ('spaceBefore', attr.Measurement('spaceBefore')),
+        ('spaceAfter', attr.Measurement('spaceAfter')),
+        ('hAlign', attr.Choice(
+             'align', ('left', 'right', 'center', 'centre', 'decimal') )),
+        ('vAlign', attr.Choice('vAlign', ('top', 'middle', 'bottom') )),
+        ('dash', attr.Sequence('dash', attr.Measurement())),
+        )
+
+
 class Flow(element.ContainerElement):
 
     subElements = {
@@ -352,6 +408,8 @@
         'pto': PTO,
         'indent': Indent,
         'fixedSize': FixedSize,
+        'bookmark': Bookmark,
+        'hr': HorizontalRow,
         # Special Elements
         'name': special.Name,
         }

Modified: z3c.rml/trunk/src/z3c/rml/platypus.py
===================================================================
--- z3c.rml/trunk/src/z3c/rml/platypus.py	2007-03-16 03:46:12 UTC (rev 73211)
+++ z3c.rml/trunk/src/z3c/rml/platypus.py	2007-03-16 07:19:18 UTC (rev 73212)
@@ -36,3 +36,14 @@
         drawing.process()
         self.canv.restoreState()
 
+
+class BookmarkPage(reportlab.platypus.flowables.Flowable):
+    def __init__(self, *args, **kw):
+        self.args = args
+        self.kw = kw
+
+    def wrap(self, *args):
+        return (0, 0)
+
+    def draw(self):
+        self.canv.bookmarkPage(*self.args, **self.kw)

Modified: z3c.rml/trunk/src/z3c/rml/stylesheet.py
===================================================================
--- z3c.rml/trunk/src/z3c/rml/stylesheet.py	2007-03-16 03:46:12 UTC (rev 73211)
+++ z3c.rml/trunk/src/z3c/rml/stylesheet.py	2007-03-16 07:19:18 UTC (rev 73212)
@@ -73,8 +73,14 @@
 class TableStyleCommand(element.Element):
     name = None
     attrs = (
-        attr.Sequence('start', attr.Int(), [0, 0], length=2),
-        attr.Sequence('stop', attr.Int(), [-1, -1], length=2) )
+        attr.Sequence('start', attr.Combination(
+            valueTypes=(attr.Int(),
+                        attr.Choice(choices=('splitfirst', 'splitlast')) )),
+            [0, 0], length=2),
+        attr.Sequence('stop', attr.Combination(
+            valueTypes=(attr.Int(),
+                        attr.Choice(choices=('splitfirst', 'splitlast')) )),
+            [-1, -1], length=2) )
 
     def process(self):
         args = [self.name]
@@ -124,8 +130,24 @@
 
 class BlockBackground(TableStyleCommand):
     name = 'BACKGROUND'
-    attrs = TableStyleCommand.attrs + (attr.Color('colorName'), )
+    attrs = TableStyleCommand.attrs + (
+        attr.Color('colorName'),
+        attr.Sequence('colorsByRow', attr.Color()),
+        attr.Sequence('colorsByCol', attr.Color()) )
 
+    def process(self):
+        args = [self.name]
+        if 'colorsByRow' in self.element.keys():
+            args = [BlockRowBackground.name]
+        elif 'colorsByCol' in self.element.keys():
+            args = [BlockColBackground.name]
+
+        for attribute in self.attrs:
+            value = attribute.get(self.element)
+            if value is not attr.DEFAULT:
+                args.append(value)
+        self.context.add(*args)
+
 class BlockRowBackground(TableStyleCommand):
     name = 'ROWBACKGROUNDS'
     attrs = TableStyleCommand.attrs + (
@@ -147,8 +169,13 @@
 
 class LineStyle(TableStyleCommand):
     attrs = TableStyleCommand.attrs + (
-        attr.Measurement('thickness', 1),
-        attr.Color('colorName'), )
+        attr.Measurement('thickness', default=1),
+        attr.Color('colorName', default=None),
+        attr.Choice('cap', ('butt', 'round', 'square'), default=1),
+        attr.Sequence('dash', attr.Measurement(), default=None),
+        attr.Bool('join', default=1),
+        attr.Int('count', default=1),
+        )
 
     @property
     def name(self):
@@ -158,6 +185,14 @@
             'kind', dict([(cmd.lower(), cmd) for cmd in cmds])
             ).get(self.element)
 
+    def process(self):
+        args = [self.name]
+        for attribute in self.attrs:
+            value = attribute.get(self.element)
+            if value is not attr.DEFAULT:
+                args.append(value)
+        self.context.add(*args)
+
 class BlockTableStyle(element.ContainerElement):
 
     subElements = {
@@ -177,11 +212,14 @@
         'lineStyle': LineStyle,
         }
 
+    def setStyle(self, id, style):
+        self.parent.parent.styles.setdefault('table', {})[id] = style
+
     def process(self):
         id = attr.Text('id').get(self.element)
         style = reportlab.platypus.tables.TableStyle()
         self.processSubElements(style)
-        self.parent.parent.styles.setdefault('table', {})[id] = style
+        self.setStyle(id, style)
 
 
 class Stylesheet(element.ContainerElement):

Added: z3c.rml/trunk/src/z3c/rml/tests/input/rml-examples-008-tables.rml
===================================================================
--- z3c.rml/trunk/src/z3c/rml/tests/input/rml-examples-008-tables.rml	2007-03-16 03:46:12 UTC (rev 73211)
+++ z3c.rml/trunk/src/z3c/rml/tests/input/rml-examples-008-tables.rml	2007-03-16 07:19:18 UTC (rev 73212)
@@ -0,0 +1,994 @@
+<?xml version="1.0" encoding="iso-8859-1" standalone="no" ?> 
+<!DOCTYPE document SYSTEM "rml_1_0.dtd">
+<document filename="test_008_tables.pdf">
+	<template pageSize="(595, 842)" leftMargin="72" showBoundary="1">
+		<pageTemplate id="main">
+			<frame id="first" x1="1in" y1="1in" width="6.27in" height="9.69in"/>
+		</pageTemplate>
+	</template>
+	<stylesheet>
+		<blockTableStyle id="temp001">
+			<blockAlignment value="left"/>
+			<blockFont name="Helvetica-Oblique"/>
+			<lineStyle kind="GRID" colorName="black"/>
+			<lineStyle kind="OUTLINE" colorName="black" thickness="2"/>
+			<blockBackground colorName="pink" start="0,0" stop="-1,0"/>
+			<blockBackground colorName="yellow" start="0,0" stop="-1,0"/>
+		</blockTableStyle>
+		<blockTableStyle id="span001">
+			<blockAlignment value="center"/>
+			<blockValign value="middle" start="-1,0" stop="-1,-1"/>
+			<blockSpan start="0,0" stop="2,0"/>
+			<blockSpan start="-1,0" stop="-1,-1"/>
+			<lineStyle kind="GRID" colorName="black" start="0,1" stop="-2,-1"/>
+			<lineStyle kind="GRID" colorName="black" start="3,0" stop="3,0"/>
+			<lineStyle kind="OUTLINE" colorName="black" thickness="2"/>
+		</blockTableStyle>
+		<blockTableStyle id="numeric">
+			<!--top row - centre and bold, easy-->
+			<blockFont name="Times-Bold" start="0,0" stop="-1,0"/>
+			<blockAlignment value="center" start="0,0" stop="-1,0"/>
+			<lineStyle kind="LINEABOVE" colorName="purple" start="0,0" stop="-1,0"/>
+			<lineStyle kind="LINEBELOW" colorName="purple" start="0,0" stop="-1,0"/>
+			<!--numeric region - decimal align and set right padding-->
+			<blockAlignment value="right" start="1,1" stop="-1,-1"/>
+			<!--bottom row - double underline-->
+			<blockFont name="Times-Bold" start="0,-1" stop="-1,-1"/>
+			<lineStyle kind="LINEABOVE" colorName="purple" start="0,-1" stop="-1,-1"/>
+			<lineStyle kind="LINEBELOW" colorName="purple" start="0,-1" stop="-1,-1" count="2"/>
+		</blockTableStyle>
+	</stylesheet>
+	<story>
+		<para>The email address should be a clickable mailto link built by creating a plugin within the cell.  And Robin's job title
+        should be on a separate line to his name.  In the third row, we use the newer and easier table cell properties "href" and "destination".</para>
+		<spacer length="24"/>
+		<blockTable colWidths="5cm,5cm" style="temp001">
+			<tr>
+				<td>Name</td>
+				<td>Email</td>
+			</tr>
+			<tr>
+				<td>Robin Becker
+(chief propellerhead)</td>
+				<td>
+					<plugInFlowable module="mymodule" function="linkURL">("mailto:robin at reportlab.com",)</plugInFlowable>
+				</td>
+			</tr>
+			<tr>
+				<td destination="BACK_PAGE">Internal link to back page</td>
+				<td href="http://www.reportlab.com/">Hyperlink to www.reportlab.com</td>
+
+			</tr>
+		</blockTable>
+		<spacer length="24"/>
+		<para>This should be a 5x5 table where some ranges span.  Note that the grid and background
+        commands still work on the "underlying" grid; if you grid the whole table, it will show through
+        your 'spanned cells' </para>
+		<spacer length="12"/>
+		<blockTable colWidths="3cm,3cm,3cm,3cm,3cm" rowHeights="1cm,1cm,1cm,1cm,1cm" style="span001">
+			<tr>
+				<td>
+					<para>This should span the first 3 cells in the top row. It's ordinary left aligned
+                text but could be centred if you want.</para>
+				</td>
+				<td>B</td>
+				<td>C</td>
+				<td>D</td>
+				<td>
+					<para>This should span all five cells in the right column.  We vertically centred the
+                text to make it look sensible using a separate stylesheet command.</para>
+					<hr spaceBefore="5"/>
+					<para>some more text</para>
+				</td>
+			</tr>
+			<tr>
+				<td>A</td>
+				<td>B</td>
+				<td>C</td>
+				<td>DB</td>
+				<td>E</td>
+			</tr>
+			<tr>
+				<td>A</td>
+				<td>B</td>
+				<td>C</td>
+				<td>DB</td>
+				<td>E</td>
+			</tr>
+			<tr>
+				<td>A</td>
+				<td>B</td>
+				<td>C</td>
+				<td>DB</td>
+				<td>E</td>
+			</tr>
+			<tr>
+				<td>A</td>
+				<td>B</td>
+				<td>C</td>
+				<td>DB</td>
+				<td>E</td>
+			</tr>
+		</blockTable>
+		<spacer length="24"/>
+		<para>This should be a 5x5 table where some ranges span. The column widths have been set as
+		3cm,10%,10%,10%,30%. The percentage refers to unallocated width only.
+        </para>
+		<spacer length="12"/>
+		<blockTable colWidths="3cm,10%,10%,10%,30%" rowHeights="2cm,1cm,1cm,1cm,None" style="span001">
+			<tr>
+				<td vAlign="middle">
+					<para>This should span the first 3 cells in the top row. It's ordinary left aligned
+                text but could be centred if you want.</para>
+				</td>
+				<td>B</td>
+				<td>C</td>
+				<td>D</td>
+				<td leftPadding="0" rightPadding="0">
+					<para>This should span all five cells in the right column.  We vertically centred the
+                text to make it look sensible using a separate stylesheet command.</para>
+					<hr spaceBefore="1" width="100%" thickness="1.5" color="pink"/>
+					<hr spaceBefore="1" width="100%" thickness="1.5" color="pink" lineCap="butt"/>
+					<hr spaceBefore="1" width="100%" thickness="1.5" color="pink" lineCap="square"/>
+					<hr spaceBefore="1" width="50%" thickness="1.5" color="pink" lineCap="square" align="right"/>
+					<hr spaceBefore="1" width="50%" thickness="1.5" color="pink" lineCap="square" align="left"/>
+					<hr spaceBefore="1" width="50%" thickness="1.5" color="pink" lineCap="square" align="centre"/>
+					<para>some more text</para>
+				</td>
+			</tr>
+			<tr>
+				<td>A</td>
+				<td>B</td>
+				<td>C</td>
+				<td>DB</td>
+				<td>E</td>
+			</tr>
+			<tr>
+				<td>A</td>
+				<td>B</td>
+				<td>C</td>
+				<td>DB</td>
+				<td>E</td>
+			</tr>
+			<tr>
+				<td>A</td>
+				<td>B</td>
+				<td>C</td>
+				<td>DB</td>
+				<td>E</td>
+			</tr>
+			<tr>
+				<td>A</td>
+				<td>B</td>
+				<td>C</td>
+				<td>DB</td>
+				<td>E</td>
+			</tr>
+		</blockTable>
+		<spacer length="24"/>
+		<nextPage/>
+		<bookmark name="PAGE_TWO"/>
+		<para>This shows some pointers on doing financial tables.  It demonstrates the decimal alignment and
+        multiple lines.  We also used a local &lt;td color="red"&gt; attribute for the negative cell; ideally one wants to make the data drive the colour, 
+        so that generator apps don't need to make para tags in every cell if they want red negatives.
+        If we move to dynamic RML, then a number-and-cell-formatting function is possible, but static RML
+        sees everything as text.
+        
+        Note that when the value does not contain the decimal character but there are non-digit characters at the
+        end, it tries to align the rightmost digits with other rows.
+        </para>
+		<spacer length="12"/>
+		<blockTable colWidths="8cm,4cm">
+			<blockTableStyle id="temp003">
+				<!--top row - centre and bold, easy-->
+				<blockFont name="Times-Bold" start="0,0" stop="-1,0"/>
+				<blockAlignment value="center" start="0,0" stop="-1,0"/>
+				<lineStyle kind="LINEABOVE" colorName="purple" start="0,0" stop="-1,0"/>
+				<lineStyle kind="LINEBELOW" colorName="purple" start="0,0" stop="-1,0"/>
+				<!--numeric region - decimal align and set right padding-->
+				<blockAlignment value="decimal" start="1,1" stop="-1,-1"/>
+				<blockRightPadding length="1.5cm" start="1,1" stop="-1,-1"/>
+				<blockTextColor colorName="red" start="1,-2" stop="1,-2"/>
+				<!--bottom row - double underline-->
+				<blockFont name="Times-Bold" start="0,-1" stop="-1,-1"/>
+				<lineStyle kind="LINEABOVE" colorName="purple" start="0,-1" stop="-1,-1"/>
+				<lineStyle kind="LINEBELOW" colorName="purple" start="0,-1" stop="-1,-1" count="2"/>
+			</blockTableStyle>
+			<tr>
+				<td>Corporate Assets</td>
+				<td>Amount</td>
+			</tr>
+			<tr>
+				<td>Fixed Assets</td>
+				<td>1,234,567.89</td>
+			</tr>
+			<tr>
+				<td>Legal Offense Fund</td>
+				<td>86,000,000</td>
+			</tr>
+			<tr>
+				<td>Company Vehicle</td>
+				<td>1,234.8901</td>
+			</tr>
+			<tr>
+				<td>Petty Cash</td>
+				<td>42</td>
+			</tr>
+			<tr>
+				<td>Intellectual Property</td>
+				<td>Questionable</td>
+			</tr>
+			<tr>
+				<td>Bank Overdraft</td>
+				<td fontColor="red">(13,029)</td>
+			</tr>
+			<tr>
+				<td>Goodwill</td>
+				<td fontColor="red">(742,078,231.56)</td>
+			</tr>
+			<tr>
+				<td>Flat Screen TV</td>
+				<td fontColor="red">27 inches</td>
+			</tr>
+			<tr>
+				<td>Net Position</td>
+				<td>Doomed. Really!</td>
+			</tr>
+		</blockTable>
+		<nextFrame/>
+		<para>Individual &lt;td&gt; tags that contain pure strings can override the following attributes:
+        <font face="Courier-Bold" size="9">fontName, fontSize, fontColor, leading, leftPadding, rightPadding, 
+			topPadding, bottomPadding, background, align, vAlign,
+			lineBelowThickness, lineBelowColor, lineBelowCap, lineBelowCount, lineBelowSpace,
+			lineAboveThickness, lineAboveColor, lineAboveCap, lineAboveCount, lineAboveSpace,
+			lineLeftThickness, lineLeftColor, lineLeftCap, lineLeftCount, lineLeftSpace,
+			lineRightThickness, lineRightColor, lineRightCap, lineRightCount, lineRightSpace
+</font>.</para>
+		<spacer length="24"/>
+		<blockTable colWidths="5cm,5cm" style="temp001">
+			<tr>
+				<td>fontName</td>
+				<td fontName="Courier">Courier</td>
+			</tr>
+			<tr>
+				<td>fontName</td>
+				<td fontName="Helvetica">Helvetica</td>
+			</tr>
+			<tr>
+				<td>fontSize</td>
+				<td fontSize="8">8</td>
+			</tr>
+			<tr>
+				<td>fontSize</td>
+				<td fontSize="14">14</td>
+			</tr>
+			<tr>
+				<td>fontColor</td>
+				<td fontColor="red">red</td>
+			</tr>
+			<tr>
+				<td>fontColor</td>
+				<td fontColor="blue">blue</td>
+			</tr>
+			<tr>
+				<td>leading</td>
+				<td leading="16">leading
+is
+16</td>
+			</tr>
+			<tr>
+				<td>leading</td>
+				<td leading="12">leading
+is
+12</td>
+			</tr>
+			<tr>
+				<td>leftPadding</td>
+				<td leftPadding="10">10</td>
+			</tr>
+			<tr>
+				<td>leftPadding</td>
+				<td leftPadding="16">16</td>
+			</tr>
+			<tr>
+				<td>rightPadding</td>
+				<td rightPadding="10" align="right">10</td>
+			</tr>
+			<tr>
+				<td>rightPadding</td>
+				<td rightPadding="24" align="right">24</td>
+			</tr>
+			<tr>
+				<td>topPadding</td>
+				<td topPadding="10">10</td>
+			</tr>
+			<tr>
+				<td>topPadding</td>
+				<td topPadding="24">24</td>
+			</tr>
+			<tr>
+				<td>bottomPadding</td>
+				<td bottomPadding="10">10</td>
+			</tr>
+			<tr>
+				<td>bottomPadding</td>
+				<td bottomPadding="24">24</td>
+			</tr>
+			<tr>
+				<td>background</td>
+				<td background="pink">pink</td>
+			</tr>
+			<tr>
+				<td>background</td>
+				<td background="lightblue">lightblue</td>
+			</tr>
+			<tr>
+				<td>align</td>
+				<td align="left">left</td>
+			</tr>
+			<tr>
+				<td>align</td>
+				<td align="center">center</td>
+			</tr>
+			<tr>
+				<td>align</td>
+				<td align="right">right</td>
+			</tr>
+			<tr>
+				<td>-
+vAlign
+-</td>
+				<td vAlign="top">top</td>
+			</tr>
+			<tr>
+				<td>-
+vAlign
+-</td>
+				<td vAlign="middle">middle</td>
+			</tr>
+			<tr>
+				<td>-
+vAlign
+-</td>
+				<td vAlign="bottom">bottom</td>
+			</tr>
+			<tr>
+				<td>lineBelow</td>
+				<td lineBelowThickness="1" lineBelowColor="red">right</td>
+			</tr>
+		</blockTable>
+		<nextFrame/>
+		<para>This table is using <b>&lt;xpre&gt;</b> tags around the contents of the right hand column.</para>
+		<spacer length="24"/>
+		<blockTable colWidths="5cm,5cm" style="temp001">
+			<tr>
+				<td>fontName</td>
+				<td fontName="Courier">
+					<xpre>Courier</xpre>
+				</td>
+			</tr>
+			<tr>
+				<td>fontName</td>
+				<td fontName="Helvetica">
+					<xpre>Helvetica</xpre>
+				</td>
+			</tr>
+			<tr>
+				<td>fontSize</td>
+				<td fontSize="8">
+					<xpre>8</xpre>
+				</td>
+			</tr>
+			<tr>
+				<td>fontSize</td>
+				<td fontSize="14">
+					<xpre>14</xpre>
+				</td>
+			</tr>
+			<tr>
+				<td>fontColor</td>
+				<td fontColor="red">
+					<xpre>red</xpre>
+				</td>
+			</tr>
+			<tr>
+				<td>fontColor</td>
+				<td fontColor="blue">
+					<xpre>blue</xpre>
+				</td>
+			</tr>
+			<tr>
+				<td>leading</td>
+				<td leading="16">
+					<xpre>leading
+is
+16</xpre>
+				</td>
+			</tr>
+			<tr>
+				<td>leading</td>
+				<td leading="12">
+					<xpre>leading
+is
+12</xpre>
+				</td>
+			</tr>
+			<tr>
+				<td>leftPadding</td>
+				<td leftPadding="10">
+					<xpre>10</xpre>
+				</td>
+			</tr>
+			<tr>
+				<td>leftPadding</td>
+				<td leftPadding="16">
+					<xpre>16</xpre>
+				</td>
+			</tr>
+			<tr>
+				<td>rightPadding</td>
+				<td rightPadding="10" align="right">
+					<xpre>10</xpre>
+				</td>
+			</tr>
+			<tr>
+				<td>rightPadding</td>
+				<td rightPadding="24" align="right">
+					<xpre>24</xpre>
+				</td>
+			</tr>
+			<tr>
+				<td>topPadding</td>
+				<td topPadding="10">
+					<xpre>10</xpre>
+				</td>
+			</tr>
+			<tr>
+				<td>topPadding</td>
+				<td topPadding="24">
+					<xpre>24</xpre>
+				</td>
+			</tr>
+			<tr>
+				<td>bottomPadding</td>
+				<td bottomPadding="10">
+					<xpre>10</xpre>
+				</td>
+			</tr>
+			<tr>
+				<td>bottomPadding</td>
+				<td bottomPadding="24">
+					<xpre>24</xpre>
+				</td>
+			</tr>
+			<tr>
+				<td>background</td>
+				<td background="pink">
+					<xpre>pink</xpre>
+				</td>
+			</tr>
+			<tr>
+				<td>background</td>
+				<td background="lightblue">
+					<xpre>lightblue</xpre>
+				</td>
+			</tr>
+			<tr>
+				<td>align</td>
+				<td align="left">
+					<xpre>left</xpre>
+				</td>
+			</tr>
+			<tr>
+				<td>align</td>
+				<td align="center">
+					<xpre>center</xpre>
+				</td>
+			</tr>
+			<tr>
+				<td>align</td>
+				<td align="right">
+					<xpre>right</xpre>
+				</td>
+			</tr>
+			<tr>
+				<td>-
+vAlign
+-</td>
+				<td vAlign="top">
+					<xpre>top</xpre>
+				</td>
+			</tr>
+			<tr>
+				<td>-
+vAlign
+-</td>
+				<td vAlign="middle">
+					<xpre>middle</xpre>
+				</td>
+			</tr>
+			<tr>
+				<td>-
+vAlign
+-</td>
+				<td vAlign="bottom">
+					<xpre>bottom</xpre>
+				</td>
+			</tr>
+		</blockTable>
+		<nextFrame/>
+		<h2>Bulk Data Support</h2>
+		<para>Very often one wants to get quite a lot of text or numeric data into a table - for
+    example from a database query or imported data file.  Quoting all of this correctly as
+    XML and wrapping in in td and tr tags is time and memory consumuing, unquoting and parsing it
+    all back even more so.  Therefore, instead of explicitly creating row and cell tags, you
+    can now use a new <b>bulkData</b> tag.  This lets you specify a delimiter for fields (default
+    is comma) and for records (default is newline), and rml2pdf will break this up.</para>
+		<para>If you want to avoid having to quote ampersands, wrap this in a CDATA escape sequence.</para>
+		<para>Of course if you want per-cell formatting or to put arbitrary flowables in a cell, you
+    must use the other tags.</para>
+		<spacer length="24"/>
+		<blockTable style="numeric">
+                       <bulkData><![CDATA[
+Product,Profit
+Sprockets,26
+Widgets,34
+Thingummies,217
+Bits & Bobs,23
+Total,277
+        ]]></bulkData>
+		</blockTable>
+		<spacer length="24"/>
+		<para>You can specify a tab with <b>fieldDelim="\t"</b>, but we generally advise against using any
+        whitespace character as a delimiter if you have a choice.  You can also specify fine-grained 
+        "stripping" control; the default behaviour
+        is to strip whitespace off the top and bottom of the overall data block, so blank lines are
+        excluded, and off the ends of each row so line endings and indentation don't matter, but not off each 
+        cell.  Note that the strings in the cells may contain spaces
+        and these spaces will be respected in formatting.  You are also advised to use a CDATA
+        escape sequence around your data so that "&amp;","&lt;" and "&gt;",  characters don't
+        need special handling.</para>
+		<h2>Excel Bulk Data Support</h2>
+		<para>The <b>excelData</b> tag is very similar to the bulk data support, but reads the bulk
+		data from an Excel file instead of from delimited textual data.  The <b>range</b> attribute is
+		optional.</para>
+		<spacer length="24"/>
+                <h3><font color="red">
+                  Sorry Ecel Bulk Support is not yet here
+                </font></h3>
+<!--
+		<blockTable style="numeric">
+			<excelData fileName="exceldata.xls" sheetName="Sheet1" range="A1:B7" />
+		</blockTable>
+-->
+		<spacer length="24"/>
+		<h2>Colour cycles by rows and columns</h2>
+		<para>It's sometimes nice to alternate colours by row (e.g. a pale color then
+		white) to visually break up a long table.  The style lets you specify <b>cycles</b> as
+		well as single colours.  Here we have created a style command which cycles through
+		pale green and white, like old stacks of fanfold paper...</para>
+		<blockTable align="LEFT">
+			<blockTableStyle id="repeater" spaceBefore="12">
+				<lineStyle kind="OUTLINE" colorName="black" thickness="0.5"/>
+				<blockFont name="Times-Bold" size="6" leading="7" start="0,0" stop="-1,0"/>
+				<blockBottomPadding length="1"/>
+				<blockBackground colorName="0xD0D0D0" start="0,0" stop="-1,0"/>
+				<lineStyle kind="LINEBELOW" colorName="black" start="0,0" stop="-1,0" thickness="0.5"/>
+				<!--body section-->
+				<blockFont name="Times-Roman" size="6" leading="7" start="0,1" stop="-1,-1"/>
+				<blockTopPadding length="1" start="0,1" stop="-1,-1"/>
+				<blockBackground colorsByRow="0xD0FFD0;None" start="0,1" stop="-1,-1"/>
+			</blockTableStyle>
+			<tr>
+				<td>Date</td>
+				<td>Item</td>
+				<td>Debit</td>
+				<td>Credit</td>
+			</tr>
+			<tr>
+				<td>28-09-2004</td>
+				<td>Expensive lunch with clients</td>
+				<td>100</td>
+				<td>-</td>
+			</tr>
+			<tr>
+				<td>28-09-2004</td>
+				<td>Expensive lunch with clients</td>
+				<td>100</td>
+				<td>-</td>
+			</tr>
+			<tr>
+				<td>28-09-2004</td>
+				<td>Expensive lunch with clients</td>
+				<td>100</td>
+				<td>-</td>
+			</tr>
+			<tr>
+				<td>28-09-2004</td>
+				<td>Expensive lunch with clients</td>
+				<td>100</td>
+				<td>-</td>
+			</tr>
+			<tr>
+				<td>28-09-2004</td>
+				<td>Expensive lunch with clients</td>
+				<td>100</td>
+				<td>-</td>
+			</tr>
+			<tr>
+				<td>28-09-2004</td>
+				<td>Expensive lunch with clients</td>
+				<td>100</td>
+				<td>-</td>
+			</tr>
+			<tr>
+				<td>28-09-2004</td>
+				<td>Expensive lunch with clients</td>
+				<td>100</td>
+				<td>-</td>
+			</tr>
+			<tr>
+				<td>28-09-2004</td>
+				<td>Expensive lunch with clients</td>
+				<td>100</td>
+				<td>-</td>
+			</tr>
+			<tr>
+				<td>28-09-2004</td>
+				<td>Expensive lunch with clients</td>
+				<td>100</td>
+				<td>-</td>
+			</tr>
+			<tr>
+				<td>28-09-2004</td>
+				<td>Expensive lunch with clients</td>
+				<td>100</td>
+				<td>-</td>
+			</tr>
+			<tr>
+				<td>28-09-2004</td>
+				<td>Expensive lunch with clients</td>
+				<td>100</td>
+				<td>-</td>
+			</tr>
+			<tr>
+				<td>28-09-2004</td>
+				<td>Expensive lunch with clients</td>
+				<td>100</td>
+				<td>-</td>
+			</tr>
+			<tr>
+				<td>28-09-2004</td>
+				<td>Expensive lunch with clients</td>
+				<td>100</td>
+				<td>-</td>
+			</tr>
+			<tr>
+				<td>28-09-2004</td>
+				<td>Expensive lunch with clients</td>
+				<td>100</td>
+				<td>-</td>
+			</tr>
+			<tr>
+				<td>28-09-2004</td>
+				<td>Expensive lunch with clients</td>
+				<td>100</td>
+				<td>-</td>
+			</tr>
+			<tr>
+				<td>28-09-2004</td>
+				<td>Expensive lunch with clients</td>
+				<td>100</td>
+				<td>-</td>
+			</tr>
+			<tr>
+				<td>28-09-2004</td>
+				<td>Expensive lunch with clients</td>
+				<td>100</td>
+				<td>-</td>
+			</tr>
+			<tr>
+				<td>28-09-2004</td>
+				<td>Expensive lunch with clients</td>
+				<td>100</td>
+				<td>-</td>
+			</tr>
+			<tr>
+				<td>28-09-2004</td>
+				<td>Expensive lunch with clients</td>
+				<td>100</td>
+				<td>-</td>
+			</tr>
+			<tr>
+				<td>28-09-2004</td>
+				<td>Expensive lunch with clients</td>
+				<td>100</td>
+				<td>-</td>
+			</tr>
+			<tr>
+				<td>28-09-2004</td>
+				<td>Bottom row should be greem</td>
+				<td>110</td>
+				<td>-</td>
+			</tr>
+		</blockTable>
+		<nextFrame/>
+		<para>Try again by column, with three colors this time.  Also ensure some row heights
+		vary to check accuracy of drawing.</para>
+		<blockTable align="RIGHT">
+			<blockTableStyle id="repeater2" spaceBefore="12">
+				<lineStyle kind="OUTLINE" colorName="black" thickness="0.5"/>
+				<lineStyle kind="GRID" colorName="gray" thickness="0.25"/>
+				<blockFont name="Times-Bold" size="6" leading="7" start="0,0" stop="-1,0"/>
+				<blockBottomPadding length="1"/>
+				<blockBackground colorName="0xD0D0D0" start="0,0" stop="-1,0"/>
+				<lineStyle kind="LINEBELOW" colorName="black" start="0,0" stop="-1,0" thickness="0.5"/>
+				<!--body section-->
+				<blockFont name="Times-Roman" size="6" leading="7" start="0,1" stop="-1,-1"/>
+				<blockTopPadding length="1" start="0,1" stop="-1,-1"/>
+				<blockBackground colorsByRow="0xD0FFD0;0xFFD0FF;None" start="0,1" stop="-1,-1"/>
+			</blockTableStyle>
+			<tr>
+				<td>Date</td>
+				<td>Item</td>
+				<td>Debit</td>
+				<td>Credit</td>
+			</tr>
+			<tr>
+				<td>28-09-2004</td>
+				<td>Expensive lunch with clients</td>
+				<td>100</td>
+				<td>-</td>
+			</tr>
+			<tr>
+				<td>28-09-2004</td>
+				<td>Expensive lunch with clients</td>
+				<td>100</td>
+				<td>-</td>
+			</tr>
+			<tr>
+				<td>28-09-2004</td>
+				<td>Expensive lunch with clients
+plus magnum of champagne</td>
+				<td>400</td>
+				<td>-</td>
+			</tr>
+			<tr>
+				<td>28-09-2004</td>
+				<td>Expensive lunch with clients</td>
+				<td>100</td>
+				<td>-</td>
+			</tr>
+			<tr>
+				<td>28-09-2004</td>
+				<td>Expensive lunch with clients</td>
+				<td>100</td>
+				<td>-</td>
+			</tr>
+			<tr>
+				<td>28-09-2004</td>
+				<td>Expensive lunch with clients</td>
+				<td>100</td>
+				<td>-</td>
+			</tr>
+			<tr>
+				<td>28-09-2004</td>
+				<td>Expensive lunch with clients</td>
+				<td>100</td>
+				<td>-</td>
+			</tr>
+			<tr>
+				<td>28-09-2004</td>
+				<td>Expensive lunch with clients</td>
+				<td>100</td>
+				<td>-</td>
+			</tr>
+			<tr>
+				<td>28-09-2004</td>
+				<td>Expensive lunch with clients</td>
+				<td>100</td>
+				<td>-</td>
+			</tr>
+		</blockTable>
+		<para>And now by column (although this may be used less...)</para>
+		<blockTable>
+			<blockTableStyle id="repeater3" spaceBefore="12">
+				<lineStyle kind="OUTLINE" colorName="black" thickness="0.5"/>
+				<lineStyle kind="GRID" colorName="gray" thickness="0.25"/>
+				<blockFont name="Times-Bold" size="6" leading="7" start="0,0" stop="-1,0"/>
+				<blockBottomPadding length="1"/>
+				<blockBackground colorName="0xD0D0D0" start="0,0" stop="-1,0"/>
+				<lineStyle kind="LINEBELOW" colorName="black" start="0,0" stop="-1,0" thickness="0.5"/>
+				<!--body section-->
+				<blockFont name="Times-Roman" size="6" leading="7" start="0,1" stop="-1,-1"/>
+				<blockTopPadding length="1" start="0,1" stop="-1,-1"/>
+				<blockBackground colorsByCol="0xD0FFD0;None" start="0,1" stop="-1,-1"/>
+			</blockTableStyle>
+			<tr>
+				<td>Date</td>
+				<td>Item</td>
+				<td>Jan</td>
+				<td>Feb</td>
+				<td>Mar</td>
+				<td>Apr</td>
+				<td>May</td>
+				<td>Jun</td>
+				<td>Jul</td>
+				<td>Aug</td>
+				<td>Sep</td>
+				<td>Oct</td>
+				<td>Nov</td>
+				<td>Dec</td>
+				<td>Total</td>
+			</tr>
+			<tr>
+				<td>Expenses</td>
+				<td>Entertainment</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>1200</td>
+			</tr>
+			<tr>
+				<td>Expenses</td>
+				<td>Entertainment</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>1200</td>
+			</tr>
+			<tr>
+				<td>Expenses</td>
+				<td>Entertainment</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>1200</td>
+			</tr>
+			<tr>
+				<td>Expenses</td>
+				<td>Entertainment</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>1200</td>
+			</tr>
+			<tr>
+				<td>Expenses</td>
+				<td>Entertainment</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>100</td>
+				<td>1200</td>
+			</tr>
+		</blockTable>
+
+
+		<h2>Splitting over pages - top and bottom rows</h2>
+		<para>Sometimes a table splits over a page and you don't have a grid, so the bottom part (and top of the
+		new page) have no line boxing them in.  The splitfirst and splilast magic coordinates can be used to insert
+		a line drawing routine into the style for this. I used an ugly thick purple line!</para>
+		<blockTable repeatRows="1">
+			<blockTableStyle id="repeater" spaceBefore="12">
+				<lineStyle kind="OUTLINE" colorName="black" thickness="0.5"/>
+				<blockFont name="Times-Bold" size="6" leading="7" start="0,0" stop="-1,0"/>
+				<blockBottomPadding length="1"/>
+				<blockBackground colorName="0xD0D0D0" start="0,0" stop="-1,0"/>
+				<lineStyle kind="LINEBELOW" colorName="black" start="0,0" stop="-1,0" thickness="0.5"/>
+				<!--body section-->
+				<blockFont name="Times-Roman" size="6" leading="7" start="0,1" stop="-1,-1"/>
+				<blockTopPadding length="1" start="0,1" stop="-1,-1"/>
+				<blockBackground colorsByRow="0xD0FFD0;None" start="0,1" stop="-1,-1"/>
+				<blockAlignment value="right" start="1,1" stop="-1,-1"/>
+				
+				<!-- ensure the bottom of the table is 'closed off' during the split.  I've used an ugly red dashed line -->
+				<lineStyle kind="LINEBELOW" colorName="purple" start="0,splitlast" stop="-1,splitlast" thickness="3"/>
+				
+				
+			</blockTableStyle>
+			<tr>	<td>Date</td><td>Item</td><td>Debit</td><td>Credit</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100</td><td>-</td></tr>
+			<tr>	<td>28-09-2004</td><td>Expensive lunch with clients</td><td>100  </td><td>-</td></tr>
+
+		</blockTable>
+
+		<bookmark name="BACK_PAGE"/>
+	</story>
+</document>



More information about the Checkins mailing list