docstrings cleaned up for epydoc
authortim
Fri, 12 Dec 2008 17:01:47 +0000
changeset 3031 6f90e7668adb
parent 3030 8bc2e0f9c080
child 3032 22224b1b4d24
docstrings cleaned up for epydoc
src/reportlab/lib/PyFontify.py
src/reportlab/pdfbase/_cidfontdata.py
src/reportlab/pdfbase/_fontdata.py
src/reportlab/pdfbase/cidfonts.py
src/reportlab/pdfbase/pdfdoc.py
src/reportlab/pdfbase/pdfmetrics.py
src/reportlab/pdfbase/ttfonts.py
src/reportlab/platypus/doctemplate.py
src/reportlab/platypus/flowables.py
src/reportlab/platypus/frames.py
src/reportlab/platypus/para.py
src/reportlab/platypus/paragraph.py
src/reportlab/platypus/tables.py
src/reportlab/platypus/xpreformatted.py
--- a/src/reportlab/lib/PyFontify.py	Fri Dec 12 16:37:37 2008 +0000
+++ b/src/reportlab/lib/PyFontify.py	Fri Dec 12 17:01:47 2008 +0000
@@ -1,10 +1,11 @@
 #Copyright ReportLab Europe Ltd. 2000-2008
 #see license.txt for license details
-__version__=''' $Id:$ '''
+__version__=''' $Id$ '''
 __doc__="""
 Module to analyze Python source code; for syntax coloring tools.
 
 Interface::
+
     tags = fontify(pytext, searchfrom, searchto)
 
  - The 'pytext' argument is a string containing Python source code.
--- a/src/reportlab/pdfbase/_cidfontdata.py	Fri Dec 12 16:37:37 2008 +0000
+++ b/src/reportlab/pdfbase/_cidfontdata.py	Fri Dec 12 17:01:47 2008 +0000
@@ -15,11 +15,12 @@
 code out of the module altogether and avoid circular dependencies.
 
 The encoding and font data are grouped by some standard 'language
-prefixes':
-   chs = Chinese Simplified (mainland)
-   cht = Chinese Traditional (Taiwan)
-   kor = Korean
-   jpn = Japanese
+prefixes'::
+
+    chs = Chinese Simplified (mainland)
+    cht = Chinese Traditional (Taiwan)
+    kor = Korean
+    jpn = Japanese
 """
 
 
--- a/src/reportlab/pdfbase/_fontdata.py	Fri Dec 12 16:37:37 2008 +0000
+++ b/src/reportlab/pdfbase/_fontdata.py	Fri Dec 12 17:01:47 2008 +0000
@@ -4,13 +4,16 @@
 #$Header $
 __version__=''' $Id$ '''
 __doc__="""
-    database of font related things
-    standardFonts       tuple of the 14 standard string font names
-    standardEncodings   tuple of the known standard font names
-    encodings           a mapping object from standard encoding names (and minor variants)
-                        to the encoding vectors ie the tuple of string glyph names
-    widthsByFontGlyph   fontname x glyphname --> width of glyph
-    widthVectorsByFont  fontName -> vector of widths
+
+        database of font related things::
+        
+            standardFonts       tuple of the 14 standard string font names
+            standardEncodings   tuple of the known standard font names
+            encodings           a mapping object from standard encoding names (and minor variants)
+                                to the encoding vectors ie the tuple of string glyph names
+            widthsByFontGlyph   fontname x glyphname --> width of glyph
+            widthVectorsByFont  fontName -> vector of widths
+        
 """
 import UserDict, os, sys
 
--- a/src/reportlab/pdfbase/cidfonts.py	Fri Dec 12 16:37:37 2008 +0000
+++ b/src/reportlab/pdfbase/cidfonts.py	Fri Dec 12 17:01:47 2008 +0000
@@ -257,8 +257,9 @@
     def _expandWidths(self, compactWidthArray):
         """Expands Adobe nested list structure to get a dictionary of widths.
 
-        Here is an example of such a structure.
-        (
+        Here is an example of such a structure.::
+        
+            (
             # starting at character ID 1, next n  characters have the widths given.
             1,  (277,305,500,668,668,906,727,305,445,445,508,668,305,379,305,539),
             # all Characters from ID 17 to 26 are 668 em units wide
@@ -271,7 +272,8 @@
                  449, 246, 449, 668),
             # these must be half width katakana and the like.
             231, 632, 500
-        )
+            )
+        
         """
         data = compactWidthArray[:]
         widths = {}
