[Checkins] SVN: z3c.rml/trunk/ - Implemented ``ol``, ``ul``, and ``li`` directives, which allow highly

Stephen Richter cvs-admin at zope.org
Thu Dec 20 04:07:16 UTC 2012


Log message for revision 128798:
  - Implemented ``ol``, ``ul``, and ``li`` directives, which allow highly
    flexible lists to be created. Also implemented a complimentary ``listStyle``
    directive.
  
  

Changed:
  U   z3c.rml/trunk/CHANGES.txt
  U   z3c.rml/trunk/RML-DIFFERENCES.txt
  U   z3c.rml/trunk/src/z3c/rml/attr.py
  U   z3c.rml/trunk/src/z3c/rml/document.py
  U   z3c.rml/trunk/src/z3c/rml/interfaces.py
  A   z3c.rml/trunk/src/z3c/rml/list.py
  U   z3c.rml/trunk/src/z3c/rml/stylesheet.py
  A   z3c.rml/trunk/src/z3c/rml/tests/expected/rml-examples-046-lists.pdf
  A   z3c.rml/trunk/src/z3c/rml/tests/expected/tag-ul-ol-li.pdf
  A   z3c.rml/trunk/src/z3c/rml/tests/input/rml-examples-046-lists.rml
  A   z3c.rml/trunk/src/z3c/rml/tests/input/tag-ul-ol-li.rml

-=-
Modified: z3c.rml/trunk/CHANGES.txt
===================================================================
--- z3c.rml/trunk/CHANGES.txt	2012-12-19 22:00:20 UTC (rev 128797)
+++ z3c.rml/trunk/CHANGES.txt	2012-12-20 04:07:15 UTC (rev 128798)
@@ -28,6 +28,10 @@
 - Implemented ``startIndex`` and ``showIndex`` directive. Also hooked up
   ``index`` in paragraphs properly. You can now create real book indexes.
 
+- Implemented ``ol``, ``ul``, and ``li`` directives, which allow highly
+  flexible lists to be created. Also implemented a complimentary ``listStyle``
+  directive.
+
 - Don't show "doc" namespace in reference snippets.
 
 - Create a list of RML2PDF and z3c.rml differences.

Modified: z3c.rml/trunk/RML-DIFFERENCES.txt
===================================================================
--- z3c.rml/trunk/RML-DIFFERENCES.txt	2012-12-19 22:00:20 UTC (rev 128797)
+++ z3c.rml/trunk/RML-DIFFERENCES.txt	2012-12-20 04:07:15 UTC (rev 128798)
@@ -12,13 +12,9 @@
 
 - docinit: pageMode, pageLayout, useCropMarks
    * alias
-   * name
-   * namedString
    * outlineAdd
-   * registerFontFamily
    * logConfig
    * cropMarks
-   * startIndex
 
 - template: firstPageTemplate
 
@@ -48,26 +44,12 @@
 
 - widget
 
-- para: -fontName, -fontSize, -leading, -leftIndent, -rightIndent,
-  -firstLineIndent, -spaceBefore, -spaceAfter, -alignement, -bulletFontName,
-  -bulletFontSize, -bulletIndent, -textColor, -backColor, -keepWithText,
-  -wordWrap, -borderColor, -borderWidth, -borderPadding, -borderRadius,
-  -dedent
-
-- title: -<same as para>
-
-  -> Ditto h*
-
 - a
 
 - evalString
 
 - -keepTogether
 
-- pto
-   * pto_trailer
-   * pto_header
-
 - image: -showBoundary, -preserveAspectRatio
 
 - doForm
@@ -167,6 +149,4 @@
 
 - rectangle, table row, table cell, etc.: href and/or destination (Test 038)
 
-- ol, ul, li
-
 - -addMapping

Modified: z3c.rml/trunk/src/z3c/rml/attr.py
===================================================================
--- z3c.rml/trunk/src/z3c/rml/attr.py	2012-12-19 22:00:20 UTC (rev 128797)
+++ z3c.rml/trunk/src/z3c/rml/attr.py	2012-12-20 04:07:15 UTC (rev 128798)
@@ -37,12 +37,12 @@
 logger = logging.getLogger("z3c.rml")
 
 
-def getFileInfo(attr):
-    root = attr.context
+def getFileInfo(directive):
+    root = directive
     while root.parent:
         root = root.parent
     return '(file %s, line %i)' % (
-        root.filename, attr.context.element.sourceline)
+        root.filename, directive.element.sourceline)
 
 
 def getManager(context, interface=None):
@@ -87,7 +87,7 @@
             name = self.deprecatedName
             logger.warn(
                 u'Deprecated attribute "%s": %s %s' % (
-                name, self.deprecatedReason, getFileInfo(self)))
+                name, self.deprecatedReason, getFileInfo(self.context)))
         else:
             name = self.__name__
         # Extract the value.
@@ -102,14 +102,16 @@
 
 class BaseChoice(RMLAttribute):
     choices = {}
+    doLower = True
 
     def fromUnicode(self, value):
-        value = value.lower()
+        if self.doLower:
+            value = value.lower()
         if value in self.choices:
             return self.choices[value]
         raise ValueError(
             '%r not a valid value for attribute "%s". %s' % (
-            value, self.__name__, getFileInfo(self)))
+            value, self.__name__, getFileInfo(self.context)))
 
 
 class Combination(RMLAttribute):
@@ -127,7 +129,8 @@
             except ValueError:
                 pass
         raise ValueError(
-            '"%s" is not a valid value. %s' %(value, getFileInfo(self)))
+            '"%s" is not a valid value. %s' %(
+                value, getFileInfo(self.context)))
 
 
 class String(RMLAttribute, zope.schema.Bytes):
@@ -185,18 +188,21 @@
             (self.max_length is not None and len(result) > self.max_length)):
             raise ValueError(
                 'Length of sequence must be at least %s and at most %i. %s' % (
-                self.min_length, self.max_length, getFileInfo(self)))
+                self.min_length, self.max_length,
+                getFileInfo(self.context)))
         return result
 
 
 class Choice(BaseChoice):
     """A choice of several values. The values are always case-insensitive."""
 
-    def __init__(self, choices=None, *args, **kw):
+    def __init__(self, choices=None, doLower=True, *args, **kw):
         super(Choice, self).__init__(*args, **kw)
         if isinstance(choices, (tuple, list)):
-            choices = dict([(val.lower(), val) for val in choices])
+            choices = dict(
+                [(val.lower() if doLower else val, val) for val in choices])
         self.choices = choices
+        self.doLower = doLower
 
 
 class Boolean(BaseChoice):
@@ -252,7 +258,7 @@
                 return unit[1]*float(res.group(1))
         raise ValueError(
             'The value %r is not a valid measurement. %s' % (
-            value, getFileInfo(self)))
+            value, getFileInfo(self.context)))
 
 
 class File(Text):
@@ -278,7 +284,7 @@
             if result is None:
                 raise ValueError(
                     'The package-path-pair you specified was incorrect. %s' %(
-                    getFileInfo(self)))
+                    getFileInfo(self.context)))
             modulepath, path = result.groups()
             module = __import__(modulepath, {}, {}, (modulepath))
             value = os.path.join(os.path.dirname(module.__file__), path)
@@ -341,7 +347,7 @@
         except:
             raise ValueError(
                 'The color specification "%s" is not valid. %s' % (
-                value, getFileInfo(self)))
+                value, getFileInfo(self.context)))
 
 def _getStyle(context, value):
     manager = getManager(context)
