docs/userguide/ch6_tables.py
author rgbecker
Sat, 11 Aug 2001 14:35:52 +0000
changeset 1128 bc5ca3b9a13b
parent 735 5dffc9c425d6
child 1211 5aaff40e1a3c
permissions -rw-r--r--
Restructured
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
494
54257447cfe9 Changed to indirect copyright
rgbecker
parents: 450
diff changeset
     1
#copyright ReportLab Inc. 2000
54257447cfe9 Changed to indirect copyright
rgbecker
parents: 450
diff changeset
     2
#see license.txt for license details
54257447cfe9 Changed to indirect copyright
rgbecker
parents: 450
diff changeset
     3
#history http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/docs/userguide/ch6_tables.py?cvsroot=reportlab
1128
bc5ca3b9a13b Restructured
rgbecker
parents: 735
diff changeset
     4
#$Header: /tmp/reportlab/docs/userguide/ch6_tables.py,v 1.18 2001/08/11 14:35:52 rgbecker Exp $
bc5ca3b9a13b Restructured
rgbecker
parents: 735
diff changeset
     5
from rl_doc_utils import *
424
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
     6
from reportlab.platypus import Image
341
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
     7
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
     8
heading1("Tables and TableStyles")
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
     9
disc("""
399
600ebb5a92cf fixed typos.
dinu_gherman
parents: 391
diff changeset
    10
The $Table$ class is derived from the $Flowable$ class and is intended
341
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    11
as a simple textual gridding mechanism. $Table$ cells can hold anything which can be converted to
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    12
a <b>Python</b> $string$. 
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    13
""")
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    14
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    15
disc("""
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    16
$Tables$ are created by passing the constructor a sequence of column widths,
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    17
a sequence of row heights and the data in
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    18
row order. Drawing of the table can be controlled by using a $TableStyle$ instance. This allows control of the
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    19
color and weight of the lines (if any), and the font, alignment and padding of the text.
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    20
A primitive automatic row height and or column width calculation mechanism is provided for.
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    21
""")
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    22
399
600ebb5a92cf fixed typos.
dinu_gherman
parents: 391
diff changeset
    23
heading2('$Table$ User Methods')
600ebb5a92cf fixed typos.
dinu_gherman
parents: 391
diff changeset
    24
disc("""These are the main methods which are of interest to the client programmer.""")
341
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    25
356
377367fe28cb Table argument order changed
rgbecker
parents: 349
diff changeset
    26
heading4("""$Table(data, colWidths=None, rowHeights=None, style=None, splitByRow=1,
377367fe28cb Table argument order changed
rgbecker
parents: 349
diff changeset
    27
repeatRows=0, repeatCols=0)$""")
341
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    28
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    29
disc("""The $data$ argument is a sequence of sequences of cell values each of which
424
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
    30
should be convertible to a string value using the $str$ function or should be a Flowable instance (such as a $Paragraph$) or a list (or tuple) of such instances.
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
    31
If a cell value is a $Flowable$ or list of $Flowables$ these must either have a determined width
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
    32
or the containing column must have a fixed width.
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
    33
The first row of cell values
399
600ebb5a92cf fixed typos.
dinu_gherman
parents: 391
diff changeset
    34
is in $data[0]$ i.e. the values are in row order. The $i$, $j$<sup>th.</sup> cell value is in
341
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    35
$data[i][j]$. Newline characters $'\\n'$ in cell values are treated as line split characters and
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    36
are used at <i>draw</i> time to format the cell into lines.
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    37
""")
356
377367fe28cb Table argument order changed
rgbecker
parents: 349
diff changeset
    38
disc("""The other arguments are fairly obvious, the $colWidths$ argument is a sequence
377367fe28cb Table argument order changed
rgbecker
parents: 349
diff changeset
    39
of numbers or possibly $None$, representing the widths of the columns. The number of elements
377367fe28cb Table argument order changed
rgbecker
parents: 349
diff changeset
    40
in $colWidths$ determines the number of columns in the table.
377367fe28cb Table argument order changed
rgbecker
parents: 349
diff changeset
    41
A value of $None$ means that the corresponding column width should be calculated automatically.""")
341
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    42
356
377367fe28cb Table argument order changed
rgbecker
parents: 349
diff changeset
    43