--- a/src/reportlab/pdfbase/pdfdoc.py	Fri Dec 12 16:37:37 2008 +0000
+++ b/src/reportlab/pdfbase/pdfdoc.py	Fri Dec 12 17:01:47 2008 +0000
@@ -1202,29 +1202,34 @@
         out or set to None.
 
         * style:
-          - None:                       No numbering, can be used to display the
-                                        prefix only.
-          - PDFPageLabel.ARABIC:        Use arabic numbers: 1, 2, 3, 4...
-          - PDFPageLabel.ROMAN_UPPER:   Use upper case roman numerals: I, II, III...
-          - PDFPageLabel.ROMAN_LOWER:   Use lower case roman numerals: i, ii, iii...
-          - PDFPageLabel.LETTERS_UPPER: Use upper case letters: A, B, C, D...
-          - PDFPageLabel.LETTERS_LOWER: Use lower case letters: a, b, c, d...
+        
+            - None:                       No numbering, can be used to display the prefix only.
+            - PDFPageLabel.ARABIC:        Use arabic numbers: 1, 2, 3, 4...
+            - PDFPageLabel.ROMAN_UPPER:   Use upper case roman numerals: I, II, III...
+            - PDFPageLabel.ROMAN_LOWER:   Use lower case roman numerals: i, ii, iii...
+            - PDFPageLabel.LETTERS_UPPER: Use upper case letters: A, B, C, D...
+            - PDFPageLabel.LETTERS_LOWER: Use lower case letters: a, b, c, d...
+            
         * start:
-         - An integer specifying the starting number for this PDFPageLabel. This
-            can be used when numbering style changes to reset the page number back
-            to one, ie from roman to arabic, or from arabic to appendecies. Can be
-            any positive integer or None. I'm not sure what the effect of
-            specifying None is, probably that page numbering continues with the
-            current sequence, I'd have to check the spec to clarify though.
+        
+            -   An integer specifying the starting number for this PDFPageLabel. This
+                can be used when numbering style changes to reset the page number back
+                to one, ie from roman to arabic, or from arabic to appendecies. Can be
+                any positive integer or None. I'm not sure what the effect of
+                specifying None is, probably that page numbering continues with the
+                current sequence, I'd have to check the spec to clarify though.
+            
         * prefix:
-         - A string which is prefixed to the page numbers. Can be used to display
-            appendecies in the format: A.1, A.2, ..., B.1, B.2, ... where a
-            PDFPageLabel is used to set the properties for the first page of each
-            appendix to restart the page numbering at one and set the prefix to the
-            appropriate letter for current appendix. The prefix can also be used to
-            display text only, if the 'style' is set to None. This can be used to
-            display strings such as 'Front', 'Back', or 'Cover' for the covers on
-            books.
+        
+            -   A string which is prefixed to the page numbers. Can be used to display
+                appendecies in the format: A.1, A.2, ..., B.1, B.2, ... where a
+                PDFPageLabel is used to set the properties for the first page of each
+                appendix to restart the page numbering at one and set the prefix to the
+                appropriate letter for current appendix. The prefix can also be used to
+                display text only, if the 'style' is set to None. This can be used to
+                display strings such as 'Front', 'Back', or 'Cover' for the covers on
+                books.
+            
         """
         if style:
             if style.upper() in self.__convertible__: style = getattr(self,style.upper())
@@ -1277,20 +1282,22 @@
         return PD.format(document)
 
 class PDFOutlines:
-    """takes a recursive list of outline destinations
-       like
-           out = PDFOutline1()
-           out.setNames(canvas, # requires canvas for name resolution
-             "chapter1dest",
-             ("chapter2dest",
-              ["chapter2section1dest",
-               "chapter2section2dest",
-               "chapter2conclusiondest"]
-             ), # end of chapter2 description
-             "chapter3dest",
-             ("chapter4dest", ["c4s1", "c4s2"])
-             )
-       Higher layers may build this structure incrementally. KISS at base level.
+    """
+    takes a recursive list of outline destinations like::
+    
+        out = PDFOutline1()
+        out.setNames(canvas, # requires canvas for name resolution
+        "chapter1dest",
+        ("chapter2dest",
+        ["chapter2section1dest",
+        "chapter2section2dest",
+        "chapter2conclusiondest"]
+        ), # end of chapter2 description
+        "chapter3dest",
+        ("chapter4dest", ["c4s1", "c4s2"])
+        )
+             
+    Higher layers may build this structure incrementally. KISS at base level.
     """
     # first attempt, many possible features missing.
     #no init for now