@@ -354,7 +360,7 @@
         elif value.startswith('style.') and value[6:] in styles:
             return styles[value[6:]]
     raise ValueError('Style %r could not be found. %s' % (
-        value, getFileInfo(self)))
+        value, getFileInfo(context)))
 
 class Style(String):
     """Requires a valid style to be entered.
@@ -467,7 +473,7 @@
         if len(result) % self.columns != 0:
             raise ValueError(
                 'Number of elements must be divisible by %i. %s' %(
-                self.columns, getFileInfo(self)))
+                self.columns, getFileInfo(self.context)))
         return [result[i*self.columns:(i+1)*self.columns]
                 for i in range(len(result)/self.columns)]
 

Modified: z3c.rml/trunk/src/z3c/rml/document.py
===================================================================
--- z3c.rml/trunk/src/z3c/rml/document.py	2012-12-19 22:00:20 UTC (rev 128797)
+++ z3c.rml/trunk/src/z3c/rml/document.py	2012-12-20 04:07:15 UTC (rev 128798)
@@ -24,7 +24,7 @@
 from reportlab.lib import colors, fonts
 from reportlab.platypus import tableofcontents
 
-from z3c.rml import attr, canvas, directive, interfaces, occurence
+from z3c.rml import attr, canvas, directive, interfaces, list, occurence
 from z3c.rml import pdfinclude, special, storyplace, stylesheet, template
 
 

Modified: z3c.rml/trunk/src/z3c/rml/interfaces.py
===================================================================
--- z3c.rml/trunk/src/z3c/rml/interfaces.py	2012-12-19 22:00:20 UTC (rev 128797)
+++ z3c.rml/trunk/src/z3c/rml/interfaces.py	2012-12-20 04:07:15 UTC (rev 128798)
@@ -36,6 +36,8 @@
 SPLIT_CHOICES = ('splitfirst', 'splitlast')
 TEXT_TRANSFORM_CHOICES = ('uppercase', 'lowercase')
 LIST_FORMATS = ('I', 'i', '123',  'ABC', 'abc')
+ORDERED_LIST_TYPES = ('I', 'i', '1', 'A', 'a')
+UNORDERED_BULLET_VALUES = ('circle', 'square', 'disc', 'diamond', 'rarrowhead')
 
 class IRML2PDF(zope.interface.Interface):
     """This is the main public API of z3c.rml"""

Added: z3c.rml/trunk/src/z3c/rml/list.py
===================================================================
--- z3c.rml/trunk/src/z3c/rml/list.py	                        (rev 0)
+++ z3c.rml/trunk/src/z3c/rml/list.py	2012-12-20 04:07:15 UTC (rev 128798)
@@ -0,0 +1,181 @@
+##############################################################################
+#
+# Copyright (c) 2012 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""``ul``, ``ol``, and ``li`` directives.
+"""
+__docformat__ = "reStructuredText"
+import copy
+import reportlab.lib.styles
+import reportlab.platypus
+import zope.schema
+from reportlab.platypus import flowables
+
+from z3c.rml import attr, directive, flowable, interfaces, occurence, stylesheet
+
+
+class IListItem(stylesheet.IMinimalListStyle, flowable.IFlow):
+    """A list item in an ordered or unordered list."""
+
+    style = attr.Style(
+        title=u'Style',
+        description=u'The list style that is applied to the list.',
+        required=False)
+
+class ListItem(flowable.Flow):
+    signature = IListItem
+    klass = reportlab.platypus.ListItem
+    attrMapping = {}
+
+    styleAttributes = zope.schema.getFieldNames(stylesheet.IMinimalListStyle)
+
+    def processStyle(self, style):
+        attrs = self.getAttributeValues(select=self.styleAttributes)
+        if attrs or not hasattr(style, 'value'):
+            style = copy.deepcopy(style)
+            # Sigh, this is needed since unordered list items expect the value.
+            style.value = style.start
+            for name, value in attrs:
+                setattr(style, name, value)
+        return style
+
+    def process(self):
+        self.processSubDirectives()
+        args = dict(self.getAttributeValues(ignore=self.styleAttributes))
+        if 'style' not in args:
+            args['style'] = self.parent.baseStyle
+        args['style'] = self.processStyle(args['style'])
+        li = self.klass(self.flow, **args)
+        self.parent.flow.append(li)
+
+
+class IOrderedListItem(IListItem):
+    """An ordered list item."""
+
+    value = attr.Integer(
+        title=u'Bullet Value',
+        description=u'The counter value.',
+        required=False)
+
+class OrderedListItem(ListItem):
+    signature = IOrderedListItem
+
+
+class IUnorderedListItem(IListItem):
+    """An ordered list item."""
+
+    value = attr.Choice(
+        title=u'Bullet Value',
+        description=u'The type of bullet character.',
+        choices=interfaces.UNORDERED_BULLET_VALUES,
+        required=False)
+
+class UnorderedListItem(ListItem):
+    signature = IUnorderedListItem
+
+    styleAttributes = ListItem.styleAttributes + ['value']
+
+
+class IListBase(stylesheet.IBaseListStyle):
+
+    style = attr.Style(
+        title=u'Style',
+        description=u'The list style that is applied to the list.',
+        required=False)
+
+class ListBase(directive.RMLDirective):
+    klass = reportlab.platypus.ListFlowable
+    factories = {'li': ListItem}
+    attrMapping = {}
+
+    styleAttributes = zope.schema.getFieldNames(stylesheet.IBaseListStyle)
+
+    def __init__(self, *args, **kw):
+        super(ListBase, self).__init__(*args, **kw)
+        self.flow = []
+
+    def processStyle(self, style):
+        attrs = self.getAttributeValues(
+            select=self.styleAttributes, attrMapping=self.attrMapping)
+        if attrs:
+            style = copy.deepcopy(style)
+            for name, value in attrs:
+                setattr(style, name, value)
+        return style
+
+    def process(self):
+        args = dict(self.getAttributeValues(
+                ignore=self.styleAttributes, attrMapping=self.attrMapping))
+        if 'style' not in args:
+            args['style'] = reportlab.lib.styles.ListStyle('List')
+        args['style'] = self.baseStyle = self.processStyle(args['style'])
+        self.processSubDirectives()
+        li = self.klass(self.flow, **args)
+        self.parent.flow.append(li)
+
+
+class IOrderedList(IListBase):
+    """An ordered list."""
+    occurence.containing(
+        occurence.ZeroOrMore('li', IOrderedListItem),
+        )
+
+    bulletType = attr.Choice(
+        title=u'Bullet Type',
+        description=u'The type of bullet formatting.',
+        choices=interfaces.ORDERED_LIST_TYPES,
+        doLower=False,
+        required=False)
+
+class OrderedList(ListBase):
+    signature = IOrderedList
+    factories = {'li': OrderedListItem}
+
+    styleAttributes = ListBase.styleAttributes + ['bulletType']
+
+
+class IUnorderedList(IListBase):
+    """And unordered list."""
+    occurence.containing(
+        occurence.ZeroOrMore('li', IUnorderedListItem),
+        )
+
+    value = attr.Choice(
+        title=u'Bullet Value',
+        description=u'The type of bullet character.',
+        choices=interfaces.UNORDERED_BULLET_VALUES,
+        default='disc',
+        required=False)
+
+class UnorderedList(ListBase):
+    signature = IUnorderedList
+    attrMapping = {'value': 'start'}
+    factories = {'li': UnorderedListItem}
+
+    def getAttributeValues(self, *args, **kw):
+        res = super(UnorderedList, self).getAttributeValues(*args, **kw)
+        res.append(('bulletType', 'bullet'))
+        return res
+
+flowable.Flow.factories['ol'] = OrderedList
+flowable.IFlow.setTaggedValue(
+    'directives',
+    flowable.IFlow.getTaggedValue('directives') +
+    (occurence.ZeroOrMore('ol', IOrderedList),)
+    )
+
+flowable.Flow.factories['ul'] = UnorderedList
+flowable.IFlow.setTaggedValue(
+    'directives',
+    flowable.IFlow.getTaggedValue('directives') +
+    (occurence.ZeroOrMore('ul', IUnorderedList),)
+    )


Property changes on: z3c.rml/trunk/src/z3c/rml/list.py
___________________________________________________________________
Added: svn:keywords
   + Id

Modified: z3c.rml/trunk/src/z3c/rml/stylesheet.py
===================================================================
--- z3c.rml/trunk/src/z3c/rml/stylesheet.py	2012-12-19 22:00:20 UTC (rev 128797)
+++ z3c.rml/trunk/src/z3c/rml/stylesheet.py	2012-12-20 04:07:15 UTC (rev 128798)
@@ -567,12 +567,104 @@
         manager.styles[id] = self.style
 
 
+class IMinimalListStyle(interfaces.IRMLDirectiveSignature):
+
+    leftIndent = attr.Measurement(
+        title=u'Left Indentation',
+        description=u'General indentation on the left side.',
+        required=False)
+
+    rightIndent = attr.Measurement(
+        title=u'Right Indentation',
+        description=u'General indentation on the right side.',
+        required=False)
+
+    bulletColor = attr.Color(
+        title=u'Bullet Color',
+        description=u'The color in which the bullet will appear.',
+        required=False)
+
+    bulletFontName = attr.String(
+        title=u'Bullet Font Name',
+        description=u'The font in which the bullet character will be rendered.',
+        required=False)
+
+    bulletFontSize = attr.Measurement(
+        title=u'Bullet Font Size',
+        description=u'The font size of the bullet character.',
+        required=False)
+
+    bulletOffsetY = attr.Measurement(
+        title=u'Bullet Y-Offset',
+        description=u'The vertical offset of the bullet.',
+        required=False)
+
+    bulletDedent = attr.StringOrInt(
+        title=u'Bullet Dedent',
+        description=u'Either pixels of dedent or auto (default).',
+        required=False)
+
+    bulletDir = attr.Choice(
+        title=u'Bullet Layout Direction',
+        description=u'The layout direction of the bullet.',
+        choices=('ltr', 'rtl'),
+        required=False)
+
+    bulletFormat = attr.String(
+        title=u'Bullet Format',
+        description=u'A formatting expression for the bullet text.',
+        required=False)
+
+class IBaseListStyle(IMinimalListStyle):
+
+    start = attr.Combination(
+        title=u'Start Value',
+        description=u'The counter start value.',
+        value_types=(attr.Integer(),
+                     attr.Choice(choices=interfaces.UNORDERED_BULLET_VALUES)),
+        required=False)
+
+
+class IListStyle(IBaseListStyle):
+    """Defines a list style and gives it a name."""
+
+    name = attr.String(
+        title=u'Name',
+        description=u'The name of the style.',
+        required=True)
+
+    parent = attr.Style(
+        title=u'Parent',
+        description=(u'The list style that will be used as a base for '
+                     u'this one.'),
+        required=False)
+
+
+class ListStyle(directive.RMLDirective):
+    signature = IListStyle
+
+    def process(self):
+        kwargs = dict(self.getAttributeValues())
+        parent = kwargs.pop(
+            'parent', reportlab.lib.styles.ListStyle(name='List'))
+        name = kwargs.pop('name')
+        style = copy.deepcopy(parent)
+        style.name = name[6:] if name.startswith('style.') else name
+
+        for name, value in kwargs.items():
+            setattr(style, name, value)
+
+        manager = attr.getManager(self)
+        manager.styles[style.name] = style
+
+
 class IStylesheet(interfaces.IRMLDirectiveSignature):
     """A styleheet defines the styles that can be used in the document."""
     occurence.containing(
         occurence.ZeroOrOne('initialize', IInitialize),
         occurence.ZeroOrMore('paraStyle', IParagraphStyle),
         occurence.ZeroOrMore('blockTableStyle', IBlockTableStyle),
+        occurence.ZeroOrMore('listStyle', IListStyle),
         # TODO:
         #occurence.ZeroOrMore('boxStyle', IBoxStyle),
         )
@@ -584,4 +676,5 @@
         'initialize': Initialize,
         'paraStyle': ParagraphStyle,
         'blockTableStyle': BlockTableStyle,
+        'listStyle': ListStyle,
         }

