[Checkins] SVN: z3c.rml/trunk/ - Implemented ``NamedString`` directive.

Stephen Richter cvs-admin at zope.org
Wed Dec 19 22:00:21 UTC 2012


Log message for revision 128797:
  - Implemented ``NamedString`` directive.
  
  - Implemented ``startIndex`` and ``showIndex`` directive. Also hooked up
    ``index`` in paragraphs properly. You can now create real book indexes.
  
  - Bug: Moved premature ``getName`` evaluation into runtime to properly handle
    synamic content now. This is now properly done for any paragraph and
    darw string variant.
  
  

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/canvas.py
  U   z3c.rml/trunk/src/z3c/rml/document.py
  U   z3c.rml/trunk/src/z3c/rml/flowable.py
  U   z3c.rml/trunk/src/z3c/rml/interfaces.py
  U   z3c.rml/trunk/src/z3c/rml/paraparser.py
  U   z3c.rml/trunk/src/z3c/rml/special.py
  A   z3c.rml/trunk/src/z3c/rml/tests/expected/rml-examples-042-longdoc.pdf
  U   z3c.rml/trunk/src/z3c/rml/tests/expected/tag-name.pdf
  A   z3c.rml/trunk/src/z3c/rml/tests/input/rml-examples-042-longdoc.rml
  U   z3c.rml/trunk/src/z3c/rml/tests/input/tag-name.rml

-=-
Modified: z3c.rml/trunk/CHANGES.txt
===================================================================
--- z3c.rml/trunk/CHANGES.txt	2012-12-19 20:59:47 UTC (rev 128796)
+++ z3c.rml/trunk/CHANGES.txt	2012-12-19 22:00:20 UTC (rev 128797)
@@ -23,6 +23,11 @@
 
 - Implemented ``pageNumber`` element for all ``draw*String`` elements.
 
+- Implemented ``NamedString`` directive.
+
+- Implemented ``startIndex`` and ``showIndex`` directive. Also hooked up
+  ``index`` in paragraphs properly. You can now create real book indexes.
+
 - Don't show "doc" namespace in reference snippets.
 
 - Create a list of RML2PDF and z3c.rml differences.
@@ -38,7 +43,11 @@
 - Bug: Specifying a color in any tag inside the paragraph would fail, if the
   color was a referenced name.
 
+- Bug: Moved premature ``getName`` evaluation into runtime to properly handle
+  synamic content now. This is now properly done for any paragraph and
+  draw string variant.
 
+
 1.1.0 (2012-12-18)
 ------------------
 

Modified: z3c.rml/trunk/RML-DIFFERENCES.txt
===================================================================
--- z3c.rml/trunk/RML-DIFFERENCES.txt	2012-12-19 20:59:47 UTC (rev 128796)
+++ z3c.rml/trunk/RML-DIFFERENCES.txt	2012-12-19 22:00:20 UTC (rev 128797)
@@ -133,12 +133,6 @@
 
 - cropMarks
 
-- startIndex
-
-- index
-
-- showIndex
-
 - bookmark: -fitType, -left, -top, -right, -zoom, x, y
 
 - bookmarkPage
@@ -147,8 +141,6 @@
 
 - length
 
-- namedString
-
 - param: -value
 
 - registerCidFont: +encName

Modified: z3c.rml/trunk/src/z3c/rml/attr.py
===================================================================
--- z3c.rml/trunk/src/z3c/rml/attr.py	2012-12-19 20:59:47 UTC (rev 128796)
+++ z3c.rml/trunk/src/z3c/rml/attr.py	2012-12-19 22:00:20 UTC (rev 128797)
@@ -329,6 +329,10 @@
         if self.acceptNone and value == 'None':
             return None
         manager = getManager(self.context)
+
+        if value.startswith('rml:'):
+            value = manager.names[value[4:]]
+
         if value in manager.colors:
             return manager.colors[value]
         try:
@@ -476,21 +480,8 @@
 
     def __init__(self, *args, **kw):
         super(RawXMLContent, self).__init__(*args, **kw)
-        # Do it in here, since we have a recursive problem otherwise
-        from z3c.rml import special
-        self.handleElements = {'getName': special.GetName}
 
-    def _substitute(self):
-        # Replace what we can replace
-        for subElement in self.context.element.iterdescendants():
-            if subElement.tag in self.handleElements:
-                substitute = self.handleElements[subElement.tag](
-                    subElement, self.context)
-                substitute.process()
-
     def get(self):
-        self._substitute()
-        # Now create the text
         # ReportLab's paragraph parser does not like attributes from other
         # namespaces; sigh. So we have to improvize.
         text = etree.tounicode(self.context.element)

Modified: z3c.rml/trunk/src/z3c/rml/canvas.py
===================================================================
--- z3c.rml/trunk/src/z3c/rml/canvas.py	2012-12-19 20:59:47 UTC (rev 128796)
+++ z3c.rml/trunk/src/z3c/rml/canvas.py	2012-12-19 22:00:20 UTC (rev 128797)
@@ -103,8 +103,12 @@
     def getPageNumber(self, elem, canvas):
         return str(canvas.getPageNumber() + int(elem.get('countingFrom', 1)) - 1)
 
-    handleElements = {'pageNumber': getPageNumber}
+    def getName(self, elem, canvas):
+        return attr.getManager(self).names[elem.get('id')]
 
+    handleElements = {'pageNumber': getPageNumber,
+                      'getName': getName}
+
     def _getText(self, node, canvas):
         text = node.text or u''
         for sub in node.iterdescendants():