@@ -1667,16 +1674,22 @@
         return format(PDFString(dfmt(*self.date)), doc)
 
 class Destination:
-    """not a pdfobject!  This is a placeholder that can delegates
-       to a pdf object only after it has been defined by the methods
-       below.  EG a Destination can refer to Appendix A before it has been
-       defined, but only if Appendix A is explicitly noted as a destination
-       and resolved before the document is generated...
-       For example the following sequence causes resolution before doc generation.
-          d = Destination()
-          d.fit() # or other format defining method call
-          d.setPage(p)
-       (at present setPageRef is called on generation of the page).
+    """
+    
+    not a pdfobject!  This is a placeholder that can delegates
+    to a pdf object only after it has been defined by the methods
+    below.
+    
+    EG a Destination can refer to Appendix A before it has been
+    defined, but only if Appendix A is explicitly noted as a destination
+    and resolved before the document is generated...
+    
+    For example the following sequence causes resolution before doc generation.
+        d = Destination()
+        d.fit() # or other format defining method call
+        d.setPage(p)
+        (at present setPageRef is called on generation of the page).
+    
     """
     representation = format = page = None
     def __init__(self,name):
--- a/src/reportlab/pdfbase/pdfmetrics.py	Fri Dec 12 16:37:37 2008 +0000
+++ b/src/reportlab/pdfbase/pdfmetrics.py	Fri Dec 12 17:01:47 2008 +0000
@@ -287,13 +287,17 @@
             idx = idx + 1
 
     def getDifferences(self, otherEnc):
-        """Return a compact list of the code points differing between two encodings
+        """
+        Return a compact list of the code points differing between two encodings
 
         This is in the Adobe format: list of
            [[b1, name1, name2, name3],
            [b2, name4]]
+           
         where b1...bn is the starting code point, and the glyph names following
-        are assigned consecutive code points."""
+        are assigned consecutive code points.
+        
+        """
 
         ranges = []
         curRange = None
--- a/src/reportlab/pdfbase/ttfonts.py	Fri Dec 12 16:37:37 2008 +0000
+++ b/src/reportlab/pdfbase/ttfonts.py	Fri Dec 12 17:01:47 2008 +0000
@@ -412,27 +412,32 @@
         self.extractInfo(charInfo)
 
     def extractInfo(self, charInfo=1):
-        """Extract typographic information from the loaded font file.
+        """
+        Extract typographic information from the loaded font file.
 
-        The following attributes will be set:
-            name         - PostScript font name
-            flags        - Font flags
-            ascent       - Typographic ascender in 1/1000ths of a point
-            descent      - Typographic descender in 1/1000ths of a point
-            capHeight    - Cap height in 1/1000ths of a point (0 if not available)
-            bbox         - Glyph bounding box [l,t,r,b] in 1/1000ths of a point
-            _bbox        - Glyph bounding box [l,t,r,b] in unitsPerEm
-            unitsPerEm   - Glyph units per em
-            italicAngle  - Italic angle in degrees ccw
-            stemV        - stem weight in 1/1000ths of a point (approximate)
-        If charInfo is true, the following will also be set:
-            defaultWidth - default glyph width in 1/1000ths of a point
-            charWidths   - dictionary of character widths for every supported
-                           UCS character code
-
+        The following attributes will be set::
+        
+            name         PostScript font name
+            flags        Font flags
+            ascent       Typographic ascender in 1/1000ths of a point
+            descent      Typographic descender in 1/1000ths of a point
+            capHeight    Cap height in 1/1000ths of a point (0 if not available)
+            bbox         Glyph bounding box [l,t,r,b] in 1/1000ths of a point
+            _bbox        Glyph bounding box [l,t,r,b] in unitsPerEm
+            unitsPerEm   Glyph units per em
+            italicAngle  Italic angle in degrees ccw
+            stemV        stem weight in 1/1000ths of a point (approximate)
+        
+        If charInfo is true, the following will also be set::
+        
+            defaultWidth   default glyph width in 1/1000ths of a point
+            charWidths     dictionary of character widths for every supported UCS character
+                           code
+        
         This will only work if the font has a Unicode cmap (platform 3,
         encoding 1, format 4 or platform 0 any encoding format 4).  Setting
-        charInfo to false avoids this requirement.
+        charInfo to false avoids this requirement
+        
         """
         # name - Naming table
         name_offset = self.seek_table("name")