disc("""The $rowHeights$ argument is a sequence
377367fe28cb Table argument order changed
rgbecker
parents: 349
diff changeset
    44
of numbers or possibly $None$, representing the heights of the rows. The number of elements
377367fe28cb Table argument order changed
rgbecker
parents: 349
diff changeset
    45
in $rowHeights$ determines the number of rows in the table.
377367fe28cb Table argument order changed
rgbecker
parents: 349
diff changeset
    46
A value of $None$ means that the corresponding row height should be calculated automatically.""")
377367fe28cb Table argument order changed
rgbecker
parents: 349
diff changeset
    47
377367fe28cb Table argument order changed
rgbecker
parents: 349
diff changeset
    48
disc("""The $style$ argument can be an initial style for the table.""")
399
600ebb5a92cf fixed typos.
dinu_gherman
parents: 391
diff changeset
    49
disc("""The $splitByRow$ argument is a Boolean indicating that the $Table$ should split itself
600ebb5a92cf fixed typos.
dinu_gherman
parents: 391
diff changeset
    50
by row before attempting to split itself by column when too little space is available in
356
377367fe28cb Table argument order changed
rgbecker
parents: 349
diff changeset
    51
the current drawing area and the caller wants the $Table$ to split.""")
377367fe28cb Table argument order changed
rgbecker
parents: 349
diff changeset
    52
377367fe28cb Table argument order changed
rgbecker
parents: 349
diff changeset
    53
disc("""The $repeatRows$ and $repeatCols$ arguments specify the number of leading rows and columns
377367fe28cb Table argument order changed
rgbecker
parents: 349
diff changeset
    54
that should be repeated when the $Table$ is asked to split itself.""")
399
600ebb5a92cf fixed typos.
dinu_gherman
parents: 391
diff changeset
    55
heading4('$Table.setStyle(tblStyle)$')
341
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    56
disc("""
399
600ebb5a92cf fixed typos.
dinu_gherman
parents: 391
diff changeset
    57
This method applies a particular instance of class $TableStyle$ (discussed below)
341
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    58
to the $Table$ instance. This is the only way to get $tables$ to appear
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    59
in a nicely formatted way.
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    60
""")
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    61
disc("""
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    62
Successive uses of the $setStyle$ method apply the styles in an additive fashion.
399
600ebb5a92cf fixed typos.
dinu_gherman
parents: 391
diff changeset
    63
That is, later applications override earlier ones where they overlap.
341
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    64
""")
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    65
399
600ebb5a92cf fixed typos.
dinu_gherman
parents: 391
diff changeset
    66
heading2('$TableStyle$')
341
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    67
disc("""
399
600ebb5a92cf fixed typos.
dinu_gherman
parents: 391
diff changeset
    68
This class is created by passing it a sequence of <i>commands</i>, each command
341
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    69
is a tuple identified by its first element which is a string; the remaining
399
600ebb5a92cf fixed typos.
dinu_gherman
parents: 391
diff changeset
    70
elements of the command tuple represent the start and stop cell coordinates
600ebb5a92cf fixed typos.
dinu_gherman
parents: 391
diff changeset
    71
of the command and possibly thickness and colors, etc.
341
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    72
""")
349
d96f5098af2b Pargraph & Table
rgbecker
parents: 341
diff changeset
    73
heading2("$TableStyle$ User Methods")
d96f5098af2b Pargraph & Table
rgbecker
parents: 341
diff changeset
    74
heading3("$TableStyle(commandSequence)$")
341
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    75
disc("""The creation method initializes the $TableStyle$ with the argument
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    76
command sequence as an example:""")
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    77
eg("""
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    78
    LIST_STYLE = TableStyle(
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    79
        [('LINEABOVE', (0,0), (-1,0), 2, colors.green),
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    80
        ('LINEABOVE', (0,1), (-1,-1), 0.25, colors.black),
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    81
        ('LINEBELOW', (0,-1), (-1,-1), 2, colors.green),
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    82
        ('ALIGN', (1,1), (-1,-1), 'RIGHT')]
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    83
        )
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    84
""")
349
d96f5098af2b Pargraph & Table
rgbecker
parents: 341
diff changeset
    85