Modified: z3c.rml/trunk/src/z3c/rml/document.py
===================================================================
--- z3c.rml/trunk/src/z3c/rml/document.py	2012-12-19 20:59:47 UTC (rev 128796)
+++ z3c.rml/trunk/src/z3c/rml/document.py	2012-12-19 22:00:20 UTC (rev 128797)
@@ -22,9 +22,10 @@
 import reportlab.pdfgen.canvas
 from reportlab.pdfbase import pdfmetrics, ttfonts, cidfonts
 from reportlab.lib import colors, fonts
+from reportlab.platypus import tableofcontents
 
 from z3c.rml import attr, canvas, directive, interfaces, occurence
-from z3c.rml import pdfinclude, storyplace, stylesheet, template
+from z3c.rml import pdfinclude, special, storyplace, stylesheet, template
 
 
 class IRegisterType1Face(interfaces.IRMLDirectiveSignature):
@@ -251,25 +252,60 @@
         raise ValueError('At least one color definition must be specified.')
 
 
+class IStartIndex(interfaces.IRMLDirectiveSignature):
+    """Start a new index."""
+
+    name = attr.String(
+        title=u'Name',
+        description=u'The name of the index.',
+        default='index',
+        required=True)
+
+    offset = attr.Integer(
+        title=u'Offset',
+        description=u'The counting offset.',
+        min=0,
+        required=False)
+
+    format = attr.Choice(
+        title=u'Format',
+        description=(u'The format the index is going to use.'),
+        choices=interfaces.LIST_FORMATS,
+        required=False)
+
+class StartIndex(directive.RMLDirective):
+    signature = IStartIndex
+
+    def process(self):
+        kwargs = dict(self.getAttributeValues())
+        name = kwargs['name']
+        manager = attr.getManager(self)
+        manager.indexes[name] = tableofcontents.SimpleIndex(**kwargs)
+
+
 class IDocInit(interfaces.IRMLDirectiveSignature):
     occurence.containing(
+        occurence.ZeroOrMore('name', special.IName),
+        occurence.ZeroOrMore('color', IColorDefinition),
+        occurence.ZeroOrMore('startIndex', IStartIndex),
         occurence.ZeroOrMore('registerType1Face', IRegisterType1Face),
         occurence.ZeroOrMore('registerFont', IRegisterFont),
         occurence.ZeroOrMore('registerTTFont', IRegisterTTFont),
         occurence.ZeroOrMore('registerCidFont', IRegisterCidFont),
         occurence.ZeroOrMore('registerFontFamily', IRegisterFontFamily),
-        occurence.ZeroOrMore('color', IColorDefinition),
         occurence.ZeroOrMore('addMapping', IAddMapping),
         )
 
 class DocInit(directive.RMLDirective):
     signature = IDocInit
     factories = {
+        'name': special.Name,
+        'color': ColorDefinition,
+        'startIndex': StartIndex,
         'registerType1Face': RegisterType1Face,
         'registerFont': RegisterFont,
         'registerTTFont': RegisterTTFont,
         'registerCidFont': RegisterCidFont,
-        'color': ColorDefinition,
         'addMapping': AddMapping,
         }
 
@@ -328,9 +364,17 @@
         self.names = {}
         self.styles = {}
         self.colors = {}
+        self.indexes = {}
         self.postProcessors = []
         self.filename = '<unknown>'
 
+    def _indexAdd(self, canvas, name, label):
+        self.indexes[name](canvas, name, label)
+
+    def _beforeDocument(self):
+        self.doc.canv._indexAdd = self._indexAdd
+        self.doc.canv.manager = self
+
     def process(self, outputFile=None):
         """Process document"""
         # Reset all reportlab global variables. This is very important for
@@ -366,6 +410,7 @@
         # Handle Flowable-based documents.
         elif self.element.find('template') is not None:
             self.processSubDirectives(select=('template', 'story'))
+            self.doc.beforeDocument = self._beforeDocument
             self.doc.multiBuild(self.flowables)
 
         # Process all post processors

Modified: z3c.rml/trunk/src/z3c/rml/flowable.py
===================================================================
--- z3c.rml/trunk/src/z3c/rml/flowable.py	2012-12-19 20:59:47 UTC (rev 128796)
+++ z3c.rml/trunk/src/z3c/rml/flowable.py	2012-12-19 22:00:20 UTC (rev 128797)
@@ -1171,6 +1171,81 @@
     klass = platypus.OutlineAdd
 
 
+class NamedStringFlowable(reportlab.platypus.flowables.Flowable):
+
+    def __init__(self, manager, id, value):
+        reportlab.platypus.flowables.Flowable.__init__(self)
+        self.manager = manager
+        self.id = id
+        self.value = value
+
+    def wrap(self, *args):
+        return (0, 0)
+
+    def draw(self):
+        self.manager.names[self.id] = self.value
+
+
+class INamedString(interfaces.IRMLDirectiveSignature):
+    """Defines a name for a string."""
+
+    id = attr.String(
+        title=u'Id',
+        description=u'The id under which the value will be known.',
+        required=True)
+
+    value = attr.XMLContent(
+        title=u'Value',
+        description=u'The text that is displayed if the id is called.',
+        required=True)
+
+class NamedString(directive.RMLDirective):
+    signature = INamedString
+
+    def process(self):
+        id, value = self.getAttributeValues(valuesOnly=True)
+        manager = attr.getManager(self)
+        # We have to delay assigning values, otherwise the last one wins.
+        self.parent.flow.append(NamedStringFlowable(manager, id, value))
+
+
+class IShowIndex(interfaces.IRMLDirectiveSignature):
+    """Creates an index in the document."""
+
+    name = attr.String(
+        title=u'Name',
+        description=u'The name of the index.',
+        default='index',
+        required=False)
+
+    dot = attr.String(
+        title=u'Dot',
+        description=u'The character to use as a dot.',
+        required=False)
+
+    style = attr.Style(
+        title=u'Style',
+        description=u'The paragraph style that is applied to the index. ',
+        required=False)
+
+    tableStyle = attr.Style(
+        title=u'Table Style',
+        description=u'The table style that is applied to the index layout. ',
+        required=False)
+
+class ShowIndex(directive.RMLDirective):
+    signature = IShowIndex
+
+    def process(self):
+        args = dict(self.getAttributeValues())
+        manager = attr.getManager(self)
+        index = manager.indexes[args['name']]
+        args['format'] = index.formatFunc.__name__[8:]
+        args['offset'] = index.offset
+        index.setup(**args)
+        self.parent.flow.append(index)
+
+
 class IFlow(interfaces.IRMLDirectiveSignature):
     """A list of flowables."""
     occurence.containing(
@@ -1205,7 +1280,9 @@
         occurence.ZeroOrMore('bookmark', IBookmark),
         occurence.ZeroOrMore('link', ILink),
         occurence.ZeroOrMore('hr', IHorizontalRow),
+        occurence.ZeroOrMore('showIndex', IShowIndex),
         occurence.ZeroOrMore('name', special.IName),
+        occurence.ZeroOrMore('namedString', INamedString),
         )
 
 class Flow(directive.RMLDirective):