--- a/src/reportlab/platypus/doctemplate.py	Fri Dec 12 16:37:37 2008 +0000
+++ b/src/reportlab/platypus/doctemplate.py	Fri Dec 12 17:01:47 2008 +0000
@@ -273,20 +273,21 @@
     First attempt at defining a document template class.
 
     The basic idea is simple.
-    0)  The document has a list of data associated with it
+    
+    1)  The document has a list of data associated with it
         this data should derive from flowables. We'll have
         special classes like PageBreak, FrameBreak to do things
         like forcing a page end etc.
 
-    1)  The document has one or more page templates.
+    2)  The document has one or more page templates.
 
-    2)  Each page template has one or more frames.
+    3)  Each page template has one or more frames.
 
-    3)  The document class provides base methods for handling the
+    4)  The document class provides base methods for handling the
         story events and some reasonable methods for getting the
         story flowables into the frames.
 
-    4)  The document instances can override the base handler routines.
+    5)  The document instances can override the base handler routines.
 
     Most of the methods for this class are not called directly by the user,
     but in some advanced usages they may need to be overridden via subclassing.
@@ -299,28 +300,29 @@
 
     Possible keyword arguments for the initialization:
 
-    pageTemplates: A list of templates.  Must be nonempty.  Names
+    - pageTemplates: A list of templates.  Must be nonempty.  Names
       assigned to the templates are used for referring to them so no two used
       templates should have the same name.  For example you might want one template
       for a title page, one for a section first page, one for a first page of
       a chapter and two more for the interior of a chapter on odd and even pages.
       If this argument is omitted then at least one pageTemplate should be provided
       using the addPageTemplates method before the document is built.
-    pageSize: a 2-tuple or a size constant from reportlab/lib/pagesizes.pu.
-     Used by the SimpleDocTemplate subclass which does NOT accept a list of
-     pageTemplates but makes one for you; ignored when using pageTemplates.
+    - pageSize: a 2-tuple or a size constant from reportlab/lib/pagesizes.pu.
+      Used by the SimpleDocTemplate subclass which does NOT accept a list of
+      pageTemplates but makes one for you; ignored when using pageTemplates.
 
-    showBoundary: if set draw a box around the frame boundaries.
-    leftMargin:
-    rightMargin:
-    topMargin:
-    bottomMargin:  Margin sizes in points (default 1 inch)
-      These margins may be overridden by the pageTemplates.  They are primarily of interest
-      for the SimpleDocumentTemplate subclass.
-    allowSplitting:  If set flowables (eg, paragraphs) may be split across frames or pages
+    - showBoundary: if set draw a box around the frame boundaries.
+    - leftMargin:
+    - rightMargin:
+    - topMargin:
+    - bottomMargin:  Margin sizes in points (default 1 inch).  These margins may be
+      overridden by the pageTemplates.  They are primarily of interest for the
+      SimpleDocumentTemplate subclass.
+    
+    - allowSplitting:  If set flowables (eg, paragraphs) may be split across frames or pages
       (default: 1)
-    title: Internal title for document (does not automatically display on any page)
-    author: Internal author for document (does not automatically display on any page)
+    - title: Internal title for document (does not automatically display on any page)
+    - author: Internal author for document (does not automatically display on any page)
     """
     _initArgs = {   'pagesize':defaultPageSize,
                     'pageTemplates':[],
--- a/src/reportlab/platypus/flowables.py	Fri Dec 12 16:37:37 2008 +0000
+++ b/src/reportlab/platypus/flowables.py	Fri Dec 12 17:01:47 2008 +0000
@@ -56,9 +56,11 @@
 #############################################################
 class Flowable:
     """Abstract base class for things to be drawn.  Key concepts:
