@@ -149,6 +149,8 @@ def __init__(self, includeTOC=True):
149
149
self .toc .levelStyles = [self .toc_h1 , self .toc_h2 ]
150
150
self .headingnumber = [0 , 0 , 0 , 0 ]
151
151
self .table_data = []
152
+ self .note_data = []
153
+ self .table_validation = None
152
154
153
155
def _spacer (self ):
154
156
self .contents .append (self .spacer )
@@ -187,18 +189,43 @@ def paragraph(self, text, style=None):
187
189
self .contents .append (Paragraph (text , style ))
188
190
self ._spacer ()
189
191
190
- def createtable (self , ident , header , style ):
192
+ def createtable (self , ident , header , style , validation = None ):
191
193
# Layout is [headings, ....]
192
194
self .table_data = []
193
195
self .table_style = style
194
196
self .table_ident = ident
197
+ # Validation is list of items indicating max length of item in each column.
198
+ # None indicates no limit for column
199
+ if validation is not None :
200
+ # Assume validation for all columns provided
201
+ self .table_validation = validation
202
+ else :
203
+ # No validation specified
204
+ self .table_validation = [None ] * len (header )
195
205
if header :
196
206
self .addrow (ident , header )
197
207
208
+ def validatedata (self , data ):
209
+ i = 0
210
+ newdata = []
211
+ for d in data :
212
+ if self .table_validation [i ] is not None :
213
+ # Column size validation
214
+ if len (d ) > self .table_validation [i ]:
215
+ if d not in self .note_data :
216
+ self .note_data .append (d )
217
+ newdata .append ("Note " + str (self .note_data .index (d ) + 1 ))
218
+ else :
219
+ newdata .append (d )
220
+ else :
221
+ newdata .append (d )
222
+ i += 1
223
+ return newdata
224
+
198
225
def addrow (self , ident , data , style = None ):
199
226
# Add row to table
200
227
if self .table_ident == ident :
201
- self .table_data .append (data )
228
+ self .table_data .append (self . validatedata ( data ) )
202
229
if style != None :
203
230
for s in style :
204
231
# Only take first 4 parameters in each style setting
@@ -211,6 +238,15 @@ def showtable(self, ident, widths=None):
211
238
tbl .setStyle (self .table_style )
212
239
self .contents .append (tbl )
213
240
self .table_ident = None
241
+ # Optional notes if data in columns truncated
242
+ if len (self .note_data ) > 0 :
243
+ notes = ["<br/><u>Notes</u>" ]
244
+ i = 1
245
+ for d in self .note_data :
246
+ notes .append (str (i ) + ". " + d )
247
+ i += 1
248
+ self .paragraph ("<br/>" .join (notes ))
249
+ self .note_data = []
214
250
self ._spacer ()
215
251
216
252
def pagebreak (self ):
0 commit comments