heading3("$TableStyle.add(commandSequence)$")
341
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    86
disc("""This method allows you to add commands to an existing
399
600ebb5a92cf fixed typos.
dinu_gherman
parents: 391
diff changeset
    87
$TableStyle$, i.e. you can build up $TableStyles$ in multiple statements.
341
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    88
""")
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    89
eg("""
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    90
    LIST_STYLE.add([('BACKGROUND', (0,0), (-1,0), colors.Color(0,0.7,0.7))])
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    91
""")
349
d96f5098af2b Pargraph & Table
rgbecker
parents: 341
diff changeset
    92
heading3("$TableStyle.getCommands()$")
341
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    93
disc("""This method returns the sequence of commands of the instance.""")
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    94
eg("""
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    95
    cmds = LIST_STYLE.getCommands()
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    96
""")
349
d96f5098af2b Pargraph & Table
rgbecker
parents: 341
diff changeset
    97
heading2("$TableStyle$ Commands")
341
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    98
disc("""The commands passed to $TableStyles$ come in three main groups
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
    99
which affect the table background, draw lines, or set cell styles.
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   100
""")
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   101
disc("""The first element of each command is its identifier,
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   102
the second and third arguments determine the cell coordinates of
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   103
the box of cells which are affected with negative coordinates
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   104
counting backwards from the limit values as in <b>Python</b>
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   105
indexing. The coordinates are given as
399
600ebb5a92cf fixed typos.
dinu_gherman
parents: 391
diff changeset
   106
(column, row) which follows the spreadsheet 'A1' model, but not
341
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   107
the more natural (for mathematicians) 'RC' ordering.
399
600ebb5a92cf fixed typos.
dinu_gherman
parents: 391
diff changeset
   108
The top left cell is (0, 0) the bottom right is (-1, -1). Depending on
600ebb5a92cf fixed typos.
dinu_gherman
parents: 391
diff changeset
   109
the command various extra (???) occur at indices beginning at 3 on.
341
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   110
""")
349
d96f5098af2b Pargraph & Table
rgbecker
parents: 341
diff changeset
   111
heading3("""$TableStyle$ Cell Formatting Commands""")
341
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   112
disc("""The cell formatting commands all begin with an identifier, followed by
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   113
the start and stop cell definitions and the perhaps other arguments.
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   114
the cell formatting commands are:""")
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   115
eg("""
362
2a124e1f58b3 Changed CellStyles
rgbecker
parents: 360
diff changeset
   116
FONT                    - takes fontname, optional fontsize and optional leading.
2a124e1f58b3 Changed CellStyles
rgbecker
parents: 360
diff changeset
   117
FONTNAME (or FACE)      - takes fontname.
2a124e1f58b3 Changed CellStyles
rgbecker
parents: 360
diff changeset
   118
FONTSIZE (or SIZE)      - takes fontsize in points; leading may get out of sync.
2a124e1f58b3 Changed CellStyles
rgbecker
parents: 360
diff changeset
   119
LEADING                 - takes leading in points.
341
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   120
TEXTCOLOR               - takes a color name or (R,G,B) tuple.
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   121
ALIGNMENT (or ALIGN)    - takes one of LEFT, RIGHT and CENTRE (or CENTER).
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   122
LEFTPADDING             - takes an integer, defaults to 6.
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   123
RIGHTPADDING            - takes an integer, defaults to 6.
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   124
BOTTOMPADDING           - takes an integer, defaults to 3.
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   125
TOPPADDING              - takes an integer, defaults to 3.
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   126
BACKGROUND              - takes a color.
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   127
VALIGN                  - takes one of TOP, MIDDLE or the default BOTTOM
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   128
""")
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   129
disc("""This sets the background cell color in the relevant cells.
399
600ebb5a92cf fixed typos.
dinu_gherman
parents: 391
diff changeset
   130
The following example shows the $BACKGROUND$, and $TEXTCOLOR$ commands in action:""")
341
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   131
EmbeddedCode("""
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   132
data=  [['00', '01', '02', '03', '04'],
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   133
        ['10', '11', '12', '13', '14'],
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   134
        ['20', '21', '22', '23', '24'],
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   135
        ['30', '31', '32', '33', '34']]
356
377367fe28cb Table argument order changed
rgbecker
parents: 349
diff changeset
   136
t=Table(data)
341
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   137
t.setStyle(TableStyle([('BACKGROUND',(1,1),(-2,-2),colors.green),
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   138
                        ('TEXTCOLOR',(0,0),(1,-1),colors.red)]))
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   139
""")
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   140
disc("""To see the effects of the alignment styles we need  some widths
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   141
and a grid, but it should be easy to see where the styles come from.""")
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   142
EmbeddedCode("""
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   143
data=  [['00', '01', '02', '03', '04'],
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   144
        ['10', '11', '12', '13', '14'],
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   145
        ['20', '21', '22', '23', '24'],
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   146
        ['30', '31', '32', '33', '34']]
356
377367fe28cb Table argument order changed
rgbecker
parents: 349
diff changeset
   147
t=Table(data,5*[0.4*inch], 4*[0.4*inch])
341
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   148
t.setStyle(TableStyle([('ALIGN',(1,1),(-2,-2),'RIGHT'),
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   149
                        ('TEXTCOLOR',(1,1),(-2,-2),colors.red),
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   150
                        ('VALIGN',(0,0),(0,-1),'TOP'),
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   151
                        ('TEXTCOLOR',(0,0),(0,-1),colors.blue),
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   152
                        ('ALIGN',(0,-1),(-1,-1),'CENTER'),
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   153
                        ('VALIGN',(0,-1),(-1,-1),'MIDDLE'),
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   154
                        ('TEXTCOLOR',(0,-1),(-1,-1),colors.green),
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   155
                        ('INNERGRID', (0,0), (-1,-1), 0.25, colors.black),
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   156
                        ('BOX', (0,0), (-1,-1), 0.25, colors.black),
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   157
                        ]))
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   158
""")
349
d96f5098af2b Pargraph & Table
rgbecker
parents: 341
diff changeset
   159