Added: z3c.rml/trunk/src/z3c/rml/tests/expected/rml-examples-046-lists.pdf
===================================================================
--- z3c.rml/trunk/src/z3c/rml/tests/expected/rml-examples-046-lists.pdf	                        (rev 0)
+++ z3c.rml/trunk/src/z3c/rml/tests/expected/rml-examples-046-lists.pdf	2012-12-20 04:07:15 UTC (rev 128798)
@@ -0,0 +1,183 @@
+%PDF-1.4
+%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
+% 'BasicFonts': class PDFDictionary 
+1 0 obj
+% The standard fonts dictionary
+<< /F1 2 0 R
+ /F2 3 0 R
+ /F3 6 0 R >>
+endobj
+% 'F1': class PDFType1Font 
+2 0 obj
+% Font Helvetica
+<< /BaseFont /Helvetica
+ /Encoding /WinAnsiEncoding
+ /Name /F1
+ /Subtype /Type1
+ /Type /Font >>
+endobj
+% 'F2': class PDFType1Font 
+3 0 obj
+% Font Helvetica-Bold
+<< /BaseFont /Helvetica-Bold
+ /Encoding /WinAnsiEncoding
+ /Name /F2
+ /Subtype /Type1
+ /Type /Font >>
+endobj
+% 'FormXob.0086924a45e007495af99df70126eb1b': class PDFImageXObject 
+4 0 obj
+<< /BitsPerComponent 8
+ /ColorSpace /DeviceRGB
+ /Filter [ /ASCII85Decode
+ /FlateDecode ]
+ /Height 197
+ /Length 6121
+ /Subtype /Image
+ /Type /XObject
+ /Width 309 >>
+stream
+Gb"/l^Q0\[&]ap8-\i2ucj=5N-F&B2*&rS,^lh8#OU4]pO9j*&8<te-&f(K\V^$3 at 4V$^JLNqAj>&-nb>+sIunDF=o/>mXT=rr[$BDR%WJ%V4up&1g&Nh&*l4]U%geQ"JnQNZ=Gr;>]n!F(J*G^*p#HHF]L]j at 1dnK,0gdo5Qk9Wg(ia2d<t]\dS4fiZ""E`J5*R(34cG?Z\d(Ddn=n!REP5/)I">_)R_X]?t<pIq_8k+_1;h)d['Ib!M:+kn2^\b4G8-6aqbcHaXfekc2,eh+Ii#S,\!4)V at QVjiKmXB$imM=oHfhRR.pg<%lQ\QkS]X2?9B(@*nTXoRU9lF+g;htlGu=i52B_tMK[>Nb24efmBAbN\7?-qgiM?9+l[j9FF.,f.0h,>aJ4T!e!f,pt&fi'8;(*m1jGCFE+ba:p/WD<ouuX6c5I-s:ZLqYA2P!U[PtR<;;bdFp=&[cQM%N$<iV$I?kC3-U)t;rn&%L!J9tA,u&+FWS_sB?0'_Ps\.Bf^Kd#gq^i'S8XFnm?hQ8h*`M!I.cTKB8#$E3$C_[&B'eK'#<<Deibmfd#R(?bFpYeKj;LRI*:X"\u3Q4gG/V2jsDUN&5D[g\o"M#0jMaZjodn0GFi#iD][AA at Tl:)F)SU1E-I*/`/9Fq9Jg&:aE9];Se4m3$Aih"79r!PMYD2+DXe.Ld'E)=1"GY.*q/:i4NfORKJ8Y0YaP^$6%+??_6>DLQ#8>d_(GFJ\b#3L at 5S@_XgeOYG<"LZBEN]52BJs0"[=2T^ATc;!pi#Y_)&U5_n)bcW'Ypt2WsBA[kJ1/7hnHh[okpVZ%6'1+LiGmhO'&U(Aq:iq=]S]>I&TX4;1+ecDtDqI\,X=(=*+\eaf`p=>RcFTS,"6`R&Jf4:T+YbehB)d`n8'gNj$IG<"LZaMQg!6S1u!E(`dM3Dp,Bpe4%o$]AX9!iCu=?ak97=kJIZK29DK(/Qs#rFl9lps.>"get3:*6A1&I-[@
 :)d#5O&286kk?2\2nOu<c_<4m]gk(<t0P[FFi8?[m6gtMjYRLU<T5IlBJ@`ki:CFtSGFjQI(-J+JgRmb]K?l at W\$1+S+^jR`f.ClK(:GCEi6sBkKj!&_J:l0)"LinMkICJ)!BBjZ\+kWq1C_0!i2q>uCgcd,6bpNNnP$ErGbuY._BruaKl%)TpiP9%"aA^)pN-oHZ`ojPi"f-J\c$4C3;?07n-P"c)T"%AP(m,lL4Fp&l7m0b(:GC1_Bs!4qMj;0["-+O8K&Aj2!!N@&Q1lCcA(kq0>;`.`V5JfqR`A%GP:;&l6`u)A<_RlI'WOl25L34n+?PD at .?ogLaX:BSta<WS\8Jd$_%k$a&i9IWi%D#bAScZ5hj4.8GhI4pWN$>@rSn/_tiRA!Wu'H>9A6-h:WLWrkgr3h>G7\r`4KOYJ34*9u0eUm$Tf)q=>%5;Yd<_rj2k?kMs#RlLOS*msu,EVn^O2.0i%j4E(&/n9lq;6r.I0hIc:O.qCO=V.e/\VlU_ZBk1P"pQLL"fl_,&1F]Z7X\^Utk%s#65I^q^7?pdd;5NRC.8ACV1Xo65 at 9]F/Ufhn"`K&c_pl6Ia6d*)C(M7+=;(e(-,42XJhV at YMWK?Kdp`NS6Vae68g>)Ds/=r8"\P2"@1qD4uT2()BO.@/VcbB1OWHp0H*W=K>`A@)cAMS7iJ1o>_*bb^?`=1S2UMX$F.#Va#;(e'B^q>/9DjQN^@`RGTpmr\Ac"AQC/F5K<R at H%OW^YX3 at pRsfi)B+oWgjOWiCP>4-L4l=YHBSsOO+6!af2%g]lDfd46S.`"q497efY+daX[@8,$g]00c&G7\_ at o"Kc,46qqsR"._!U0BrYm6l?T3TQV$!&.rr&@8(.MD5#j<mG^*,6]=eLP+arFZ`]Fc/-50,YI$$="[k06(<R-?gn>+IdiC6hJSg#>`Q52h;[i!2@]P-Pg/?lPZfs!6hgA5"Xq+p6BIjHb=$,QYA>EA at 5qMjrMH0s
 qTrr1*]T=Fp-TD+iQMu:3bhi$%"<PKuR#9U:%Q&MMTWB(Iq$I\ragkJV\@Q0T8]W]$uOEW)PdMEWqYma4fIQt`k`4]>:EcI!GVrJQ^*Pn[KCS@>/1%:g#^BB$(pDaCpA#NFj^3-$^l_idh2_Vjlp<-eP<-#!ep#K%9]_r?8j5A:,e!u4a]Le5e:nGV4kUgoH7G8s;M^W%rStJ.G``4R]P-fT*X\pFq5&lHZW*f=W"c7-N3l4f)3EO2O$1aE,:<7HNr^J2,&(bSo9Md5E9dWfdl`IVrT/#^$AAC\W1JGV&0;@A#]-2Rko+E<7XU.d/1*toY((kdfMAFZ20Xq3CQ:'HCDE[`YT.18mh\psIZ?piQ'CGnrn_cc^`Z/i9H$ZTN:K!o?M6iAg)G*VN%hCl!)3Hg,(Ss6=M&.(;SD^uhR'uV]F2cbjB45L]S9-<#dN#XdAfUF_b!=p\)B+bqo_l0V8eeV8Tb"%GJal;]0f]FA.6e:1:He*NYdHbS at 4M]aENCqRKd+iH.>i6N?bjT<9r9DQ",ZE=b/eC9#u.C.!N+^u>(jV<re2i5fr]:mD?S*s>'PXhPUA3Y?TPnl;^Fuojs[DBDV$p1I:*NRl#0tY6oT+":IoD0h-<(2qkf[h9a<S]]Dq;af.-&tBN(KHr+n+8_Q6g?f^Pq\(SYYraCt+.eCkfLG+eVRYA_ms%\+uq<TuL"7a8-ZF-t at PQ=Q^[eTLK_, at Bm&mBiQlUJ9T`q)$Lnn2(L8CE8?P^XLc]l%AX\^4;=R6iAjD67$gO<D7hr7X[/h3[(\d53>Y]T,7?U&oH-V>NK!U2p:$cr;gVpKtW*iaOncsP1V34C:Z;/UHQ$7"P3t._eul7^ZG6f435R$T2 at M'TWZB<prA!tV9-(M?Ln'&2[6alOr,$J^%1.I:HeIs%<pRp+HIaRB")hg`)9Rrgc<dC78HA=K=cm5(VlB#m13S%0CIq"mnY"[;04C",Pc;l"t/2ET7:9ga!
 rTmTHKu#h'YNgf64:2NN/S(XV+obM*[$[KrPpgZ'!)1Q$HDJ._d+dTUH"qHSs'bQ8(t$f7V('ITbT_nZi;Do^@!.jU)i^&2nZK?@$m9+W.["qerO:&E4-8G[Y(@X'Rn%2ai;IE-q[%7n7)3F/[qgh7#Du[b<uC=^hQ\dqdak`]_WbfZQds:.3&j%l#/2^QGFcGt0#dZKpAg^p94AFB-S-@"KZ<#99h?8kp"=RkTrY4O7,feb^K_GSGNtMSI+7lLdEcnF7r1ch+CBB>AcW]S'A*Z$NDc;=_a_9)[q<(FQD)THN>"?!FgU_-`+kKI(b3n2'1BKdm2T>ueR_-><7!Yc/_'/\%So?(PU9X:T$;N4.+>]fbsea[!]p0OTW<fXQgX('D<0?=nid12<]%S+[lSptO#^Z_hF'/rk\moGinb+1u*5X+INk8&luQ4]R[[?>'_UiDV at Tg_teOP.85=DiPTCecsWUOrUiHJl!I,JIdGS>."hN(`cgW`o8q/pU3<XAoA^m@!(hPF,N+C<&*Rt"^S1 at D=Q9CpfcHR$nfI7-h0oNp$BO.<!bb`+)bF?[13]QD.#9<q)UFBpk/>$4hrI0q6SHl!r&gLbAk?seYiV#ZV'a]0UrZ\(a[]7Z8\n\lgp)52-#5=DE>5')se\0 at .F74$stC#^!-q2>X/**U0gi=Zf$\!XFW/1DtGc^-njf<+q)#Y9Am4_C6uF`E6HoP.,6[#*jaG<7b`@8ASR#d)&lkQiF*&kAOE&<"WjhuaL0G#-Sft"P6PAJ:RtRQ*#t#k)r%kq-.W8We>(J+*XgB_hc7WOna8!;Xduhq2Tc'`lWA%E8Ji;@'(lApkQ`:$GZRm6nF2cNm^<;d#-METQV(d*PhT<Do1JD$QZS:V[gS)p+1',1.0AGU+uT_[0#nUt"KrgKgc##1^^Q-6QDc/pMo@:_nA8:FE at L0b?Ib&Y>b[ZZ&k,7)2]aW8AYBi:Au;"6OO;KkH.A!U6Sqn8J
 LVGIL@?nQ6+T[`cV9]AFB'Uja&+6jlO71pTr4nKbMXggi?&p4][JK5aC9?Hh"W-=-hAgKQ$bjt+.mF_&`(AI2E"'uH4C^hZBk^C<T7E](8%(t;U?.#r,h7:,umO_XrFCBs*+`IBphY]@?=L*n9r!iNGX1+X.1j'l[S0'4J8&Ur4]G5BTH<XSSF]snZ!#$`Rd+gES\8l(2HmmEL/&:;[_`F3>^Mg:\C2$6?8bX8Mbgh4#h-!X39#-8p+Z)AYklfHcAuslfo.AZ/YgaK`mfYV;YS3ULC`A=&h>.>UHA=JJI'bpL\X=Z-1eR[*HN08.iRVl]8\.ctFmo\m:JGiJDM[)g,iPLEkOHjl9.T)(t#B-)9CVQDmuNMM'gDkqmg^$]?S&^(dPUVt7cD(.i^9MkeUt18.G0?G["L[kqH*;akRCI;Z at GD-QO!pOBWZZBSlOPtOtGJr`OXVh.0;XA>_E=&hk&9soY]\#;(Si;35/^6..cr66]of]b;5LDH1+:UbRqhE"8V+M&l(djjg.ieX`)#Ue,th5G3SVlNgA3m=(gLSTJ:iI&./:5qW[;E4h>bg;\qC6NY at bJrt.Gk>t*Lp'g<9Hs&*<XI$"Ts,Ba)4AXsK:.QrQFL9bq,I4.%HU/-0t9pF^hm<>WsQnMi;5)TSuLO]O"NO%'7<bgS4I$"%5$?Pb2qkd4FC'SZ at r8Jf),0_rnpXehnASaifah&&n.0%I)0(eM3b<`X!?:Vi?8jYK_Vne]/3M8od+ZdT^^,4Wr;ot=.tS#`qBuABHTK>@@N3hBZ?BIAR,WY:Zsa*H'.QX2%&LsO)q80Ii1-7aFr27#iN.c,SVrfCTGK[\t/Um73ZhgcpgN3A/P=M0`PF-'9NO)KHaq$#Q$87Ab+8>YEC%tas\Q\E;dfQg#pf_,5K"E2a=tRcINl>,CBk6Be$lZ-l;ZbjhHn*MbkC-oS&/^oq/_SEAIA>;EAPRj<(3GpsNqqK[37#Jna96/;%Jg
 N.qjaLV&J</,<:gN,0bN5*],`f=o#nLAZu'/(c*idN6+/fLa7[jM*@i,#2Nc-RVk")'ssCT[BWq&5j#+%8bU3+bZ(Ync`Pj85i^1dL_)VB!VOu4?U"=.5:qS:"<Z85r^kb\Tr.u[>BWApQX=WW&,8U\9E%JW9<^@Z#rj!%HSb.,TE-e&bS7L4gj],Z(Y$T'gY*,;q`.MN$<U<Mpb]1iV`Tn<);hO&i3^U`Zb[D-R-.tna5)^4XF^eD/7,\nM-c0GOO=lmO>E7;/%S5E-QUu[k12 at fb`PAlcJn-)lu-5Doepn;9uST1[CVFiXX<gFFHuG*$ICTZe<]B9?95X,qG^Z%-JjGpOI-c#/e&AelQVql^mMf?oT7a[Vf5#Qe_RB!=h;1UK^">ACO3Z^qmdq\?PBM0`[.\j7]ASi8B*,l]uZhM%-A\VkA?VqbnMSnEIB($^_4Dm8",*_3[BmmO>CAoGl^ue4Kh1Kh^":^'7P4l^mMfi8A\4iff:Y$W&dmrM^8jpsqSS2W/IWDL\Yg%fULjb"b\4lShG"^U3Fq^&`u[ES]Ui0G0],T,'*gS#!mV[Z"Ch%QO7-_KH<cS)""M!$(p]An0Xq at K9`LOkZMnY]qKd"""(jqpPUcn<o$h(=7,IP>Nh>?ktXlF8*s#:d+'OXU[>c>dq3HXP_+d:CFtSVdXZTW12TAZiD(nVBP^;YM[E>#?6I]fH^p4YRP"V2G&P5D&K`Z*H:M9L>WhZ at 2f7X51:(u_W$u<Y]qKd^as:hnA/`UJkoK2dh$,"P;IM"2Vkgl!=,7_(:UMmVBOmUdkJ at e=kJJ5GU>uaeo,*K8ddo%a=M/"0FQVHAmpl[/=pP]3;?07E!s"V%06^+BaATbnOu<;Kh^"RDHlFumNGsR2U`5m!pV,-<a#J551:'jJnJN at D-J$.n?%%0Cgcd,6bpO9@<;m`YRP%29TfT5T#mprl7`U8UgY%I+j at eMBgCKbe4L+a_.O[<:RHiQ#`E>
 Y1b>54#d^a,)Vf0[Mq\uG$FoV:)M20oE&\r/<FZr!>JMe+2T&"nX\\H_NGO?o>"j_]\D*=oW\Ft!/U6eZ2QOhKCq&>*fPFTJk?2\rgNNRUBaAT2QT_dZNG/Y^_<X%c))c7b+Z@\a49*;W"Lm=JHu)iCBaAUmZ`r,a)Vqi>!UD\M))d6 at Ab08/AeQ-~>endstream
+endobj
+% 'FormXob.c8ba08e347e6847214d84c863a661d07': class PDFImageXObject 
+5 0 obj
+<< /BitsPerComponent 8
+ /ColorSpace /DeviceRGB
+ /Filter [ /ASCII85Decode
+ /FlateDecode ]
+ /Height 45
+ /Length 6345
+ /Subtype /Image
+ /Type /XObject
+ /Width 2008 >>
+stream
+Gb"/l^M at +F(<?FgZ/la at kpGXm3R*^:-A=Nu[=uG79WFn-9&$!o0a%Q43"V8ti5KTh=L`>_PS==SM+pNL-W1X)>0#dm+i=er1NUi)1\Y4hpS?,j08h(22fF0%]DBg`B,1jTzzzzzzzzzzzzzzzzzzzk[`]qf;lL_m>oGng:FS8q+e=j5Q,n at fi@?+-A+3PQ<c?bbO5Agc+B$Id_>Il2qd,\3IgA4:UZTq_3I9s6<aMGUe<@G]-lDbS\4;)1aDaqC85=>/A#Wsz!!!#BkN:Sj=)L,O<V=lOIruckUD;b4bqGBj[8 at rjd18J?3jMl4At5m`PL/$2q763],HgjJ\@qk%NV>XrS7I$B5_fZ<8ig+dHJ+9kj2/3Ne[D!<eH#XMz!+=.fhl]C1SiM;dk\GW0f\Jbs<p9=+;<qD=s%8]d*R.rXrIpZL^&;Kg5[HPHGRf\3eYMm'9^NPp?BkQlz!!$]?,.34sq=tWSr7IYO_%CL#bi^Hk&cO`X5+8;0PL._T1)%jNM2D#`h*87kiIaV68T?l>p+'>nlY+sGBg?G;Y=\fqz!!'CG[qcS:l^Q"Dl"Fu(&Su=.'X_gHq!U=o5#p^be'WQfLgI9pjZ^&.RS*Ehg!s=6[/J,WX\1 at Y[\('9>6t90z!!"h&C.5;;=gWc3nW;=i>\,.,a](-iK\#;S4FXH at lQemrC@=,Q2dX";0-nYP5;&W%<JT/e<=9:N"TSN&z0[QoBCAs=jdYYlhA%9Z/iK2WNk%d`P8Vm.!]'CWS$daRs50,JPi;ioYz!'oS"T71X_,!AM6Fril7b<g17c+B#t*8UMLr[8is-&CVHO$;2u^@CpjP8N:@8N%=JMV'`UO3&=e*>LY1.R.%LFRi,.nmE)Ql&%I=I?S2(*R,[U3.ai"33V=4:"]Bp3T+Q2*e`$2l5&Q4=99/M6o4YuHM-p`bO#N>=1<e\q!tIM^\cm`=_#4PI*Y?`C+#308fp5*;gS<M'BpoPG?UObLt!
 \U:iXoA<CnggAq$],8nI2fz!!%P;n/Sm(.`TJD5%H at 6DJqb=An*fArg(UEOcO8q>!aAG*q?4TYgU>CrBk9oeSd9J at 2-6HbDIa\0).-Nn(K1Q3G<+ZUpd!J2]c#?<!p_u,9s3k;hklqjEm!r<*ahGTk6tUm1sF!(BcP#U\WUDBr_$X at 0.;3:-Ks][,&Tuk!0SSD6G!1+\P0APZU<Mrm8?g3dC>iftl4 at TAOtlq;;0XlG]aOq\Lp-20L-4,(8i*Aopo(3>8QLPV at UR@BrBq91>,:(SEoW_CHAL3NMWPOmeHRm&/q&Jdp2W:/;Q:3cV;Wz!!'fSAW.;'\I(:a4rQPMd-s;r8qRmUoMR"B,LgHiBLZ^<d+m>N^YZN7rM42mKF`CA1+gb)%#=JpT[f8"QlUHVrJK1?269.AT[0^>&^?'4*XSh]*dkV\jr;TP<EX.NN1L!i:2,iVj(6(fi5^Z>p9\,[R&`jU=`ZI4(KW*l=1>4'HRZMR.*%]2g-B>TO@\]cDOGGqUh)IObZ<X#d)IJ,7A\i.[-bD'8+6YDXraZ6f'V#9=uYmsggUHfz!.`UneV]:qO-0(el%)e9s"nAfebWrGX0BW&X?*24SR28?[&:9L8\Hn(%[A^?(hfn8hWcS7S?Z`Idcq_*dYr<PHq$VCr9kWUNomgb4H^ab.MK5_iu<tJ1N^hA5HX[;[-dkKLU8X5/&$@Mq0BZ_pWGYe3_fCBrJR#LdYupOom1,iA?kG6Y(].,m5LufXtuH&.T!fJ-L`KI6)7_Te]:A+C=P'12`P=Kz!!(q:dcqH5-akllG0lFUoX[;ap!LpL<`CYFUT-db35%(/N812llMKV*K2Q at 48S]kjVD?lVC%3bpk81K`^S<C.ip/DZK?EFAi>h at 9\nr&6hIf8X7t8pu\GUH9n3Og;oPn$&nNKK7As182V32QWiEB?B];9.=<4a]hQWO(kdM*"k:"o#XH4nML"onW'!!!!YBllGAj.3t:B[_
 b=IH1:Pj^Q+El%mfKN44GFLujWuK0A>daqc31U8[!W)%N@;N`Q`\f!`f, at J=2fI?&&4o36Y<o];3Q'7Q]f1ST"%1spWQ#bN#\UW<klm`";.0]D+p]4]H(l/G.niN6VH#>%q8S1gaD$NY*B`MDTb<i,/r&$9<imO-<S"OX)LROUq4W at hr3WfLct9?.smH!KqUz!!!#M%AsLPBap*1>nl&!LmK!^7<_;8SS^_DH0*&`%mS`*9ZYF)D,&n"/+<#N(@C;MQ7>%"D)A<]?P>mdUe at P33sKris!,"D(10<GZ8/GpU\VpgZfT/L5e-_m3l/NWCY]tO^lQ7Bm*1P-&8j&%XN^+Oj[@8us3!LmVWY5`If2'8G+.r=Zh-Mj$'VOrXgG1._<Ia!V.VO>X8E+J7P.h%g1B6PR[Kdb+)%!`]WhM<z!!$ecdfb[Jf%K3I42KC-s#&#de;eME*Xgf3kk5`#s"b++hq^NHR[e4p$teI[ldI[)d at SbpU<H+_8sTO2"Xguo,W@@QauFFNY?(g\<L@@t2Z2+4q:]Ck)@,=#K$rRlD8%_3V.FCHlp!BeXn,5-^lQ7BN4"c(=H(4aR?lZebJWYZ]bdSAQgVH_:k"[8]R0?WeV_[*)uo%ek_*t_9tM1"(Cd[cCq6iN>!;8\OY#XBQ(K2QW+A\bl;`2KY*(V(^%KL^X+b6M'H^h\a^q=rKFgHU+bUCnBH:[)L&-FW(T+I$3>KQ!<taCXHbmJ^7<lPuO4Nf@"2_96e&r0k;gr:g)]84i(1uugCo!"?1F(WCF[tR`cluu#,O<J?XkBr?kSq6FG%F28NHUR')qf&M`T:5RF3FYL`er'QbIB=6+r=kHG^<Neipra2\K>)4.PK?skHiYpj54+gQHZ^O_72tK>0<'1P3M&l at 8GJN'n:fP]-fAYA4=[.)mmbI.4t-U]EOL9 at 5sBF/cG]E9Wl?V8Xp>Y#U+j463s9]bP8]`.<sMEHb"55Zn#YYXC_K5cS<qn
 N@\tuM:(gu+\lfS]1+T1RL7Z8?O"=b"_LIb7^Jj_;`"mY8hCn7A)DQ<)6c3&bd5gHI'$])8Z:1M)QN2hKK81F+9)P#dBR9Dr2bh"M&,*bJ+:t'eZDO!`@n\B_u`$G+>B&I$r4DMN)s*'Y26g=a*:NPqdB7KBptHBZY8nWLd,NIYiVpdae(pLf^f$DYt89-==Js'B^AtHKFgHU+bUCnCEtLVqk,H;^#![J)YQo7XdnIUmlhh"CO!8!7Y[2^3F84]W];bEC2V9".V#obh:hAJ[VB#l/82/(9+/p&FE2d#4]NN(F#Ed+VrTl#J008b)=+m+b\(3d::/JOS!<d=`_JpEWlQd>G(A%q1\k3f%GcMTo8>@dhA at K`+g!9c"R.n#TNlpEXc9[tKA/u;hXUFlC`XV3r<7ic63n`f&4.aC>+0Zia3^nY^D#hQi%^VjfqUa[=DN/h]8W]3GYP[=WVLI-YH0i-e=X1Da]35QW at P@NhUo34h'/tr9#J*4q-#XJ$e4\*Wo:.Q+QkcIJ04e7XkK&jV5d\Ll"lbt>9WS&l*JK[GU"M3ofV,^iJ.q5J<*h at g:c3:G/1r2S[I<=MjEo:g"ekL1*C9\T,J^bb7;fGknp;J=4goL.Z"g*#U+j463naA>ZK7c8,U)I^i+7.7RV!;9G.MAD_u- at G#6_Ap$>_$4.i+N0+CjhN%iij/=WN%Bip'11ojI-1"!!UGj\uX6edjr]s[[]Lu45N4e4:U*:Pb5K;3`oR<<LpGe*c\&g.,'dq=:r:`V+5VrGM:Zkb\b?KXVccMb]3H%PZkn`An:LD=_\:OgZ[F]"O5*NotrKFgHU+bUCnX"!pn4hiMQBJalh/&RQ`6[nH)T5!XP)`49L.]KW(FPL`OH1n*7GYin,s!D*^#q[p at .3*XYM=5T$1154R7M.6-d<oTFDkJOsg$"*&g<VJYr%tPSVAB]K)o_Tkj[A_!It$_Nh6Z:7gAC'JdPA5EZ30m0Au8ima'&b
 i&5/W7FYG0*_Y6C;)EgB^pR6Kul5l-?2]3E]Yd]`_mMI=J3L4[a#U+j463n`f:8YD5lW[YW7H:qEg6JZ%Tt)R at SL;6eG\Io\mN2r$"6jtmSSkS0GYil,[bo\R`=p<2dH3\4lKjT"2LN(%b)YUC7:eFRn63r50/poknC+c<rB at m!'#uXX-^kQqE-84b5\#_m8>9\-O`=lQNjV\-*@p"q;pLC3:]'$jbrS$SA;WtmUjH[@)ihMcX"oI,OAEXJOd0hQFD)s?9=$\GGYXE,#U+j463n`f&6cY]F27S"^)@XN:F>OP!jt8.m25im(j8a/(*h at NCeO)6[h38>qMe4!g'XtRX3o`t(uAQ\!uh?)^6,*pPJmM at o=9f\m:a4GTP9gV[)uqL\&RM!K`7"""+H[KP42O<CXa<lIm/=$3RRE8B-H\lN-QgM7 at KE3k/3i,)/k?FXp)AXb=Io at DZ3+&d:7B\d4. at HUmYdqAFG3i.;M6`Jn&.;q^uBg[H\daUbiJNH%?Mn#U+j463s]UZo%4P_dSiqNIud)f0nA4]G$[#S6DYJdb'dF<;he?a'PfQ:msp at X'o&NDWfK:8R&5_)%We`=E^\&IV`?)'=q7/eWHWHkhEH_18\6&WRHUX8;p9taXm$7[5Qpf$R+OF5;N!Kl%+dKJW1f,[.EIJ"+H\:brE16N$4[$EVXm"lL\K,GN&5OhSIaE;SQT=/A99;YP'F%2Q'gg>&!)-)4[>E0j<Zd8@<?sY+0pU\+\SC0'YIl469QkV2<O.V:PhnKFgHU+bUDq7+F-_K<@bBB_2b2B8JU3(u+jpJl`hA2QPH*DJ^&>%=`Hj$b=8P+HTbW>'oXb&>MmhLU<AlpF#l_:8-7Q[B2c.hkp?1=J/1`6X$n[40+K5p=e7aEhsc^R[TErblL'.[D+Co3Q2;4>`c)Rm`":#s5KlT&-'g7n%RS+&?biT^[K6nH8=,H*oB'CS2Vn""`7/Z!2]XtD(DEZZ1E^bb"i
 T9)mfJ9p>XNo"k(n#nr9b5A]HPT9q7"#)^5P2KFgHU+b\3'b-n:?5.kadCt+X#ps2q[P8gsbM";^YV^XDq[.`5!VdUdG?)j;HAaj5/_LG?;4fP55D"H>Tb_ at u%T"i(HSup8Pn$>8XoA$dLD5AuYo?@:`cA=U41rr]lhr8B;924HoMc6O[YkaF1eX2#RY6ADt/=^/63BG_O7SU5QkaruPf,]$pN5oMBAJo?LCI02a4lO+qhEf4[J'?tVQiI*dz`s*dQ8lSJ8i'5iAn06#i^5WE9_2 at mh_iOPtZ?T4kBn5SuC?[gc0(g:sC04'h[sJ_tGO0F1cXU2aa,\q6WU;*T1uD5kXR^djXR\g5baE/T3,q^C'I/gMX_`cnHZ?IagIE@[q=&l]q,LUYF2,_onh)lg>4=WU[#28Od>C.SjPTZ(3el'_hgGTsnGNgsz!!$+Y4Rp#1(=TQ&PU<;j*P,D`4%6Tu6>8cmK;;2%F'*aaL@]$/`-H*k<i\!TZ@@i"C.EE"*,AlH1I/PJNLnJ=\7j-jjtQ7;^8Dl\A8c7rXpfMWa at pZj8^eibOcFQi7QYfIXq%i*1k$*e0uDTr,sthljX+=B*V&4DmFO?fX8`=e-tf<b9D%U:NB+TOz!!!#MJt$s+g!2s,`l9+*B=N+HO.SLtj at F,tinlpV46XPhH\3)+eKaI&.2VD)eLFLPL,L'LBlldCCWNar)(QF at lrt@\C9mA[m1r=9;H<*&Xk;4e)i:+q'<5DMS4HkE<-<*)2[;HeQRQckL'Pm-<`<"?0<RJKY&7rd[V"5VHS21U:Do?C,q>FpW`=*1[GXh)<5&5ka(R&r+B"6W7 at .qo%[2CrDuB9OeV"g+z!!!",Q20C:?U+I!4#8V:SA- at 7Oe5.u3TRV#<Ecf(Zr1J>CW?<kJ%TafT&s.0'#lp#Yp%Zg6hR8Q.lSN8Fc[*\g_.03YJ$Elmo2N=H98rMWiFd[_#cDZT4c_Rpf*#iX49+OL&@\SR$X
 Fip/\!h98b>A(MQG5gU/$`IEe+^PCZA2&McSo%h1`t=sq)8k+5O;H:FsugiHj7cU9Vr[W(n.$0aMHQ*LA;]stY!]smb5p!9ui=atndmJVs0WXaDARtQEW%n^?&>rqdb#YtKGJsKi.3M>2WSR\HQHj-,b@?#'a82!OD#=g7C7XI?jIP/CSJHl/TzJE=)KJ!_;@B)&;FBQ8lsYHmcp3 at Dto6or%&)_5D^]*b at 3/l%nsI.d$%,/"?]q;(cu[i\!i]/g\hkfiBmd+'58OpRa'BfY"M21:q_5QLibzJ<PM'8F*R^"onW'z!!!#'p1U?PSiM:9fi8+Szz!*FTTisXu3bH;``zz!5R<`*CMmEZ&\kbzz!%/$7+ft_Ezz!78m6j6,lZn4cp+Xr79?zzzzzzX9&>)@BDpR~>endstream
+endobj
+% 'F3': class PDFType1Font 
+6 0 obj
+% Font ZapfDingbats
+<< /BaseFont /ZapfDingbats
+ /Encoding /ZapfDingbatsEncoding
+ /Name /F3
+ /Subtype /Type1
+ /Type /Font >>
+endobj
+% 'Page1': class PDFPage 
+7 0 obj
+% Page dictionary
+<< /Contents 12 0 R
+ /MediaBox [ 0
+ 0
+ 595.2756
+ 841.8898 ]
+ /Parent 11 0 R
+ /Resources << /Font 1 0 R
+ /ProcSet [ /PDF
+ /Text
+ /ImageB
+ /ImageC
+ /ImageI ]
+ /XObject << /FormXob.0086924a45e007495af99df70126eb1b 4 0 R
+ /FormXob.c8ba08e347e6847214d84c863a661d07 5 0 R >> >>
+ /Rotate 0
+ /Trans <<  >>
+ /Type /Page >>
+endobj
+% 'Page2': class PDFPage 
+8 0 obj
+% Page dictionary
+<< /Contents 13 0 R
+ /MediaBox [ 0
+ 0
+ 595.2756
+ 841.8898 ]
+ /Parent 11 0 R
+ /Resources << /Font 1 0 R
+ /ProcSet [ /PDF
+ /Text
+ /ImageB
+ /ImageC
+ /ImageI ]
+ /XObject << /FormXob.0086924a45e007495af99df70126eb1b 4 0 R
+ /FormXob.c8ba08e347e6847214d84c863a661d07 5 0 R >> >>
+ /Rotate 0
+ /Trans <<  >>
+ /Type /Page >>
+endobj
+% 'R9': class PDFCatalog 
+9 0 obj
+% Document Root
+<< /Outlines 14 0 R
+ /PageMode /UseNone
+ /Pages 11 0 R
+ /Type /Catalog >>
+endobj
+% 'R10': class PDFInfo 
+10 0 obj
+<< /Author (\(anonymous\))
+ /CreationDate (D:20121219230254+05'00')
+ /Creator (\(unspecified\))
+ /Keywords ()
+ /Producer (ReportLab PDF Library - www.reportlab.com)
+ /Subject (\(unspecified\))
+ /Title (\(anonymous\)) >>
+endobj
+% 'R11': class PDFPages 
+11 0 obj
+% page tree
+<< /Count 2
+ /Kids [ 7 0 R
+ 8 0 R ]
+ /Type /Pages >>
+endobj
+% 'R12': class PDFStream 
+12 0 obj
+% page stream
+<< /Filter [ /ASCII85Decode
+ /FlateDecode ]
+ /Length 2860 >>
+stream
+Gau0FgN)=4&q+ths.S?$PO`AmhF-d9As:p=emu+TF]Gk"c3$I$&naae"-St8YMX5JU8SGgM6b<j:#aUbdf?sT"(GZs&(?$'%,g.jI/(X1g$gs+k"]0+r!YeShVNXp^!Us\Y^l"T2Xr_K=MYn9NX+%KJ]A2e^ANSj00Ca_!M8n,pmdRKq$nI\_W).GO],KYF1k.Yfc^GV#[lqPW64MPLJLfZs-'dGAHdNr]A3(4ARV^]k@#4RV\ZUe0k3$78`&>%VWE*3B,"d<WUIAMl!s*QMh2hU!o^Xfi<Sf#Ao8Tu;;aOkpK;<,2psUMYd>_C,?X?[S_,h[^4shBd'/!pA%NeD8mZ1^'(B81A&hP4IRq$,p+*#+YlU.o\l:8)L:4HY=a.$UL>(ieG@*`]<<^-VorTk)1X?jp?\kV(OHa/<54dIb8s$(nd\[fB;F+HA.%.9&Hi_bq!&"\q(!e**EXmJLn?,SZ?ATL+luru at AJ-RdF<pHjTr8$n-2cr(:G?!g6$8Hg8[SbfV03Hs-[W9_JtHoL#I'r&J'fA7q=7=e/[`g<[HW05L-6m&pUpSXg?qfg4t]8QJ8ABRoijbnPcKUM at 3qXZSp[`HN9;q>"g;Zp04_bMaG&Ug=mqcZ7+NY`lN/TaGd8seMRp/ajL?CCg_20*eRZ!d;D"(P)_*[TQ3e9P4 at KoRhe70maqA7hUdR4oT/i>[Q)`:MAcbSec9])W317FBC:uE"=coRDQ+7_g]^OTZP>/n*5?"Z\L,PrQn'OB<D)56XVYY;lH$5k<Bs#.j]r)7,(Pp;DI#g?<D'$TOM`VHXI7)@*6Yaj/5INCcnC_P<=B\<b\rl'\Gq_RRp8E_n':URn\proD4bRT4)K)b5lWH0td4O7<m5_<8'<A<BHlXSUpENXbL-CgP"*gL"WZ7HbO*RL.9EU9lm`3.[Ha8pO,A+_QqCnH]>,c9]CiR\tZ(6amM-bG*n#f&s3m-S<0.0K<`_2o"I!I,e#F3I
 h.]4AR1DC;p:r+$b7LCMNE!AAXYQ;3TS^#0L3sX\7q(9C':jO%UG at Co__KaWo^&lFuW8F'Mr!1C?'1Kn4r`+^ZcXNSDi[HK9MU`E26]00LV]U#*hF)00gFMPI1=_.cdBT0-HtWmN[jf7N[Lh,Z.E%"M&1OY/`.t4o)/*Y&eeGDbWNdOrZeki>;/^>X'9o#N6"qS at nt8t5ZP;*8:ag@]do"7DVQ&5(oVD>$aK at 3kdP#si>1j^]-C78C<B"YS_blo=39*]og'5e.36Xfhe.-G#fP\Q'?eG),Ls[/6H9sl(f_2KS!H76#cZ8i0;;8k.jhJ40Ig$X,]W\[-IBBC5^^G$!RHh\m`c4)\*4OC>gqN%@GC+NSpSRS=j*j^fO)=*c^<[7W%=QqrD8c1p\n<%Sp>6$)q(q/pW=h="A%!e+9Zq^XF)uG1M9ID=9uXG0l!^91Q=1sVnMD%nM7NRJSHWE at RTJbM*b%tQPpJG&XdJ$fbZ at eA;juJ'S99N;oYEg>^PTUV]"g&E8O4VCba(%G%p3:E4!STO1#Id3SI1r:I-X>>giif1F&OU4A>:rp[t at _=@oLUFTC0QMH?ofHJN:0_dkrP9+s)EH`d/[pLajQl>tN,uZcE[p6:<]R80p^RP/lR/bq%2o6X^CncP,Z'h6q$F'ZiD>oDnq at LJ#Kg4%e@,+gdurg/K@\a7T>fP)A^*QRI]1Cn?emRjgqmBS!)I1=7HSS4%!nHTD>oSALq]W'Mj^h69&#Lj4rD9'67\bn<uH&SeFR=Xfalg62jX)=`;K1`+0!oT<lOGYm>nj&/VcM1_!hhAJMdl&!>Tk>K9Nf$9\2`O<fA$Kd^(*1fXZ>s[R9Hueq,gnf>(6W(NL_g@(n#l?/2j01i4[uDZH#BA?=2RI+la^qiW+XndPcU]PUf3b2#hhnGPob*_>=cDGF%3)cYen`q9^(G;J5WfPJ at eOi,D=g_WD5/]u31Hj_)g7(\VXt-kGtm[dmF=M#a,\
 J at d'l[>$iQ5O\CLc^kXp(R at 4Y0rW5]Bd2upt23n$A6,Hf6F*7K1\R`Z?c`BW/^m-3?>$*9so7:`.!V?.SEj#Y%rJY](S03+!/]8<;)UX=qi(ep8tE/ZES%`?@b'IOq7_1EKQ+(K)gAP_6.nsas at .)hR7Uk)I`]nsSkZ4`U46!\5C&4sHEGeohb-<&o.mB@;GOegq!1dYY\>EZH0N"GFH(76?0R)#of- at qN'1t_Q:L[DK:*O7lM"Yh=_&#_jY+n7loOd"US.[6mA&U#>,J;7l4TC`jsBt2J3!@*lV+;ikJi\Zfr,Z\>(jGQFcN1:cJ`[.%MktoKdF;!>$Olj)@0.)O!e1 at qbA7;XPp82@%s1iiK8TQV@<Y-q/c-XU,[6Q at QZQe+c1d+6JEJ66oOAd73.G`,(j-5klMJdB$L]:Yi9G&265fCcl/r6:3A'^Fa:+t- at I`2/(r2 at _OR!"Q6D5:O/del_,VH0NQG=sBVP]Vs6be774lPWG&T1QVZ_kih:F_Xr5/ug+l7&$/SFDY'IlV4\q2A^eO_8Sa at KJ)FOY%dZ6ZT7'LFl)bc3KJin\DG"1Xl""jRSTMmpS6S9PXSE;5hG4GJZP"kV&b(*>;SNu/ge!8JcdZKkSYH7!im+F9W?2%RbR8O'=eA?jrBrA#kh2k_>Uphi&:HH0&3(ObII at G_-:1:D.I"rC(adWSNGUK#;M0"0=6Hdq$;U/mWrXZ_oG%Op,-RE^c^90d`+EYqh#kt at +Upp&'P+pa,p$Lljn,m_0Vl/FM_FF94[`Mljn+j:,$S?Tskj%c=7k0O]W<Gq*]#"OiMe!i%[BH(d-8/cW6s'7Gi3sB&>bArh@<2CqKX#%M2ldP]HM;)T'R*P'mU+0Ym)#rrMVd>.F~>endstream
+endobj
+% 'R13': class PDFStream 
+13 0 obj
+% page stream
+<< /Filter [ /ASCII85Decode
+ /FlateDecode ]
+ /Length 450 >>
+stream
+Gau`N4&a!]&FM?<s0*eQK\a8RQ_gHV=J.*Z0+^C(!!Wd[^:AlT&l8f?SX[1L^=ht_7tAjXG`OA*gDp%l!YUSjJN./\LN&l`a]k3%9E<ar$-I at J2$!#hU]P$Pj;%;.*uae-=6i9]9&@AQA[C2t62h5eF\?F:S7 at gE'TR^G"iILJOs^.DWihpp7>>K`'C8keL^gB^e at E]N+:2<h<5@<>9h(7@$+2QURF-mPpq]>+Yq8)l;R.aZAL!!YQH*$!Y;K&$ZtsRm(n2'aZ3nX?&0Q+S/&"Jgk*JB''a.1`.]?!bMB:Ml-,DED#'8$>`n,N[TR\-dGLo at 203?nR=i8tFITH@=]V at VN&.1Kb*JM450:eELS\4;_oTiADR-N-e-g4n:gn5f5cu80Uj*seTl<fdYqeqMJXn\A]U(.*,,=88hS>LAM>b#$\hShopb2\GB-6N)s"p"~>endstream
+endobj
+% 'R14': class PDFOutlines 
+14 0 obj
+<< /Count 0
+ /Type /Outlines >>
+endobj
+xref
+0 15
+0000000000 65535 f
+0000000113 00000 n
+0000000233 00000 n
+0000000398 00000 n
+0000000614 00000 n
+0000007014 00000 n
+0000013597 00000 n
+0000013771 00000 n
+0000014165 00000 n
+0000014559 00000 n
+0000014696 00000 n
+0000014967 00000 n
+0000015082 00000 n
+0000018085 00000 n
+0000018679 00000 n
+trailer
+<< /ID 
+ % ReportLab generated PDF document -- digest (http://www.reportlab.com) 
+ [(x\252\236\316\320\204\260H\031\311=3\274K\227\222) (x\252\236\316\320\204\260H\031\311=3\274K\227\222)] 
+
+ /Info 10 0 R
+ /Root 9 0 R
+ /Size 15 >>
+startxref
+18731
+%%EOF

Added: z3c.rml/trunk/src/z3c/rml/tests/expected/tag-ul-ol-li.pdf
===================================================================
--- z3c.rml/trunk/src/z3c/rml/tests/expected/tag-ul-ol-li.pdf	                        (rev 0)
+++ z3c.rml/trunk/src/z3c/rml/tests/expected/tag-ul-ol-li.pdf	2012-12-20 04:07:15 UTC (rev 128798)
@@ -0,0 +1,118 @@
+%PDF-1.4
+%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
+% 'BasicFonts': class PDFDictionary 
+1 0 obj
+% The standard fonts dictionary
+<< /F1 2 0 R
+ /F2 3 0 R
+ /F3 4 0 R >>
+endobj
+% 'F1': class PDFType1Font 
+2 0 obj
+% Font Helvetica
+<< /BaseFont /Helvetica
+ /Encoding /WinAnsiEncoding
+ /Name /F1
+ /Subtype /Type1
+ /Type /Font >>
+endobj
+% 'F2': class PDFType1Font 
+3 0 obj
+% Font Times-Roman
+<< /BaseFont /Times-Roman
+ /Encoding /WinAnsiEncoding
+ /Name /F2
+ /Subtype /Type1
+ /Type /Font >>
+endobj
+% 'F3': class PDFType1Font 
+4 0 obj
+% Font ZapfDingbats
+<< /BaseFont /ZapfDingbats
+ /Encoding /ZapfDingbatsEncoding
+ /Name /F3
+ /Subtype /Type1
+ /Type /Font >>
+endobj
+% 'Page1': class PDFPage 
+5 0 obj
+% Page dictionary
+<< /Contents 9 0 R
+ /MediaBox [ 0
+ 0
+ 595.2756
+ 841.8898 ]
+ /Parent 8 0 R
+ /Resources << /Font 1 0 R
+ /ProcSet [ /PDF
+ /Text
+ /ImageB
+ /ImageC
+ /ImageI ] >>
+ /Rotate 0
+ /Trans <<  >>
+ /Type /Page >>
+endobj
+% 'R6': class PDFCatalog 
+6 0 obj
+% Document Root
+<< /Outlines 10 0 R
+ /PageMode /UseNone
+ /Pages 8 0 R
+ /Type /Catalog >>
+endobj
+% 'R7': class PDFInfo 
+7 0 obj
+<< /Author (\(anonymous\))
+ /CreationDate (D:20121219223111+05'00')
+ /Creator (\(unspecified\))
+ /Keywords ()
+ /Producer (ReportLab PDF Library - www.reportlab.com)
+ /Subject (\(unspecified\))
+ /Title (\(anonymous\)) >>
+endobj
+% 'R8': class PDFPages 
+8 0 obj
+% page tree
+<< /Count 1
+ /Kids [ 5 0 R ]
+ /Type /Pages >>
+endobj
+% 'R9': class PDFStream 
+9 0 obj
+% page stream
+<< /Filter [ /ASCII85Decode
+ /FlateDecode ]
+ /Length 356 >>
+stream
+Gat=g0i,\@&;BjLq%#Cg#35;\gh'!,W=24]=P2>XKUP at uo`*s]787Vh3*)hcH10Vec7spX&%_M<"*cZln;Ml)bQf6u#.&k.;\n8%JJYFl$Y%@!<](2`RB3_GAt>Z^fOtEf4+'(&:)]K0._GlT"m4Ze[l;.)A&21gSKJcJ`dt:WFJ[JhWHr=j]=r(>Vh`lj%JY5')-0meX=D)%kqlUY'<=LS!NHi!`aH.=0rtu`RMCOR1GmqOX+LfQa$`R6Ng3_XjjUIVp?g5ps&nh+=Z+$IIH7^\&c$Z;<_JOP-1[2s,G%9B<<DaKI7ZWg;\&T08j53\Jk%Flpj4YZIOF7tl=l<,C(@5:/:IVdeJ8i~>endstream
+endobj
+% 'R10': class PDFOutlines 
+10 0 obj
+<< /Count 0
+ /Type /Outlines >>
+endobj
+xref
+0 11
+0000000000 65535 f
+0000000113 00000 n
+0000000233 00000 n
+0000000398 00000 n
+0000000567 00000 n
+0000000741 00000 n
+0000001018 00000 n
+0000001153 00000 n
+0000001422 00000 n
+0000001527 00000 n
+0000002026 00000 n
+trailer
+<< /ID 
+ % ReportLab generated PDF document -- digest (http://www.reportlab.com) 
+ [(\177\200x\333\304\257\322\212\3031\267R\231\252\332{) (\177\200x\333\304\257\322\212\3031\267R\231\252\332{)] 
+
+ /Info 7 0 R
+ /Root 6 0 R
+ /Size 11 >>
+startxref
+2078
+%%EOF

Added: z3c.rml/trunk/src/z3c/rml/tests/input/rml-examples-046-lists.rml
===================================================================
--- z3c.rml/trunk/src/z3c/rml/tests/input/rml-examples-046-lists.rml	                        (rev 0)
+++ z3c.rml/trunk/src/z3c/rml/tests/input/rml-examples-046-lists.rml	2012-12-20 04:07:15 UTC (rev 128798)
@@ -0,0 +1,160 @@
+<?xml version="1.0" encoding="iso-8859-1" standalone="no" ?>
+<!DOCTYPE document SYSTEM "rml_1_0.dtd">
+<document filename="test_046_lists.pdf">
+
+
+<template pageSize="(595, 842)" leftMargin="72" showBoundary="1">
+<pageTemplate id="main">
+	<pageGraphics>
+		<setFont name="Helvetica-Bold" size="18"/>
+		    <drawString x="35" y="783">RML Example 53: Lists</drawString>
+			<image file="logo_no_bar.png" preserveAspectRatio="1" x="488" y="749" width="72" height="72"/>
+    		<image file="strapline.png" preserveAspectRatio="1" x="35" y="0" width="525" />
+		<setFont name="Helvetica" size="10"/>
+		<drawCenteredString x="297" y="36"><pageNumber countingFrom="1"/></drawCenteredString>
+	</pageGraphics>
+	<frame id="second" x1="35" y1="45" width="525" height="590"/>
+	</pageTemplate>
+	<pageTemplate id="main2">
+	<pageGraphics>
+		<setFont name="Helvetica-Bold" size="18"/>
+		    <drawString x="35" y="783">RML Example 53: Lists</drawString>
+			<image file="logo_no_bar.png" preserveAspectRatio="1" x="488" y="749" width="72" height="72"/>
+    		<image file="strapline.png" preserveAspectRatio="1" x="35" y="0" width="525" />
+		<setFont name="Helvetica" size="10"/>
+		<drawCenteredString x="297" y="36"><pageNumber countingFrom="1"/></drawCenteredString>
+	</pageGraphics>
+	<frame id="second" x1="35" y1="45" width="525" height="685"/>
+	</pageTemplate>
+</template>
+
+<stylesheet>
+	<paraStyle name="normal" fontName="Helvetica" fontSize="10" leading="12" />
+	<paraStyle name="bodytext" parent="normal" spaceBefore="6" />
+	<paraStyle name="lpsty" parent="bodytext" spaceAfter="18" />
+	<paraStyle name="intro"  fontName="Helvetica" fontSize="12" leading="12" spaceAfter="12"/>
+	<paraStyle name="h1" fontName="Helvetica-Bold" fontSize="12" spaceBefore = "0.5cm" />
+	<blockTableStyle id="redgreen" spaceBefore="20">
+		<!--blockAlignment value="left"/>
+		<blockValign value="top"/>
+		<blockBottomPadding length="0" start="0,0" stop="-1,-1"/>
+		<blockLeftPadding length="0" start="0,0" stop="-1,-1"/>
+		<blockTopPadding length="0" start="0,0" stop="-1,-1"/>
+		<blockRightPadding length="0" start="0,0" stop="-1,-1"/-->
+		<lineStyle start="0,0" stop="-1,-1" kind="GRID" colorName="green"/>
+		<lineStyle start="0,0" stop="-1,-1" kind="BOX" colorName="red" thickness="2"/>
+		<!--blockBackground colorName="pink" start="0,0" stop="-1,-1"/>
+		<blockBackground colorName="yellow" start="0,0" stop="-1,-1"/-->
+	</blockTableStyle>
+	<listStyle name="blah" spaceAfter="10" bulletType="A" spaceBefore="23" />
+	<listStyle name="square" spaceAfter="10" bulletType="bullet" spaceBefore="23" bulletColor="red" start="square"/>
+</stylesheet>
+<story>
+<storyPlace x="35" y="660" width="525" height="73" origin="page">
+<para style="intro">RML (Report Markup Language) is ReportLab's own language for specifying the appearance of a printed page, which is converted into PDF by the utility rml2pdf.</para>
+<hr color="white" thickness="8pt"/>
+<para style="intro">These RML samples showcase techniques and features for generating various types of ouput and are distributed within our commercial package as test cases. Each should be self explanatory and stand alone.</para>
+<illustration height="3" width="525" align="center">
+<fill color= "(0,0.99,0.97,0.0)" />
+<rect x="0" y = "-12" width="525" height="3" round="1" fill="1" stroke = "Yes" />
+</illustration>
+</storyPlace>
+
+<setNextTemplate name="main2"/>
+	<ol>
+		<li><para style="lpsty">A table with 5 rows</para></li>
+		<li>
+			<blockTable style="redgreen" colWidths="50,100,200">
+				<tr><td>1</td><td><para style="bodytext"></para></td><td><para style="normal"></para></td></tr>
+				<tr><td>2</td><td><para style="bodytext">xx </para></td><td><para style="normal">blah </para></td></tr>
+				<tr><td>3</td><td><para style="bodytext">xx xx </para></td><td><para style="normal">blah blah </para></td></tr>
+				<tr><td>4</td><td><para style="bodytext">xx xx xx </para></td><td><para style="normal">blah blah blah </para></td></tr>
+				<tr><td>5</td><td><para style="bodytext">xx xx xx xx </para></td><td><para style="normal">blah blah blah blah </para></td></tr>
+			</blockTable>
+		</li>
+		<li>
+			<para style="normal">A sublist</para>
+		</li>
+		<li value="7">
+			<ol bulletType="i">
+				<li spaceBefore="6"><para style="normal">Another table with 3 rows</para></li>
+				<li>
+					<blockTable style="redgreen" colWidths="60,90,180">
+						<tr><td>1</td><td><para style="bodytext"></para></td><td><para style="normal"></para></td></tr>
+						<tr><td>2</td><td><para style="bodytext">xx </para></td><td><para style="normal">blah </para></td></tr>
+						<tr><td>3</td><td><para style="bodytext">xx xx </para></td><td><para style="normal">blah blah </para></td></tr>
+					</blockTable>
+				</li>
+				<li><para style="normal">We have already seen that the notion of level of grammaticalness is,
+apparently, determined by a corpus of utterance tokens upon which
+conformity has been defined by the paired utterance test.  If the
+position of the trace in (99c) were only relatively inaccessible to
+movement, a descriptively adequate grammar suffices to account for the
+traditional practice of grammarians.  Notice, incidentally, that this
+analysis of a formative as a pair of sets of features cannot be
+arbitrary in the strong generative capacity of the theory.</para>
+				</li>
+			</ol>
+		</li>
+		<li>
+			<para style="normal">An unordered sublist</para>
+		</li>
+		<li>
+			<ul>
+				<li spaceBefore="6"><para style="normal">A table with 2 rows</para></li>
+				<li bulletColor="green" spaceAfter="6">
+					<blockTable style="redgreen" colWidths="60,90,180">
+						<tr><td>1</td><td><para style="bodytext">zz zz zz </para></td><td><para style="normal">duh duh duh </para></td></tr>
+						<tr><td>2</td><td><para style="bodytext">yy yy yy yy </para></td><td><para style="normal">duh duh duh duh </para></td></tr>
+					</blockTable>
+				</li>
+				<li bulletColor="red" value="square"><para style="normal">In the discussion of resumptive pronouns following (81), this
+selectionally introduced contextual feature is to be regarded as a
+parasitic gap construction.  With this clarification, the systematic use
+of complex symbols is not to be considered in determining a descriptive
+fact.  On our assumptions, the notion of level of grammaticalness is
+necessary to impose an interpretation on the strong generative capacity
+of the theory.	It appears that a descriptively adequate grammar is not
+subject to the requirement that branching is not tolerated within the
+dominance scope of a complex symbol.  Comparing these examples with
+their parasitic gap counterparts in (96) and (97), we see that this
+selectionally introduced contextual feature is rather different from a
+parasitic gap construction.</para>
+				</li>
+			</ul>
+		</li>
+		<li>
+			<para style="normal">Of course, the systematic use of complex symbols raises serious doubts
+about a stipulation to place the constructions into these various
+categories.  By combining adjunctions and certain deformations, the
+natural general principle that will subsume this case is to be regarded
+as a descriptive fact.	This suggests that this analysis of a formative
+as a pair of sets of features suffices to account for the requirement
+that branching is not tolerated within the dominance scope of a complex
+symbol.</para>
+		</li>
+	</ol>
+	<ol style="blah">
+		<li><para style="normal">item should be A</para></li>
+		<li><para style="normal">item should be B</para></li>
+	</ol>
+	<ol>
+		<li><para style="normal">item should be 1</para></li>
+		<li><para style="normal">item should be 2</para></li>
+	</ol>
+	<ol bulletType="i">
+		<li><para style="normal">item should be i</para><para style="normal">a second paragraph</para></li>
+		<li><para style="normal">item should be ii</para></li>
+	</ol>
+	<ol bulletType="I">
+		<li><para style="normal">item should be I</para></li>
+		<li><para style="normal">item should be II</para><para style="normal">another paragraph</para></li>
+	</ol>
+
+	<ul style="square">
+		<li><para style="normal">para 1</para></li>
+		<li><para style="normal">para 2</para><para style="normal">another paragraph</para></li>
+		<li value="circle" bulletColor="green"><para style="normal">para 3</para></li>
+	</ul>
+</story>
+</document>

Added: z3c.rml/trunk/src/z3c/rml/tests/input/tag-ul-ol-li.rml
===================================================================
--- z3c.rml/trunk/src/z3c/rml/tests/input/tag-ul-ol-li.rml	                        (rev 0)
+++ z3c.rml/trunk/src/z3c/rml/tests/input/tag-ul-ol-li.rml	2012-12-20 04:07:15 UTC (rev 128798)
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
+<!DOCTYPE document SYSTEM "rml.dtd">
+
+<document
+    filename="tag-ul-ol-li.pdf"
+    xmlns:doc="http://namespaces.zope.org/rml/doc">
+  <template>
+    <pageTemplate id="main">
+      <frame id="first" x1="1cm" y1="1cm" width="19cm" height="26cm"/>
+    </pageTemplate>
+  </template>
+  <story>
+    <ol bulletColor="orange" bulletFontName="Times-Roman">
+      <li bulletColor="gray" bulletFontName="Helvetica">
+        <para>Welcome to RML 1</para>
+      </li>
+      <li>
+        <ul bulletColor="red" bulletFontName="Times-Roman" bulletFontSize="8"
+            rightIndent="10" bulletOffsetY="-1">
+          <li value="disc" bulletFontName="Helvetica">
+            <para>unordered 1</para>
+          </li>
+          <li value="square" bulletColor="blue">
+            <para>unordered 2</para>
+          </li>
+          <li value="diamond" bulletColor="green">
+            <para>unordered 3</para>
+          </li>
+          <li value="rarrowhead" bulletColor="yellow">
+            <para>unordered 4</para>
+          </li>
+        </ul>
+      </li>
+    </ol>
+  </story>
+</document>



More information about the checkins mailing list