From 8999c7ede899a109a787a39ae43fdfb56e26fd52 Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Wed, 19 Dec 2012 18:46:36 +0000 Subject: [PATCH] Implemented pageNumber for draw*String. --- CHANGES.txt | 6 +- src/z3c/rml/canvas.py | 23 +- src/z3c/rml/interfaces.py | 2 +- src/z3c/rml/stylesheet.py | 58 +++- .../rml-examples-047-condPageBreak.pdf | Bin 0 -> 31789 bytes .../tests/expected/rml-examples-049-pre.pdf | Bin 17771 -> 17779 bytes .../tests/expected/rml-guide-example-09.pdf | Bin 4085 -> 4069 bytes src/z3c/rml/tests/expected/tag-mergePage.pdf | Bin 35769 -> 35769 bytes src/z3c/rml/tests/expected/tag-para.pdf | Bin 3088 -> 3317 bytes src/z3c/rml/tests/expected/tag-pre.pdf | Bin 2739 -> 2965 bytes .../input/rml-examples-047-condPageBreak.rml | 319 ++++++++++++++++++ 11 files changed, 387 insertions(+), 21 deletions(-) create mode 100644 src/z3c/rml/tests/expected/rml-examples-047-condPageBreak.pdf create mode 100644 src/z3c/rml/tests/input/rml-examples-047-condPageBreak.rml diff --git a/CHANGES.txt b/CHANGES.txt index c04fdcd..dfb6828 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -15,12 +15,14 @@ CHANGES - Implemented ``codesnippet`` directive. -- Implemented ``pageBreakBefore`` and ``frameBreakBefore`` attributes for - paragraph styles. +- Implemented ``pageBreakBefore``, ``frameBreakBefore``, ``textTransform``, + and ``endDots`` attributes for paragraph styles. - Added ``maxLineLength`` and ``newLineChars`` attributes to the ``pre`` directive. +- Implemented ``pageNumber`` element for all ``draw*String`` elements. + - Don't show "doc" namespace in reference snippets. - Create a list of RML2PDF and z3c.rml differences. diff --git a/src/z3c/rml/canvas.py b/src/z3c/rml/canvas.py index 94145b8..1db1dfe 100644 --- a/src/z3c/rml/canvas.py +++ b/src/z3c/rml/canvas.py @@ -91,7 +91,7 @@ class IDrawString(interfaces.IRMLDirectiveSignature): u'string.'), required=True) - text = attr.TextNode( + text = attr.RawXMLContent( title=u'Text', description=(u'The string/text that is put onto the canvas.'), required=True) @@ -100,6 +100,27 @@ class DrawString(CanvasRMLDirective): signature = IDrawString callable = 'drawString' + def getPageNumber(self, elem, canvas): + return str(canvas.getPageNumber() + int(elem.get('countingFrom', 1)) - 1) + + handleElements = {'pageNumber': getPageNumber} + + def _getText(self, node, canvas): + text = node.text or u'' + for sub in node.iterdescendants(): + if sub.tag in self.handleElements: + text += self.handleElements[sub.tag](self, sub, canvas) + else: + self._getText(sub, canvas) + text += node.tail or u'' + return text + + def process(self): + canvas = attr.getManager(self, interfaces.ICanvasManager).canvas + kwargs = dict(self.getAttributeValues(attrMapping=self.attrMapping)) + kwargs['text'] = self._getText(self.element, canvas).strip() + getattr(canvas, self.callable)(**kwargs) + class IDrawRightString(IDrawString): """Draws a simple string (right aligned) onto the canvas at the specified location.""" diff --git a/src/z3c/rml/interfaces.py b/src/z3c/rml/interfaces.py index 918290a..ab53f1a 100644 --- a/src/z3c/rml/interfaces.py +++ b/src/z3c/rml/interfaces.py @@ -34,7 +34,7 @@ VALIGN_TEXT_CHOICES = { 'top': 'TOP', 'middle': 'MIDDLE', 'bottom': 'BOTTOM'} SPLIT_CHOICES = ('splitfirst', 'splitlast') - +TEXT_TRANSFORM_CHOICES = ('uppercase', 'lowercase') class IRML2PDF(zope.interface.Interface): """This is the main public API of z3c.rml""" diff --git a/src/z3c/rml/stylesheet.py b/src/z3c/rml/stylesheet.py index 67f4e91..077f5ef 100644 --- a/src/z3c/rml/stylesheet.py +++ b/src/z3c/rml/stylesheet.py @@ -71,6 +71,12 @@ class IBaseParagraphStyle(interfaces.IRMLDirectiveSignature): description=u'The indentation of the first line in the paragraph.', required=False) + alignment = attr.Choice( + title=u'Alignment', + description=u'The text alignment.', + choices=interfaces.ALIGN_CHOICES, + required=False) + spaceBefore = attr.Measurement( title=u'Space Before', description=u'The vertical space before the paragraph.', @@ -81,12 +87,6 @@ class IBaseParagraphStyle(interfaces.IRMLDirectiveSignature): description=u'The vertical space after the paragraph.', required=False) - alignment = attr.Choice( - title=u'Alignment', - description=u'The text alignment.', - choices=interfaces.ALIGN_CHOICES, - required=False) - bulletFontName = attr.String( title=u'Bullet Font Name', description=u'The font in which the bullet character will be rendered.', @@ -112,22 +112,11 @@ class IBaseParagraphStyle(interfaces.IRMLDirectiveSignature): description=u'The background color of the paragraph.', required=False) - keepWithNext = attr.Boolean( - title=u'Keep with Next', - description=(u'When set, this paragraph will always be in the same ' - u'frame as the following flowable.'), - required=False) - wordWrap = attr.String( title=u'Word Wrap Method', description=(u'When set to "CJK", invoke CJK word wrapping'), required=False) - borderColor = attr.Color( - title=u'Border Color', - description=u'The color in which the paragraph border will appear.', - required=False) - borderWidth = attr.Measurement( title=u'Paragraph Border Width', description=u'The width of the paragraph border.', @@ -138,11 +127,46 @@ class IBaseParagraphStyle(interfaces.IRMLDirectiveSignature): description=u'Padding of the paragraph.', required=False) + borderColor = attr.Color( + title=u'Border Color', + description=u'The color in which the paragraph border will appear.', + required=False) + borderRadius = attr.Measurement( title=u'Paragraph Border Radius', description=u'The radius of the paragraph border.', required=False) + allowWidows = attr.Boolean( + title=u'Allow Widows', + description=(u'Allow widows.'), + required=False) + + allowOrphans = attr.Boolean( + title=u'Allow Orphans', + description=(u'Allow orphans.'), + required=False) + + textTransforms = attr.Choice( + title=u'Text Transforms', + description=u'Text transformations.', + choices=interfaces.TEXT_TRANSFORM_CHOICES, + required=False) + + endDots = attr.String( + title=u'End Dots', + description=u'Characters/Dots at the end of a paragraph.', + required=False) + + # Attributes not part of the official style attributes, but are accessed + # by the paragraph renderer. + + keepWithNext = attr.Boolean( + title=u'Keep with Next', + description=(u'When set, this paragraph will always be in the same ' + u'frame as the following flowable.'), + required=False) + pageBreakBefore = attr.Boolean( title=u'Page Break Before', description=(u'Specifies whether a page break should be inserted ' diff --git a/src/z3c/rml/tests/expected/rml-examples-047-condPageBreak.pdf b/src/z3c/rml/tests/expected/rml-examples-047-condPageBreak.pdf new file mode 100644 index 0000000000000000000000000000000000000000..386f5eea0a12e3b39b7ce80d5fc290a9d3a51d53 GIT binary patch literal 31789 zcmeFZ+19FBmM(gqt>rsRQL#WlDg^-*tgseAML`s#R761Cxic>I3!HOz?$5Ix{(r5x zVy(!C%*Ynm&Q;9WW}7%DMjxY(s(-zIy|^BX>L^V7>%SELpa1*+`hS0HocNi(=ce^z z>_kp#z8(8V_Q((WdHp<`=>5ZgzvDK7{M*0%8=QVW8=4k;eLk`e{3r?LE4YrH(fd_u z|G0+c>-F{WAh^DRXJn@T{^MW&1^v!*MDKz zAIJ#(fn_gj{`Ft7YwQR9+co~9`P((|qxIW0`2%fy{rJ)8{Oi9sk^O5`r4jmjiIjhj z9rR1iOrWpt|N7K-iRgs?%XtS^^A`!SCOO~b$nS3aK!(xvX$O(_1K9@=AH9N~1z(ab z&4=?P``5MnvEEs2KalS_ze>I?vb$fk|D}-F-xBhx;eS=gy6_C`zbWajcmF8mC-UC@k0y%!QAOXveLe7tihdRIt6(44*$a4s z{#M!RojPVV;>Q+%gof16HSlD{R9z3S&-KQU%lZfuuqv3!H6!$?{Ax>_;uU?Xf)x99 z>Y!Vm={uu<_lRA=n9i38f9rtt$m&3^$tN0&xF^zis0x>+T0t0Wiu-ACM|@%s^}wYM zRzu>nEqaawOe1M|!Efut2I3PNlJHm@09}+v)T7a zw`IZ&jsP&cOv&n|j1$*!_o&H1x^$OMD%Pcia<3XG>T|QD!x7{${yQ9hxPZij^LsJVI!g;99QPsc)>3bE>xmaE zx-=AOH+nRJYcAaIYaMe+C^;wR*5Wtl1|^CqS0CtY+#d}g%WTKUe!xCIAGLWUC-qnR zI8P2dw$5#}^?SoIjAf5v4%DvFqPQ%u!LBgr-urlcTX{2S1QzGHDgEYa9}pVt=W0_)-0 z`AxZNjpBndyD{_4q}o;i{ew${H%4~Y?KRjgL2{sZ`V&~>8@GjdygluxF&+i^U~tlS zzNduk%BUi5(P4d3MJ@BP7sA66Br9=G2_Ai0g?o$+L`H|>r&wIQ(7Mmp$ zng`>Dzbb*-GM}`AggeQn&ID9cf(8 z`*d=gVf0{DMx<9h9ffolzu*qwId8mOZSp8MscXG<#mC;e$9CkVHr4&C<&+CMjP0hV+= zeeY`5npV7AM(e^b9b2CRd=}D=ISY#wB@Whf5ioh95-;md@pyUO)&bzwr~0)(^l_%! zXhrokaIGjnkzbb|wQx?1VlZqy8rGLA=vjE>h-7hN8X8cCR@4mSZ&)t3?12&*_OE>T zo-{hl1-|Uasheyrd~v*PGho=fd@4M9-h`9VeidTm948{EyB_r5?$eu_YFm)sCcBq) zYHAnG#e2a71A4L#ii5nx%hx06-w2o*`x7GGFAJSsDo4oq9c=jA{!=Wt zJLP(fz|^U~>m3&RS$Af~m!;g?nNE}PI+ei-;Zh3F*BH=4lL7HjuyRFM!98SmwFGpv z7vqLl-E*_fh3{3a{6cO8Q}o$6S1rrvUN}_7whOf|g7Z5wpVd|pjHH9mgPXK8dY8>u zi65!XUjbg~BO`LgZhB&IwKonb-itRcH>e2EbMM_&`=Gz>5cN3`atBe6U#k_=%$Y7$ z^iJWxwTY$-Ux0+5TaJ5xY*W>GRIT8h8jUNMspi~!0<&w4XeP;P1Hk9pwjrd4M>Fgy zxFYQeIS@`$ut$~Q#emG;*hjW+)tV>HnXe%;9UU*H(G{tajoM*SC~$ywZ#2v7rr!0U z4m7cYe$$`IUcPgYNX%!nAcyr%>-yS5y5aihzH&|9<4HhGptvbaZlc8%YSMx44EY|J zjqG$GHeQL6rfBt~aHF`c44^<-eA>9>2ZbWQu4kW3p5C^L61Z3>d!al@3KKmwz58^h z_oRkGo%W}~XEoec*7jn!PYw^0a3|9Ha=#F#PJ4Krjfh`2eyx$cegNR>&}|3=W|Y+pB3rTIqgz6l5f|X+=nnvbBA== z(RfGPx8751jj0#2F!se%eox`?h>*1Viz-ue#hGxVGv`JS5x-K3rj| z0%{IxZMG#YQ)7zNz_KMj>4i-WX?yS5;bpQ*6(nyIc)qXi(dl>xHkcltKh?3#{Rs`( zmb!&)1g*ZGhjRIDy9<7F#2RXX_oa48><@<8<)FYQ_3-uhH92TX%|`(dtvi(aiPzna_vgv*RPFh2gK^x2(8*wwlT1UWy+ zbe+xH%e-py?sjyxa$Kxu1J+8O=diJ(9A`%<7El~d&5$`Y+|!7Mn@$^Ti%xZUutiJm z5sQ;KT=tXA%!UFH?gY(c*SaYzozepds2zu#g*bgW|AG5(ZV4HmPWiTDQwIx3H$Al< zgRWeCbxLd1UvGK*&{ft^$QYx~^Y+pP!eCd3(Mh|y+=ThY`_OzU5YV1H2Mxc@ma*jS zYCdhU^64~47}JI8;9FRhXJQIP5OtQCUe`6&iC&fuht%x9A=v5P-T4@DcAEo#e!Pl0 z^hsFdGY48GRX>jE@7`MCBtvtQ`RrWl2@mig1X8%2(#j>N6y{NcmFHA{NOjkSI=`O6 zBA=~b1jB8zuD=bMt%A2=2Q5EssT$(rT3NSAymL4ywN`fvKE?X3vz+C&SlljLQ^woH zv-iFln5*deTBAFh=(mpyvK6I53s~cC`0RYbmT??6T>>XJ1qJIZO3MByuyM-g-aEQp zUUcVC3Bw=;h$s zwh|a179D5ZUg1GQdsqV!CtbC{AyKEs+M(Q2OPi>OnE^8y))TGRidq$XglLK9xAKFJ zX0e|>XZVtCC$@RNoX&g8Jxcbg4ddXg80HbokjA6y_}$3c$63sKMobg@NT|#89xywy zd7AdS)IA2c&0R?k#Hv+u9m|-V$MSgjUdR)u70&J9H5#>2^y))>LFn+;{YftI)nj2f zxH8 zRk{ttX_%YTrW1QCcVNI@mM>Rte|b^~5^r%<<)6Iq=;g}(dQ@9NeHN^4-hd&ay#XiD z{n)*Vn?mGHT6MqiT*ifLYh`nmb%83@sH>s)NgBX;noTO(kr3aJPJ!^#Nh4{>Vwg)o zZ*KAT?#np@yZmuiGEa?ddeqCNc4{3dJ<>xju8>$gpUFJzkfqAY(HlK@)FKM6cRz3B z>Iv3Sk!p3@@B;4W7WAAt+9T-TJ-!Lk{Tx)9i>dhRp zE$h;wczKhzD`0q+f>9N`^Q$4q0{ff)G3SkOzAn3OVBK8v)Ar`Qk*fK3{$5Fo_oNQ* zslC%FPob*n31|P>+OHy$$}y__@e@qBmM-C*FAk|`!1PMxkdN=urCk^wH;-nNEy2r& z!7_Hfz8Gd3c-gM5eT5x7(dnQd9p&~;^W;hlp`{uMH~8@u`Y30uk&m`-V3v9_@0!n} zh9T9P(%_23i)XKWj(Dm)8usQ5t2?p4L&wsNNAO;2Rj`w}r}%>qwD}JMG*>HTb{Anj zw{6NvL`~7dR&PcOQ zcSRrA*SWgSdo!tE-LeJtF*<{nGC#qFKI zK9AK|O-Fsm~^Hlv*{BfMiQytdxQ3e7HMsno*qd?N4Hb1F{f>r@OK zEBxUey5g1pyh8U0^GD?1nX}8oJ?xl+jBn@t3(tXm2kvaM6>~bBl&pBJtK6}UIvcGj zE*lgaYQfJqdV4sxpq&)Dr4R^{RwmIjR$pUm5W!x z{&*DRaJ7D~-s5R{S*bf8ZZIm}IS(_L?;!np9!`38V3h*~ClR9w!`HOgJU!i$#gOxX zh(hhHwMqOTK<%If7?$nZ&4U9+y;SmBr}p;AF)r`IrN`qBuI$ZaW!erVAdIxhWUnzp z!tYofqbL35^3b!U=^Gy3JMZc|E_p01zQ8K0P6~kXstIO=;MLcx4NIvsn$uQNn-FkO z+#>bHn~q0@|6n`&mlQ1mhO8*^XTCbEfaR)KYO$6l6WLdaWTCsZvi;sBM*Wg}?4{Jy zt<)OlG>TQnk9gS(T+;`^2yPT7l}6cF;1+vPbKUkX$j*F+*?AW^Cj?(mPa8Vgiec1< zeabxF9Q>B^mqhsRf~d?oz1|Y{g=1Hk@SEEH&_2G*s#t<06)S@C*Q%0GjY)vkTjnUm zTKQlJUu*I%b^FSArs;2F`)J`u-@C@%66cXMw`g3}qk4&6t|~LpObU6aK(%-aqB@6R zzxXy^x}*;o+m*b0?4E1n3>ac2_ugD5%dk`H3-_kr6vAUYWRBL&7o+OJy7%i(8AOa{ zf}G_cKjAyfkY8_ZY#ATNuVs?VG`y9cMkd`vnBvr1!pY5?@4zXG)Y!JStTn79Sv}P* zF89nwbN=`#A?0f|u$N5;apz`ByDh4{pq9s$*ZO962P&o4tFLInJ^{&F9x77S7Kf~3 z`4C+%>l;M|25QgGm7S2=tv*C|3ve*mPUJSg9w{<4?v}2k@JH(idp?#_Zoda>)K;g5 z#p#}AjovYz-f~4zw&0pFtUI73x8{U*JJqrp3QEa4RBKFfffpH$v}G5ubwY#PMTyu7 z9>I_>9Qk2PIUD|%MJBsyO z>$2v<>olrY!cUzXJe@dV=#Q+RT7NeRRF(BcBk?n?7AAe==&&b&?$V@MOUA~rSfAd; z@oG}P<`D>^zK^7hJ^;} zx7LZ514^jY!qeyIFN$?u-`)A{F0rD891SNzxnP`$!Gi*7)ibUMkE|Vi{y7efk3-CS zbmkjC+bFfx#CPQZ#p^`iy6r<@5897(VNkdDmB=!-M<)BhTt9e4cRRmXfTa_m?2iFs zi;ofmynM8weA)($apP1|YNe_t=W~ypb_DuCNcN ze04uAqQfbf*#H2PZ%Mq~UL*Ed@XK7QHd%L;ey4kXtKo>MzVdAwDy`J5*12}<1Q*ry z8M41Yot>>7l|70n{4p4mqn)ren8QLFcJkfkE~6FU)bZ*16o?E*?8! z_1N0?Y0t^ zE7li?#eAt^GZ4ek=dm2WHrVz;K63G{R%gxpl+5HS-KNoW*&EcS1vu&!vjg|9pwo)( zvCQL=HL!@$imQ-H{t>5P>$0V`-k~^wZarrqc>S5>5Oc^p!z+z#Z^S^#Uxu9nYIR5= zZyRQTKkFx8r|Pap%Jd7ROTFcCv;Ar+CMjq8xEvz~*U`v2)p$^-kpKVsKM3;o?hpKzpTBvi{wwzf zmN|O$SbgA|s?o0V-14JwpK*)ckD@va7IM#qS(FGI*ir9* zoGCsxzjV%Pnd9UI6ffuXJ*rkZneFp{0?tX%ZLaurKVl{wg?ISO+GH`Ia0uqRuezf zMDI4$d&#}H+;!AcZcPdTd3KL16?l*>P9ge!!w`JwXoDQv1o4OgF9FE*w*h+&ff_bO5+ySjl>HJ!xAxdAdWkJQAqINrEA?i?165^XHkaaXuY zVb+N3fLDWY;+1gky_~itht;{*pXaT>5bxl1bx}!(VjAl?d{)p(@wQxGgZ#y>QmuP1 zF?UT$>4u#cDs`gp0KLY7*BvtlPIr^+(-{n;C0Dtfxyyh-2#h{uQ2uamNj-aFlG}1m zG9Me3Q`$@J+?&wx?P!4TMy?KhFZbe_8ZxczRUPdeG`(D+JIy!U$i52rU>_zKhV%AU zJlZo{(9vsf%{-Os!7MvZ%EU+&d!gh!(teMtNtmqyOrsth)+7V&i|kZE9G0WoOF)sA z;GY_r^c4F1i@Vu}L+JBGI)kic*nW90+Ltx8d%(FEQPBi*vraFrnFx^|W%!~@2V_y~H3!qg z;`pfQ@~Kze4p-L|m2`3@KdvTSLOFQbPCpgy^wW`TdfLP4P0<=mOubQo>&vJ-LnVC7 zLdR`v=cd@{n(wl?`24BSFZ|B<_b|B)AGwsRn*Lb1H{aU_`WofR!gZbB>ig|LNY4ee z*MJ$kU7x*9S`Ab__gq7k2hDK~h4giUUmvs6So)y49&YzLf%^`Lp2Dx*8UD{S)Np(< zSBXB4>sVu6Cu(IXsPfPFS;jk*G+*y}+f7eMg@i^swRTw^KKJLo$j|ZRV!vKJ9C7mi zkp!IDF}80bjMT=jJ7)hiZL%yZLN(Oe41a6K^tm1k%dYtk^UXbqzS8r>36Rb~HF zweLIqmNLqk9jfqhiOzFD8>Clx z!{g<7TQM6Q@MRl0yHh(^)ic8;b4fY$3yAm(rP`-swIS?5wOhpqd4pxHGq6q1DP4@p zMU6MQW#5e`e}9!*a`$+d*w^G-wGSz~7L&rRpVIgJcKLjG79kp0$jM?xo`Vnjo}x>` z=Sfl37_DyKXY(zkk_cGnEs}6I^?c z^N*{(KOzV#Id@v0UuKhLrFB-EQ=5nS+`5Efmo+!bR9a5jnOGuOH}7FMZiJ)lGppB( zbMtu4Uiyd8R;k+-P8Q3^l0vaCT+DXW87B1zN1<=;N(ONBGKPp6jRpM$6f(#lKJr+u@kB4~9ZlI59NL zv6+X!m-ed+lwVYVdmDJ>Rgs7mbKn{6OWF36I|!M?{0+w6Z9zL*+(bm%>zg4#!?5^p zXG?+@kLI7-{xfUv9otN^T0k&3@(*g z(#b{T%%zCF;=Po&mU(@Wt2!$KE44D;thNcU@A)adcjwnP-GyHdF*i%LnJ#kqMUj8a*Mb>W z(QL~BbMwb6XSCQeL&>sn9*B)9cqu;QOO-wzMwLMgi~s~;^UHFt&n%=?rw9x(pXI5$ z?mXCYnBGDTn!kM(FQv{Qph;o>bndpb`@k!I`#7d50T}*e>lBYMkuv}M-^Sy zLFxt;)ujQgZkZqK^TIPpcKZW)nYdVq8bff(9sT;^Rw(UOsp^eU_{>hs+z#HYIx01U zrmZ#X7d=#Ht~c7uwxCKecRB6-1)DXq;9PCj(xz^4hEE7=)~~X26j zshrJ`J;du)$Xu}5p<3RRjpA%>sF2lMltjbVO(Wsb*~k;OkhSecg4ot7bFeM+qA3Rg|vH@ljdk#9AVT_+-^#h#03`@rA=-|_~0TiAQnX|N@9jc4dpj~Y*xrKs($Pj#0+ z@C2v9mB+)Hz{I=0Jq=fLx<|f*5po@$hV(w{?kF|x9P(S}Ml|skeX`cn=>oH_#Za^W zk~~KF!$IwzXXI68lW5t~-=9Uh?0q0TbmbEYDd=XNLDbz9z*)d~KCxQH^mb-0z~eyq z{iwxP1`=CoUUAT}Nl%=V3a1KnY@>^cw8Z?`j6z2cU0LUCVM7m6%<_Q+SgTr7sQoTE z$H6Lh=|#G5{#*)Us3U-rLP`u4%gU=-I$%wYGpp_8Il`D1Mn{YwEVWuPqm$p4-pDO$~1(;;An{1dE&HOmPh%a4P{=> zFh9+#8>_-W56IHXxZQ3e)0LcKZSHcO#>0Im*`0BjFD9sd$KB%ix=@}}r)T?oZ+3ya z9DM~gaFkb;VLVi?wDz9y$cORO?I`SD)E%C(t>D_kql*g?u-WfGjbmWqMszR+d0z^O z#_r}OTT|l(OT<4>`x8DstTk@Gn@{Qou@TfAPDKai2`8m}Z{1t^+b2%=CFGsb`Dv9% z>Uniqa0tD+e`eSvB;Bu*X@hWD>U{>@cBHM(Lm;%?9eOW=VRbsw##>;4Kiyr;2&QmC zPT8v8^V(OuJx0(JleG!UEpEeS+XI~Y9If_gU8zkC%W5(1_#VZ~lq0<796kbG_1A$J znSAFsYh9_@wlXmSs0Ft+yBtH0;RQc9f9kz)zIo>3Lg!o{-~d`Sp#IHY7K7l1aQkIZ z2;vfoK5vsc3gmLz@lDS{wjBGGo?e=Entup#NjRBdR&B2>a>n47=Z0nH@z|+eb%|PbNDpdmq+XQWhJ6fwKYBjQSFr*RE>P1 z#XT6Ws)q$fDg_iJiA`$(H|sY0R7QjQboKHIKo#`Z-Sm(a-)nit3#VD-c~jX&om z@4|WMH;?U>$M;K9d(D%>Bi?v4_zx94%o1n?Ac^c-qr$d&HSmJi`%9S12WuehkZ+ICqu6}Jrb!)br;D)uHwJ>cWN6^0w3K)m{uFOg!)7?Nh06vr@Sr z^UVJJ*xp2~R|)*ZRRx}t+KL~l)0N%urO}}B>e5_6ACC{}u=eM+fz9h73l?a}fKlnG z%l4?VTIX(W3VvW@@F?FX6DemyeA#zam8Rz7R3}+DM9wRz?~RH-FYoe)m-O7n?^cXv zts1YVk45jv(Qf7_F^RFVroEk3`6P24+$?glODjVWAyJ#H32epoRg(=T4}>e=o6V3C z>Y^Sl>yo!<^=3o-j^IJ9g50|!HLmb#cKCYs21gtM?RHDhZ36Cz+sDC9_|X^-U}n+0 zOd}9x65}IynyB06)(WOevDjTiKlgys_V_Fk>$5Ef$#U|sD{dp=Gmle2%gfEdVQO0? zd&Dxn(=|(LS86|Aaps(Ug3H0)owcbANS-Ujy>sD)h7L}4mu{uRB`w6+i+l0z55+S| z=}mCI5w|ME#Pr)#ABC1iO0iqmK&uhSEOS}F8D!6e=Hg4?Erh07mb$}Y# z!3)ymexr1lghZ2;?mLWK!Mpa_kACh8gQNwGGQ5}VS%PrJEKH!LTfF>%Zt*m{_&g@9 z#p+;cfSn?D5pM;Hqt=k9So==tsajxX@$j>tJwA*_`S9GP>McnVuq*7}<1Wfg5%khj z3z0@Npcxr+PRktnudA`qlwoRx^AfBLp#Bq=Fox({u9Z!8*lp)uw4*e(KqOA9&Xu#@^8ln2A(5gleLD-bAj<>5~0xT7wgz`Y#h zqm;Ht{v@syI%xsG?KZj?x z*S=hNZcCtPdJ6rN5|}L5TYN6A&6Rezn`ot+Z)@dP#+|Tq_Pw$4ipERt3;ruW2VxWF(K4q<;Cjn4x9Yk!xDdsr z@@aOc>tn_+SaDRUn&!NBDj=7-SiQ4>o>Pv!UI6sr;Si|S_)tVA$a=b*M^jF3-Rig7 zTWT=|H3)T{y0%g^b{BiI7awnwkp&a4t|KXENe6eLCdHtN-V0Ty@fj#-?e+G#Z>Tj2|=s|JYUJ8)1`o)Zzz6-DH1cSY5mym|40=I<36)ex+x8A7s z4x%vL5lwaNi#lF`oSB*VRk7Wm;><_$^}IGO%`?-|?)UdgGp&@RQ7=s2J-tsqcYgkAaJ;{4DzD<;}g4N)~ZXt{AaB zdVRb=ytS@ddY5YZas(F|=0cRJbDlZ9-iO@j^{~h|M}Gp&d`I?Ux_dSDsyW~{Z)vzM zMn)Ixq={|i5AWG{`kDnWzUW|kd83Pxc&pc}UN>JdDJ-`df{+ZL&uC@>C2F zIb((=5omj$PIg`_7{)g5!CNiR!~F=Ey#VJhuL+D zdNgm%T6m0zYYeGri|+p7Gf-);Q|SqVc=I>?JNWNCH{bl7Z`RJg{>vBl==XG-{_~Rt zPWo5LIDfqN_fc{1FE`C^ewn|AIYj&|QNO5Be?`>4qzwHkz{xmW%zW$Lk31cm? znO#x@3R4tK{lfcMo9P#k2>XphwsBsWuCC7O$2Yy~i-h&XNc$$3t<&dKcHUo%qKvin z)k4Mj-|w&gzdd8$q@(Yv{%>WIU#j^@X!_-we;+IA#~1hM7h>Dr=|}wW4ZrlGOr*8VMsp5C`*?*ym-|UosE>QpQ0);mInlAosV-)|*p8TgS z{&8LWHCzDwyUkJjpTNNX3^1_4{xB)}=GzRP-dBd4uT9`rYjp54576fM%%G7kz+?4! zhe4DfD)?`}z}HH)$a1m#K(;SunI&`i+CjbwGaTo)sq+g&@w1x0Kq)rZA4bI_a-Uz4 z{AO={Rm^|h{xkhi&KP*nGy3<(^YhXxm9MJ$S$>wUltY6re55>RV_7Pi>@SVtI7&95 z23cw}N`HRxmydj+SL|E^H*oAerNN=S?~VH z^3r5o{na-ap7#Z9edo8C1z8icA3qPcKTlWR#{1VX3;n4Q^ygGUe`*r_X||(3jYjmR z$%6j;-uG19`~rmi8FqU8$2R-{L6E<5=zKNech=H(BYsBOe}ifNjT}F}X7xb{vhiK_ z&+m+_T>j|0#a10`ui@2;6iSeODl-)fu%lI8P%lh3ISw-F(Cik?;!#aIZi0*#CXHeC zv1(%1QeH)xjVVadi^ibBO{N)@3J1&7JR>j|oyp+=j3gY6TRRGQt|5QOENl_!Hmzn_ z$r-2ZefHQ}GrGtPU+#Fi^44Hi>9-=pIX(J~^X}P^z4Q6dNq}yj3i1dWX!&W%!N|Mu z1~01|9WLEceItJWsU@~XsFHu`#|0O4ooc>_j1KQCV@ni9f}}Cg9Nr#m)=1+5dF zy3mTUVFtmdx_{4ENeWYb8>( zN@EW4u>PFP3-%_bwA5&6%GXNo!Ya50A}>)lX=*535q}_!XLTy~7Fv>^w6{J!Ifm&z z!4Cz0zo%yGfQpUVXh-TUnxl2I@rbT+A#;?x(p%=u8Lfeh-`{3|A=ARPvw~Vf?bVq( zYrcA;)e{4AT#xEiD_LOjlD^3%l56uu_23?}2vwEH=@T;wN7olItm}nTd3yB$v0NlU zUEp>Px6bUHu18f*)Fh*@U$)N~p8wnzdbc1c`?~-biy0FmK|vYe-n@Rx2u(JvTF`jIklFTy*w{uG3%>bv5?zxIE6aEY(!AZf-IxMY^0ZQEJX!AC-tAg^Uo}B@ zn9Kvb9paS1`*QjARB|*)?BWM%ZYzK%1+~3x&{Y}P z&S}>mkNK=4+7%F3L50QQ^NB@RcejyUIwZwH-z?k~(0ekI-sfO2s`}&EG2=2#n^NY+ zG`hz!*(=7%qGWb<&V47>S_IJrO0pZ(bxOEJ19uT_e6N4cTkKL1gDAMYEoX7tNfqLm zd+FOq4DWs^tqx)J*aVZE)DEaYV$Q+&Fs|BrT#8d!GV>|WgYKxg*qO&D6mNw`3^Qv@vS&q3`INP>Ae2(;zjd1;(op``> zPfy>xwJsKvEkSA0%hDnY9-GtIGO~E;KJv*{2I;zmW88_n~feKFC zQk6u(aWLrz!LrS$6ojzA(@v)S-B6yZZLNP9Foze|Co)HP*E@#2?WEIyXO?TX^XLjV z`PH<#?+N(0UNY?m+PLH&GqNFdl<{C(nG{<|BOGoJ^>k-r>wd>in{}2Qz&VMH_T-3A z_%S0sw-l+Id&@;`E+DkfoNyEs1LIq@(OGcrPOx#OQ@gJ&78A2sU|DQbk4XL?E^o3` zLW*+;A8-1nQ5F+r=z_No1FQBDPyy@}{CQLyfmE}>8F4>okUgeVI2;UmW^X2$j@oW+wE<1i@ zH$OtPbv^-pM!VA*!i4ga7^1*J(_H8xy@=Y;b6H;(T{flCLr*elrDna+Iy&+#mmZ&4 z@FAn!TY7gXiq(uxbW)F?4C=M^TpNr_Zn3kx^{OB@W!iTf1?~+P))rpH+^rV+wg+jH zI*rmK3_Mx(te*Piw6Iok-+biv{W@OG5E+4R&(iv8U5VGDUN%P*9r zTPcnB_VRoMx{KYuO?PU?j;p8j-5ge%$*x1ak82hK$gQ@Lu$B%#ujolTpTkOLh30JP zqQ~dPJ-OE09hm>y3(p_W{XZ`}ze6(rM;4wI`IigNN1S)Mf;0o$*^ZXp!{yKppJ*Ss z=DbZ21YQq#a9kY1{hBycEVVb$8o*}zc)T7xb?!YBppujGD$F4#BHv2S_j{Iu(01^H zi>{!)J?%I0U`|c5sO>45yIY5TdY0d8ND~L8Cv_V4H83Avntt5HNp#TiQu0s=>g-w7{=D!yqB&3m0$sO7DTRT#R+Y}&_7LS}*3 z}%CIo>H?jxom#LCuN*Ju7_dMieh zvYf5Ee0bX-X1#UVlQ>3$3mV1s>L9u%o%r+ zC#`MnUT>FkIZCw#2F!23PE+kDZC4eift!+DF(>n9j72=h_OlIO?TPCMGQBNJOSRFt z(JFE!hjzXGSVq(F?SilTvNF4PmKc|O^xof$jx&5r!b#a>z_m(7OBfYG*PuLP2NG#YZ7WOkKLD>3a2TK2kD92@w0FMRGZR@ zEA3>~HO`aibA9ek5H~Nr8Yu$|PvX0LFZ7eg5>d_>e{?&|jYd1GJaJ%YT~%E?y~KF^ z$=0_oY_7qJJp3p&`^}PmoLqPMc!Kp>KzrMyD(t;^2akl^v93uArUpzSmlS7I+bA2? zu5@E!{b5$x1|~7=!BqEB%J5cxb=7(zzdm({C!=X2sne0Wd2xPRl$S-SQ6Lemo24NW zjx%oCd7j9n%<FfV%?aY=G)wVT!za#cLluDzBN+${^DuU7}qJX_9Hh_xQMw~cLe`eL% zvDT`rT{kC|SD7=XX_7J9G5-G>>?v8#QJ2fO9J~DZq;oLCw||<`MZtKX?U!TC?i!3k z+r=E%m0z`o7A%nJb{DVIem=4qJt-Io7_M0W5a}IDWxvb3=Vb&#w9CFV(dtWt$nMV! zjUG`W2XjE-Z4MR8zr=d&L>4iHqHd#GycB?lTH_ZdqujWHQH_xx*<7a3$QPKb?=nYJ((KZ|@ zz@CH6q<&TkrERcLt@9XPi_HvaHV*^CL|21r({anx>EP@?D_b`n32`Y5*VammdOh=+ zS0vG!+vR&SSoWK$1`(@T1v^fq*QGu16fCL*(_qy;p^dwJL+(+dN%s4Gtc;~4moL8X z`k-W+MG248bEZS0x>&JN#iuUt!R5=C&4EZkln`HmzL8Hw}ZO*uTU z>#_Ol)ouasmH?q%O}VzD&hhbnbIa>s)l0jM3p9O=L~66vCAxYfKvR@0jy_d4;XBp` z2TG_n0{^gGuqDLzIk`^}i&Ht-8PLh?w#N%#J`yI#K%=x*9e&>-pYCT$1i}hpf)}^4 zk=>-pI$bbx89IC5hOG=*GKKwqoBb(s``0%6w=C5^vCT3B`Q>>36s0w#S~;XAj9Yr% z9@sQtw$3HAkb|>QV|QLIS5y;RQX!#=byy{Ha+2-}7=h}^;G>;PK&(3G_6@~M#-pkj z;A-{n`C24bXrG1J;kB_FvhP|nPdcm5B+1Hh0Zg*p1C8OHtPF)q&Tl*i##5`vlgYDG ziEL9;+Gsna2iiXFl*i8G6=R5TLMwZKz*YXliRT{2LT{X1dH&yLHV{kkXur#J}CT21GP4u4vUNh=I95tq``T$5u?dI( zIj6?<4iH5f#W~cxckX^S098gt3fVF{8SUQ1Ji#GF;>L{n3c0BC87b$X=wn=7mnEKM z*}07&hdi{%Zk)==E1A=oR>tP9x=)`_cq=$vZDu-^0>EsUm{32yPs|twk(HNIaJr52 zC%O$*$5Lsub^)Gy4F#5QzFRGqcTGpw(6iSgY5Rcx^{Q`M%ff4baBqAot}~~-Gx0+> zI!H96o($HW5Eim>pGxPUEUZ<}o7ju${9)$V1N@o3JcyuBW%$9|Y0?njjlSmNyL>p% z6;W#kWY>9k)^R)1DsGlh%2)$_pNB)cB;T#qlfKudLfE_HkM9WI0%&EUwGKB_J>!n- z^E|p2^X%^48d6$U$j0`$T|9N^{+q_NXCq~&Q*x4N-qL`(j-J!L2%n?Q0xrze$&h^2 z8siJ**NW^B&<&f8u>$^QcU?c^iFx%{Cu+6#d=i<%XttB zPs3}c;6v2&Ihv2JBkb9|(@PDjSppZ&Nf<)4;e6PI!WAFAm^Ay4FlIp70GrxQAB<;k zu_d2TKsKAHYkF^bg|Nnx-3+r15w75ERU3U~Ak2TJv)@ncpVSF|P3^xWV*iP$%}`&b z_7jDf)$?WMFVS@JfOFk2N8aEk`UxBT9pGlCy=l2ZklUp4PLyq^cby6_Jx=+88HV|Q zY|4ws#;n54o(b}ikn1h+IA7TvmuU^w^O>9imIU|64w?@`w1lAR!@i-lcCB_|s1ecW z4Uwb7;16vUja%Ny!lQc8o<`kVkdj)_s0gLY%kN|tHH@+6HH^XwvC8|lx|*JoEO73{ zC$W|3Hc((yELf*TCeyaM@14yLyW8Bh0{5?GGze6$QU~ULzU5P`>bmzrL147&Y7gbp zb@JKz_<7ZK)3)MfgG9ayW-Nij`zbeV1-Wuz*(vs}d_wnLa>q(00oI`K2F@MR#m3`Y zt)TC#o$Squhvx>>RXb+WsN<2rL+ zDATEIG|ll)YAo}nq{h^k`kbvQx4i8)(+#dmV(oJuROsIio1c^ve+`?z<&6K4VZ+wG z>9jnE&6mGhBADiu3fvkI^J?Rs7IP&aQz&8UZ%_PJq@*coNRaN?@mN*7Tdc1vG zP}w_(2(~{5)ih{0hZd)hH5q&wtaBBZpmr)hcyFCe>oCa2a5<(m9fv1B*M_e3!+dbF zbQ!zchZAzJz;675W!@liKM}9qSRw(Mx(d z_hWQ9C9=T(Uk2HYop~0z!m_NF9EIBk04_))_vRcJPsGj@NtQuAMk?IWOB|5VSG1+?!h^^FmsYmhiAyu+vgk(F70%^~qVQ&amQoPXCwz_g7&u*WphPu#3js+5mC~YGR0aqV4oeral z8xLb~y*@7L=KcWdM5g=jwM;M#+2?HV?l*<7-h34wuTu&fhr;8YmdZ7v5<%2DZG*>n zmU!AYK)D97xD}~E^upeI^>a3s#pVr&EEb7WSmjSGQ>YD2l|q{W1#>DFtWZejCmT&) zvgL12*?0FOJC%iM1Aj~rb9X2YADZUn+VfVobEb7@%qP`=aY#gd*Z_H0DhtU1o9iEN zr@8Nw(UfkWQj0l3VT(%>^#-tDNl71saDwY&&bQ8RCBf`N(jn@pySh=6UNat9d%-F7 z)8{a$LENr2;XGbdIE9&VxR)TEr~<-%=4DTsv-1Q$y`b!9crmx703JXmTArSn$*bI# zK!OxnmgN@|ZEZDZBmi*4%t@9uw82`C);;$IKv~^=@ThmV?eEvIpF}i&tz&=6Xy9-E z%sR%gUv|oOvk(sE0fz9Z`Oq^*5V%r|_fve(NOT2R?<<}6G<02q2CzuQnFrYE?5sAk zd_Wsu+;Y^Rt)hKv>+iHu(&$ z?e$YD$Uh?hWZ{NfZSi?TsvXa6k6BxE6n06c=RG+eHu8R_?crdlFKDL)zL~&^HGCqu z66@Pfdg5fJry;qV*>!GwxD15T$%P8SQ{TkG-f2hSK(E&6lwL0u4?%SoZd}%l{zAEZ zLIbf{TSvpU?CPp77W%w33pao@zd*6M%4GtU48eURhz(jN^;_XQht}9J#x9_w(hS+Q zK*^riSI?2_@JVCXlJbW}_in78^^tZQMR7?`CtlE2!+ix_`g7?vP~SvlpleUJOb6m% z;62k=sLg0`R>s!LzIcS8vtbHp+Jd2QCsYreQ_P`qmE z;B=#i(XF_Nrcboj9>lq@b1adN!v)wD6h6Y(^kdy4>To@Gwut&}sB;U?(JNIAl^1Ga zwF6Rs_6rdw^*YW6BYaLM`c4~e>!7;Q6yI`fsZ;c)HX!`J#0&d8iK(*O;q}&WSc|IX z)~m7Wuvmd?q3d{9-(+mhU$AF%Xj0t9TM^LeY&BaMc{8e~3OaO0OHRF7(KwFu6dM5Z z^091O&86fg&^yxy5!zl3yV}q5GFLY9$o}xU%J||?HNfPUry2k$zNh-Sa_eR3dEWr! zwT#yC;z|x_^1$skxHXbsIReFa07F96I#x3|a@;ZWgl?yJ+!pM7AZ!e89EeFKa)k;r?3IzRKZV|EbgV|5TE3?3dFSDED?0J5R<$7i;Wx z-?)#={9SFT@fsZ#nSHn7)vw;PIzEQ`p}qh(Ab5SvBvroVw{^*shWDalG=>Bq>+aR_ z$OBtq$%O0-zssoGV4Uixe|$pwoR9R@4=d&K+hyndnS6BF$RzD~Z7p_I{`nQKYWBXl zj>>#r)m}-3xue5yR5oRP(R_uS`@R&b(F!v7<+TX-4Q|=1uCpTM4Wunoi8lwGTb7W5 z(<(8`0urCEM+)w`R4)|Ta>2`IcjxW2;+`j^jzUnc=Q7#$*u`_b&=qQ7!0`NBe`XHy zWf1V*Cb=?R+3hIE{(BxZZ1MKQltY7uD8WIn?0m)Z4r7XQ3{I!we-#C`1n-p4T+f2l>YzvmQSzN)(*eS+NlR2g^|&hq zf@Ez{qbgxk%zqgXlJC ztu;58VQCpim_5 zDc}pbCESAfvsE*4{8N(*k68r!EZ zC%MaAr~-+HOo8KMjh-!l!(NAU*Jo-_Y zh`pIt*qQdDb;?cOJ@NwhPUi7B*mj>Vx7@AjpHP^PQ%(UD7`OqPy^d$QD1I+gwzr~o zrEUFKIf2;w-dfz56E?@v+p}>#!Q4N5Iqp-Z3kNV@lIG8M?C7a*439QenT%pSr<4CO=BM z2*`ta`tV=IkYifbx}#PZBmWNL`|v>Dd2ad1@t3fg1JH#12~88)#c7M zDzJQAjxHFr-PZuNxSZLmB!EVU%8)yL%V=d@Cb@MZI}ZRWQ)^Spb%p#KSNRUxY9Z@txwbmCZ)jAD$@DNH zs1Nl(YJdo5qXh*f4h_9sJ@dP5dLuzu8P+QV${cCBPTt(`ge~mkJ62mVEb+2?GY@`i zGrkF;t%vo)CU>MT8);c8%;sTbU2b&TdnxSF&}<2`n{?cl9D3XdrEM&-R@TXNdtnch z-%8IoW4l}@J5w~cITuRdemC{p!%mYx=_07mXBH~D)&idCAZ%WLgv?R3-j_9FH!_kJ zPt(N}MJ~-FuX^adYy##G;6+*TugX(MU&yF~t{ zek5JvzWzRv=70j{OFxEYKmzjT_cAr+*M8i0xBk!lsx$#KLSNcy;7Px|)^KbGNs z?N_h=(yvCb)xpm-&|+dum5Kf2-SXlZ@mVxY(GB-2TJ^YX`=`hgi3$z zN09)4`?Za(5x?{U!TGPxK~*XGmwwec@yqA3%r9ez0yyU6M`vx`+vM=4LVXgh{ n-}&~#+4JMuN&LS@Fk%05i{Cxpe@tRP2PeMQ1_#$e07Use0%%IT literal 0 HcmV?d00001 diff --git a/src/z3c/rml/tests/expected/rml-examples-049-pre.pdf b/src/z3c/rml/tests/expected/rml-examples-049-pre.pdf index 79a94ac5f1b6349d231a8ba4dd5f6e00837598a1..8f55bfb0e5864d24a84efc622c22d24c5a9cce2d 100644 GIT binary patch delta 2059 zcmb7>$?mF*0mX9{-Q46Zn|9TFDjFuM=a-z-`SLl|C25Iy9{u;=DD4WLNYz*rkl~uIr+XYOqYD5-z@Kma^}g3ASN0bHt$%* zYpL)MXh`oVr84==PAWUvRv1!%B(2w>ue&GA#fNB{kJ(zVo}sTj7aBKU;w+u)#lfUG z+xBo1;0Nw=wTAiQbr{e=_gdVhD}S_W^{Sm!wdft=biaTVq!7W$lJ89Birveb32T;! zsd;VzuNM%Pns+jp~$h7zR* zwpbzig~XJkB+aO|317d`ej=@r#$p37I&;1@xa+bIMg4^SRjr#F!KsX_|LG<24qHr0?`FJijuEmS0tj8#-0Nr^vkmGpL zi}7nYJfAMPobxNnKX3XtzK$Q>hVfwik>+L-&DDCq-cN*IXkd|^}&Rachy0Nc&6neY@ZgjbLM~Aq= z73Rw5TG>M0JH?)>$-0?$s`}N0#{|O~iG)&Kl(w?G{RXFO_-cEnI>v?t|5T`2i-6s= z^_%n_%&7wnv?*i;b-6P4L8+z?FXX`XW5l7?%>WRVmFLjy`TBb+@(CGAV-^;!9Wx8` zB3_pH?s+Yq)8s%KQ%V$T*?zx-1ix>$h?lz#w3L+=L!`+YxHw<5J-*RZU5f!^FjLBi z>@6;$RB@nA$=cR39sRJb>f2gh+4MHrj*Qkz?ZRFd32(Ba)msD_rToBa?wL$?+N{8i zkKpoxCxTe^%#AqoH}oXH%q9oAgGb$~;S0633NJ&vaG;tqn#~(15b?|7>XN`K%Ip@D zZLv8YHNf;xW%YWUFg{BoP(^&o?zn{N!32JP>92Lct5C_{1h7l)OLcAfq;;oU#eYQi zcH#6g69kYCb$i^lq7I{}eNZTFZh>9_F3bf(RA`zNN+ke&C=142K`R(*mw4*Fz+YV9 z1su7?^XjZw*qZLz@MpGJ^45eevd<!O)Yq}@lp<;3etfX*JyJ3^Q?j)R)KDiFG> zgd5$4CrMpR8!d)uuJ5~p{l>~`M0JkbDAI}BFx0}L!>${_P4-rSA8beGjlQ>dNma;3 z!nc|r_AH{cWe8qB)nT5c_t7iqK%#R)z|^YwDDK9C0kN}+QH@pisaF^yQb07T;HFw} z7;roBIx~jr_McwgtzQn@VZdpJY8$; zgl2Kr&bwjtSu0^j;0Pa2ZOOm-gLd-h@Wbv3Yi_yZ-BN5TOKM0w-}zOtoz(G`?-00Z z9b4eSH^(GeOFx_Gd6Q+<*`Q#z>|>lS&l@(h*|&x(1ib<1jBzwnm^mA48TU*%l}7|2 zqyEIZXJ(1tYRuz$5Bx>gnM_{Ge)y70^j+#%m6yULl`D?*Uf4L3j~;1|%p t3}q2CW#LV%`zu-&-uhKYD*6Q^h5QEpznhX=k{~t;ZTk!w@ delta 2051 zcmb7^yUwZ#0)_Jzr`gG_PBBv+1Vm62L2lka6hu+E38HfIhKhLC?j)9zoOZX<%o|K{ zUSZy5%IPPwUtzkHtbEC8zV)9!zW)8k*FXQx|3X%4B>m?<_`iL9YQMGH-@iRykKOA0 z{ab(aYGH$iQpn}i;(i`BdL>HCs|S#qZS5Ovxy#8y;KGc|?T|>ByR_4*&>U)_m^_-Y zWRA%r+H=^vG#f&-165`=IjW#uFs5E5|#CY;H0fn zQ9EF5*<*n~xr5vWq?`hovT19RbM96myL7wM32VW-w(j$Vf`$TF;bIES{zO}~pVbTd zh7Qear%ZX2`|;n#U%!wae`&%Wl)KjCSHiN<8;W-~kO=V;Y&3iR2?$Tx@U)Z?gE26o zP~7mrU>`ff!|gfPl9y*S9=XG5F=$ItccUUi->O40s5N($0WJ$Q&%8h3t^3|5Gg1WH zQ>9fmc`8m1jLDMQd84dU(bW8$8eMnG@&0jsZMzd?l}vR@ES?bVBw%{!s8M!;Syzkm zhGUc_D-!|)hGzhUIzcFmN@VK!;Y&wlo=*~5PC$CKSOtBrU)fVo*`_mN)0E*9+sev{W@~4Ukw(2sn ztk4ptD*%RddzEQM;N^HAjtr3~=_{}HM)SG;n92*sI=aJFcrJKc7V2uVTrLJwsa3j% z(r&@BVpd6#tt5A&bH15(K6iexn4Wx#@k$pa10OgS^mi&%o3Dn%qVfJYWQxF4v9Gm3 z2w5}h86lPlHhL(n4%N=@h1khhweau;U_{htx;6XD06w$^mi&!0zHWYpkwHJead9vE;(+Y}6?weDgS6;T@?q z$b#wowWWxL3v|6J)PhT&`3N%(oEcV@EZrcBMe+u3Rip1Zj=f!&kvZ>7d-XGM!>*O% zaC@@bS07(X*PJ%buKD%6T@#i?2h2?0RW?3P}DR^k2{L;8{%tXq_rt%Z$O z8_kCGL}LoGMI!Ube(O&*f^Xs6&-0jpuZmT`0k`eo106frihd-~c5ywGjPtv2DX)4v zla^ATCQ9zDADP(EJf4wYBLeg|$aqbzlS_M~ta2l`H-wV*Wg;aBsa)Th<{p?0yUo$8 zHyLiut@jEm>fldngYt*p%)|CnP&#aVoW)Mu?b>TC4`)@59va6B8ro(T3pYqLSW-r_ z6`v8@CNN`WZeb4@ou_5v^(L3cj^XFt_!sYJ0P*0wOSQzA2VY4so>N@%wZn#+vd(vToqW7r2&27Q)6FrR&WvAlt*C2g$ig3JdA8!!;*z)U+TkIA}VYFX7;O54L$7K~jQkfL@4(q&QB+r4| z&bAwozijo_iQ2UrC+g$IvjT0af`WA1kW_dssRoKNAjvD5cMmFgc?s?9lFu)beaS@7 z0e0^nb#kn3-bZCf>Q+YV&;A&zL$E0zi&>Sm+)=I%6q_uOTodsaUD5t@Ku_hgltSq? zQ;eQ*<3W20E`c~c{+d$;Fg8{7v359xK>PCFC{b#ayEr=kch9}||Ly%R?|=O14Ol&1BF~NB$}w$gwu{({fnzWwHJ|Ka<$)6d>14WQpo}qcoSt?FL?kh_!`hk~y`M z!LgdOi>y#D4H_C%j3?^(FfK?@t8yT1t+N4wrRI$Rj^aW)ESaa8e?;QQUJ}u@T*LQ` zg;Gjm2rj3L36w?vHa{t+*gzpn72d7R9GbvRo=ECOx-Nm+vKS!bMt*AS{Ue@%$>|DZ zHWSm5NURHC=P}Z6uXWysjroNbGfS(`UJqp{MI0}q!Dt|s1Xs@i9TdI zaX#c%m{mURdYkdaoI;7Nn%n2HJt>bQ(#E00R)u66V}g8l(M=T%S)@s@Gai-H^yJh* zYfMGLuJesTPUbpXaxpZnGPrwP#UDHnsW8!PNX7d5iYBb5!`Rb$? z$-~RJW-vg@2L@MMOX};CA!vEpz36Z%uH7#MLo*K`of~=+coN+o9}mrFJs3Jo+w}E8 zu{o?L3t3Y(RpoxQg^-dPTm6@-sVkAY}~QA@yDh>~Ex$#ddN5 zA=)@TPvqQ6`kbY=>Mk(QeWU@8p>moT+>@z*Y}(hfHfjfyHW@AJ+UdtAZFs0jkN0;rcYxIHioyG@&L%TAs{Y3!j3aj5mb5TwN2fh3iWFr4*L~r z&##BILEIX4+5+6=%4nnzNwQtPw8%Cc>XhQQ@|7-Ibd!?V98jkA03R6?2?Vb;6luaM&xx71;kW9LJegjNs^3jACBhz!{wQ zGe`e(80T2>zrzIf`ZHvKDm?%C<<21sg914${_c-=KmYpX<#2a@S3m9Dm-lzyeH4{9 z(95@PXP-9T-^D)s_*TFBl0pdtN01MHe(}Sb8$mwu{KNh8CGwVshx^X*QVuHfDRD~G zW=JnE8ndX&ZcsUal?r)D+2*suFyRSp-RchDl)c^<3AZ}iCw+;BtkDi{TSfw1zLM()u3Go^lFk^iBt4y zqbNi?ILxwID`AigcdK4R&P@iQ-#|;?v`gU>Bw!U~FQC-nqU>gl$OJ-bpI+=|wT;;p z95ZLfkFhjyK$q3s%Ez@yNjf72NtDFAfS;J|9=+kU%M+#nvGc@Ar+QKv?Wz87;p@YZ zvqF#RE>0Cy6xL$b<-RtFiX<)%Ax`pRst0$(REoK*%d>LTSh4ao%C~0or_?b;#W>F! zhJb3%VOZBgizSZSHYTh`e$(Q1r7|9K(G6(Ci^p5jbtd{`!B);aznd`&jMSzz*{n;) z{xZ1(B8YNBr>>z_jFZzHwNQidqAYvmRnwOt1!|-mD62i`H8)_wD+rc|RRUs5bYoy= z=SgiOM?9gkJ~2idwl^6l0;A4!a|pMCw!|!<{z3sm{CwrA z=33czwdYM=Ano#aC{3;<8l=*5#SrkGR}hJU%JHdFVz*&72Lp*F=kdvbdTKKpik*TW z1l}_(8YtJ7kGQd#pX|-m9wFOM#IkcUwd*s4MBJhx04HZBL2^?~H*S*(vuGj8fpwZl zJ&T0RzLQZk<61=f10u#lFh529=ad`{2H8=Ike7=T5Q{N)s@p2(!d1Cc7_4!n6i|m{GGhFJ|(0%DPsywp;t2SLNxp?zXv1>gz$BAjD zW`nSEq7C(0kopm~K8JCv&S{BR%n}pZ#K2V=#l6^0Bo1^_EoiG9G+qYm)5WNs9X@5D zp))FXvRFR>J}E~_f32*3vVjg$#?zl`a zxelTC(Iy7X^E|s57O_ zp%mhgtu~suY2<^af#cPcu0|Zqd=AA8V=|6o)xJY6Z<-|=grZW}AXx=#GNyiPB^V#G z<7K=?Oyi=u8(Lx6TCbk5qCzT4;-FQ&Bw9)j&f@!6G$R)^=4TAB2Sk&IVI z-qqoKD4cr@C0hlmXItMHmaV+!y`%fz!+V)N{BmO+k$>v(_;CNPKoE+dUonO(e$G%7 zBVREbAzm?(#$PcCLq4+Nr(l#}(9ew+^7!_lL9njO5%&dD2 VMeK=g0t(+>FAbT$`GDTf7yx7gB#8h3 delta 130 zcmdlvooVNErVUNn+(rr^xm@~gh6;uTlY6yOQ22kelTrBodXAG<>!_lL9njO5%&dD2 VMeK=g0t(+>FAbT$`GDTf7yx9CB#8h3 diff --git a/src/z3c/rml/tests/expected/tag-para.pdf b/src/z3c/rml/tests/expected/tag-para.pdf index f56c70e6420c8f797d1e43d966e226c1bf31cdbb..43032de2289b0874991b6d085b03dc7bd388d74f 100644 GIT binary patch delta 1318 zcmb7E%Wmpc6cu^(hATSGm8!}-ZGr(GKd_ClLvS$9V1h}2*dZ}s-q?UasyZmY5XqBD z_baMO9rOn}Xsh-ks{TQx4(sIJO4Vi5GdNm%?X}N7I*;{y_Sd`TpWpbrP*S3x)OSD0 z2VaWTc0DoHK5r%iC3CuMNS3*Qk{@ZOc-T3RCo5{&vn~|>Q|DeZ}hn}f_z@a`TYp?;LhJi!58Hh#}TJ?;(Jpv zhnAaVoz^k`84C!4!WrlN@%PRTC!c%k`pB@|tg9cK#N1}jC$RI&sqd|_SsVJ|B?Fw_ zPUKw*K!V`&+OM?FThKTBcvMbRMiH*k+D=0qJO9KW@M{*U@l#T{Wa8~Xg(=-Nm})q-Y~^rW7OGds)i^wVBD9+rwoHL71Ly6M zU+LG9W-?{dmjaV)Pc_g{Zm*jIWHTQ`#aRxC=0vrL_!SdH%L}^43c=t-RGTkW*lN<3 z35!JSXt}owq$Lm~Ypw9w%!CTaIS42OONWSz(xusf|Gc}r3t%HVUq}Rz>ql#p?Jf1J z#Wb}5&Wmvg4fP-Deq&ZBqQXdsAefqrJpuf}?{NIQSK5T9zO`cPgf z5gvI=XsW0)7jQ)y?PMvL#d)l$p>bXu7lf5L=nsL?2u@dG+I%zui!^s0#Ei)nt+boB z?Mb17=pT>Y9!KVuX2JCYzU_RC1G)_3)x3e8Vl5>r~fJWfh)CIIgkSUFz zQyLC1-km57r`&){&0RpIq7dRL{%6gDYY8vT_UbAugh7p$s9{-~1mte*L#Rx?HXuNJ ZbPRpH`D$$peO{cVDfc$Qd0Fy#{{bgHUhn__ delta 1206 zcma)+OK;*<7>1Qj5+t`sU398U)rAQdaKPaE1uz&e;BYk%2sQ@Cn2Whz3{ura`3arM zoB0FnzUoita-?p%>Y_iQ+p0`Pm7=og*_`t|dXC=J`~CIi?akZwKmT6(#QF7=>R7KZ zr+RsFK|7O6_yTo)xQt(L&Tp6RZkRv}G#7?#gR+><8hc~0o`7zEalX3>Twu;mSKgEO z{>uNFeJS3r#_N;CI@i~{i@`{gKvAc7{mYl!OG`E;Bm1Or&TCibl$~}3oWHN#*UkNI zWGtP}U0*ogyM!ajfXSpAu%D?LC>VR*N~yRw_NTjOai)r_5LWegYqwLQo_isZ>G*>W zD7<^5tdh^u-txUb=C(bTh6_22_y#1+g+z5}m-u+G7hF=Lnq+9CR?rHbYz9tH{aBf& zqOsBZL3|ooKJ-{%TUaC)F~iN-MnOHe#3_qJ&pRxs-S(r07kxUZc5KZ;cs$F&YwET+ zjcRqMLM%4vq0(qX=p0`Y559$tz*FNkqU#Bosvv4u@mqGGHJWpSIAI14}yR4uY*q|~T<%{^_ zP`W3#I0O&&OQCHII_lvLo?6^Dw%fhJBvRABv?_U&+yKcFjD<(19(|BGj1mFMZ+b@= zQ4Wiew4cYq9x2^qlv=&jP=<9hLvk-bS|Z&#;^hf+XiA&*YLecxJhncmnWa=%FZFvvL+HhjN3-jB);T zmHWG4Iy}j?IfeH3OXYFb=m_i^L{8btJaiB%%g4rcP!jXAQ8yv^Ce9Z4%CTH-=N<6b zsS7^>@eADf6Tpuo1)?7gxN-x}4-_Ra^o&vLxyLZ%na5GYe;I}o*cl^e`k65=f-#yn z3&9xj>@!Xgxbw%S^CM1Sr2ME63^mXQlCEed!5lOKWk8LfNDakEUBf9727{;T|EaxG z$K3!JeclQzh=Pp|Q)9i}gUr8EbNcNF#BlKIk5xBz`)_umu^YfCmUIIUl&j_4z(3F_ BLT>;7 diff --git a/src/z3c/rml/tests/expected/tag-pre.pdf b/src/z3c/rml/tests/expected/tag-pre.pdf index d2cb0df4a4cbe4f897f19b6b68f92ca22ce12b51..03d85791bf4cc1dd8c70575d55ae290cf386268f 100644 GIT binary patch delta 1002 zcmb7DOHUe66b>qsj+yS7y1YJM5Jl$RdGi>N$H)Kz0^0Hr9dQtFU=T2Ax{!3~s%>tX z^e1%FMdP~NHEq&e_uck)bWocZS@kY%zVqF4?sv|;=UhL1|LpBgCrJRm!U6vC_a8Ge z3is~!!Uhj$U>UcbggyL7 zf(*kU5ntJ_7a&aqK*P|6Ly(UvdF@mmT31+M1;?5tb?Kn6=_Kciqk*nTCVqiIw zRV$l^`3jrQi1qSPo{q6WrE%EhIZ)(B29-#^l-T$TB1-^6= z)(>AfgEj_#bD}XP0D7`Ok0fpYO|uA1ah$|VaRM(+aS|&%Zb1rLk>-e zKw(-KN>;iLl17XG@u$aUV}@mo8biYxgXoS0gc`&0HAdiT2-0C|<7$Yr43;-6!1AlW zV|n~%%z@ROi6g%iR(gqiU@hL8|QAW$wLBo4TMAtvE!V-u;WRH42> zrD>(UMwL~iF1zakblDf^vJX&)Y@)E~EN15X=R0$LY0l>tx2qq2e*N|1364A092~AW zLk@uFPRSwS@6Io4d|-#_j#SH{%IU)cb*7H=D~cp|JaPpb5Px!cZSb4RzbZTgbCaHK zQv&|$O1OE*02%-+tlZ+?F49w0uQbcfiukEJVz-RB1NhGh`K&rKHFaz!AixuMX%0DR zcb6org-jAhs;Ntz{fLqGGnM$vLbNX{( z!h}sKUOB7>kMc(TGUubAGx3 zi)pLhZ;snmG?oL`k>i1sJcBLM>NcBg^;q3FkA{uwV!a2qhLt0;&cjroxvs=d(AoWH?MlW05Chz64bDLmknh8a)`O;OBV$i7lhx=f6s z`ShfCese5n`AR#tqg!URyc-XKdcF>?OP&58BYRuvp=@-!P|aNwLLdd2ty*`lT$i$w z!Um927nfZrxqns&P4RQjOZ&IBJZtuz@kkDYKX}lbVJUF8s0m3dE&wnPENQF&mo%Q` zmNb!GdJiHxH^x77wle_3d*JqUN?LMmZ-)R&?)T{f^RL$92 TQ|plgLNrSfK3}GEND}`5MZeq! diff --git a/src/z3c/rml/tests/input/rml-examples-047-condPageBreak.rml b/src/z3c/rml/tests/input/rml-examples-047-condPageBreak.rml new file mode 100644 index 0000000..51fa1c0 --- /dev/null +++ b/src/z3c/rml/tests/input/rml-examples-047-condPageBreak.rml @@ -0,0 +1,319 @@ + + + + + + + + + + + + + + + + + + + + + + + +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. +
+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. + + + + +
+ + + KeepWithNext + + The keepWithNext attribute for the + paraStyle tag tells the paragraph, whether it should + always be kept together with the next paragraph or not. This can be useful for + keeping headings together with the following paragraph. The default value is 0. + The code looks as follows: + + + ]]> + + An example with keepWithNext="0". There is a + spacer underneath. + + This is paragraph 1 with the + keepWithNext="0" attribute. + This is paragraph 2. + + + An example with keepWithNext="1". There is a + spacer underneath + + This is paragraph 1, whose style has the + keepWithNext="1" attribute. + This is paragraph 2. + + + condPageBreak + + The <condPageBreak/> tag will move to + the next page if there is not enough space on the page. The length required to + stay on the same page is give by the attribute height + which takes a length in the allowed measurements. + + Blah blah blah blah blah blah Lieutenant + Commander Data Harry Kim blah + blah blah blah blah blah blah blah blah blah blah blah blah. Blah cloaking device + blah blah Lieutenant Commander Data blah Dr. Pulaski blah blah blah USS Enterprise + blah blah blah emergency transponder. Blah blah Ferrengi blah blah blah blah blah + blah blah blah blah blah blah. Blah blah blah blah blah Tom Paris Archer IV blah blah + Archer IV blah blah Soyuz class science vessel blah Betazoid blah blah blah blah + warship blah blah blah blah blah. Blah blah blah Lieutenant Worf blah blah Lieutenant + Worf Vulcan blah blah blah. Blah blah blah blah blah blah blah Tom Paris blah William + Riker blah blah blah blah blah blah blah Klingon blah Admiral Nakamura blah blah blah + blah blah. Blah blah blah blah blah blah blah Romulan ale blah blah blah asteroid + field blah blah blah blah blah blah blah blah. Blah blah blah blah blah Memory Alpha + blah blah blah blah blah blah blah. Blah blah blah Captain Picard blah blah Romulan + blah blah blah blah blah Admiral Nakamura blah blah. Blah blah blah blah blah blah + blah Starfleet Academy blah blah USS Intrepid blah blah blah blah blah blah blah blah + holodeck blah blah blah blah. Blah blah blah blah blah ...with a phaser! blah blah + blah blah blah Romulan Vulcan blah blah blah. Blah blah quantum flux blah blah blah + blah quantum flux Chief O'Brian blah blah blah blah blah blah blah blah blah. Blah + Counsellor Troi blah blah blah blah blah blah USS Intrepid blah blah blah blah blah + Captain Janeway blah asteroid field blah IKV Pagh blah blah. Blah blah blah blah blah + blah Betazoid blah blah blah blah blah IKV Pagh blah blah Captain Janeway blah blah + IKV Pagh. Blah photon torpedo blah blah blah blah blah blah photon torpedo blah blah + blah blah blah blah blah blah blah Ferrengi blah blah blah blah blah. Blah blah blah + blah United Federation of Planets blah blah blah blah blah blah blah Deep Space Nine + blah blah blah blah blah blah blah blah blah. Blah blah "Intruder alert!" Romulan + blah blah blah blah blah blah blah blah blah. Blah blah blah shuttlecraft Ferrengi + Vulcan blah blah blah blah blah blah Galaxy class vessel blah blah blah blah blah + blah blah. Blah turbolift blah blah scout ship cruiser blah quantum flux blah blah + blah blah blah blah blah blah blah blah blah blah blah William Riker blah blah blah. + Blah blah blah blah blah battlecruiser blah blah blah blah blah blah blah blah Dr. + Pulaski Pacifica blah blah blah blah blah blah turbolift. Blah blah blah Benzite blah + Bajoran blah blah "Borg Invasion imminent!" blah blah blah blah blah blah blah blah + blood wine. Blah emergency transponder blah Starfleet blah blah blah blah blah blah + blah blah blah blah blah blah blah blah blah shuttle bay 2 blah blah blah. Blah blah + blah blah blah blah blah blah distress signal blah spacedock blah Irumodic Syndrome + blah Romulan ale blah blah blah blah blah "All hands abandon ship! This is not a + drill!" blah blah blah blah blah. + The conditional page break comes in here and + is set for 3 inches. + + This is on the next page since there was less than three inches + till the end of the page. + + Blah blah blah blah blah blah Lieutenant + Commander Data Harry Kim blah + blah blah blah blah blah blah blah blah blah blah blah blah. Blah cloaking device + blah blah Lieutenant Commander Data blah Dr. Pulaski blah blah blah USS Enterprise + blah blah blah emergency transponder. Blah blah Ferrengi blah blah blah blah blah + blah blah blah blah blah blah. Blah blah blah blah blah Tom Paris Archer IV blah blah + Archer IV blah blah Soyuz class science vessel blah Betazoid blah blah blah blah + warship blah blah blah blah blah. Blah blah blah Lieutenant Worf blah blah Lieutenant + Worf Vulcan blah blah blah. Blah blah blah blah blah blah blah Tom Paris blah William + Riker blah blah blah blah blah blah blah Klingon blah Admiral Nakamura blah blah blah + blah blah. Blah blah blah blah blah blah blah Romulan ale blah blah blah asteroid + field blah blah blah blah blah blah blah blah. Blah blah blah blah blah Memory Alpha + blah blah blah blah blah blah blah. Blah blah blah Captain Picard blah blah Romulan + blah blah blah blah blah Admiral Nakamura blah blah. Blah blah blah blah blah blah + blah Starfleet Academy blah blah USS Intrepid blah blah blah blah blah blah blah blah + holodeck blah blah blah blah. Blah blah blah blah blah ...with a phaser! blah blah + blah blah blah Romulan Vulcan blah blah blah. Blah blah quantum flux blah blah blah + blah quantum flux Chief O'Brian blah blah blah blah blah blah blah blah blah. Blah + Counsellor Troi blah blah blah blah blah blah USS Intrepid blah blah blah blah blah + Captain Janeway blah asteroid field blah IKV Pagh blah blah. Blah blah blah blah blah + blah Betazoid blah blah blah blah blah IKV Pagh blah blah Captain Janeway blah blah + IKV Pagh. Blah photon torpedo blah blah blah blah blah blah photon torpedo blah blah + blah blah blah blah blah blah blah Ferrengi blah blah blah blah blah. Blah blah blah + blah United Federation of Planets blah blah blah blah blah blah blah Deep Space Nine + blah blah blah blah blah blah blah blah blah. Blah blah "Intruder alert!" Romulan + blah blah blah blah blah blah blah blah blah. Blah blah blah shuttlecraft Ferrengi + Vulcan blah blah blah blah blah blah Galaxy class vessel blah blah blah blah blah + blah blah. Blah turbolift blah blah scout ship cruiser blah quantum flux blah blah + blah blah blah blah blah blah blah blah blah blah blah William Riker blah blah blah. + Blah blah blah blah blah battlecruiser blah blah blah blah blah blah blah blah Dr. + Pulaski Pacifica blah blah blah blah blah blah turbolift. Blah blah blah Benzite blah + Bajoran blah blah "Borg Invasion imminent!" blah blah blah blah blah blah blah blah + blood wine. Blah emergency transponder blah Starfleet blah blah blah blah blah blah + blah blah blah blah blah blah blah blah blah shuttle bay 2 blah blah blah. Blah blah + blah blah blah blah blah blah distress signal blah spacedock blah Irumodic Syndrome + blah Romulan ale blah blah blah blah blah "All hands abandon ship! This is not a + drill!" blah blah blah blah blah. + The conditional page break comes in here + and is set for 3 inches. + + + This is at the bottom of the page since there are more than 3in + remaining. + + + frameBreakBefore and pageBreakBefore + + The frameBreakBefore and pageBeforeBreak are both attributes of the <paraStyle> tag. + The frameBreakBefore attribute causes + the new paragraph to go into the next frame, even if there is still space in the + current frame. The default value is 0. + The pageBreakBefore attribute causes the + new paragraph to go into the next page, even if there is still space in the current + frame, or if there are other frames remaining on the page. The default value is 0. + + + This is an example of frameBreakBefore. + The next paragraph will be in a new frame. + + This paragraph is in a new frame, since its style has the attribute + frameBreakBefore="1" + + This is an example of pageBreakBefore. + The next paragraph will be on a new page. + + + This paragraph is on a new page. It missed out the frame in + the lower right corner of the last page, since its style has pageBreakBefore="1" + + + allowWidows + + The allowWidows attribute, for the <paraStyle> tag, allows the + paragraph to have a widow, a line of text, separated from the rest of the paragraph, + at the end. The default value for allowWidows is 1. + + This is an example of allowWidows="1" + Blah blah blah blah SQL blah blah blah blah pizza + blah blah blah blah TeX blah blah blah blah blah. Blah Intercal blah blah blah blah + blah blah TeX OS/2 TFT display blah Linux blah blah blah blah crash! blah blah Sun + Microsystems blah Logo blah blah. Blah blah blah blah blah blah blah blah blah blah + VB Tcl/Tk Fortran blah blah blah awk blah blah blah. Blah blah blah blah blah blah + blah blah blah blah blah blah PGP TCP/IP blah blah blah. Blah cgi Modula-3 SQL blah + blah blah Delphi blah LISP blah BETA mailing lists blah. Blah blah blah blah + pepperoni pizza blah blah blah blah blah blah blah blah blah blah blah blah blah blah + monitor blah. Blah blah blah blah blah blah blah blah blah parallel languages blah + blah blah blah blah blah blah blah BEER! blah blah. Blah blah beer blah blah OpenGL + monitor blah blah blah blah. Blah blah blah blah blah blah blah blah blah blah blah + blah "illiterate programming" blah blah C: drive. Blah blah blah. + This example has a widow (the line above). + + + This is an example of allowWidows="0" + Blah blah blah blah SQL blah blah blah blah + pizza + blah blah blah blah TeX blah blah blah blah blah. Blah Intercal blah blah blah blah + blah blah TeX OS/2 TFT display blah Linux blah blah blah blah crash! blah blah Sun + Microsystems blah Logo blah blah. Blah blah blah blah blah blah blah blah blah blah + VB Tcl/Tk Fortran blah blah blah awk blah blah blah. Blah blah blah blah blah blah + blah blah blah blah blah blah PGP TCP/IP blah blah blah. Blah cgi Modula-3 SQL blah + blah blah Delphi blah LISP blah BETA mailing lists blah. Blah blah blah blah + pepperoni pizza blah blah blah blah blah blah blah blah blah blah blah blah blah blah + monitor blah. Blah blah blah blah blah blah blah blah blah parallel languages blah + blah blah blah blah blah blah blah BEER! blah blah. Blah blah beer blah blah OpenGL + monitor blah blah blah blah. Blah blah blah blah blah blah blah blah blah blah blah + blah "illiterate programming" blah blah C: drive. Blah blah blah. + This example does not have a widow, since + another line has been brought with it. + + allowOrphans + + The allowOrphans attribute allows the + paragraph to have an orphan, a line of text, left in the original frame, separated + from the rest of the paragraph. The default value is for this attribute is 0. + + This is an example of allowOrphans="0" + + There is no orphan below. + Blah blah blah blah SQL blah blah blah blah pizza blah blah blah + blah TeX blah blah blah blah blah. Blah Intercal blah blah blah blah blah blah TeX + OS/2 TFT display blah Linux blah blah blah blah crash! blah blah Sun Microsystems + Logo blah blah. Blah blah blah blah blah blah blah blah blah blah VB Tcl/Tk Fortran + blah blah blah awk blah blah blah. Blah blah blah blah blah blah blah blah blah blah + blah blah PGP TCP/IP blah blah blah. Blah cgi Modula-3 SQL blah blah blah Delphi blah + LISP blah BETA mailing lists blah. Blah blah blah blah pepperoni pizza blah blah blah + blah blah blah blah blah blah blah blah blah blah blah monitor blah. Blah blah blah + blah blah blah blah blah blah parallel languages blah blah blah blah blah blah blah + blah BEER! blah blah. Blah blah beer blah blah OpenGL monitor blah blah blah blah. + Blah blah Phys blah blah blah blah blah blah blah blah blah "illiterate programming" + blah blah C: drive. + + This is an example of allowOrphans="1" + + There is an orphan below. + Blah blah blah blah SQL blah blah blah blah pizza blah blah blah blah + TeX blah blah blah blah blah. Blah Intercal blah blah blah blah blah blah TeX OS/2 + TFT display blah Linux blah blah blah blah crash! blah blah Sun Microsystems blah + Logo blah blah. Blah blah blah blah blah blah blah blah blah blah VB Tcl/Tk Fortran + blah blah blah awk blah blah blah. Blah blah blah blah blah blah blah blah blah blah + blah blah PGP TCP/IP blah blah blah. Blah cgi Modula-3 SQL blah blah blah Delphi blah + LISP blah BETA mailing lists blah. Blah blah blah blah pepperoni pizza blah blah blah + blah blah blah blah blah blah blah blah blah blah blah monitor blah. Blah blah blah + blah blah blah blah blah blah parallel languages blah blah blah blah blah blah blah + blah BEER! blah blah. Blah blah beer blah blah OpenGL monitor blah blah blah blah. + Blah blah Phys blah blah blah blah blah blah blah blah blah "illiterate programming" + blah blah C: drive. + + + endDots + + The endDots attribute fills in the rest of the last line of the + paragraph with the characters given for the attribute. + + This paragraph should have dots following it until the end of the line. + + This paragraph should have the characters "123" following it until the end of the + line. +
+