heading3("""$TableStyle$ Line Commands""")
341
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   160
disc("""
399
600ebb5a92cf fixed typos.
dinu_gherman
parents: 391
diff changeset
   161
    Line commands begin with the identifier, the start and stop cell coordinates
341
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   162
    and always follow this with the thickness (in points) and color of the desired lines. Colors can be names,
399
600ebb5a92cf fixed typos.
dinu_gherman
parents: 391
diff changeset
   163
    or they can be specified as a (R, G, B) tuple, where R, G and B are floats and (0, 0, 0) is black. The line
341
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   164
    command names are: GRID, BOX, OUTLINE, INNERGRID, LINEBELOW, LINEABOVE, LINEBEFORE
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   165
    and LINEAFTER. BOX and OUTLINE are equivalent, and GRID is the equivalent of applying both BOX and
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   166
    INNERGRID.
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   167
""")
363
e72f6cceebca Added Keep together CPage
rgbecker
parents: 362
diff changeset
   168
CPage(4.0)
341
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   169
disc("""We can see some line commands in action with the following example.
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   170
""")
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   171
EmbeddedCode("""
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   172
data=  [['00', '01', '02', '03', '04'],
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   173
        ['10', '11', '12', '13', '14'],
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   174
        ['20', '21', '22', '23', '24'],
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   175
        ['30', '31', '32', '33', '34']]
360
f9b73082ec6e Table docs adjusted for new styles
rgbecker
parents: 356
diff changeset
   176
t=Table(data,style=[('GRID',(1,1),(-2,-2),1,colors.green),
f9b73082ec6e Table docs adjusted for new styles
rgbecker
parents: 356
diff changeset
   177
                    ('BOX',(0,0),(1,-1),2,colors.red),
f9b73082ec6e Table docs adjusted for new styles
rgbecker
parents: 356
diff changeset
   178
					('LINEABOVE',(1,2),(-2,2),1,colors.blue),
f9b73082ec6e Table docs adjusted for new styles
rgbecker
parents: 356
diff changeset
   179
					('LINEBEFORE',(2,1),(2,-2),1,colors.pink),
f9b73082ec6e Table docs adjusted for new styles
rgbecker
parents: 356
diff changeset
   180
					])
341
27c68d524504 Broke up the user guide into chapters.
andy_robinson
parents:
diff changeset
   181
""")
424
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   182
disc("""Line commands cause problems for tables when they split; the following example
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   183
shows a table being split in various positions""")
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   184
EmbeddedCode("""
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   185
data=  [['00', '01', '02', '03', '04'],
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   186
		['10', '11', '12', '13', '14'],
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   187
		['20', '21', '22', '23', '24'],
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   188
		['30', '31', '32', '33', '34']]
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   189
t=Table(data,style=[
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   190
				('GRID',(0,0),(-1,-1),0.5,colors.grey),
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   191
				('GRID',(1,1),(-2,-2),1,colors.green),
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   192
				('BOX',(0,0),(1,-1),2,colors.red),
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   193
				('BOX',(0,0),(-1,-1),2,colors.black),
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   194
				('LINEABOVE',(1,2),(-2,2),1,colors.blue),
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   195
				('LINEBEFORE',(2,1),(2,-2),1,colors.pink),
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   196
				('BACKGROUND', (0, 0), (0, 1), colors.pink),
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   197
				('BACKGROUND', (1, 1), (1, 2), colors.lavender),
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   198
				('BACKGROUND', (2, 2), (2, 3), colors.orange),
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   199
				])
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   200
""")
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   201
t=getStory()[-1]
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   202
getStory().append(Spacer(0,6))
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   203
for s in t.split(4*inch,30):
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   204
	getStory().append(s)
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   205
	getStory().append(Spacer(0,6))
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   206
getStory().append(Spacer(0,6))
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   207
for s in t.split(4*inch,36):
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   208
	getStory().append(s)
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   209
	getStory().append(Spacer(0,6))
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   210
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   211
disc("""When unsplit and split at the first or second row.""")
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   212
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   213
CPage(4.0)
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   214
heading3("""Complex Cell Values""")
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   215
disc("""
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   216
As mentioned above we can have complicated cell values including $Paragraphs$, $Images$ and other $Flowables$
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   217
or lists of the same. To see this in operation consider the following code and the table it produces.
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   218
Note that the $Image$ has a white background which will obscure any background you choose for the cell.
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   219
To get better results you should use a transparent background.
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   220
""")
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   221
import os, reportlab.platypus
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   222
I = '../images/replogo.gif'
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   223
EmbeddedCode("""
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   224
I = Image('%s')
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   225
I.drawHeight = 1.25*inch*I.drawHeight / I.drawWidth
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   226
I.drawWidth = 1.25*inch
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   227
P0 = Paragraph('''
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   228
               <b>A pa<font color=red>r</font>a<i>graph</i></b>
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   229
               <super><font color=yellow>1</font></super>''',
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   230
               styleSheet["BodyText"])
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   231
P = Paragraph('''
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   232
       <para align=center spaceb=3>The <b>ReportLab Left
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   233
       <font color=red>Logo</font></b>
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   234
       Image</para>''',
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   235
       styleSheet["BodyText"])
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   236
data=  [['A',   'B', 'C',     P0, 'D'],
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   237
		['00', '01', '02', [I,P], '04'],
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   238
		['10', '11', '12', [P,I], '14'],
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   239
		['20', '21', '22',  '23', '24'],
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   240
		['30', '31', '32',  '33', '34']]
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   241
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   242
t=Table(data,style=[('GRID',(1,1),(-2,-2),1,colors.green),
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   243
					('BOX',(0,0),(1,-1),2,colors.red),
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   244
					('LINEABOVE',(1,2),(-2,2),1,colors.blue),
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   245
					('LINEBEFORE',(2,1),(2,-2),1,colors.pink),
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   246
					('BACKGROUND', (0, 0), (0, 1), colors.pink),
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   247
					('BACKGROUND', (1, 1), (1, 2), colors.lavender),
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   248
					('BACKGROUND', (2, 2), (2, 3), colors.orange),
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   249
					('BOX',(0,0),(-1,-1),2,colors.black),
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   250
					('GRID',(0,0),(-1,-1),0.5,colors.black),
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   251
					('VALIGN',(3,0),(3,0),'BOTTOM'),
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   252
					('BACKGROUND',(3,0),(3,0),colors.limegreen),
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   253
					('BACKGROUND',(3,1),(3,1),colors.khaki),
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   254
					('ALIGN',(3,1),(3,1),'CENTER'),
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   255
					('BACKGROUND',(3,2),(3,2),colors.beige),
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   256
					('ALIGN',(3,2),(3,2),'LEFT'),
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   257
					])
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   258
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   259
t._argW[3]=1.5*inch
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   260
"""%I)
240ee4e6d0d7 Table cell updates
rgbecker
parents: 399
diff changeset
   261
