[Checkins] SVN: z3c.rml/trunk/ Implemented ``codesnippet`` tag.

Stephen Richter cvs-admin at zope.org
Wed Dec 19 17:07:47 UTC 2012


Log message for revision 128781:
  Implemented ``codesnippet`` tag.
  

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/flowable.py
  U   z3c.rml/trunk/src/z3c/rml/stylesheet.py
  A   z3c.rml/trunk/src/z3c/rml/tests/expected/rml-examples-044-codesnippets.pdf
  U   z3c.rml/trunk/src/z3c/rml/tests/expected/tag-barCodeFlowable.pdf
  A   z3c.rml/trunk/src/z3c/rml/tests/expected/tag-codesnippet.pdf
  A   z3c.rml/trunk/src/z3c/rml/tests/input/rml-examples-044-codesnippets.rml
  A   z3c.rml/trunk/src/z3c/rml/tests/input/tag-codesnippet.rml

-=-
Modified: z3c.rml/trunk/CHANGES.txt
===================================================================
--- z3c.rml/trunk/CHANGES.txt	2012-12-19 15:34:02 UTC (rev 128780)
+++ z3c.rml/trunk/CHANGES.txt	2012-12-19 17:07:46 UTC (rev 128781)
@@ -13,6 +13,8 @@
 
 - Added ``h4``, ``h5``, and ``h6`` directives.
 
+- Implemented ``codesnippet`` 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 15:34:02 UTC (rev 128780)
+++ z3c.rml/trunk/RML-DIFFERENCES.txt	2012-12-19 17:07:46 UTC (rev 128781)
@@ -153,9 +153,9 @@
 
 - registerCidFont: +encName
 
-- registerFontFamily
+- registerFontFamily (pdfmetrics.registerFontFamily())
 
-- setFontSize
+- setFontSize (plain canvas op)
 
 - log
 
@@ -173,6 +173,8 @@
 
 - -pdfInclude
 
-- codesnippet
+- rectangle, table row, table cell, etc.: href and/or destination (Test 038)
 
-- 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 15:34:02 UTC (rev 128780)
+++ z3c.rml/trunk/src/z3c/rml/attr.py	2012-12-19 17:07:46 UTC (rev 128781)
@@ -363,6 +363,23 @@
     def fromUnicode(self, value):
         return _getStyle(self.context, value)
 
+
+class Padding(Sequence):
+    """This attribute is specific for padding and will produce the proper
+    length of the padding sequence."""
+
+    def __init__(self, *args, **kw):
+        kw.update(dict(value_type=Integer(), min_length=1, max_length=4))
+        super(Padding, self).__init__(*args, **kw)
+
+    def fromUnicode(self, value):
+        seq = super(Padding, self).fromUnicode(value)
+        # pdfgen does not like a single paddign value.
+        if len(seq) == 1:
+            seq.append(seq[0])
+        return seq
+
+
 class Symbol(Text):
     """This attribute should contain the text representation of a symbol to be
     used."""
@@ -463,13 +480,16 @@
         from z3c.rml import special
         self.handleElements = {'getName': special.GetName}
 
-    def get(self):
+    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.
@@ -477,10 +497,9 @@
         text = text[text.find('>')+1:text.rfind('<')]
         return text
 
-
 class XMLContent(RawXMLContent):
     """Same as 'RawXMLContent', except that the whitespace is normalized."""
 
     def get(self):
-        result = super(XMLContent, self).get()
-        return result.strip().replace('\t', ' ')
+        text = super(XMLContent, self).get()
+        return text.strip().replace('\t', ' ')

Modified: z3c.rml/trunk/src/z3c/rml/document.py
===================================================================
--- z3c.rml/trunk/src/z3c/rml/document.py	2012-12-19 15:34:02 UTC (rev 128780)
+++ z3c.rml/trunk/src/z3c/rml/document.py	2012-12-19 17:07:46 UTC (rev 128781)
@@ -150,6 +150,42 @@
         pdfmetrics.registerFont(font)
 
 
+class IRegisterFontFamily(interfaces.IRMLDirectiveSignature):
+    """Register a new font family."""
+
+    name = attr.String(
+        title=u'Name',
+        description=(u'The name of the font family.'),
+        required=True)
+
+    normal = attr.String(
+        title=u'Normal Font Name',
+        description=(u'The name of the normal font variant.'),
+        required=False)
+
+    bold = attr.String(
+        title=u'Bold Font Name',
+        description=(u'The name of the bold font variant.'),
+        required=False)
+
+    italic = attr.String(
+        title=u'Italic Font Name',
+        description=(u'The name of the italic font variant.'),
+        required=False)
+
+    boldItalic = attr.String(
+        title=u'Bold/Italic Font Name',
+        description=(u'The name of the bold/italic font variant.'),
+        required=True)
+
+class RegisterFontFamily(directive.RMLDirective):
+    signature = IRegisterFontFamily
+
+    def process(self):
+        args = self.getAttributeValues(valuesOnly=True)
+        pdfmetrics.registerFontFamily(*args)
+
+
 class IColorDefinition(interfaces.IRMLDirectiveSignature):
     """Define a new color and give it a name to be known under."""
 
@@ -182,6 +218,7 @@
         occurence.ZeroOrMore('registerFont', IRegisterFont),
         occurence.ZeroOrMore('registerTTFont', IRegisterTTFont),
         occurence.ZeroOrMore('registerCidFont', IRegisterCidFont),
+        occurence.ZeroOrMore('registerFontFamily', IRegisterFontFamily),
         occurence.ZeroOrMore('color', IColorDefinition),
         occurence.ZeroOrMore('addMapping', IAddMapping),
         )

Modified: z3c.rml/trunk/src/z3c/rml/flowable.py
===================================================================
--- z3c.rml/trunk/src/z3c/rml/flowable.py	2012-12-19 15:34:02 UTC (rev 128780)
+++ z3c.rml/trunk/src/z3c/rml/flowable.py	2012-12-19 17:07:46 UTC (rev 128781)
@@ -24,7 +24,8 @@
 import reportlab.platypus.flowables
 import reportlab.platypus.tables
 import zope.schema
-from reportlab.lib import styles
+from reportlab.lib import styles, pygments2xpre
+from xml.sax.saxutils import unescape
 from z3c.rml import attr, directive, interfaces, occurence
 from z3c.rml import form, platypus, special, stylesheet
 
@@ -184,6 +185,14 @@
 class IPreformatted(IMinimalParagraphBase):
     """A preformatted text, similar to the <pre> tag in HTML."""
 