@@ -1246,8 +1323,10 @@
         'bookmark': Bookmark,
         'link': Link,
         'hr': HorizontalRow,
+        'showIndex': ShowIndex,
         # Special Elements
         'name': special.Name,
+        'namedString': NamedString,
         }
 
     def __init__(self, *args, **kw):

Modified: z3c.rml/trunk/src/z3c/rml/interfaces.py
===================================================================
--- z3c.rml/trunk/src/z3c/rml/interfaces.py	2012-12-19 20:59:47 UTC (rev 128796)
+++ z3c.rml/trunk/src/z3c/rml/interfaces.py	2012-12-19 22:00:20 UTC (rev 128797)
@@ -35,6 +35,7 @@
     'top': 'TOP', 'middle': 'MIDDLE', 'bottom': 'BOTTOM'}
 SPLIT_CHOICES = ('splitfirst', 'splitlast')
 TEXT_TRANSFORM_CHOICES = ('uppercase', 'lowercase')
+LIST_FORMATS = ('I', 'i', '123',  'ABC', 'abc')
 
 class IRML2PDF(zope.interface.Interface):
     """This is the main public API of z3c.rml"""

Modified: z3c.rml/trunk/src/z3c/rml/paraparser.py
===================================================================
--- z3c.rml/trunk/src/z3c/rml/paraparser.py	2012-12-19 20:59:47 UTC (rev 128796)
+++ z3c.rml/trunk/src/z3c/rml/paraparser.py	2012-12-19 22:00:20 UTC (rev 128797)
@@ -24,9 +24,12 @@
 import reportlab.platypus.paraparser
 
 
-class DynamicFragment(reportlab.platypus.paraparser.ParaFrag):
+class PageNumberFragment(reportlab.platypus.paraparser.ParaFrag):
     """A fragment whose `text` is computed at access time."""
 
+    def __init__(self, attributes):
+        reportlab.platypus.paraparser.ParaFrag.__init__(self)
+
     @property
     def text(self):
         # Guess 1: We're in a paragraph in a story.
@@ -43,20 +46,56 @@
         return str(canvas.getPageNumber())
 
 
+class GetNameFragment(reportlab.platypus.paraparser.ParaFrag):
+    """A fragment whose `text` is computed at access time."""
+
+    def __init__(self, attributes):
+        reportlab.platypus.paraparser.ParaFrag.__init__(self)
+        self.id = attributes['id']
+
+    @property
+    def text(self):
+        # Guess 1: We're in a paragraph in a story.
+        frame = inspect.currentframe(4)
+        canvas = frame.f_locals.get('canvas', None)
+
+        if canvas is None:
+            # Guess 2: We're in a template
+            canvas = frame.f_locals.get('canv', None)
+
+        if canvas is None:
+            raise Exception("Can't use <getName/> in this location.")
+
+        return canvas.manager.names[self.id]
+
+
 class Z3CParagraphParser(reportlab.platypus.paraparser.ParaParser):
     """Extensions to paragraph-internal XML parsing."""
 
-    def start_pageNumber(self, attributes):
-        frag = DynamicFragment()
+    def startDynamic(self, attributes, klass):
+        frag = klass(attributes)
         frag.__dict__.update(self._stack[-1].__dict__)
-        frag.fontName = reportlab.lib.fonts.tt2ps(frag.fontName, frag.bold, frag.italic)
+        frag.fontName = reportlab.lib.fonts.tt2ps(
+            frag.fontName, frag.bold, frag.italic)
         self.fragList.append(frag)
         self._stack.append(frag)
 
-    def end_pageNumber(self):
+    def endDynamic(self):
         self._pop()
 
+    def start_pageNumber(self, attributes):
+        self.startDynamic(attributes, PageNumberFragment)
 
+    def end_pageNumber(self):
+        self.endDynamic()
+
+    def start_getName(self, attributes):
+        self.startDynamic(attributes, GetNameFragment)
+
+    def end_getName(self):
+        self.endDynamic()
+
+
 # Monkey-patch reportlabs global parser instance. Wah.
 import reportlab.platypus.paragraph
 reportlab.platypus.paragraph._parser = Z3CParagraphParser()

Modified: z3c.rml/trunk/src/z3c/rml/special.py
===================================================================
--- z3c.rml/trunk/src/z3c/rml/special.py	2012-12-19 20:59:47 UTC (rev 128796)
+++ z3c.rml/trunk/src/z3c/rml/special.py	2012-12-19 22:00:20 UTC (rev 128797)
@@ -55,7 +55,10 @@
     def process(self):
         id = dict(self.getAttributeValues()).pop('id')
         manager = attr.getManager(self)