387
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   262
heading1("""Other Useful $Flowables$""")
441
4b7abf4f9565 Preformatted docco added
rgbecker
parents: 424
diff changeset
   263
heading2("""$Preformatted(text, style, bulletText = None, dedent=0)$""")
4b7abf4f9565 Preformatted docco added
rgbecker
parents: 424
diff changeset
   264
disc("""
4b7abf4f9565 Preformatted docco added
rgbecker
parents: 424
diff changeset
   265
Creates a preformatted paragraph which does no wrapping, line splitting or other manipulations.
4b7abf4f9565 Preformatted docco added
rgbecker
parents: 424
diff changeset
   266
No $XML$ style tags are taken account of in the text.
4b7abf4f9565 Preformatted docco added
rgbecker
parents: 424
diff changeset
   267
If dedent is non zero $dedent$ common leading
4b7abf4f9565 Preformatted docco added
rgbecker
parents: 424
diff changeset
   268
spaces will be removed from the front of each line.
4b7abf4f9565 Preformatted docco added
rgbecker
parents: 424
diff changeset
   269
""")
4b7abf4f9565 Preformatted docco added
rgbecker
parents: 424
diff changeset
   270
heading2("""$XPreformatted(text, style, bulletText = None, dedent=0, frags=None)$""")
4b7abf4f9565 Preformatted docco added
rgbecker
parents: 424
diff changeset
   271