+    style = attr.Style(
+        title=u'Style',
+        description=(u'The paragraph style that is applied to the paragraph. '
+                     u'See the ``paraStyle`` tag for creating a paragraph '
+                     u'style.'),
+        default=reportlab.lib.styles.getSampleStyleSheet()['Normal'],
+        required=False)
+
     text = attr.RawXMLContent(
         title=u'Text',
         description=(u'The text that will be layed out.'),
@@ -193,10 +202,17 @@
     signature = IPreformatted
     klass = reportlab.platypus.Preformatted
 
-
 class IXPreformatted(IParagraphBase):
     """A preformatted text that allows paragraph markup."""
 
+    style = attr.Style(
+        title=u'Style',
+        description=(u'The paragraph style that is applied to the paragraph. '
+                     u'See the ``paraStyle`` tag for creating a paragraph '
+                     u'style.'),
+        default=reportlab.lib.styles.getSampleStyleSheet()['Normal'],
+        required=False)
+
     text = attr.RawXMLContent(
         title=u'Text',
         description=(u'The text that will be layed out.'),
@@ -207,6 +223,36 @@
     klass = reportlab.platypus.XPreformatted
 
 
+class ICodeSnippet(IXPreformatted):
+    """A code snippet with text highlighting."""
+
+    style = attr.Style(
+        title=u'Style',
+        description=(u'The paragraph style that is applied to the paragraph. '
+                     u'See the ``paraStyle`` tag for creating a paragraph '
+                     u'style.'),
+        required=False)
+
+    language = attr.String(
+        title=u'Language',
+        description=u'The language the code snippet is written in.',
+        required=False)
+
+class CodeSnippet(XPreformatted):
+    signature = ICodeSnippet
+
+    def process(self):
+        args = dict(self.getAttributeValues())
+        lang = args.pop('language', None)
+        args['text'] = unescape(args['text'])
+        if lang is not None:
+            args['text'] = pygments2xpre.pygments2xpre(
+                args['text'], lang.lower())
+        if 'style' not in args:
+            args['style'] = attr._getStyle(self, 'Code')
+        self.parent.flow.append(self.klass(**args))
+
+
 class IParagraph(IParagraphBase, stylesheet.IBaseParagraphStyle):
     """Lays out an entire paragraph."""
 
@@ -1122,6 +1168,7 @@
         occurence.ZeroOrMore('illustration', IIllustration),
         occurence.ZeroOrMore('pre', IPreformatted),
         occurence.ZeroOrMore('xpre', IXPreformatted),
+        occurence.ZeroOrMore('codesnippet', ICodeSnippet),
         occurence.ZeroOrMore('plugInFlowable', IPluginFlowable),
         occurence.ZeroOrMore('barCodeFlowable', IBarCodeFlowable),
         occurence.ZeroOrMore('outlineAdd', IOutlineAdd),
@@ -1159,6 +1206,7 @@
         'illustration': Illustration,
         'pre': Preformatted,
         'xpre': XPreformatted,
+        'codesnippet': CodeSnippet,
         'plugInFlowable': PluginFlowable,
         'barCodeFlowable': BarCodeFlowable,
         'outlineAdd': OutlineAdd,

Modified: z3c.rml/trunk/src/z3c/rml/stylesheet.py
===================================================================
--- z3c.rml/trunk/src/z3c/rml/stylesheet.py	2012-12-19 15:34:02 UTC (rev 128780)
+++ z3c.rml/trunk/src/z3c/rml/stylesheet.py	2012-12-19 17:07:46 UTC (rev 128781)
@@ -133,12 +133,9 @@
         description=u'The width of the paragraph border.',
         required=False)
 
-    borderPadding = attr.Sequence(
+    borderPadding = attr.Padding(
         title=u'Paragraph Border Padding',
         description=u'Padding of the paragraph.',
-        value_type=attr.Integer(),
-        min_length=1,
-        max_length=4,
         required=False)
 
     borderRadius = attr.Measurement(

Added: z3c.rml/trunk/src/z3c/rml/tests/expected/rml-examples-044-codesnippets.pdf
===================================================================
--- z3c.rml/trunk/src/z3c/rml/tests/expected/rml-examples-044-codesnippets.pdf	                        (rev 0)
+++ z3c.rml/trunk/src/z3c/rml/tests/expected/rml-examples-044-codesnippets.pdf	2012-12-19 17:07:46 UTC (rev 128781)
@@ -0,0 +1,150 @@
+%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 Courier
+<< /BaseFont /Courier
+ /Encoding /WinAnsiEncoding
+ /Name /F3
+ /Subtype /Type1
+ /Type /Font >>
+endobj
+% 'Page1': class PDFPage 
+7 0 obj
+% Page dictionary
+<< /Contents 11 0 R
+ /MediaBox [ 0
+ 0
+ 595.2756
+ 841.8898 ]
+ /Parent 10 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
+% 'R8': class PDFCatalog 
+8 0 obj
+% Document Root
+<< /Outlines 12 0 R
+ /PageMode /UseNone
+ /Pages 10 0 R
+ /Type /Catalog >>
+endobj
+% 'R9': class PDFInfo 
+9 0 obj
+<< /Author (\(anonymous\))
+ /CreationDate (D:20121219110901+05'00')
+ /Creator (\(unspecified\))
+ /Keywords ()
+ /Producer (ReportLab PDF Library - www.reportlab.com)
+ /Subject (\(unspecified\))
+ /Title (\(anonymous\)) >>
+endobj
+% 'R10': class PDFPages 
+10 0 obj
+% page tree
+<< /Count 1
+ /Kids [ 7 0 R ]
+ /Type /Pages >>
+endobj
+% 'R11': class PDFStream 
+11 0 obj
+% page stream
+<< /Filter [ /ASCII85Decode
+ /FlateDecode ]
+ /Length 2604 >>
+stream
+Gb!;eD/\Gm')ipps'`M5+\puEP-!9jmXFB-\b<73CpuU$5^cb]&nS,+7$XM+k^NI>8]d8<q'EY2_d+6dZ=Z'95+FQl/MQ^+WQustphgSNpD-jhbS.3#_h%VFpgJVsn`T"fU=ioXP%IpQf?o[f[;ok3pq[C$3D;WN8*Uc0bD_&5hSJ)O9WK?h9.HrWR/[3YD`c(TXbJp?&XmlVJJ/1E4!A?\H#\2WGlAXd)Q"BsU$WE3V5B)KQR#uV-ba<J*aMrBpmtbtr1`8_[]B)+%,Z+H8#g,1V+&4`QiWa<54nut[k/s;S1*l=`:L(_oK-bj?uL<3^87W<"Q.]9j&8l>jf8D=VF!0/j(h9j'i9h17p7Z#i'$$0FU at M-Z)Yp'0!6A"5h"SPj])J#;aAo3+^l at jP"'06Ur<\ZRK>d*#q&/0JL*QBUaIHa$UJ8NESM6dlSMd<d1IlM. at 1/_1\gJ<4Y.NuW"s*5M?\<sfk$ZjrB2)%"ui8\IfLEZqM5!1YE+1J]I4J,%ZW-E)>nd\?I(ccU@!o63+(-lK#Frm2HN2PAt+V76U at JiOoAMD1K)/Q:a0Y7?R0qJ>#7tI7.69-PgpM)VF2V[a6KrGEl]"a_C<E;-$[#&-"`WGXO at 4g3<GW3PXd1E&E;n>mLDNcZk=LHW!rHP+QTJ#S].h/:sgfpqGcHd'#AfKR&CWq;j+D;ScmpAllBV+(uj:?g&ke:q/-b:>l',KDDQEN\?6jNn'Y9Tcr&;Fp'X:BLMeYAoAa\$39V]n)]OAA)+nL6?BJ1Xi4ZZA?n*Ufe4iQ\g)DW>j[V28T#e@[mJaQ'd-&T[Ag].*23;[R;?gS6Q4X<BP34PnA2&Tf)Q@$-:qdf$*l?_*\&LTg:/B0;9i at CX.5g>]KZT!=XB>R>1_#$`'@WFn\lrbA<[QI%:-ip-Y,`)X.]8!!XpjN3V9c"BRR`[kGR=n\dCb@^N%)on(f10kUS[UR4gdp?i28tg[rrCk_i/H>9Js3
 >>3;89;FncEWkSVQ@=48>F>k^S$A&AB0B"I;Z7/_I<%BdB?VQ+AXTFAG:9:&BhToA=-CXt3m+0e:XY%5?"R#UDZ7\Q$_kO/()&OmF8^U5^-b<rR:l])-kS*(.8b[5\;fR.#[`r-oq%78%aN6kBX9$3d_M,f?\$k,U(3[ST6]9WB>&bSK4S<;Roj1/#I(N)iDdI.f?bJmn?JkHYhO[^9:u69\;uSb:+)2p.gq&3E at enS)=Y9.C*7QNh>cF,S_qO4_LX&!j"KnH21b]!uVDALbQQ!#@Kq?ikC6XiQ="6<3L$a(Wo5ma9 at p)LTK?8I<rnL?uMsEHIUO3+3Y8oHi0rE'Lq<0'FC at q,f3VVXW'XPh?ebWsi'1#YSeEAPQ;AH*l(aG8I1'mNU0cGHQS;\'0QmZkRN%H0>pR7'/<74Q^-hY5Z^me2S%,VO81b?N_?7!Xm<c:_B"IR],pf5V6T=u5$H`kd\VWmjkp$`luC[?%NjT"j;Rhgh%\]RtY2',9Zb7X+\_!bVrc$pbdo)B;LRmN47cN74gf)H)c7o\8pgV&@b)n'O:_%u;'.Yn!Lasa--4EJS3[`hkG+DY>LdI>A1,r4U?XEh'GD>(bo50o$PoB7^9ns,M`FkR?)?th>LJpf`(8U4nZ(&V_R*QH"9p#<P/+2[*kAg#<"9kA$)JJN5_"aS\7Xl0Bn at osjS=:W^pn&"[5OY]rigmHDW0I-BK-KC]E)YDhcd\kRkb7u_e%PP!ZP#lFA7n"i-cOLYkc1s0kVkdMm<\8\rS11*Q<a&.AR>'is5Katt@*-O>*5+4,m`PT+McfY8=B^T`XgViJ`$"^Q]1kM!4NHS"CEiTr32nT"YU*GH2QFPgM\nUNCIS0prnZ2KY!%.1rV=a-UZ$1AZG/*UlinNW$(p0_-e;tuci9gJp%WVfR^,0Ds$*f503mh*e&T\<G))"mSUGt,6hc=AAXR:2[3olT>0#'(mS;#B#O\:\NT#hgCpnj6ZBE
 fX"$@-RDkdt<DB.^t^55q71]9SV7tff=cE1R:q.6`r*%LOQV'2VaI#s'VKM:eOK-fL6*#!:<9Z$=@>:6+3DfYD*D>TrLB`9GXc'Oe4=/,$Y!nfGa9>[s`(R2gHJu)\?^p^K\OeQ5MFro+;G"lY/=]>$32G2VZMOki[4F,\ALSs>h[DJ'KA?]'$fT3"AR6,O$+mP%RqAkPd>u?G/QgP*hm)CKE<&TqW[UfR.d8=L]:36,"0uG2*.V-R9Tha#;Dg$t\W\Q8KPH854'iQRI$FBB5,27uhA34*o<SLpl=1L,^M3)k)UO11(>FHN#,MUR8b,:,t;bCs)MN`&il3&G\b;>@kC(eRP<]'5<>>F"HUe9[r4_?2Q:?+DCmsIi0?(sE?g14.8M=5TPp=,_WFWlG/2[S#=O',FT,G*%%#FD64Vp\P,AP&VOR'Z at BDNX&SN+B]=l)sTd$;:DJ@>)A^3[#>kBD[^i<a<GaKGtG`)k6n&!SVGa1H2OjIOk1YO/_%,Z2,n"Da#Ii&W)_ej$iZpn5X\n\/WTC%p%N-KPBI^%l!m%mMO at O7QCt>g2S8jqc&D58NsO/5Gn3q]n]F(.V`:[QrI-BgBF*Pkn]G'WlgHU!%or("':=&Rf~>endstream
+endobj
+% 'R12': class PDFOutlines 
+12 0 obj
+<< /Count 0
+ /Type /Outlines >>
+endobj
+xref
+0 13
+0000000000 65535 f
+0000000113 00000 n
+0000000233 00000 n
+0000000398 00000 n
+0000000614 00000 n
+0000007014 00000 n
+0000013597 00000 n
+0000013756 00000 n
+0000014150 00000 n
+0000014286 00000 n
+0000014556 00000 n
+0000014663 00000 n
+0000017412 00000 n
+trailer
+<< /ID 
+ % ReportLab generated PDF document -- digest (http://www.reportlab.com) 
+ [(\031O\245\250\001T\211\323\254\270\(\301\300\004\235J) (\031O\245\250\001T\211\323\254\270\(\301\300\004\235J)] 
+
+ /Info 9 0 R
+ /Root 8 0 R
+ /Size 13 >>
+startxref
+17464
+%%EOF

Modified: z3c.rml/trunk/src/z3c/rml/tests/expected/tag-barCodeFlowable.pdf
===================================================================
--- z3c.rml/trunk/src/z3c/rml/tests/expected/tag-barCodeFlowable.pdf	2012-12-19 15:34:02 UTC (rev 128780)
+++ z3c.rml/trunk/src/z3c/rml/tests/expected/tag-barCodeFlowable.pdf	2012-12-19 17:07:46 UTC (rev 128781)
@@ -83,7 +83,7 @@
 % 'R8': class PDFInfo 
 8 0 obj
 << /Author (\(anonymous\))
- /CreationDate (D:20121217140300+05'00')
+ /CreationDate (D:20121219120224+05'00')
  /Creator (\(unspecified\))
  /Keywords ()
  /Producer (ReportLab PDF Library - www.reportlab.com)
@@ -105,16 +105,16 @@
  /FlateDecode ]
  /Length 4894 >>
 stream
-Gb"/,>Akh,&Un)$s20X?K![u(0+W>YKoH]k&dajJ--Cjs%0=:_=B6S0TBaVD3QC6 at 4n\L-A*XD9L$\5rlCOI4Wip;d;Z*/is8MnNC&7I2qY6>I[$`P\T!T_$?2T!Er8ROY+.kdHIB3qnZH7EM;,^FDn]X$ZeH'U'H2`cEk_1e at pjoE58Z+o*QpO_e9fD+WJ%rL^55a?>bI9.^>[>, at rlrcU?[[G&_/s\mc1K]^%rZnU?$nS:Ho/OH3MZ*9fD9QM1ZM'+R.&tW1sU?ZWiigOp0lp4s$+b(^>i'o;6hh(7i`Jbs6dnrJ:IQVs*dt9q=p5gnauB+4oILLr3noWaL-4krpnmmWOmkakta7*R:dW at e]\WoRd,t6Y1%W$a!F6L]YM#.e*D:Mo-Ca([lo!qQ"TTMLh3C,rVE9 at P;<B[^F/Iqdu>^7JE`B*X5!q)RNG'FdhA,LCnAb5P'lrROE/.sXeQ/<^@d^!Y^89+#$11,Bk6ms&&nURmo]8lo)&K93A+24B!^PAP3WSQ+Fh&5'EH8H/:#%td(VP.3f)p2o#Qq2%%.5(?Jm=UfY$.a+-t[[T7^3UH#hn_IdJ%ba]QPRDtWAXDr:M+qW[j+f5E=WTAKM?h7%</s)c#V51i8(q_].;B&U4Hm6'T,chD$,!P.V]YLJduB][7c2aotbbLiT-=)\WWSPKd>dTqM_?c5qmK1dUEbMQqN6n=Gg+'[\7,aKmJ;7*]=3An^_hiVUXnpimPHpG8"MD_1(TGdD`9sHA,W-;(fa#Ihc=I8Yggo_soHC1p>9tIB_"*e=hd>n+VI9-SAcshFY%f<,*6$2dH+2OC%XDO!o$CiJ*8o0D(>#,XZkd#c=n^X)GW&MM,U:+L[8&/;<1o"B.O/1"R(H%sE^JYAur;*(TUs$'A(U7Z]X>#(t`N-cRj4/!8BN8j>Ol\Ru]W)UL::lJ<WjR9Nmdg&$jkHgbg\^5K^<!K9EKqa^G at M[f8V>rgm#$cK`++J
 C^!9'IQfBNpfL0c/aI$R?8g!LFX-.C/`2[@)M[5ONJiT8^0\\FR<&u$fJjR55K[V/Vcrr?(jKnZJ2[Bi0C-43)Z8r at epLPNM+_bKM&qo)d&<mmJ0mj!(dqqO&*u'6g:61X%NQVbgQGQ-13\#`8Nf)a;bW#adW!F::et[i2oqKD+]LN&E(""qD>,iFX5ka-fHC+?jEai_nX-fYT at 5eD;?3/]@%7Q.J@?&H>2A[nAOi*21a5KeKnZW^lhq^!#[ct6NdR#?='DL+Um^CTN5fXELI/Mhj't.r^T-UnNKP_tkL"iiT2A-6<a)*('JNL]:,:X?3iQ83&Nrk$Pn?mK[S(MI<AWVbi)Ask9C]nJ=I98oJ'J!s%_ne6pcftr,-6#AX'W_JaP`p'DP/6!(RlD<siXfG,fi\eW"^=(AKBpTpnR/Q-\OS at eNZ9G^XH_AlNfS$&&qN`\,lta.?mq]o*,/5!JgUdq"kt?.66Lej_U_:R.pr,Q5WY(kdsW="c7('7D=i)u.d[pW=2D&6dPfk9R&t]5kPp$UrVGgUri!2`R8nL>MFuW4rQ\mo9S\C"Bsp86<-X.oc`m$ZQ<p0n_pSlX=-rDG@<c5`VT$r>4h=M5I=ONV)4;7]T9$c^pXF'4"p&=[A6Sil=MI5K>48_hj9J2QOV7gcVbIP5#"'m_#+[A]))+4]E+ffSQ:bGid")cljGQ&+:Z$5>,)7kERslO:];2,&,FN^_8>f[tc#f'sB.4hj8)7`C=DR_aG,qbHC\2KQ?pXjr!NRE4W7SO9jl9"udCTU?,jbb&SQu>1f>-&sE#Pk[!t*UcFRsr0VT:c:1LtO,3SFP&+n%Yr"_7'4+=i;Mk^k<V"H)C%*<=qG>D`p_q)GhS&*-&>:(KVlKkl?s^p6"Pajq*^r/_s$2?j73>!Z!i]iU,M!0Br6m1^rbX<RpG0(*`lgbXrroGk-8QQir3D!rZH11DL<8k-)_<(eMPCQ3/CKf/>H!4RsNdl%
 *XD=ccKB><%V^AMH8j2USZEJMqQGSO,GCC/%e#<YT`+'+WNOB10q3euOY#ICTf[nT_Uh/"87L45V`1*^tt,h97kSRa#Zps\LW5Z.qX4qRaPT<m at lmN:&'/EmKS&oB`mJAdL]SN at tHS2L9)P&oPn'iXH)dZ>t,P/1HJX6LRRLAB1r4gS#,_-HCpSuLWZ[fEK(Zi):X5aXhYYtrJ2kTjTu?6c08?Hib<E5(bOXEXn^h$jV"U3kIESGP\mO^U-q%-#?@>Jain;)"dIFH?V`m1@>)8[t_[X3Y)1(/p$88L]s'YWXdLlKrR3C6lKC!qI)G5S4S/[[WpgD"`$Dh+`d20.<4uOio2`DTp9Qp]Yl*;Fgr'K9Q[>la)0ECU/ZrCU,7GGe16I;7to5cbA!?O].&MAR80WLM/SX2:Y6E^Dd8Wi.0EX(Oaco<O\l,Q;+^D+1p:6TF9H>^mj6,n&ai_"=*5*5%[%'>g\RbY#"5lGp4V6UPgjWPNQW+=/H]_q;#;@Y=0B3iSMP/$F*If>#7[jBcFhoIqE@`NSu,D5R!LVhGb6Jf5!K_#J*D4/i;1c!]ZV66pV\l*_iE6RSqS4OB>0/K-!#<q7G&<=_&b,3+re)-B#H>*,E0gYTC*=_o8O^i\q4'$CS69TTub8MgB4[)^&ga9n@=!I,fK>.0fDunrCI'0IYqfgqCdH"O6c_XO%ZK-,AuYTI'GXV7`pt8Oc'R!h4Q#f,OOO5XhKuU5'c9ZhG:ZiO]*sBrdAu86B&*0%F]63D61u-EP]B8)X8=^,tW\&cn#e9SlRj+=mG!_"`M5Em,q_r2!ps5/QSY/k%\UF-H]@f"*hE&#G%&8ASP[p5Emi=cLp=CPX9Oqi1r6j^H3!6d.oh5]6qQ>(3o$512H?i#Ft#NZYe2r,_eO3IY at m+->)97&(!/6K[T_Nlh7gAdNgN;K-[\I49`oCMc1E&4)'9-`T02=.H"bOR%]S>NdUG%R&!1-&+[Vl)G?aB/
 F.\bD6U8K6a*Br`.T$>[e!"'X3hT<"(To^7L7(M0!:T5m360Lql8q:eM4JFM at 38I7OKlnlQ;eR^7[#CWLS-5bW1rFH;(f0;1cF+L+J6(_ZHEBbb6a8]j>hCR@["Y\AVj\6>r)ndCQ;"7^>0g]#N[#I'KR9uWDA85HKR3,!XubJM*CY%%!YVp\O<Z`RK^)d+^b72Ho](og\V%qmC>!_fJ6&??LkAugkc+?+mGbNjpbeW]lM3\A5k?^LIch"<WoXl7n4L2p,uE%+ac_Q%R(HL<uB:p',CPDRi^(pL/JEEW3$D<^sX6TqCjB;cR4`TabrIXGS#$sXdVYhmS4VpjWjE&oin"=M[(rWhe2/+&6.nuN@\Gk&Jimf5[+Zif1M*h<>\ko':V*E+*]S;no!#4)ldYsVKNQKF77drPD,L3gj(bYXA3_!/($2W=jsOlD1\,I(;37sq8WeCap0[4i#6LO('H:+'*R-;5d;MBb#?gY-st!$P]t!<WVhRaj at 46I<,NeGqq52VK0:aO1Wh7Cek.1Or<'T#:Y_;T6BT==n?N\KP.8eulHq(gnPrW.b8*@YL]aXGs>;5N4ZN7T\Mq"A:>N?iWj$UlA2_pq.q8j at Ca$6R`OkEOP]BiPh)>c1k8=*OM@=DfjD#<lb[TKsLrP5?)XcKsoBGMhPALhn':_](c3cb<Ohk!aTNo]*ru_4aU>nZ/XmOEqF_hPEUcHl+(Sm0Z_FH_'OI?Ju'pY/dY(5RmkbWq7KWsI#um"V^:;L9-3](QddBn"54b at T:[MU*o0^r%.P^25#kG*!jLd;YBLouU%[sfAdJhXoOb7:/e8MGi\Gm(V(iHhDoF!"O=Sh<KICO[/gD4UfPM7+YGI,pGZcH;/^;6PL%@)@If(5?ek3R-AI-_$QF/<T(]&B?fk&*#kqUp"CB at 7Ebe:FU6=\Ah<N:#6P2[>>A*6#[c!D;u(liVYV]*uEeEmXkg%5&LE]D/-gM-j"p!uHO:<cpGl
 _k>:Z!tGg;*NPok9ra]P^T<g968E:MD;L$)o]I>HVR:od,L%<S;=F>oaP<laa,1U?:5L]lq.eEC`]K0!8&hfQ+N=@X4_7D#&:;_J";?[c!Ohl\[q_(o'O,tlBT)ebE0d%p=7,[!F:4l]&$H4"dq)-GAns*+A&0GS2MdC5%![de.Ku=40i:06N1,>H4+p?"0?<oL8mfOPR7I'#EB<1j;kIrhg9<52mN,mTKPhV4L>@(+sCt.`Hdl64YV8#An2F2W<E8%!gXI@()YUo)EoSri-TZDkoTE/V4fJK9?JEuJQ:bB#1s'b*g$M.>4b*#=>C)C!m<M0,_stF<,hA##aD"rd72:*M-)<(LIe^L'VQ2F3(ja"_&]Q19%V=!#h!h$X);sBoQ\-qH,NWq[i%'FbKf+G>I?/V)G%H+WWP_"m;d$9?#F4]EB<P3<<o8)bLF?NdahfI-tWk7iS/3;XQrHUl9KG"SJ$V23dK`>4:4I49D:FU%!d5l%Rd5&kerTj2TJ:sN(sl1p,/$"FHH$$ffm<[F<E'8S`bOj)3jM%90JJ)0Qbbn;&K-XPlWR\8[Z<i6@[EkkYF)@f,ejB\VpN7=gBJtc&1GmXHo,0QLg1cd)FGp at X&2UBMV/Q&Rf[)WI at M23[o<%NaA;E=sCoWO>c?NM\[5req]cJ#Xu2e6spI#71'>o//]g+bqHMG&lpQ`gEfB*e(1`oc9W_27@/0r#)VhEaBN0g-pnU/[O,Y/kIZUk+;*Ua4;&gmb8MKCjI1FP"Gn5"1N^t=)@au7[NZjK at nTlaG:c1D`a)m+O<^YR4hI"':S_P<mkY_dqLjsZF-35?6DG+E;98!.Zn$k>^5$[Z;:$c#YW_>p<89#/%Lt"1Zj0[(7-*]@RA4g+mOEO?nM:IEglLM:"eV at hm^]sY6/:`ROWgrocMg)ujGOc"C3omG(T^,`bl~>endstream
+Gb"/,95bfj&\\Y"Ii.tA(f7d#O$aDcC]t+X^ki@#8<<ogdZ+K8MIdsVcZf%lAln-_OAfN0>S7DXJjFS3eFZ^a=+0biPN)UarV,269[i/@e#+kkUs4#Oc(lAjl/L%<QPWGir:oo at mUL[<OA4;)N1-J=M.bB?WXa:NmF*FV7PC!o`Xbbn9KEog`Y=kFCU,C%rqj[bo^PF)0AesCF*7H at q_p`H^AS!,UZpe/gZaX^+5Zp5\p-)<Hnmj3In&D]YP%'$B?$-51#Kj9=u^<d><2SjnA5-sjsT'W.'4n#([@cUN8]81 at sGdRs2BK&Wm#ke_G4;%SmEJ8Vk7Ufs7V3g\b;$*?X=bD\pI:3rTQIWk1PN>206^:VY]=[FW.IL\E#'&&,>jEH9K%+4A"r8D,9"_jVdtA at Mrm$^\ME`j at mDZn&[Z5FJHr;@(N3$.egc8jp0>UoL(#+Me=fA,_(/V83,VueklPchg.m!=?RTP")mWBC#nY%+,g5.hm)McjS8i13A+24B!^PAP3WSQ+Fh&5'EH8H/:#%tcuts'*CTKTH0!$TL.hXO0CY5;/7.i,&'OA>cbV-;4?;r'?b8d116sZC>CHAD]6F:CI_,O9p"R[YV`4X(pYD=j5Mb_,%lTR#IZ6dg=njRU484'Mo=^Pc5d#I[DedE8ZuY3mpI.>#YH^TQYM^B93hIL[V:u8i^5/gd#+&.iQM5#16n=GgS#u/b'$D!6-sG?/S=3m0n&Vj<H,,k_4s4,L`L9YOd#@gkVUu]&e2Jf@@iVmkX at rCDDUfAF4\XM0-J_\@!PG\oBZFt5hc54>ZreEZ_tFcpLp$1?&Ze"1g?,>>i&o[i at U%@/H?-5ZQOQWJYLX[_I0!@^[1/lh!Gd\BN;<Z at Otpf7C.;odV%OdDog(H,Qe.h#`MP)g_Y!A"0E1s3(H3)&<NXM9QK.&tW_12jm4r:Sf(SdKbL]g^Dm-$Sn"ulU,/;jM<K9c.NO^to%>&)q.lN\)NtEl
 93Z"o)Ni/gb'?NrnA"$OLICt?:9"oigX-+b],#B$\k%O>$Ct!2ul#[IC$N3.$:61K&CY=r8cfSHg+>=5)n\Atal7=XFQ\c!$Ulgp8&9^-&:f8"Jn-'4o[h\_P<rbiR4]4`b/iV9^$6O!GW!F/".Y<:,it.<I,%P5f7g8;QU;[/G7fsbHd5J44WYiZ>p>Bi%9m_"CZ*]9dbgE8k)ZscW!:7d],"8B5`aploM\Z6, at 7QXDE%C@$=:34>hD;mSl*f-j67=Z(pXc;1[aVQJ`t/o3r8'gV[OhWS,WDu]D'UrlS$:'o&dKT#D'T16/&@Z!.ME'GafSU)!enM\[<N at SfP3N[OGV$s)($&6"DR4L=@E]6.r/;*_%r6\l3sgB)asrFX9Hq7PAlDB_7h at f3#Z>e&72p#=Un%-><CMjmuc;__*2RSO('@S3D_2-.BtfP+59=3!h!Fh!rSk1:dR`5d\'PB:C`Tr[S((`5QK&^Xco8UG5;2(3g/[TI34Qr.4(a+oQ_Z2m1`o/_60N\2V[&TXa9r4s*o7kqWdqFW3hPP<Htp/9&!hRc=?9:LPJ]?[Qk1!G_W'@Yk/g!?Cq_FdL&9AQgdIQG[^cP`R0N*\l$UuJ2[=a9T-I-8)U7+l8EI2!4+aB/cB^kh]ZX7pK18_]qa&tM1MDMVM-jZTp>A):)C;HR%@J at 1^HlMV(Ps8^ka'&73.)[ml3Im6^Z1o^Q>U(da3Q-9KOr(dk06b]#^,B'TVs`DDNH;[<t9P<S)aYH8c$^+TU,E<KTu)CL!=6q,2P.Y(7cgHbiNkf>-&sE-;\\L24STK!cEN]H<"[EXo`(1:bpTD1TomG9DEfZ$6M82i4X"Jo?eX'[O`[!.7eT'HQE/EGXe[aG"l+*eFM%f*Dn<AT\'<XX1^W5!9$b$jKP8Jt`["Y8.oT+J!?&.8VX!7gu%qgu]fj at iQ*E3FYo?7;tEChFjMP`(1f2N+2O\Q:`XX)VK?CCYkfeDB$p"C\k
 Hnk1T>ZI]mU9rmaKYNSutZ(8K(B>=`V6,ok)Ln0f<)=A^tD>'8T`*-Pi[c+_'M2FSd4Z\A;rqJCQ$N7`-6<7;b.P*JSrXjp@#U_J]6+T<0AB=j#V5Ha<SdPj]f[.3J_&jMt1mXS\df(=knc at MHb9X,g56`uqM#5a(TWb2GQk!N5CbXN`\F1D[(VLh1j!j(D-p7q6`_ at 6!kI7cCa-OD<t)@;u/C.=#4o6&Yr`G^:Xh/JH+\n=aY\PK"5).ms,+HCiX,qO3U"[ab)#>&=P%WT^aKSrJ%p:2^/@L>sc.E,0l[V+_q]fiMcc#Qle5^$QE'G1pb]*UO;AoF$ch4t>26-45)>Y`+X at pVpH0=[L966b>,UeHSJT+r&BP;O%VP:^Lee"'d*iY=+qp:Y@"S3j#"o6P.87'eVKWCGV=h&*p/#J?Y>kaO3.\imI,CmkP-d+t8s?-$U_hY_PG:KAhe(g15:1&GDAMKU7eI6-!)'020n?&SfS4 at b%<19F[#n)gYJ?*kadmTk4=&/upu"_E at P[K2of2FB98$m-o'._'<fVQ'WG?K4U=cok9GTt-I(^r]h/$HfmLBGuTTP`eLi`*1;)oY=VUqaR>nOc@"nclB>b(3R)Geok8+4lgGi(SBE=h^C0.ABk7/hLsEce8+*s!(#X]$C%=D)p]Hq0qa;aGJ%_,TSV';pEHXM2!]4e6;q9X!.WmXQKXg'o!W!S)%CitD!n"/2tAPOMFa^8%m-FsmkI)EG68K+<[1h2YdDDTWn!haQ:b.N=K+lP_!db?GLcd?!ZXXs&tqc[<kMkVpk"*<bUA&?UL["]_WjfI75dALPQ>RN\i<k(V2$*__-DH_N,G\!NRV?OLa?g5Q3`*(@E4j)bX3F;D[=TkI^X;]dQ)d7*'\D&+1V4GF8Wg6IUJ!SOOlQ^UBbm-k3IJVao1[?$%&":E,u22.=oi]D;8b86&+YPW]:8bS>*$Fl\I,skU[)O4j-SHL-V?pWY+]41h
 ;]kL^daEH(Wdh<S/[(@L2$/Ya!g?$oDM/Sr7ZHF(W`a":mPL^d)m99+6An^@+XA8-FM7=:@NbZ\4##OQUY86K:o,*XO-AKb?\%`$1IU8C.jp.a2:aP_1sI0U!,Wdf?^n[8oHP(EgO!io-iErLY/B?n99eMCh2WSmm%cd.VFEKnH.+`T at bnV5]ho>Ig[kZ<3EM/iJM?<3b:$cr*UAQqZfg<[m[b<Z.GnD?QAnf+5Vr:[Z9fZj_H^]sO]sY/_Dp%EAZ,P`&Fi9;/'m<e^.oF8'[/C2I=J9WY,3JG72$Qc8]59BX>5l:Lq66`k#T:8_[tj"FHU^r6=-esi)dFBTXi:8\;Ki+-$Bs+#60V1!>MT(RXH+21hP*C-QWG/-c,UGH:=4X2&H at k%V3e$7uaJG!>6G)4;gden*.>-:*8:s\ol)<t'83#u&B7[u^u;B0[s,hC-9LlIisSNVL"$c at KrW!?5YFE7%^_K<)X3+ASfXfZdP&G"?f0S!!&=a^B'"C4Z$%3T1rUYPs(/.JjePcHf'!slm28K9uD<W$W_e\VNY)kt;bm:tsF!@D96=r9LQ<d8Ap]<PAu7iY%QkR*i@@&X;F$t+pWZk:FhT@[V/*(_Ga.-2Toc8OQEr,UnC1Hs?(#ApBS$XL-Q'f#kXiG??m%oqD1VJUG0 at c:AApF\gpm_+,GqN#iP5ZaEJ/jg\/cX'XtXLL9B*'Kq3jQ%IjHL at 4I%.^]+E![V>?tkM/9*,afAs'H.5490u+(Y'"Bh:;AP/ht8-1qRIJ9D1>k9l.C8%00J6i;e;:DMBc!,Qr=leR:`W82rV=i,an]pUC=b6,\U\-sHMBoI\s>;=5Kj9i:=+\EZ0b6WhXG+/WdCT/L4?5AE=965)BiVZB)++K3W[F/r9)1lt"ASk*.Kg+@(FrBgPHH`h7RXc%iF)UHYckuC]Pq!cQUc8SSfX[&/Z^8ZKL83PEWJ7biFo+LIp:S,,*"I#d[Mf06]sSEB;fgO at 3
 pK(<XI(Y]P`Kt53==.oA`"osdbJo'@LVZ"7PXAhSl6:I[!3f=-Xs/SI08,I[,/lp(D2?Z]@$d*S&_K:!&b3]j_gmhC:7<TJXS+F?frS/o at N/DXtF'f^:f_2^!cXt)=m:O^:IDrTF6iUf=T29+>\c8%M$Ga,fp^fdftNPkGu:I3l:]/7lF%8a?N<oDrE<ZJ<fNK:c0\Q;F(<B_"#6mHiqskHOgVN+r7opZj)AGLXmSL,XbD#3%m(n#)9>+N3%Rb[/^1l^f#d0!lI&j_^D8`I.-JP>sl?81pdC%8NGikY_jF;!1RBI,>qoBM`uq!9?&)P@/39CjO!ap$82;`JMM<kg.3)B&W=Wm&4q&&,'5"EB?B*Y\4(OEl+4D66(2\7eP2'e*q-QuO*E5C2PVUEfi];;Wtr]b"%i5bFhgPL?&fB$b,l(':?M_Tl9KH7R5u0Qg)=c;`G?\YI(PAoFZntg*Jf`L;hC*8-Vo,X7q'Jckru"r+cjsuJ`sHVSN-2`k1Bs+dE*Qc^.+9V%Pg4!gLkbs%Rd/$o,OtsK<fo7WFmslL2L0@$:>o31'!%]WV5eUd%<04qQl0t[E"b>/gGmQQ>F]KZQaWAX(A,ejZMT9FKoqu(g[7Xg(P)m6s*]#Wd@<D-O$^"dE?T%98&ZRdO(N'd6^4VqN,b0Tu^9*#cn',80MDu-0#--q8HB0_MUd)]*,*Bg):aK3Jcb#kgF at k+;*H:q2/tiALPFNf&SCXHri$4,XOVT7j<V5=Ta>0>]VQ\+Rp\!L at .$.UVXLd<Wlr[D!=RTY%7me\>uYLEo_>=B at ep"OgOK7FiNE6*t`O>/on<oBG:M0$9?q#G/]QZ%hS.i$9H.4C_&TJ'fV&%K>YhOmD5&8&NRI)k3*e9]8E1hr!\0?pEOrR_5AZ3Hg^<D&@X\mA-d"JZTf!`q.p5AR[u_="\ZXfh#~>endstream
 endobj
 % 'R11': class PDFStream 
 11 0 obj
 % page stream
 << /Filter [ /ASCII85Decode
  /FlateDecode ]
- /Length 2559 >>
+ /Length 2562 >>
 stream
-Gb!Sp9og8O&A:TVJ*:Bu7)`.YgZ<4H"G->[Dhpa`#nTCQ&Ad8e\S#Me2`oLAm]%ZYb%e?;[@cjO.bB#Yp[FF:O6>srr]X$e0;\u8H"*0oSkZ;^e&CM!UPla.rjmH3pMER"g84DjN2`XakW(RmF+]fDhn9+/^-i1VmlT#UUWUBbp\<2j5+4*q:D`b<r,:`$PG?Vs79Z6P3R\2i.AbT+1\q"Tr;EO=*Y0=TCBKX6Gl%.ggM];:_X3:9rpou'fAdduo\$Xo*."7VeR:q7B%ddqI#mf,DO6?Y9Nn<[:T#"aKcYQ:j+MVD?gfMcY0ZO>kh@,+3E'p>(\)WdNm>2,m!SKlUm'>&[B_DG at c:gd%3[J)qs1:iVSAc&oCV..hkiX;I.ceI0E/[kSCH=bc"(O7V0=n,WUD`?3`VC/$5P0`D%\)J&hhitYE#";^%X7f*FKsH%Y3^,5"EndmYB<^RNn?uouY!7_WfXLO5%rG&0pojhK8b9+>#0B/bia'$AokYX:<TJ:L8"S>soGs!k$ICk+\5][p7eib`tp,,,YJLOSdPcg.C3E/&Tb*frWrtX.G73HjsgrGU4!gXbL4p9"h)_2QKJ-,_3T<XmA+Z1a["[C3@<0m19J,VP`.SCkn3Jfo"mY[7Vb5_E0Rt93$:^^idjL>L8#D0RhFs5n=$B8<'lcKhP70\F_2A;g9uI00s9*/6 at ZplVq'R,mFgK95!B#&GH at 5^qKFQXF`u6-#/^)HES*;<[$9gcj*!R/I7#o3G<H[6AS8ERTpNk@)j$=\Yb/cXX.WgBnfH_fn/-)aYUG*(nB#,4U8g>LN at 2rDUK2G\>:T1OL8[p,9jm(b1\A\&So^QD, at XFMX.)6oj==:WeUVBqTN(1nS at JJAf)RhQm2JgNas`L]p6F<4"1eN3=]XaZ.MZ'TIPW1?PEU2e$7.E1#UFFarh6Q0.MX6TW*])mmnTEOdSt6<<=4SWOG^iHo7#*J&_oAl1Tnq"*+^'8brl
 2]+HQWkYNs[Y_8XWKC*J;cur?0_DOZmb]#lP60*]O[`[.;(<ZcJ-2Z59<B$LYf8k7o#YU#$'\pN#_r`;ue)DDO[,4^(@;odofO8IO7N;]c5p\*4p*&"M7Y(lb3Cm24O$L2^L/Htt2+.74S-),8%m;!m4]Q6J5,X[c$!GneU..!MXX#A7Qun4E,D\Ut67L2[TV,4o_?Pq[-n8(-FdDW,HhQ5!A$b4#m$V3&8%V)s5Me+'*pI0;-[8,&&;g'>a;[O!CF&7f=cPjdOpDq$0lpP]eB?R+D)Oq<'6?2p9[:S</5&p(iH3695<UW4f__(r5O at E^J-(3H$S,?LE#DA97;C1F/`XbsAu-W/;JPSr7i?76[(q`'ODLseq+*Edo=^LkpJlkJqLqnq<=fM;;.h(?fSu@`0r<eoT2\G0'-6_%Et2Agn8X![66p4TM*<PjfZ-XC3m0K&(Beu$98&/dRhJI`8[XX'X4rof/a1Ve.B#RfZmsLa6\1N!Q!?oO+SB<..g`N+AXb8Va\bctKEr2n/GF1cPRhX1IfrA"!p>1gV8h^gd&/i4hl$^Ea?$`Mg>]V\W.B*J[o>m-!AeIRcuq1i&#1*]]K#!V!Pc&mRfdG:K4IL'aJ=sK^l!:_Nf1+)>&"R!BLgZP_:pthCYIB<@sf+ST[ea2HUt9<PUj/=7J>d[8)OPP$>6iG:)Vfm0h+G3?@>%H'eB.WX7%[THuuX7JM%2e1uD%g6%LYX,X+,3Y8P^?le`,jT8+uTEqt'K3r4099foVnl^qmD:4^$7$_`c at 3S(ukIqZ5-!:8BD9,Q3X;B8\$U@$WH7KG#2^1AF"WHg%_a7e_c!g6-t:5D(U_g<N1bnp!)Eni7K*a:*"KW"i0[UP:nQ87Nt#Jd9>T,"Cl6E(KiOE6&SK;/6jZ at PP*O"FS0X?KiHUFJH3)@2pE&QWLUk5YL].3:9gL/@Q2Yn,FG1LhN74^Z&,h^P^eK9SCJ'0HPT`9UY5O/orXCGO
 t!on=c7Rl-/B(kS at G18j>`cbQpuLtGb!k0-Los5n<Yc-AhBgKaSp at 6dGR1BXoI35G5M=DaidcR9*ffP/Vdm_h-1=W4TNMlPB^AF/@AR at Fep2WWlHZ2OsH>?a;c2Y(FCEQe7+A>:PZIp-eOqL#9;/Bn]p2R\$^[mJdJZLldYC:h`a61ip[!Z#o]!SZO`oAor_5U3TSQSd=N&h,amB!#+il<+:W;l-k/YDhW31*s5L'%\lASVkaX6b0fk$D[=U69rgLfk!an,?L3X+oPX>=VB.iI0el-L\eY]G<:ur!o%s?),pFHTX9-:'(Tm<j6DEqG"V+C2_Ur/e*`&l?'YWP8Bk_fMOi&%#b+W84:pNd)2cb)j3!1g9\J];,Afrd`*H:qcnf=c0cejiI1Y&rHtgXt\1$N+kY0eISK7U_br8GL5sS6tIJh6)+Srgt\t+X&+mgmdnpF$LLB-G=Y33X]FggGdZ?]^Nod(X`YH'VN%'7B$&t`C45l1A`%tiRNp=XM7DMU?a3dS3'#M?(m3khL!HC'pq:r!;^NH_>,?2L:jCn,T<^_7ebZm=.ZV/%/N1u5k:*u'\>,6~>endstream
+Gb!Sp?&ou5&q,h*s3QgW7,]V^mIG%g"EDEZJpB^G+:'&$"E$Kop[<+Jbk>ptVR,)Y;#k18g?dP6G'0)9S?dKd9)-HupTK(8VC./`ULu]o9S[O6<mp7%l1FW;psK*_5N5Vr;Q4j(4>gV`.2dHW%FX%ieT[&r!JYM9++=9kS5Ej*^A$uXJ%e,f?;-+bB)M\S?Pc53NJb)(O)h'+^/IY+T4d`6Qh^G:o/o3_Q7#GN^gf'ir]&6tZ]>p4UCkLQ?<lm/X>*HL\20Oon&rI,cNqunVr;!Q0OE&lZB:ACbOk)qo^]ZAF0DrEpc.p%^9VkZp4Eg&];%#l.ZWp@^@'7n3S01[Dgu&7ZC7anel>3k]X6?('%7per:^*]lgs#+^\[69l/uE&qr-_)^HO2DC2ThZZ8TDE3ukKSG8hp#W_%=:$PoNrM371^QTL`s8'LthVjQ-JE/GP=5]_(?,Nh\nF6\"p&[)'. at UL>;FR.D2mH>[KOnYI&GQ-,8/M0gOpgG`]MCi\R#3jU???1Ks6l&2m[F3[hU6ol.>lOYh.pWKM:'D=SpSl!:PJBC at L80m:=h!?k4VuB=%b.rV8gMtl%Dg2OH;/Nu<]=\_!.>qm3HZ<T9\,BWl@:ZO+q1tT9t=ig%k!dN(!A=IPtKhcO(^kGWq>_0l^1PXTEgTfr1m&=*X)%q)IpqtR at H$PktsXBn6f@)K$Xj-XqHH>WO15L$lV*lcHIXYmL*KTHgMtY"d+m=e1)F1?7cGb6Fr/L%uSe=&-s_+d,^jR&=4 at n\L,hBN\+j`9b@\89 at +I&%&$M("i3KfB5jb&32L,2%YB<DkL>+=UaPqV92T at FCX&;;7"2>([9%f%eqkF%TP at sOG=hDl^V36<cN>k0Y90!s?Xoug_sjVA'^<e#P-rg5<X-J0Ue$/M)9dD9Z&N3X<="/j.L%`-V9LVIi6^i5+:pE6.YNbRWTQ2.80K+<R81 at o!Zl!R%oDS>4-7I3`sT!6p*\GoEXdd
 qqE5S*'.]:1:bX9$KV.sj*GmpcN`1&:2+"t"E'a^ojFi/ob14?Eb6"+YVq#rj2kFL1O*_WJ98S!0gqce(jsJa0iZ860hb_O*E+Nk<@;+Rg*!k.^,qUV?+kDfGJI0:U861h55e%/U;<'u#6i0HF"%+mU4WcRF<GI(KVj57.=kI&T7Pt[X,Us_"FGc#%Ld8U>.F(qdTMoC<#)hRk.T$k%QKqp+p=oj^ZfP<_b-./ZDNWQ^NspY2qH2>USl%72 at U01`K1Ks at KRGJr1=Rq5ORX#@\(*jZXDM[X6R#d&e&>a9-AH&6Ru.WP;msI)EC%M!cYWOR4t[*hn5lp"Je\f_d1fQU#6!%,:4-MO$Gn3fefJsunb,]cr+H8U[VD%fA>;9EM[=?074=g98-N9&TqE<H-8L81\ChNo$6Jh2V$&s/6(^."TVVi7(Dn8_K(b;ij+</:]X4WDN:V$TJG6K?R$bTJ_*jMe$Q67]h(%640"mO%.V))N,&J2)X=S5L8s0FY0<8>LODSmhm,:QsC8rOION;1IQWp;6DY)I):mqtUJ*U!IN,AcHMUV'S>%!2g;i at _/Nr+PL=Qb**L"$YfUXfNa-fb+Yb(7Be;dL(*>H>%iYXUNAG%?S+)HdNNBQrIGpkl5Np:u9'F=e6?SHH?u;_9lHLS4fR?)b8fe='"?<GPcL:S)P/?>urap2K;]Yrs%9'L^mHpCfHiUAt/go>A>7*`b;Jbs7f]gF3pecqT_B99VRt"1igWS&+mkOQCgAIihTZhlaHQ.(5381[WO<E*%$&F>>Sk)E=?!X`aes4e$3nUDd.4 at gYc64o<GO?mWq(%-/rsO!XDM*aM]01.g.*dH>"a%g9?:@Qn"V];=%f9*Kn9oH2+Sm.&1qL:m-Y)"m1#@MME^og':4DGYIPFIu>e&F&>^ALj"qB?Omd`FhgG_/h0Eb092l!$F/<A&ce*W]i64_0UK at m%_#P9/tik`KbG)1?Wt8#JlLHSa53R[F]
 %cL:j_(n76FCL2e%td$%bt'V4\1\CLZmgT&_mRE=^N4AN07q+,Oq90Y$;84dl7+BBKffU`>KNR[&-,p<p`bur&W32\c06T0*bopUu$I9\q!o7>JI>^SQ_hk540bLbT?^1f??H(USm'ZJg&$Z8G+06NMeq-hal[]f.#./RA;*a;<T%llJ&ITp!kU2DGGHQ7"=*8gj2A9RF)k13`\jo36#c)Ou2X5J#tPd^7MdG/$)7+P,m>)&\KnX4DGGF(g.e=KnNaS at -o/;\W4lEV\2J*T9k6Md_n at 9iG$T3(;tB6$:G)c&(rC-NGtp2<kr^27Uir at m,(M4O)6A^kSN4cubfOrtaD\L^mge+jbfo?!C*@XK at enX4E&))7I,><Q\rr<Se#CC18lk0,l`j'&5h!aD3Km8tGHjZEg>WOnn2A"UC5k/fLe#`?$N?[2oF5Lip2'9OQ9h.96N0Br6CT\S)j4F"Naem)E;O"7uZ`5CMUp&:M5N>P.EEsiaSIp_nX:qOS.H]HD];(#F8YBKpGHZMp%pJaHIdTQtbpn4GQ%TTr!+-`"LP7 at nDiPUN'KR0nFk<k-(a,g31]N5=g~>endstream
 endobj
 % 'R12': class PDFOutlines 
 12 0 obj
@@ -135,15 +135,15 @@
 0000001700 00000 n
 0000001814 00000 n
 0000006851 00000 n
-0000009555 00000 n
+0000009558 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)] 
+ [(\236\320\377\015\305A\363\206r\224O*\270 \010V) (\236\320\377\015\305A\363\206r\224O*\270 \010V)] 
 
  /Info 8 0 R
  /Root 7 0 R
  /Size 13 >>
 startxref
-9607
+9610
 %%EOF

Added: z3c.rml/trunk/src/z3c/rml/tests/expected/tag-codesnippet.pdf
===================================================================
--- z3c.rml/trunk/src/z3c/rml/tests/expected/tag-codesnippet.pdf	                        (rev 0)
+++ z3c.rml/trunk/src/z3c/rml/tests/expected/tag-codesnippet.pdf	2012-12-19 17:07:46 UTC (rev 128781)
@@ -0,0 +1,107 @@
+%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 >>
+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 Courier
+<< /BaseFont /Courier
+ /Encoding /WinAnsiEncoding
+ /Name /F2
+ /Subtype /Type1
+ /Type /Font >>
+endobj
+% 'Page1': class PDFPage 
+4 0 obj
+% Page dictionary
+<< /Contents 8 0 R
+ /MediaBox [ 0
+ 0
+ 595.2756
+ 841.8898 ]
+ /Parent 7 0 R
+ /Resources << /Font 1 0 R
+ /ProcSet [ /PDF
+ /Text
+ /ImageB
+ /ImageC
+ /ImageI ] >>
+ /Rotate 0
+ /Trans <<  >>
+ /Type /Page >>
+endobj
+% 'R5': class PDFCatalog 
+5 0 obj
+% Document Root
+<< /Outlines 9 0 R
+ /PageMode /UseNone
+ /Pages 7 0 R
+ /Type /Catalog >>
+endobj
+% 'R6': class PDFInfo 
+6 0 obj
+<< /Author (\(anonymous\))
+ /CreationDate (D:20121219114053+05'00')
+ /Creator (\(unspecified\))
+ /Keywords ()
+ /Producer (ReportLab PDF Library - www.reportlab.com)
+ /Subject (\(unspecified\))
+ /Title (\(anonymous\)) >>
+endobj
+% 'R7': class PDFPages 
+7 0 obj
+% page tree
+<< /Count 1
+ /Kids [ 4 0 R ]
+ /Type /Pages >>
+endobj
+% 'R8': class PDFStream 
+8 0 obj
+% page stream
+<< /Filter [ /ASCII85Decode
+ /FlateDecode ]
+ /Length 499 >>
+stream
+Gau1)a_l_b&;KXE]YcRm/5dL)N%n>e6_l>i>Z)a<Op`R2e;-BUd.[-JCe+U.RS2<BT'^%Ma5Em0lY!j4R"[5B`.//ICVUW]#j:[gg=E0=iR4'3jAJGbYeW]17pQk/*K]IBJ73,o02G%+:[p]$:HTNqif*Z^"1b\='O1mG)0i0Qa,(=sJeTo.f[`CP<DZ\4=&i6o4&%\9X9<d!C92FX,LFIJ_QDOl#TR]=PA%]a/I-Lu4aIl8P.bH_=WQiUAiXU#Q+_$'S2Yl:2tcMK:@qgYFb6a6\fFG$F=$!Z8:-K#0*++bklgjEmqLX9KR=D/eU3&9CZ.!1kp>P*?C@?mDd+.,NDZY3?&hWn>$cn!C.+V7l5640'\Zhl6981%a%$;Wq7-I"Em"8Y:A=uBn!Mt6BgWqYg.+\d_HR0ul8rb"bji5XCR"#Qma"009S)X\q%Dh4cjFgnL\gl2j"/GD.Df\kF,>#bRJ(3kiUg`]3a$'naU2kM(WW['HN~>endstream
+endobj
+% 'R9': class PDFOutlines 
+9 0 obj
+<< /Count 0
+ /Type /Outlines >>
+endobj
+xref
+0 10
+0000000000 65535 f
+0000000113 00000 n
+0000000221 00000 n
+0000000386 00000 n
+0000000545 00000 n
+0000000822 00000 n
+0000000956 00000 n
+0000001225 00000 n
+0000001330 00000 n
+0000001971 00000 n
+trailer
+<< /ID 
+ % ReportLab generated PDF document -- digest (http://www.reportlab.com) 
+ [(\331J\232\223D\317\240C\021\302\367\361\310\024\3035) (\331J\232\223D\317\240C\021\302\367\361\310\024\3035)] 
+
+ /Info 6 0 R
+ /Root 5 0 R
+ /Size 10 >>
+startxref
+2022
+%%EOF

Added: z3c.rml/trunk/src/z3c/rml/tests/input/rml-examples-044-codesnippets.rml
===================================================================
--- z3c.rml/trunk/src/z3c/rml/tests/input/rml-examples-044-codesnippets.rml	                        (rev 0)
+++ z3c.rml/trunk/src/z3c/rml/tests/input/rml-examples-044-codesnippets.rml	2012-12-19 17:07:46 UTC (rev 128781)
@@ -0,0 +1,108 @@
+<!DOCTYPE document SYSTEM "rml.dtd">
+<document filename="test_044_codesnippets.pdf">
+
+	<template pageSize="(595, 842)" leftMargin="72" showBoundary="0">
+		<pageTemplate id="main">
+		<pageGraphics>
+		    <setFont name="Helvetica-Bold" size="18"/>
+		    <drawString x="35" y="783">RML Example 45: Codesnippets</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" />
+		</pageGraphics>
+			<frame id="second" x1="35" y1="45" width="525" height="590"/>
+		</pageTemplate>
+	</template>
+	<stylesheet>
+		<paraStyle name="my_code"
+				   fontName="Courier"
+				   fontSize="8"
+				   leftIndent="36"
+				   textColor="blue"
+				   backColor="cornsilk"
+				   borderColor="gray"
+				   borderPadding="6"
+				   borderWidth="1"
+				   spaceBefore="12"
+				   spaceAfter="12"
+				   />
+		<paraStyle name="style.Heading1"
+				   parent="style.Heading1"
+				   textColor="red"
+				   />
+				   <paraStyle name="intro"  fontName="Helvetica" fontSize="12" leading="12" spaceAfter="12"/>		
+
+	</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>
+		<title>Code snippets test</title>
+		<para>Python has a code-highlighting package named 'Pygments'.   Pygments is installed, you can generate colorized code snippets.  If the sample below is in colour, you have it installed; otherwise, you can obtain it from pypi.python.org, or from the <font face="Courier">python-pygments</font> package in Ubuntu.  Pygments supports many, many different lexers.</para>
+		
+		<para>Here is the code to insert a Python snippet...</para>
+		<spacer length="6"/>
+		<para><font face="Courier"><![CDATA[<codesnippet language="python">...</codesnippet>]]></font></para>
+		<spacer length="6"/>
+		<para>...and here is some sample outout...</para>
+		<spacer length="6"/>
+		
+		
+        <codesnippet language="python">
+class code(MapNode):
+    def evaluate(self, tagname, sdict, pcontent, extra, context):
+        stylename = "pre.defaultStyle"
+        if sdict.has_key("style"):
+            stylename = sdict["style"]
+        if sdict.has_key("syntax"):
+            lang = sdict["syntax"]
+
+
+        #clean up the block of code prior to display.
+        
+        src = ''.join(map(str, pcontent))   
+        #split line ends, strip trailing space
+        
+        
+        lines = map(lambda x: x.rstrip(), src.split('\n'))
+        #generally we trim off up to one leading and trailing blank lines
+        #that's probably from indenting the XML
+        if lines[0] == '':
+            lines = lines[1:]
+        if lines[-1] == '':
+            lines = lines[:-1]
+        </codesnippet>
+
+<para>Now we'll show colourised XML:</para>        
+<codesnippet language="xml"><![CDATA[
+    <tag attr="value">
+        <content>Foo bar!</content>
+    </tag>
+]]></codesnippet>
+
+
+<para>If you don't specify a language parameter (or if pygments cannot be imported), it won't get colourised.</para>        
+<codesnippet><![CDATA[
+    <tag attr="value">
+        <content>Foo bar!</content>
+    </tag>
+]]></codesnippet>
+
+<para>Because your XML might be indented, by default we remove an initial or final blank line, and we also 'dedent' to remove any whitespace on the left of your code block.  However, the default paragraph style selected adds an indent on the left side.</para>
+
+
+<para>The one below specifies a different paragraph style, defined in our document, to add a coloured backdrop...</para>
+
+<codesnippet language="python" style="my_code">
+def my_function(arg):
+    foo, bar = do_stuff_to(arg)
+    return [bar, foo[0]]
+</codesnippet>
+
+	</story>
+</document>

Added: z3c.rml/trunk/src/z3c/rml/tests/input/tag-codesnippet.rml
===================================================================
--- z3c.rml/trunk/src/z3c/rml/tests/input/tag-codesnippet.rml	                        (rev 0)
+++ z3c.rml/trunk/src/z3c/rml/tests/input/tag-codesnippet.rml	2012-12-19 17:07:46 UTC (rev 128781)
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
+<!DOCTYPE document SYSTEM "rml.dtd">
+
+<document
+    filename="tag-codesnippet.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>
+  <stylesheet>
+    <paraStyle name="boxed-code"
+	       fontName="Courier"
+	       fontSize="8"
+	       leftIndent="36"
+	       textColor="blue"
+	       backColor="cornsilk"
+	       borderColor="gray"
+	       borderPadding="6"
+	       borderWidth="1"
+	       spaceBefore="12"
+	       spaceAfter="12"
+	       />
+  </stylesheet>
+  <story>
+
+    <codesnippet language="python" style="boxed-code" doc:example="">
+      class HelloWorld(object):
+
+          def render(self):
+              print 'Hello World!'
+
+      HelloWorld().render()
+    </codesnippet>
+
+    <para><br/></para>
+
+    <codesnippet language="xml" style="boxed-code" doc:example=""><![CDATA[
+        <tag attr="value">
+            <content>Hello World!</content>
+        </tag>
+    ]]></codesnippet>
+
+  </story>
+</document>



More information about the checkins mailing list