+    
     1. It knows its size
     2. It draws in its own coordinate system (this requires the
-        base API to provide a translate() function.
+       base API to provide a translate() function.
+    
     """
     _fixedWidth = 0         #assume wrap results depend on arguments?
     _fixedHeight = 0
--- a/src/reportlab/platypus/frames.py	Fri Dec 12 16:37:37 2008 +0000
+++ b/src/reportlab/platypus/frames.py	Fri Dec 12 17:01:47 2008 +0000
@@ -33,7 +33,7 @@
     After creation a Frame is not usually manipulated directly by the
     applications program -- it is used internally by the platypus modules.
 
-    Here is a diagramatid abstraction for the definitional part of a Frame
+    Here is a diagramatid abstraction for the definitional part of a Frame::
 
                 width                    x2,y2
         +---------------------------------+
@@ -51,8 +51,8 @@
         +---------------------------------+
         (x1,y1) <-- lower left corner
 
-        NOTE!! Frames are stateful objects.  No single frame should be used in
-        two documents at the same time (especially in the presence of multithreading.
+    NOTE!! Frames are stateful objects.  No single frame should be used in
+    two documents at the same time (especially in the presence of multithreading.
     '''
     def __init__(self, x1, y1, width,height, leftPadding=6, bottomPadding=6,
             rightPadding=6, topPadding=6, id=None, showBoundary=0,
--- a/src/reportlab/platypus/para.py	Fri Dec 12 16:37:37 2008 +0000
+++ b/src/reportlab/platypus/para.py	Fri Dec 12 17:01:47 2008 +0000
@@ -15,16 +15,17 @@
 This implementation adds the following paragraph-like tags (which
 support the same attributes as paragraphs, for font specification, etc).
 
-- Unnumberred lists (ala html):
+- Unnumberred lists (ala html)::
 
     <ul>
         <li>first one</li>
         <li>second one</li>
     </ul>
 
+
 Also <ul type="disc"> (default) or <ul type="circle">, <ul type="square">.
 
-- Numberred lists (ala html):
+- Numberred lists (ala html)::
 
     <ol>
         <li>first one</li>
--- a/src/reportlab/platypus/paragraph.py	Fri Dec 12 16:37:37 2008 +0000
+++ b/src/reportlab/platypus/paragraph.py	Fri Dec 12 17:01:47 2008 +0000
@@ -76,13 +76,15 @@
     """
 
 class FragLine(ABag):
-    """class FragLine contains a styled line (ie a line with more than one style)
+    """
+    class FragLine contains a styled line (ie a line with more than one style)::
 
-    extraSpace  unused space for justification only
-    wordCount   1+spaces in line for justification purposes
-    words       [ParaFrags] style text lumps to be concatenated together
-    fontSize    maximum fontSize seen on the line; not used at present,
-                but could be used for line spacing.
+        extraSpace  unused space for justification only
+        wordCount   1+spaces in line for justification purposes
+        words       [ParaFrags] style text lumps to be concatenated together
+        fontSize    maximum fontSize seen on the line; not used at present,
+                    but could be used for line spacing.
+                
     """
 
 #our one and only parser
@@ -477,7 +479,7 @@
     1)  ExtraSpace
     2)  blankCount
     3)  [textDefns....]
-        each text definition is a (ParaFrag, start, limit) triplet
+    each text definition is a (ParaFrag, start, limit) triplet
     '''
     #initialise the algorithm
     lines   = []
@@ -751,19 +753,19 @@
         <font name=fontfamily/fontname color=colorname size=float>
         <onDraw name=callable label="a label">
         <link>link text</link>
-            attributes of links
-                size/fontSize=num
-                name/face/fontName=name
-                fg/textColor/color=color
-                backcolor/backColor/bgcolor=color
-                dest/destination/target/href/link=target
+        attributes of links
+        size/fontSize=num
+        name/face/fontName=name
+        fg/textColor/color=color
+        backcolor/backColor/bgcolor=color
+        dest/destination/target/href/link=target
         <a>anchor text</a>
-            attributes of anchors
-                fontSize=num
-                fontName=name
-                fg/textColor/color=color
-                backcolor/backColor/bgcolor=color
-                href=href
+        attributes of anchors
+        fontSize=num
+        fontName=name
+        fg/textColor/color=color
+        backcolor/backColor/bgcolor=color
+        href=href
         <a name="anchorpoint"/>
         <unichar name="unicode character name"/>
         <unichar value="unicode code point"/>
@@ -776,11 +778,11 @@
         of 4 fonts using reportlab.pdfbase.pdfmetrics.registerFont; then
         use the addMapping function to tell the library that these 4 fonts
         form a family e.g.
-            from reportlab.lib.fonts import addMapping
-            addMapping('Vera', 0, 0, 'Vera')    #normal
-            addMapping('Vera', 0, 1, 'Vera-Italic')    #italic
-            addMapping('Vera', 1, 0, 'Vera-Bold')    #bold
-            addMapping('Vera', 1, 1, 'Vera-BoldItalic')    #italic and bold
+        from reportlab.lib.fonts import addMapping
+        addMapping('Vera', 0, 0, 'Vera')    #normal
+        addMapping('Vera', 0, 1, 'Vera-Italic')    #italic
+        addMapping('Vera', 1, 0, 'Vera-Bold')    #bold
+        addMapping('Vera', 1, 1, 'Vera-BoldItalic')    #italic and bold
 
         It will also be able to handle any MathML specified Greek characters.
     """
@@ -963,20 +965,22 @@
 
         A) For the simple case of a single formatting input fragment the output is
             A fragment specifier with