disc("""
4b7abf4f9565 Preformatted docco added
rgbecker
parents: 424
diff changeset
   272
This is a non rearranging form of the $Paragraph$ class; $XML$ tags are allowed in
4b7abf4f9565 Preformatted docco added
rgbecker
parents: 424
diff changeset
   273
$text$ and have the same meanings as for the $Paragraph$ class.
4b7abf4f9565 Preformatted docco added
rgbecker
parents: 424
diff changeset
   274
As for $Preformatted$, if dedent is non zero $dedent$ common leading
4b7abf4f9565 Preformatted docco added
rgbecker
parents: 424
diff changeset
   275
spaces will be removed from the front of each line.
4b7abf4f9565 Preformatted docco added
rgbecker
parents: 424
diff changeset
   276
""")
4b7abf4f9565 Preformatted docco added
rgbecker
parents: 424
diff changeset
   277
EmbeddedCode("""
4b7abf4f9565 Preformatted docco added
rgbecker
parents: 424
diff changeset
   278
from reportlab.lib.styles import getSampleStyleSheet
4b7abf4f9565 Preformatted docco added
rgbecker
parents: 424
diff changeset
   279
stylesheet=getSampleStyleSheet()
4b7abf4f9565 Preformatted docco added
rgbecker
parents: 424
diff changeset
   280
normalStyle = stylesheet['Normal']
4b7abf4f9565 Preformatted docco added
rgbecker
parents: 424
diff changeset
   281
text='''
446
400496648288 Added blank lines to XPreformatted sample
rgbecker
parents: 441
diff changeset
   282
441
4b7abf4f9565 Preformatted docco added
rgbecker
parents: 424
diff changeset
   283
   This is a non rearranging form of the <b>Paragraph</b> class;
4b7abf4f9565 Preformatted docco added
rgbecker
parents: 424
diff changeset
   284
   <b><font color=red>XML</font></b> tags are allowed in <i>text</i> and have the same
446
400496648288 Added blank lines to XPreformatted sample
rgbecker
parents: 441
diff changeset
   285
   
447
e9885eca2bbc harder test of XPreformatted
rgbecker
parents: 446
diff changeset
   286
      meanings as for the <b>Paragraph</b> class.
441
4b7abf4f9565 Preformatted docco added
rgbecker
parents: 424
diff changeset
   287
   As for <b>Preformatted</b>, if dedent is non zero <font color=red size=+1>dedent</font>
447
e9885eca2bbc harder test of XPreformatted
rgbecker
parents: 446
diff changeset
   288
       common leading spaces will be removed from the
441
4b7abf4f9565 Preformatted docco added
rgbecker
parents: 424
diff changeset
   289
   front of each line.
450
37919675ea28 Further tweaks of XPreformatted
rgbecker
parents: 447
diff changeset
   290
   You can have &amp;amp; style entities as well for &amp; &lt; &gt; and &quot;.
446
400496648288 Added blank lines to XPreformatted sample
rgbecker
parents: 441
diff changeset
   291
441
4b7abf4f9565 Preformatted docco added
rgbecker
parents: 424
diff changeset
   292
'''
4b7abf4f9565 Preformatted docco added
rgbecker
parents: 424
diff changeset
   293
t=XPreformatted(text,normalStyle,dedent=3)
4b7abf4f9565 Preformatted docco added
rgbecker
parents: 424
diff changeset
   294
""")
387
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   295
heading2("""$Image(filename, width=None, height=None)$""")
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   296
disc("""Create a flowable which will contain the image defined by the data in file $filename$.
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   297
The default <b>PDF</b> image type <i>jpeg</i> is supported and if the <b>PIL</b> extension to <b>Python</b>
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   298
is installed the other image types can also be handled. If $width$ and or $height$ are specified
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   299
then they determine the dimension of the displayed image in <i>points</i>. If either dimension is
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   300
not specified (or specified as $None$) then the corresponding pixel dimension of the image is assumed
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   301
to be in <i>points</i> and used.
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   302
""")
391
737b13ef7064 Image probs again
rgbecker
parents: 389
diff changeset
   303