-        text = manager.names[id] + (self.element.tail or u'')
+        try:
+            text = manager.names[id] + (self.element.tail or u'')
+        except:
+            import pdb; pdb.set_trace()
         # Now replace the element with the text
         parent = self.element.getparent()
         if parent.text is None:

Added: z3c.rml/trunk/src/z3c/rml/tests/expected/rml-examples-042-longdoc.pdf
===================================================================
--- z3c.rml/trunk/src/z3c/rml/tests/expected/rml-examples-042-longdoc.pdf	                        (rev 0)
+++ z3c.rml/trunk/src/z3c/rml/tests/expected/rml-examples-042-longdoc.pdf	2012-12-19 22:00:20 UTC (rev 128797)
@@ -0,0 +1,445 @@
+%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
+ /F4 8 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 Times-Bold
+<< /BaseFont /Times-Bold
+ /Encoding /WinAnsiEncoding
+ /Name /F3
+ /Subtype /Type1
+ /Type /Font >>
+endobj
+% 'Page1': class PDFPage 
+7 0 obj
+% Page dictionary
+<< /Contents 21 0 R
+ /MediaBox [ 0
+ 0
+ 595.2756
+ 841.8898 ]
+ /Parent 20 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
+% 'F4': class PDFType1Font 
+8 0 obj
+% Font Helvetica-BoldOblique
+<< /BaseFont /Helvetica-BoldOblique
+ /Encoding /WinAnsiEncoding
+ /Name /F4
+ /Subtype /Type1
+ /Type /Font >>
+endobj
+% 'Page2': class PDFPage 
+9 0 obj
+% Page dictionary
+<< /Contents 22 0 R
+ /MediaBox [ 0
+ 0
+ 595.2756
+ 841.8898 ]
+ /Parent 20 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
+% 'Page3': class PDFPage 
+10 0 obj
+% Page dictionary
+<< /Contents 23 0 R
+ /MediaBox [ 0
+ 0
+ 595.2756
+ 841.8898 ]
+ /Parent 20 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
+% 'Page4': class PDFPage 
+11 0 obj
+% Page dictionary
+<< /Contents 24 0 R
+ /MediaBox [ 0
+ 0
+ 595.2756
+ 841.8898 ]
+ /Parent 20 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
+% 'Page5': class PDFPage 
+12 0 obj
+% Page dictionary
+<< /Contents 25 0 R
+ /MediaBox [ 0
+ 0
+ 595.2756
+ 841.8898 ]
+ /Parent 20 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
+% 'Page6': class PDFPage 
+13 0 obj
+% Page dictionary
+<< /Contents 26 0 R
+ /MediaBox [ 0
+ 0
+ 595.2756
+ 841.8898 ]
+ /Parent 20 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
+% 'Page7': class PDFPage 
+14 0 obj
+% Page dictionary
+<< /Contents 27 0 R
+ /MediaBox [ 0
+ 0
+ 595.2756
+ 841.8898 ]
+ /Parent 20 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
+% 'Page8': class PDFPage 
+15 0 obj
+% Page dictionary
+<< /Contents 28 0 R
+ /MediaBox [ 0
+ 0
+ 595.2756
+ 841.8898 ]
+ /Parent 20 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
+% 'Annot.NUMBER1': class LinkAnnotation 
+16 0 obj
+<< /Border [ 0
+ 0
+ 0 ]
+ /Contents ()
+ /Dest [ 11 0 R
+ /XYZ
+ 360.41
+ 771.68
+ 0 ]
+ /Rect [ 107.1756
+ 725.68
+ 113.2916
+ 737.68 ]
+ /Subtype /Link
+ /Type /Annot >>
+endobj
+% 'Page9': class PDFPage 
+17 0 obj
+% Page dictionary
+<< /Annots [ 16 0 R ]
+ /Contents 29 0 R
+ /MediaBox [ 0
+ 0
+ 595.2756
+ 841.8898 ]
+ /Parent 20 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
+% 'R18': class PDFCatalog 
+18 0 obj
+% Document Root
+<< /Outlines 30 0 R
+ /PageMode /UseNone
+ /Pages 20 0 R
+ /Type /Catalog >>
+endobj
+% 'R19': class PDFInfo 
+19 0 obj
+<< /Author (\(anonymous\))
+ /CreationDate (D:20121219165715+05'00')
+ /Creator (\(unspecified\))
+ /Keywords ()
+ /Producer (ReportLab PDF Library - www.reportlab.com)
+ /Subject (\(unspecified\))
+ /Title (\(anonymous\)) >>
+endobj
+% 'R20': class PDFPages 
+20 0 obj
+% page tree
+<< /Count 9
+ /Kids [ 7 0 R
+ 9 0 R
+ 10 0 R
+ 11 0 R
+ 12 0 R
+ 13 0 R
+ 14 0 R
+ 15 0 R
+ 17 0 R ]
+ /Type /Pages >>
+endobj
+% 'R21': class PDFStream 
+21 0 obj
+% page stream
+<< /Filter [ /ASCII85Decode
+ /FlateDecode ]
+ /Length 906 >>
+stream
+GasId>Ar4L'RiR35Ff3jeOXQ;h"E_8SM[b&f(#u"^,V-?]I%X`32QQM*BQMp6`M>^nN$UD0#nY34uBo`$h/9Bf67oWK2i)>7iYS(E4_Rb?KSRj at mDhW@l-gO2([)pc8(,2>JdCoMoQ((^59::'_(3#\2W6T2"D8[IpdE,#>J>\al=cs/>p:i$rWZARJH4GcIhj".3_*a,\LBO=:p/8=B'QP<[j^n;$AQ0`lr'["('42M$f6j,j*l<,,]*0.g3uDP,BeOGfhEf1G6"E.?]@M,i,4!]h;`YkiHI,;U-IQ+n7._Gc,]b;aH%N!Tf?Dl5Wbq\C%>8=T$*]%u!1iPsFuKi#O,-+1Ot\Y$I[H+<dr^3'$-SL'XA'*`[-[K*PhW`uaY;[iWLl4^EX\@&i%@iY/WSFO9BS:`0X.YGA>0)O7g9J`qG,XQZJN!l\Kh7;m>3<!b^Zq[ArtbM#<Ve%I6s$Wo=Vj5pi/D#bKFDRA/MD&_&m<V2>&BCsZdrX:^!o\I:[oD!/dlU#4lSGDUXI[ru#P5#+qIE#o)>h*Rci4U+Rq$sgc8:d7*ah#qS,OUDk4N&5p>H:M%iOjN at _J1k:i3rS@*G4Y.kDpTV'NRN!#A806HI"M'e[iXfMak.WZ;QSb/XF^H*J%=-E8X:r&_m`#*(c,a$&*ss2&3(!*lA];f^6d&%F-aE31oJ'j-,/0>8H<\IT!71UZ]@0JHiO]b42]P_D7!YQA+5q.PC33L5k""OOFqM:bq_(168perV*WY"N]@W;u_iJ;\-%Qi;a04dW>$$c#,7em.uja`"Um?N;Mm2kl2H\B-5s9pB_uj';CNhn\\]abS-o2U&,%hhG:pq6@>`/CUQ2PA*:$$#\_8ul%Q3-n!&OC)HgQ'cH@@n.3'\D4qep[B7BqK0mQF~>endstream
+endobj
+% 'R22': class PDFStream 
+22 0 obj
+% page stream
+<< /Filter [ /ASCII85Decode
+ /FlateDecode ]
+ /Length 429 >>
+stream
+GasJM4&<dK&;9pOq%$C*Kl?@[?^/2Q-pT4pI>N"M\g0f(,^qp at LQ_cCaHC-%G\?3G,q(@5pSJ1uC96hKUdEm'Z=)2V\?3s6XXpcT+Pfmn;OEZ6"SqF`BinH1mW%smOOVV'mro at K?/g;Q2XT.eUOGX[EAFpOGHr!UPa>e@@+hG3A[/fcVuCsH$R05rikRSf,uo`GqmNgVQ&0:e`m%U$O4d;Z4\(XO)U3Y'6pKKG[gqJ.`ASXT<_70L2pPC=(tk'8\Rf+HLY#SD>6goO6eC(KX5+rYH5lQ"EE^dCg9ahrHNg"QeFM=@A(m0d!(5*;Cc/$)'[^36="Vh'nr/&:OIk!;.u_[8DmLs*f0p+"3mQ&9:AMr\OYK_G]ON$A&_lf80]4XlZ$R?tMe:b(LFLd%ECRkXqC%X4O+4)'7mgF,!BqorDu~>endstream
+endobj
+% 'R23': class PDFStream 
+23 0 obj
+% page stream
+<< /Filter [ /ASCII85Decode
+ /FlateDecode ]
+ /Length 456 >>
+stream
+Gat=f92Fk-'SQ4CnfMJa6c^6/a"Nak<nmj,$argi[\1&XBt1`=+313ZjWPe@=BTlrB',!r60XO-h6):O)X"RB;PB[JZ=)1+\>d[2V(ApL+PihB.El*kJpd<l1p!`SYAjF/-`R-_C9rlWl2l2.HJ\>^$0l0QVgD at Cng&#08U1Vc%[MMm;\nQ*rNLV7)aWPD<ub=4U87'.o=g\sP01^42Rr1ui]d6RV0>q8YXUEENTd-Al^C'k<c"ONCmF),EU-:5N0,.6]j'X\+*an$hC0:1)7j-B4N%_2Mm+)ZE!UeEV54g]/+ at GT3]si41X+$O%7AJHCc/$)&2?7phmGkE[WhB at JFljD[_fOJScnoYH;K6eVYki#PV699L`'Ym&FEPTqsT[ts8/Ui/^iq9fS"N<,qt%61&Wt<N7]cZf4B^apGkV43au?InS!iq@<`.(15`:&:_n!6Lo#7~>endstream
+endobj
+% 'R24': class PDFStream 
+24 0 obj
+% page stream
+<< /Filter [ /ASCII85Decode
+ /FlateDecode ]
+ /Length 442 >>
+stream
+GasJMb>,r/&4Q>UndfqG?t%(#pr/EJW[pDAYg((Z7C7WQQ2#`sUlbul.SI3,GNR0jNs):(a1L1.[fP*A&lKm[O=V5WM2.1*?[4PE$ITBPP/>FH''.H<d'0Z<f\kcN.B24dk49gLM]44Zm9A&iQO*$c=0nl+ at jPpL8U1Vc%[MM]-I8h:]70A*<J&:0YIJ*`M3=m^f))>P,aF4OXDm(Yg%4F*Q(CI-_A^Z]9LQYOC0-\]@_jr at a&YcL*7rIMV(o8!41gKbI"p66iLPQt1dZst`(Ooc[jjW:Ys3q*WR=ZNmhL'simY7`Vglmr/IXoaYgng>I7/F)N*;r?iJE#$OFG_p.uYFh^OA$fW1iO]ioRO`)?B$S(DfkQo%`UCD2\'&qaAp]U3\!r#cmV.]2a(MBMc[4d_tUM+4AnRO\uts,LB-Vr;UkO2!!=#S<oWJ~>endstream
+endobj
+% 'R25': class PDFStream 
+25 0 obj
+% page stream
+<< /Filter [ /ASCII85Decode
+ /FlateDecode ]
+ /Length 442 >>
+stream
+GatUn3D[OX'SLg+rX[It#]8G$hd2P;%29p$Ztk#PJ<DlH#4_;i2i/4YM#ph#Z/[c!h`a][nAt7)QbZ%Hac1sQ.&W.X)!)d at b<4P?=je"[)`8pqfkZ3_G<U_8FToo6NZ[]pocl$>M[1r\ES%@*9j=6_HpN%h2mk,0Z50$rQXJuafahZbCi\!JbGVc]7*^%rJTW4V<#qjm2cE at IR97Q<=)FNl,X8F'[YbdMB]cQ3I<DSr(!+ at GD)@9TP2&%"SLK.FZ6?i(9>(0-Y9Dj6_^J.(jZMP2MfFHoH!'gG42a:Ldo$M@'mMg;%mSh:URUAu$AP2_fP3s0/n0.<41.K6Njnr`JDjh:[_fPm^):3jkB]sWTZ6o:E_7i`, at nZY-&h[J`ku^tL&XqL+,A`!oF\:up2/3Mg;T\XHL&u)6\"`cpWu'YC(\G21<?dt:Pb_H~>endstream
+endobj
+% 'R26': class PDFStream 
+26 0 obj
+% page stream
+<< /Filter [ /ASCII85Decode
+ /FlateDecode ]
+ /Length 414 >>
+stream
+GasJM]hcO"&B4B7q&eHq3k/hcr5H`I=kWn at JMg/m(.=<D'T#&H`+c'`5\8'T4l<mGo1;c.AA$)(\BD-Z8k=ZKJn2^==*Vs<jHq8k;iknDPSE8Son#='A/a$1aD9"+f"Loce;'(bc>Kn%S)(M)Dih^YT3k9oMOgi&-flZ,3EZ!'Qo%qsgTH!B2hK*gYIIs\LjE&;Q1s%UP#NcEj9?-3RQO))Xn3H!$>VKiOGJ at tQ#9N^$Q7],**X_7laV$`.u]TpZ5:!kb?&ot$#^YM;2!6h!Dcu,%IWu0i=rjPm\EWO-+m=;Z->t7NVhp_C!sd.ZiOA?C![#_o5iFpr@*g*QN@'">&At5Oo78Ldb/aUK:mtpETIm9Xp2u#]'W3V:L at +U[g&`OC)<Sd&P>aW56!kDMM<t`!A)-JrV~>endstream
+endobj
+% 'R27': class PDFStream 
+27 0 obj
+% page stream
+<< /Filter [ /ASCII85Decode
+ /FlateDecode ]
+ /Length 441 >>
+stream
+GatUn4&<aJ'SZ9Pq%%,u+llrkf.TU";].h<=ImBI5qRYL,(;_46`!,3(m(R&5/-3M0=Cum9;ZX@!A7!gDBu#E\U\5,.-J)moB\?\P,9AXW$s1>:)a?3j\ohp=.n@,q#5G55JlPo*Po]Tk3_cGC$QFs:FK"_VH0Nbf#!XA''pShqk6]Tc#26Qo?^Nia;M0 at Y`;,(Wl)^NAmn7\'.[5EWm.l^jJS97W^pQXAf_o=GIQ:+JQsbY7cW,Nac5?7R3EIm)mVQ7`63Z"g-U&M?kapNEYWT!hF:bQ_Fku_IG2 at h/X>g3JYss/Ir%0n/bA<HL7f".C.Nt0 at WD7PCPdLV:\_PPiO<!-KlIFtF`O>>\lXNW`r'r=P\s`cN/=8I.I'9X]AK=is.?5R%Z_n-&T=^n]5CG>l"?s'4o/1BO5B at I]#RXLUH%Ul4So6qKV6`~>endstream
+endobj
+% 'R28': class PDFStream 
+28 0 obj
+% page stream
+<< /Filter [ /ASCII85Decode
+ /FlateDecode ]
+ /Length 407 >>
+stream
+GasJM5B"Cm&B4B7q$q>=%-HoHs)k+h'+ at hX\gG7E<^7c2W?8m3dn"2>b*E:I]BAq[8Plm,4KB."bct8A8;4^2AAQ@=GfeFqRO1m1OKR3"'P>iU62pXi)V/K@:RJh53q]O5?&erU4_!6;pUd;K5lQ=^5+5Xi4';qeb"Js[YjAtUBsLhumHL`%"d(TIEPX[IFfI'/mru/cWD"^OM<?3[[a at l$4[bFL)U7%bU>KjR.gpA@@iLA:X!I-R=3b?10lfd-FGmg0&$O62[gkl)K[()/bMtbDktkW&Tq0V,g9ahrHNbJ%gpCmrB_Q4]L*:44[MmSe%B/GS\!H7(omf7jd!_tF<YuY#YCe>of1?C&lJIX9V`8\H1X7mQBDQncf/;F2\91JVcVt?I@[_HZ2q$b+le[7O~>endstream
+endobj
+% 'R29': class PDFStream 
+29 0 obj
+% page stream
+<< /Filter [ /ASCII85Decode
+ /FlateDecode ]
+ /Length 485 >>
+stream
+GasJNb>,r/&4Q>Undfqu$3K7-`\3W?\nW%8/D-hZ$UU(C"VRGgj"tUVMGU*.RE(`+Sfu2M:jOcq^ibLW0nC%]-&;`"SD^QoZ]@4A4p>u/:Q[?E003da.5\+V:p)L`T189n[<d<3i8P*-k3]-c(8iQf:nI>VX&:9[iMH)JFq0gdCaRI\a3Ar'fZ]&6c?R;ClQBd2l>#R3]sNre$$2Qq[`PjYib>7$<_->fRG3b_5&K9 at Q#r^-)iS:-Lhk$=B8XhKWho)s8MC+=f+u5-#GYfB>s8Ku^O?@A4BM!D at 6IRO8COAfpBo\eq-dAAZ$sj%2])j<^fH'recEt#NR^XH at .*+M"lcrD[Ukf$b at GIPrHr1FY8U*$[[Y&n--ZqDasQ`#!H&]=Xd2AQ*ITabC7?6[da;eu?YjYk"Bhk_Y=aL>[JITk3X>G`Wu!,N;V\V^g&AquWAcEt^cPr%@W^$=&*[cd(]/_GNSOj1lj&8o[$U~>endstream
+endobj
+% 'R30': class PDFOutlines 
+30 0 obj
+<< /Count 0
+ /Type /Outlines >>
+endobj
+xref
+0 31
+0000000000 65535 f
+0000000113 00000 n
+0000000245 00000 n
+0000000410 00000 n
+0000000626 00000 n
+0000007026 00000 n
+0000013609 00000 n
+0000013774 00000 n
+0000014170 00000 n
+0000014357 00000 n
+0000014751 00000 n
+0000015146 00000 n
+0000015541 00000 n
+0000015936 00000 n
+0000016331 00000 n
+0000016726 00000 n
+0000017136 00000 n
+0000017355 00000 n
+0000017772 00000 n
+0000017910 00000 n
+0000018181 00000 n
+0000018359 00000 n
+0000019407 00000 n
+0000019978 00000 n
+0000020576 00000 n
+0000021160 00000 n
+0000021744 00000 n
+0000022300 00000 n
+0000022883 00000 n
+0000023432 00000 n
+0000024061 00000 n
+trailer
+<< /ID 
+ % ReportLab generated PDF document -- digest (http://www.reportlab.com) 
+ [(#\313\273@\256\310\034b\033\034v\302q\222\240\200) (#\313\273@\256\310\034b\033\034v\302q\222\240\200)] 
+
+ /Info 19 0 R
+ /Root 18 0 R
+ /Size 31 >>
+startxref
+24113
+%%EOF

Modified: z3c.rml/trunk/src/z3c/rml/tests/expected/tag-name.pdf
===================================================================
--- z3c.rml/trunk/src/z3c/rml/tests/expected/tag-name.pdf	2012-12-19 20:59:47 UTC (rev 128796)
+++ z3c.rml/trunk/src/z3c/rml/tests/expected/tag-name.pdf	2012-12-19 22:00:20 UTC (rev 128797)
@@ -54,7 +54,7 @@
 % 'R6': class PDFInfo 
 6 0 obj
 << /Author (\(anonymous\))
- /CreationDate (D:20121217140300+05'00')
+ /CreationDate (D:20121219165653+05'00')
  /Creator (\(unspecified\))
  /Keywords ()
  /Producer (ReportLab PDF Library - www.reportlab.com)
@@ -73,9 +73,9 @@
 % page stream
 << /Filter [ /ASCII85Decode
  /FlateDecode ]
- /Length 177 >>
+ /Length 215 >>
 stream
-Gaqco5mdZJ$q9oEhVg+fYVp?1VJB%1DM6eQ*-K1Lb'8Eb,(_*<:#:AQi,tu1T7OCX[3JLuS3ZEXZH$"IH!3RB2C'*LjVAk,(E8CgXFRLilYMPqk\!pd<bh]3 at L]"j.5e8$53cF6R)rpTk0^s8E1\95F;sA(.qF4m5?WFqe:fb%@8\K2~>endstream
+Gat=bb6l*?&4Q>Er52g?@*I]ZF=le#NAuF7eebb`WW-lT`)<fYR4t,#3?3X26YR>oY\'t[">\mKa=.ANA'7b4UnA66Eb/P=1'D6Tp!1S#"R#tNcVd.?IEg/:8#l[P^"&M,8\%nGf/EVLM&BYMCtdlK=%rq6G5#_]^4@)&Nlf#sOP\;-)ht(9LA_)%?E4W,e]4\'RrU95F>1X#MDm:%:h9~>endstream
 endobj
 % 'R9': class PDFOutlines 
 9 0 obj
@@ -93,15 +93,15 @@
 0000000970 00000 n
 0000001239 00000 n
 0000001344 00000 n
-0000001663 00000 n
+0000001701 00000 n
 trailer
 << /ID 
  % ReportLab generated PDF document -- digest (http://www.reportlab.com) 
- [(\2514PW\375b\346M\037u\307 \354\014_\254) (\2514PW\375b\346M\037u\307 \354\014_\254)] 
+ [(\317_\373z<\377\333\214\316s\340[t\024a\312) (\317_\373z<\377\333\214\316s\340[t\024a\312)] 
 
  /Info 6 0 R
  /Root 5 0 R
  /Size 10 >>
 startxref
-1714
+1752
 %%EOF

Added: z3c.rml/trunk/src/z3c/rml/tests/input/rml-examples-042-longdoc.rml
===================================================================
--- z3c.rml/trunk/src/z3c/rml/tests/input/rml-examples-042-longdoc.rml	                        (rev 0)
+++ z3c.rml/trunk/src/z3c/rml/tests/input/rml-examples-042-longdoc.rml	2012-12-19 22:00:20 UTC (rev 128797)
@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="iso-8859-1" standalone="no" ?>
+<!DOCTYPE document SYSTEM "../rml.dtd">
+<document filename="test_042_longdoc.pdf">
+<docinit>
+
+    <!--here is how to set values for the first template to see -->
+    <name id="chapterName" value="The secret 'grey' chapter"/>
+    <name id="chapterColor" value="grey"/>
+
+    <!--This doesn't work because they never get 'drawn' and don't set their values'
+    <namedString id="chapterName">The secret "grey" chapter</namedString>
+    <namedString id="chapterColor">grey</namedString>
+    -->
+    <startIndex/>
+
+
+
+</docinit>
+<template pageSize="(595, 842)" leftMargin="72" showBoundary="0">
+<pageTemplate id="covr">
+
+    	<pageGraphics>
+		    <setFont name="Helvetica-Bold" size="18"/>
+		    <drawString x="35" y="783">RML Example 43: Longdoc</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="Times-Bold" size="20"/>
+        	<drawCentredString x="297" y="720">Examples of long document features</drawCentredString>
+    	</pageGraphics>
+    	<frame id="second" x1="35" y1="45" width="525" height="590"/>
+    </pageTemplate>
+
+    <pageTemplate id="cover">
+
+    	<pageGraphics>
+		    <setFont name="Helvetica-Bold" size="18"/>
+		    <drawString x="35" y="783">RML Example 43: Longdoc</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="Times-Bold" size="20"/>
+        	<drawCentredString x="297" y="620">Examples of long document features</drawCentredString>
+    	</pageGraphics>
+    	<frame id="first" x1="72" y1="72" width="451" height="400"/>
+    </pageTemplate>
+
+
+    <pageTemplate id="main">
+		<pageGraphics>
+		    <!--pageGraphics is parsed once, but yields a collection
+		    of drawing operations which are done lazily each time
+		    we start a page.  Therefore certain elements can be dynamic.
+		    We have a dynamic chapter name, page number, and colour
+		    selected for the bars.
+		    -->
+		    <setFont name="Helvetica-Bold" size="18"/>
+		    <drawString x="35" y="783">RML Example 43: Longdoc</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-BoldOblique" size="18"/>
+
+
+			<drawRightString x="523" y="620"><getName id="chapterName"/></drawRightString>
+			<drawRightString x="523" y="40"><pageNumber/></drawRightString>
+
+        	<fill color="rml:chapterColor"/>
+        	<rect x="60" y="56" width="475" height="16" fill="yes" stroke="0"/>
+        	<rect x="60" y="700" width="475" height="16" fill="yes" stroke="0"/>
+
+		</pageGraphics>
+		<frame id="first" x1="1in" y1="1in" width="6.27in" height="9.69in"/>
+
+	</pageTemplate>
+</template>
+
+<stylesheet>
+	<initialize>
+	<alias id="style.normal" value="style.Normal"/>
+	</initialize>
+
+	<paraStyle name="h1"
+	fontName="Helvetica-Bold"
+	fontSize="12"
+	spaceBefore = "0.5 cm"
+	/>
+
+    <paraStyle name="normal"
+	fontName="Helvetica"
+	fontSize="10"
+    spaceBefore="6"
+	/>
+
+    <paraStyle name="code"
+	fontName="Courier"
+	fontSize="8"
+    leftIndent="36"
+    textColor="blue"
+	/>
+
+	<paraStyle name="TOC"
+    fontName="Helvetica"
+    fontSize="12"
+    />
+
+    <paraStyle name="intro"  fontName="Helvetica" fontSize="12" leading="12" spaceAfter="12"/>
+</stylesheet>
+
+<story firstPageTemplate="cover">
+
+<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="cover"/>
+
+<para style="normal">This test case is here to try out various features commonly found in a multi-chapter brochure of catalog.</para>
+
+
+<setNextTemplate name="main"/>
+<nextPage/>
+<para>This page has an undefined colour and chapter name. </para>
+
+
+
+<namedString id="chapterName">The Red Chapter</namedString>
+<namedString id="chapterColor">#FF0000</namedString>
+<nextPage/>
+<para style="normal">The red chapter</para>
+<para style="normal">This is on page 3.  The template should be red, but that's variable.</para>
+<nextPage/>
+<para style="normal">More stuff in the red chapter.  This should be indexed under 'red'.
+   <index item="M&amp;S"/></para>
+
+
+<!--get ready for green-->
+<namedString id="chapterName">The Green Chapter</namedString>
+<namedString id="chapterColor">#00FF00</namedString>
+<!--template is drawn on nextPage -->
+<nextPage/>
+<para style="normal">The green chapter</para>
+<para style="normal">The template should be green, but that's variable.</para>
+<nextPage/>
+<para style="normal">More stuff in the green chapter.</para>
+
+
+<namedString id="chapterName">The Blue Chapter</namedString>
+<namedString id="chapterColor">#0000FF</namedString>
+
+<nextPage/>
+<para style="normal">The blue chapter</para>
+<para style="normal">The template should be blue, but that's variable.</para>
+<nextPage/>
+<para style="normal">More stuff in the blue chapter.</para>
+
+<!--Don't use <name> in the story; it sets when parsed,
+so doing this at end of story will set the default for the
+first chapter to pink.  We should have disallowed this in the DTD.
+<name id="chapterName" value="The secret 'pink' chapter"/>
+<name id="chapterColor" value="pink"/>
+
+-->
+
+<nextFrame/>
+<showIndex/>
+</story>
+</document>

Modified: z3c.rml/trunk/src/z3c/rml/tests/input/tag-name.rml
===================================================================
--- z3c.rml/trunk/src/z3c/rml/tests/input/tag-name.rml	2012-12-19 20:59:47 UTC (rev 128796)
+++ z3c.rml/trunk/src/z3c/rml/tests/input/tag-name.rml	2012-12-19 22:00:20 UTC (rev 128797)
@@ -19,5 +19,10 @@
 
   <story>
     <title><getName id="DocTitle" /></title>
+
+    <namedString id="DocTitle">The Second Document Title</namedString>
+
+    <title><getName id="DocTitle" /></title>
   </story>
+
 </document>



More information about the checkins mailing list