-                kind = 0
-                fontName, fontSize, leading, textColor
-                lines=  A list of lines
+                - kind = 0
+                - fontName, fontSize, leading, textColor
+                - lines=  A list of lines
+                        
                         Each line has two items.
-                        1) unused width in points
-                        2) word list
+                        
+                        1. unused width in points
+                        2. word list
 
         B) When there is more than one input formatting fragment the output is
             A fragment specifier with
-                kind = 1
-                lines=  A list of fragments each having fields
-                            extraspace (needed for justified)
-                            fontSize
-                            words=word list
+               - kind = 1
+               - lines=  A list of fragments each having fields
+                            - extraspace (needed for justified)
+                            - fontSize
+                            - words=word list
                                 each word is itself a fragment with
                                 various settings
 
--- a/src/reportlab/platypus/tables.py	Fri Dec 12 16:37:37 2008 +0000
+++ b/src/reportlab/platypus/tables.py	Fri Dec 12 17:01:47 2008 +0000
@@ -797,7 +797,7 @@
         if a cell is part of a "spanned" range.
         self._spanRanges shows the 'coords' in integers of each
         'cell range', or None if it was clobbered:
-          (col, row) -> (col0, row0, col1, row1)
+        (col, row) -> (col0, row0, col1, row1)
 
         Any cell not in the key is not part of a spanned region
         """
@@ -843,7 +843,7 @@
         if a cell is part of a "nosplit" range.
         self._nosplitRanges shows the 'coords' in integers of each
         'cell range', or None if it was clobbered:
-          (col, row) -> (col0, row0, col1, row1)
+        (col, row) -> (col0, row0, col1, row1)
 
         Any cell not in the key is not part of a spanned region
         """
@@ -891,7 +891,8 @@
         Based on self._spanRanges, which is already known,
         and the widths which were given or previously calculated,
         self._spanRects shows the real coords for drawing:
-          (col, row) -> (x, y, width, height)
+            
+            (col, row) -> (x, y, width, height)
 
         for each cell.  Any cell which 'does not exist' as another
         has spanned over it will get a None entry on the right
--- a/src/reportlab/platypus/xpreformatted.py	Fri Dec 12 16:37:37 2008 +0000
+++ b/src/reportlab/platypus/xpreformatted.py	Fri Dec 12 17:01:47 2008 +0000
@@ -81,22 +81,25 @@
 
         A) For the simple case of a single formatting input fragment the output is
             A fragment specifier with
-                kind = 0
-                fontName, fontSize, leading, textColor
-                lines=  A list of lines
-                        Each line has two items.
-                        1) unused width in points
-                        2) a list of words
+                - kind = 0
+                - fontName, fontSize, leading, textColor
+                - lines=  A list of lines
+                
+                    Each line has two items:
+                    
+                    1. unused width in points
+                    2. a list of words
 
         B) When there is more than one input formatting fragment the out put is
             A fragment specifier with
-                kind = 1
-                lines=  A list of fragments each having fields
-                            extraspace (needed for justified)
-                            fontSize
-                            words=word list
-                                each word is itself a fragment with
-                                various settings
+                - kind = 1
+                - lines =  A list of fragments each having fields:
+                
+                    - extraspace (needed for justified)
+                    - fontSize
+                    - words=word list
+                    - each word is itself a fragment with
+                    - various settings
 
         This structure can be used to easily draw paragraphs with the various alignments.
         You can supply either a single width or a list of widths; the latter will have its