I=os.path.join(os.path.dirname(__file__),'..','images','lj8100.jpg')
387
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   304
eg("""
389
99e299fc85ea Copied lj8100.jpg
rgbecker
parents: 387
diff changeset
   305
Image("lj8100.jpg")
387
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   306
""",after=0.1)
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   307
disc("""will display as""")
391
737b13ef7064 Image probs again
rgbecker
parents: 389
diff changeset
   308
try:
737b13ef7064 Image probs again
rgbecker
parents: 389
diff changeset
   309
	getStory().append(Image(I))
737b13ef7064 Image probs again
rgbecker
parents: 389
diff changeset
   310
except:
737b13ef7064 Image probs again
rgbecker
parents: 389
diff changeset
   311
	disc("""An image should have appeared here.""")
387
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   312
disc("""whereas""")
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   313
eg("""
389
99e299fc85ea Copied lj8100.jpg
rgbecker
parents: 387
diff changeset
   314
Image("lj8100.jpg", width=2*inch, height=2*inch)
387
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   315
""", after=0.1)
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   316
disc('produces')
391
737b13ef7064 Image probs again
rgbecker
parents: 389
diff changeset
   317
try:
737b13ef7064 Image probs again
rgbecker
parents: 389
diff changeset
   318
	getStory().append(Image(I, width=2*inch, height=2*inch))
737b13ef7064 Image probs again
rgbecker
parents: 389
diff changeset
   319
except:
737b13ef7064 Image probs again
rgbecker
parents: 389
diff changeset
   320
	disc("""An image should have appeared here.""")
387
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   321
heading2("""$Spacer(width, height)$""")
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   322
disc("""This does exactly as would be expected; it adds a certain amount of space into the story.
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   323
At present this only works for vertical space.
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   324
""")
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   325
CPage(1)
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   326
heading2("""$PageBreak()$""")
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   327
disc("""This $Flowable$ represents a page break. It works by effectively consuming all vertical
399
600ebb5a92cf fixed typos.
dinu_gherman
parents: 391
diff changeset
   328
space given to it. This is sufficient for a single $Frame$ document, but would only be a
387
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   329
frame break for multiple frames so the $BaseDocTemplate$ mechanism
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   330
detects $pageBreaks$ internally and handles them specially.
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   331
""")
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   332
CPage(1)
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   333
heading2("""$CondPageBreak(height)$""")
399
600ebb5a92cf fixed typos.
dinu_gherman
parents: 391
diff changeset
   334
disc("""This $Flowable$ attempts to force a $Frame$ break if insufficient vertical space remains 
600ebb5a92cf fixed typos.
dinu_gherman
parents: 391
diff changeset
   335
in the current $Frame$. It is thus probably wrongly named and should probably be renamed as
387
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   336
$CondFrameBreak$.
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   337
""")
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   338
CPage(1)
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   339
heading2("""$KeepTogether(flowables)$""")
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   340
disc("""
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   341
This compound $Flowable$ takes a list of $Flowables$ and attempts to keep them in the same $Frame$.
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   342
If the total height of the $Flowables$ in the list $flowables$ exceeds the current frame's available
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   343
space then all the space is used and a frame break is forced.
96aed7d43e4d Added Useful Flowables
rgbecker
parents: 363
diff changeset
   344
""")