src/reportlab/platypus/doctemplate.py
branchrtl-support
changeset 3467 4f25b3a34c5f
parent 3241 575302ed6ab9
child 3486 55cc3834554a
--- a/src/reportlab/platypus/doctemplate.py	Mon Nov 23 13:27:57 2009 +0000
+++ b/src/reportlab/platypus/doctemplate.py	Thu Oct 21 10:34:13 2010 +0000
@@ -245,6 +245,7 @@
     """
     def __init__(self,id=None,frames=[],onPage=_doNothing, onPageEnd=_doNothing,
                  pagesize=None):
+        frames = frames or []
         if type(frames) not in (ListType,TupleType): frames = [frames]
         assert filter(lambda x: not isinstance(x,Frame), frames)==[], "frames argument error"
         self.id = id
@@ -289,9 +290,8 @@
 
 def _addGeneratedContent(flowables,frame):
     S = getattr(frame,'_generated_content',None)
-    if S:
-        for i,f in enumerate(S):
-            flowables.insert(i,f)
+    if S: 
+        flowables[0:0] = S
         del frame._generated_content
 
 
@@ -433,6 +433,7 @@
                     'title':None,
                     'author':None,
                     'subject':None,
+                    'creator':None,
                     'keywords':[],
                     'invariant':None,
                     'pageCompression':None,
@@ -441,6 +442,7 @@
                     '_debug':0,
                     'encrypt': None,
                     'cropMarks': None,
+                    'enforceColorSpace': None,
                     }
     _invalidInitArgs = ()
     _firstPageTemplateIndex = 0
@@ -452,7 +454,7 @@
         self._lifetimes = {}
 
         for k in self._initArgs.keys():
-            if not kw.has_key(k):
+            if k not in kw:
                 v = self._initArgs[k]
             else:
                 if k in self._invalidInitArgs:
@@ -772,17 +774,16 @@
                     n = 0
                 if n:
                     if not isinstance(S[0],(PageBreak,SlowPageBreak,ActionFlowable)):
-                        if frame.add(S[0], canv, trySplit=0):
-                            self._curPageFlowableCount += 1
-                            self.afterFlowable(S[0])
-                            _addGeneratedContent(flowables,frame)
-                        else:
+                        if not frame.add(S[0], canv, trySplit=0):
                             ident = "Splitting error(n==%d) on page %d in\n%s" % (n,self.page,self._fIdent(f,60,frame))
                             #leave to keep apart from the raise
                             raise LayoutError(ident)
-                        del S[0]
-                    for i,f in enumerate(S):
-                        flowables.insert(i,f)   # put split flowables back on the list
+                        self._curPageFlowableCount += 1
+                        self.afterFlowable(S[0])
+                        flowables[0:0] = S[1:]  # put rest of splitted flowables back on the list
+                        _addGeneratedContent(flowables,frame)
+                    else:
+                        flowables[0:0] = S  # put splitted flowables back on the list
                 else:
                     if hasattr(f,'_postponed'):
                         ident = "Flowable %s%s too large on page %d in frame %r%s of template %r" % \
@@ -818,7 +819,9 @@
         self.canv = canvasmaker(filename or self.filename,
                                 pagesize=self.pagesize,
                                 invariant=self.invariant,
-                                pageCompression=self.pageCompression)
+                                pageCompression=self.pageCompression,
+                                enforceColorSpace=self.enforceColorSpace,
+                                )
  
         getattr(self.canv,'setEncrypt',lambda x: None)(self.encrypt)
 
@@ -826,6 +829,7 @@
         self.canv.setAuthor(self.author)
         self.canv.setTitle(self.title)
         self.canv.setSubject(self.subject)
+        self.canv.setCreator(self.creator)
         self.canv.setKeywords(self.keywords)
 
         if self._onPage:
@@ -928,7 +932,9 @@
                    **buildKwds
                    ):
         """Makes multiple passes until all indexing flowables
-        are happy."""
+        are happy.
+        
+        Returns number of passes"""
         self._indexingFlowables = []
         #scan the story and keep a copy
         for thing in story:
@@ -973,7 +979,8 @@
 
         del self._multiBuildEdits
         if verbose: print 'saved'
-
+        return passes
+        
     #these are pure virtuals override in derived classes
     #NB these get called at suitable places by the base class
     #so if you derive and override the handle_xxx methods
@@ -1029,7 +1036,8 @@
         except:
             exc = sys.exc_info()[1]
             args = list(exc.args)
-            args[-1] += '\ndocExec %s lifetime=%r failed!' % (stmt,lifetime)
+            msg = '\ndocExec %s lifetime=%r failed!' % (stmt,lifetime)
+            args.append(msg)
             exc.args = tuple(args)
             for k in NS.iterkeys():
                 if k not in K0:
@@ -1145,7 +1153,7 @@
     print 'PROGRESS MONITOR:  %-10s   %d' % (typ, value)
 
 if __name__ == '__main__':
-
+    from reportlab.lib.styles import _baseFontName, _baseFontNameB
     def myFirstPage(canvas, doc):
         from reportlab.lib.colors import red
         PAGE_HEIGHT = canvas._pagesize[1]
@@ -1153,9 +1161,9 @@
         canvas.setStrokeColor(red)
         canvas.setLineWidth(5)
         canvas.line(66,72,66,PAGE_HEIGHT-72)
-        canvas.setFont('Times-Bold',24)
+        canvas.setFont(_baseFontNameB,24)
         canvas.drawString(108, PAGE_HEIGHT-108, "TABLE OF CONTENTS DEMO")
-        canvas.setFont('Times-Roman',12)
+        canvas.setFont(_baseFontName,12)
         canvas.drawString(4 * inch, 0.75 * inch, "First Page")
         canvas.restoreState()
 
@@ -1166,7 +1174,7 @@
         canvas.setStrokeColor(red)
         canvas.setLineWidth(5)
         canvas.line(66,72,66,PAGE_HEIGHT-72)
-        canvas.setFont('Times-Roman',12)
+        canvas.setFont(_baseFontName,12)
         canvas.drawString(4 * inch, 0.75 * inch, "Page %d" % doc.page)
         canvas.restoreState()