From e800d96cf9b4b0aa17e0f8d26fe629173cfc7e30 Mon Sep 17 00:00:00 2001 From: Diego Vieira Date: Fri, 4 Apr 2014 00:58:42 -0300 Subject: [PATCH] added clone, delete, replace block #165 Because I needed to clone, delete and replace some tables, I added those functions. --- samples/Sample_20_TemplateBlockClone.php | 18 +++++ samples/Sample_21_TemplateBlockDelete.php | 18 +++++ .../Sample_20_TemplateBlockClone.docx | Bin 0 -> 15293 bytes .../Sample_21_TemplateBlockDelete.docx | Bin 0 -> 15409 bytes src/PhpWord/Template.php | 64 ++++++++++++++++++ 5 files changed, 100 insertions(+) create mode 100644 samples/Sample_20_TemplateBlockClone.php create mode 100644 samples/Sample_21_TemplateBlockDelete.php create mode 100644 samples/resources/Sample_20_TemplateBlockClone.docx create mode 100644 samples/resources/Sample_21_TemplateBlockDelete.docx diff --git a/samples/Sample_20_TemplateBlockClone.php b/samples/Sample_20_TemplateBlockClone.php new file mode 100644 index 00000000..781e1eea --- /dev/null +++ b/samples/Sample_20_TemplateBlockClone.php @@ -0,0 +1,18 @@ +loadTemplate('resources/Sample_20_TemplateBlockClone.docx'); + +// Will clone everything between ${tag} and ${/tag}, the number of times. By default, 1. +$document->cloneBlock('CLONEME', 3); + +$name = 'Sample_20_TemplateBlockClone.docx'; +echo date('H:i:s'), " Write to Word2007 format", EOL; +$document->saveAs($name); +rename($name, "results/{$name}"); + +include_once 'Sample_Footer.php'; diff --git a/samples/Sample_21_TemplateBlockDelete.php b/samples/Sample_21_TemplateBlockDelete.php new file mode 100644 index 00000000..6e6ddd28 --- /dev/null +++ b/samples/Sample_21_TemplateBlockDelete.php @@ -0,0 +1,18 @@ +loadTemplate('resources/Sample_21_TemplateBlockDelete.docx'); + +// Everything between ${tag} and ${/tag}, will be deleted/erased. +$document->deleteTemplateBlock('DELETEME'); + +$name = 'Sample_21_TemplateBlockDelete.docx'; +echo date('H:i:s'), " Write to Word2007 format", EOL; +$document->saveAs($name); +rename($name, "results/{$name}"); + +include_once 'Sample_Footer.php'; diff --git a/samples/resources/Sample_20_TemplateBlockClone.docx b/samples/resources/Sample_20_TemplateBlockClone.docx new file mode 100644 index 0000000000000000000000000000000000000000..1681174432420e04b284b59762ad71757594cfa2 GIT binary patch literal 15293 zcmeHugguXemVudn@us3tkV{*5#Ce4Qgr}+d1{@VV3*Z<)s(2zW0)ysk^aUb#$G}W{y+eTB=HDH6Tgfl8b(6 zVVBX*6pv~vnPpvM2;gtc0qVe$2fSgSXzWcKQ-xQ`D#!}L(tH4mrAvuZr{o>LLlO0j z!n^pce;y!rj^2`7vK)j2!>k+;BC~Xo;mbvdhFEvnYFSY)OC`#p9Vzb8>3pmt+bKsQ z-FnvDitH|h6ip&uNP?N)H*wAGn`~ovplhaq?IWTakcke1?mSJ_Wo%%M;Z%M ziMLDFA{~jCr4UQr?WSQuuPf{4PY5vOf3PQU0)F%PYmMS7_aVHpr-7rHwG%VbZ}fj` z`G1%f|Mt@>61!j75>fa(=s9Sra*|5)7=4j6BB5qSeC7GymcuxZaVG z)X4Nq(xj(TmZZyOvfc%Lsv1&c2i*Lley`4VkULmP2&jnFecpZ>F?0XU{CSu{hITk8 zN((D;0v|fzAv|sD3&tLu_}yL!f+aca#Hvej4z~iJAwiqkgTLye<7Us8E3C0!h_!pq5W6y%FlKzMg z2Dm)92kN^D4=H6JdWc%$rv^_S*XY_EnKI_S<_r_&lUDXwi$2&qfR`!HG6N zSLgnXsn@gEtx2JRc9)NYEP5F9Oi(Pl@%zq@InV1#EWS_I9h~5Glu)6?buM<=Z%F#@ zwxH6eEv-IRh`gcjT-?2PJK+K*_Qan*b=SumgZyJHG#$Q`BRAee5KRVu9N=Z7m0q|K zQO~WD=#-v$>o$YL4HeV;65Kwy%N#IxL70?R8w#&g z1~<5r5#$~TcNwzxJvS*UjT+VWcIArX^}qkmW#n)1O_c%~42*~X3=HkH#qZ1L?+a*F zYt42AfZ0h><3<{+Z!LV>MQLj_%ap-w32`$h&4$^IPZQCksahzkqTXRFY+%A%19Ose zN*I}lu_AL;$h1r_f;r?Qn6nXgSARgFDq=2AP-QA)!KMAih)sp{W0LR1;M~$qfj_RC znS4lM1<7bSTn>uw^PbjJlv;9$yf!#_;SrYBEDHLEdi{FK{NSQl4i#ccv)M%ec?w|8 zeUxIJAvrcPTfKd+(@a}p6nD~1bT2yNOO%{O(dTHHG(!4p6$CK>%VMC?^(m|LMCl$G z&g!^`Yq?IuyJymcx&sORsyADy`fy)`%7{EMI`&fYn*C=MXXU}5-zxOf_p^SZN1{rS z{d!s@HmdTjlD_V)yVsj#w!wc;bd&00$5E9|cGpeLx*2c*8(HdR4Zc-84lg6ys!P-P z(XtA!*{3Djf4t7$`ikWMG)p&uJ^j#Im_1_2h`{cJptU}<5NA#dz0a11XKILlJ5H@) zi4QLf$wXo35@_}ylt&h?FlmasG?V6whVu69^OK@cr-K_~ z3&=xo?p^RPzM>(UwI)K?N-Pn3JO4T)&`XDYR}Q|lC{Sv}^vfMD#am1!$4g|HC0=Vr zsTQ3&Ra6fs(qbwt_1uv(%kDkEQKJB)31@EI-l{9J4fwNj;weyo<->Q;i--yaqpL~r zjQ6fZ>p+YR0ww6(pV;EJv+8N2-FE@Z$<(RI2r*vWvk(WUwWww6GotCC?E*@IyC zf^Z{|?PE+)dUjH@74H;>oNpK%;#=ruhc4WE6SSTy zL@!|iuw-?v>(tEwZz?reBr8x||e* z7SG!-rfbc>%AGbPHRX?K33Yd+DJ*T(Xb;4IaL6f@@YC>vIyZzj4of!JTko2QaEM79 zO&-(g-Qybg(kn$_(h~{z{0lb$WM>0pBFd93KOC&mvAP|~2yw2bLiJFBA>_Vfr)lxj znSmc+*Rz7a_cz0lHfeF?MQiBL=?k&=kmc+Ez2tml*IpiDyH|E;fdsnk&zR@C@kbXO zUJZUgUdl{RUds|)i$xR4vXml$`GYZRRUMrK+IN`oT5E3`z?-@dvWvnUkf8doL@ z<4LGs?5CZ8?6QoI55uT5D7E3C=T6B#bPwmk&p^T@$ZSN)(bZ8;WEOO7Z0txnc1 z-}KreCAv%+pXiZsqVJT#TI!vi-uOD}RYvbFcc_0}yH6XdRC~5{%4}R`Tm$%8H)w=B zrB702oK3c+VE?d0mE}%kV0ekn;Bh1-m7{H-FWh}A(Zc{eRbf0da@af((N&Ba6@#3Pn~$JNbHdRO~%@XaohipopN zs_u_!&WBf#@}CkVwXt&h@>Qo+ew8R#e@YZ*3o{!t=HDsnZ`+bnEjc?3DZ(y|V>jG0 zq95TziLfyJu}F-N`F+X`gy*qtFcaS@%m?5))$A*PpXn++X;kb4fHn!j$05EM4M4_} z2l(fSQ_l{QxbAph5jY9x`r&yaF1walzm0(1SvPpVt}24C|Q z*=Kun!vT!xD=Kl%k4-{9Hp$mj&?4Z#pTupqQgLWgY}M$d!^{{au9GQixOT}0;ETyC zAi+r>Hqz9N=Z-z!4scv52bvgqnQ#{hiujC8ujH_uvpvWr&mst7gk^Bn(jWqG=WfIl zO~c@vgSAE=c-{zoOKKk$LzIIeV63(h)HnNXTtsSY1!ogc^D6nS! zgSGx5;{yShYE+AD^UBdYyf3uB4++DVGpz|hM~t@Da6RO3XcUNV&b-lRNAAZ0_C@BI zYkRBZ77`5s0Q-Vq?sh+-Je2EqvmR zoj^+}HeSWOMF6&uM)d_zjn+&EweKDE=;O)gNU?M>C%+ZcOYr21oTg6k7+ z)M5%o_i4U^xv;|2`64i`m5ETIpwU=Shch5^h|M%$w)$p3ifJjk^}%(JcK3>d(Z)iY zf%6_Om@tfz4E{(!ki1XCHB)7z+G`d^_bN}cnbykW*jXkQxxzXFO)rnN&um)-b=&6A z{2bfLY2Ua@F4me72xZQc8mwgtiXMa?RE%*L9sc@3Q-bL&3UyC2ArqE3FJ*Lrt#G09 z)G8{5+*&!VX9D}Fmo@r|bl&0D5Kt%&Glkn@DaIDJ%dvb?Y4o#nEU5(R^1<+D$Yy%+ z2{L4EE&Ojf$(mcfE;bv5c}3FA7rl6=4|Upn_X?OM-`NA%Pu$^pw-cASHIM|q1EQ6F>S z!;)*oIE{8QIP|mvr$tb($NEsQV6HdQpm4cGrWggf$Jme>l07=P*Syr=0Yiz?JWH+$T#!LzX6{u({7Ctnre){(bvv0{4IUGW#`~vWOy$PwVKb(QM0v7?vJ;^QNN9|DM< z>=99Mj|go%bW6jF;Q* zzfRaYaU|x^)ze~_l070fF-Q2xd)ZAC-+_Qr#Hu>IDD|yJt)Bh43+%xZ9qH)qzaQ?1 zDSc1Ge3cO^h=0>MoXnh^Ep6XB{U#r>H011d0H~cfhkh*1RVEz_v;({dD|Ky0R7-~0 zXV@L@&}}gCqyq|1TO@vZg%x7*L}(WZq-WTfb2E=e3we8&9Ul6JP-cx0o%gs%reT37 zt-0Jf1x$DP@MJ7W9=th%U9mrXr2)L8HR7MnaZv7hHw45gszKlhPN$_pNN$hoW&di zf?w5vn6fmzb6gyn66KW5aaab&s!t3*H$nJB?>VudcA>47U9uyf?NfFfof6?S@ZQVf z8xNhgc%qiNgZ5xnr!TNMfdZer3*3>~kYS@^*7}Z@a*qYfiyeK#xTd!9gc@7kJ$^Rp zp$F*N!J35MhT&;RD6LJcjyfNMlNnG0BvhpAlt`7(36Wac0 z;v|Nv4bwW?6s;>cMyvw8x0tq3b7&_?K&{M-ClKK5sJmD2VX4uGN>%2Fsx2WjuB2AId2}PL7=XXI4F?BYk`N`fA>T4!kR zXPe-+DT#01V|i(@rG;>~F5JBZiPW*^Bk#W_lAKvI^}70DUY1ULbDz(5^p35pq7PoJ zmDIwyTq7W2|7-tFVh!>H>nOlG);a?OF=&DyZ866Y^ls`+F)IDcfeMK8J-nXv!ifz} zA1PMx67xjcjdb7k`|ix;e5nAdm1I6_W<(vCo>`>NylvK33e^3E__-oT^j(C(5vn9P zJMto7J-mWkU!4KHI@=D*#qFPZqS?Kpj+X&l-Unkuhs9odM=wR2<-wsgf>+ra#+}{X zQRyf^iwXaBfg6slg6vBuBE~~YBPj&0<%R+UFYVbWa)ls0Fa+5}ikrP}rAIndgXBy? zw+{q~NP&3d3l*OfBJ%KM^}ocgehKGaQM&OzRS)t~DV1#KefRBMjB0z8u#Kaf#XSxW z@8|`FwQvh1eA7clGM48wLV}&X^axUY64xvMXG}ZiT+a|p@Sqv&>&$QnC7QE&i5Y-IjivI` z3yeO)!=|P(RaiB;XP}I$buR@MU1EMx*D>VGBqmX4D+}63b4>lH8;;&0s#ESVUOSy} zhCg``PYx;5lsst)HzQjh!<@-o6Fg zmjjIvI}ur9c;sYo9}*|8&<4LB;ee6BsbF9doL(9+M@ZE9K~6o}eR}+Hd!MU?|GX(d zYwF9%>*>WE=}tT%zI$Ch)jYVubuRf%tCrvB^XTK;VaUgV4ZrUv2EIO>4CNn_KPG_h z?wMg5#9*s6g7~>} z)}`g6NQ|44@1L9LzUQxweirFgl}PqzMICXJ@cJg^l`2ukU^+UYLgbtZ07XZ5$MEn% zeUk4BVc4tiEJq$_`uZvPaVqbTUXIJ3op93~>Ff4Ly9W~jKtb)iJXIVX@TB14N4|6K zJ#gGWcRR72S0i-Be7#XQTF&O#X==vMH+R^EDld}D%tK#(qQdfiYMYmNO<~*dc1O5C zC3RwMnuMVP|MJIJ^ANzi!-5W7!l*xUs1d+lV`KT^rro0Z)2eBihj33}Z$$>f*oraN zC-D+Pi7G|gfs=Q(T?L_QO#o9An=ZOavg?O2j-or2U?k;MYrRn?D%{V`&Bx|M>dZaA z)ePkt1Y@m(mp=^M!@^@<=YMbivTccY&_=CPrZg><-N@v!gxbl zet}-Fr69aR1*7bN#Y+0^cx`5-G9Rx;B~f3rxO zJ$?Yu;PyAOK7?`jQ-pDglZ0`puL<~?&?gC%J{9ofa7#Mz8%1sc+3qCrFixp+EYA18 zkx=xsd=Cp|`SyZF8r?3m73Oe%aQ~WfCLUPJ?dWa!p2V56BHx(L_qHB{Us0Eytj0u7 ztoGx;9)ARDB$<$dU*PaEaF-O0MZvrt;?huiboBfg%~%{?Fh`?JHgcCCBf>+kRMy3! z*W)Fqq|7{8Gm(avtY%Y9&)t)fvKT>dC!}nZ$INg>L^a`>rn;V1#F}X-E4u$WxaGUL zcw%7MULq0uRVCF<~!EDW7m%10Q{D)^a#P^PYpuT(kEBL=c`nKJMtn z@E5~S9O&4I(zdVD;hw|O;k={M;ZKzjN@c$F9QprB4O`E5G-b1e?r!rAvp-kYxKo}e zFE?G~`}p5mfwOqG)E>wez^K=Fbf-p1=U&+iwhczFO~lCS=SxMh+9>2_EM%hMl^0-p z2!O(`W*H&x3_o5u7fQ2DJ(f6Yru|V z-Bi91Z4GgIXXij^szCRcP1Ow%=|WOHW%O&>o&4rT=k?KsCBA!Q#I}m9LTqW%|^_pMLsd6;N+^kkfkBv zt#@gX-FT4Ey%R|Mk~I@*Ch*J^7go~dg_n?p_oSk+|Dz!N82V;(ww(SFEx4SA5 z3a>95vMU1D55s1AAPk?PmKOZ^+gU^6xveVq*+D+gLp^``u(5iHGf@k8;_W89^n3_g zWj&~n-?*28->|npP`@Xhl|N9`G4wu8l+tvZg@sND7dM3fF?tvVTJqR`%k7Z6W~=$= zmE0e5u;kPFLli`^PjBTO(#8FD_qSA^bdQ!hHcOdi8}1MfWIZ4~g3bVKFR5TxxRZ(c zN!dX1GK)IR+%q@U zgD@{f4XE#_OD{xCw~vnwVN36G!g+N#F$Luve5W@S#cxtCk9>E=0kY0pWOEYV5T^K_qxESVQ>IgHG8i8+AljH;s1CTRZFL?1t&YD4Beg(ab* z5>d6IX~5{eepG_jn*yfvpG_NLTL4)Oz4TnZo_^#vKtVR0xjY&=o(O75y7y3uL~DOz#{*xX|i&FN4zo_6eIADA{$~(L>#(? zK{%}Cuvds^Fg)$QruN4`zs*PVKc|=x6#@|qf94<>az`c_l8l-s3jgo9{R{G27M+d- z1^wT%7uWD!mP_tjIgPt`FVNw3df(-2MsPdlle{94eIr$=z4!js4|_{;xTN&9yB9;% z?j|VQlCF?P;;gmeo8uTGS}8)V!N8i*L(5G7vtHeVXxfKjFyG|`^ek1LGkA{$bWD#D zy@YStfm#Qa8h0*?-7N0QDb6uW8eB!CTd=rpMRuQ__jV z7Q6Kx7g_nEoE_I21y7cg4o<$yy~(2|Bf z`25_~(2^3Y zBj=akcKrN6J*0O=RiR>d^Kif=;v7 z5ChhflhKXNeUg=I$49TJ3WcmFCnNhh2Zr(Obs$$xahKNREQuvY&f(rz9$WN%+-+#n zLDY{~M7{o2L$$~isf412jgUT#S3FhPj@kRvH@7*tlM6Av;KRB4i0ie!n9IGsz_fCQ zIhD-v-jHKzL%o>tR8ZA`nq2n3iLb^^SrOo0B#ipK(ChFmR-b47Btz#`x{b5@f05$= zh&r6t`Ms7Ny^>uw&MIvyr+<*EHhc|6mw%JT-$q^5{RjE`B<_H6FcUf?hSS#9jm(V> zw{^QuM62Tv>@wHLDqd)l*6trGgpvzmT;#~VU(&QMa=0&f7nfP*XajX>wE7XCc)2Fp z5AU~iV`3*pv80}NK2&xE_8-eGtK)wOSUbuwuOcw7b_Q&?J7zXLawJ)|cvwIGc$`{S{bHx< z2u8u(ZR^QF*XW3oTW`;GtX`a)&4qPU9@mPE9<$x@xusiC-6t-EM|pawN&#LDJDo)>AscktC`Cm^Ta+YC3 zVtr~wQ*ry?+|^FYth@y=6L>4xiyyN&g(dKP+Hu8x$M7T?3WxH6Jfp#`MX#U))jFv5 zK{DbO?>J<{V$FibXOASI)8z{R# zM1e`ZVr!IsCBuAo7DY^g-h0anY$f^p=a&hC&4B$I%szIvFM$ru-+eNloSu{ACN2>j-ws(j@_2PwI`@J^aXHsz6E7Dx(yh)rS@DVN- zELh>>OyxWkcR&wKeLGjK@cBaR6jLqrxmaC}@;0(vH+<{)pH#p>xR+kdYFE>xtlWth zYLQN`xU2D&%bHS@sZ-_|zyG?FeWKEr^4ar=XTp})5H-6O=-#m3mo@%41}cjKMj zO6&>%)rWb~j|K9E^}`yoBp{$#B9en91Jftf>`Xh{Hr|x)`*Q9P^-cW~LXosws&z&& zgEoDMw^pSDaz9U2-uUR(`IY+(aK9Rtq}iw*DG^W9kN^VSsbPd%k`SRzhV`@_(y>!} zv+wT?1>u=(=|Fz>J1BN;1@;&WYmm-_{;WOD4N=)rM%iYU7TogLjRcEFVw*fN$&yM- zK^RcIhetzBt6NO6>S9{S;tvK{;<1^mbD zS1uS`Zwdxo_ZbB?M)bcd=IbM32*77j5}t**t18mq;N`)cp@fKwI_XieMP(^$hT?&? zSsZ*=!f50d^u3jLmZyYw+Hg(fRE!B8B)aq%KA+7SrY`c?b0bQ#KVzZ8dviElg(pha zl0TvrL5^V_FEE&+FY3FuT&PU~zoaynLwp^C=$kmhJ~*IU?hBg&xfb}qcBPu^RjnCT zJdJxvfBN21Wy%@w0^S9=@GwP!}{-05*S+{E?h}p4z za+|^a8Q)E&V06X6eh#96t;P3)zF$mEAvl3uIVjUV)HLsSIh^F z$GO^GO^vZ}b<@+-D=Vw0C5G0t)JXW<(axF_IFB^q`vJCT zYWrjgB^iQv6O*f#qbARF@}RkD$QRbsPe}Pbu+&ukeN0?F7k*T5`2vOQ z)}hU$_Mj^h!?2R~nE^Dp{?cB|@;(oZO(G@3*$vj(kmXV^9IazvVe3Ck60^$ z=7sMkcZ_(p2ex)Mb7wkNhYPM=^#KD=3*EurymhB(&WKGuc!&sRs@v#r(!3 z?6;?T;P=!#9-6uA_fpeV+m#<(`8qxkX08?*4M9F%&6oLZR=H>iEsyS+JzoqB4H!i+ zltU63IjPCm6SP)PCas$0QD#yWnWDF5nSQn3V7P_!nlclxOiFI>tdmh6#!t{4s#9rR z2};2L7IlPiC}ZWem=c}g!tYuaHKl@|2$^Z-CH1EQ_=U#GGgj>ebi0Ifm<>; zjD-KkVM*oHMbK||E!bMbz8C+xf3WRA0h*SDl050^;$}c~iLY;ePYktGe82x9MOikY ziz0MYjpfpeQ5#MLyCPd&LnZ~DP`_`mVcA~0YNs4u5c&YFI!n_WV@u;l9~wt^3Ju2T z+M;uDuO8jOOzdXh4H6=D<7--r)V&|vu@%YIN!aUjU-fyn_2RyI7S8lR|AUBk8E8Jf zp*2sb%J%^L2%$%h=f1pf!VXL7`rzi#>4~8U`6cUxo`=OxF;}Q$0|sV);^?);p~gjW z9xsh#LIq>P#PJE9(}aOGpZ6V_u*RfE55-f*MI@geX%`NzqwPeij~66QvmYnS{%VfX z_d8fe+n-j*qpbo5cRcD45BC>}J^0fMRLoMLBB{g6^%>i@0}bB>^@iRbCDp)K>%SKfSpxJAFCvmv&?xR9@VsdXXbQABOmKDFsaJZ*pE#vk9?s?C9;8i{ zvDiQ?1|@r383#7pTXyL<=*00(+Z2E)BbeYRB{(~W-J#T+JQ^H^k}ey8kBQoio?O1D zuuO6jLqOVla>roRmh(&0ID2R%_yWX!!T4|CwWFDH0WGNryB;_EOAkOm6Va}F8;7!q*VoO+y;B4TA)jrk##%~8B))dx9=G8(lc({exW4baREh>k zUqOjPDfI05RIFzTqV~cL0ey7NL-9x*G9YH^aT$hGBFg2ip{{rfXxEq5?c#qrg5m4) zy+L_hZ>q0`e$>C~L`L@Z|5J%xS@e&q0jOYy!HU{JaY>@?Wd}lHO#bQ+qLN4GFKN1x z19NU|yw%9K5`*t6u;Wr^O}6cSn6vKf{)3<0?(tT&B#P+iQ$_m6gQPNsN$C}u`t*-( zw}bWNb+Bmi5X<;kAH5Lw8r`2Gt3fV@1wG2ja2Wf007)(rhOdmSs8pB$Ov}o1(!?XK z(Wc5ocauGnFseFBwGOif%qfn=tkyikboz1EOM@tYI+gEM=Q>{*wR=qV4C*^?8S2}@ z+S(oKi>qbH$;M-4UEnSWLuViow8OX-^pEbR(9;pOEVHjTIv1oAjmo+m)c0TaNwQ{S zMGN;MCuBVdtO=r4avT!IodAkkH<6sfQq|k~sByJJLbPI#hk=OU>0vQ2%}B->he+54 za+58e?xV1sg~xq)9?;3gT%qVLSNfNb%^Eskk6{!(hCU;K7gvpq5V=E9rSdQm2+T8y zGh1PC&Jmvy$Ic9B>J<{3Uo7sTH?=)~CbYoWwKq0fgWAzn8LKSFaqKD@q`|HVXaz!_gny8k^+@y|u`=l6e!T2z+% zX9xd`r1}&1+js8kX~o~-s(uCjGsNWYz^>Pbf&X8?$*(>A8fEZTU(m0=`afb0eue+) zQu-HM^VMqmJN#D%(_g#z)#K=|F1%lzRDbW{@BT->!hf~4{{`>D{{#Mu?fustel<1! z)dM8qpA-1E;rUnaKaZFGf`Wl5(13yc$6?d2@LyH>zdFFB|6}ZbDEPnPf89C!g}-F` t1OJbG#IN{&N`k-8U|>d^f1CavazR-R>UDX&8s%R$+n`6(D8Oa?^ZKR388$$m1iGiP-zl;rP8m(J!90&%a5W zBmRslT=IqaL?avQFSdA`;>ALQ09}33XjWDuPQp*C9wPX)&GAS^yiMYZXya*TBdm)E zOc<_Y5k)_+QxjZMN)d{o0m5{1me9QCzOTNMt#V79Xt~lf1{2F@i=V(X#3YfH7tH71UO5*QfV2+vM24rPV<+4k z(uBWm#A#h%Bq+gzv_i~1YIkcqx3~br`?uuNxy;#aL8tEB8NUt@ijfWZhN_{2jAMXB zKLjO>b|CGN3*PM(LYWbejn5bm)#PT_Db3#}c`;-q)6LGAi)y%kD&Z1p3&3s~L-&F- z=BY|#po)s@TC3LTQ9O$MNgr-bc1ww2NlQbV7Oh_fiE+^~dE}PcUf3J#PYIC?5lr*! zVXTR${zp=1CHVohgANy$ifBPzn9sTV+?sx9r=DXld#bG4?5$!NoN$|+Vmq500?Z(Xg7g({`RRNG{B@q3KDZVZt z5SRYD&zZ4lNu=;zx64a9lpe17};q4fh%9>DFO)rx&z&zE02y2C;N2}vtkcp{P)`y zw&}H+xBGQ2s^+S&kT3`V0R98(WDzbJI+F9Jwg|)oxz!<;yu1X1=@7%c;mahE5t{sv zS7{E@p$F8s+LcW7N-$v@u>4xPS zDn@*_n|pP$Od)ijI<#gYOQqD*&DyZ(OwZvF{7jura=J<+3&n&RRl(oL=PB7(SR1i< zO|bDYSEyKN;wi5{G1@VgEaG>I7lk&=W~=aKMHU=$|6`Gq@< zLCj8X@wffxGq#LV zXWWO#NqTxqPm;d{mT5OEaAj@#I?>kF(uQY{LBC2c4}rJIK#<}W zjZ(8Ba_WOZnog=Hsp^66Uv;imW*#_uETuEdFEp~X?)MCe8H}Yt;h~rr9ke&I=U8CZ z_lWz|q^A-tz!vb>AO}e;j}AglA|I0si6jk4JrGv)y|cgbV)Vl8!Reu&MczyCuECIE={aH)0%P*sE#}&Faw*K-Ld#c|#YB>CA+%z5#1Koo*POdZn{6LDUAE(~8OE<2*BFo-;2e1L-OFh}-CkL~8`$wG??0ibtHI}w7IS`!Wd_*0?at?q)J9=NREfwJ zQYC!blG|?;C)gjrSF_4iPsm9>iVRB)bpmLrXXt;evEw6Pwo;`*H37%{#ImnviM@kN z1Emr`4ow#+$L9ji2u#=B7Dr>sSWeVfCs3AqJEXqyK9*164+^0Y9|x+Ex}@Luq>&AS z>j1_jGBFswO;?ZOWQjsV%mM+SP6`tL{YWu&TDNJhC#2d+Qp%Ik3INs!*Lf?Ly3(D< zcEo@=KxG1QK^pXi3|+EoFq$Y~fz%_Fp&DEY8|pJXYBB<9F%5Xr_eUl{hVj${3LqR? zxdDC^+sBqIw(!1)!99iTO% zx<*o!;h`|uP;zV3o-;&%cGvIa4Dh@7;rx`BCA`I+K=^% zT`ozPW2*vLEHg{Jm9YQ$3G{yP=h$Xg=`H|=CB%;@Spf{f-A$y?vk0!GOoR1ut@X2T zz4`o>!T{nBY+7S!$TwOD7=ZfP1$Nq!{RKUKixfVq&SllvD4aLxJ^2oK^L-$7ECCm= zaKF9;XKE;+m378uM$qxd2(VMW+!65MO;i|_M4PzEQElB%9`oRt+-$9A+NuiYYJ{4v zA*VENyvOe_|HLK|>dLn+KiGuq2b)0ogH1S^8d(|9{EO24CTpCiN!TEXV703pIisCo zzXV~&fPd5;X=I*)MvG=5fQ+y~L7WLu_KOkVExMc#%>(JGqv$loiaR*@?H z0rGYH#I4mJvNK9C9|*VQ`r&mwGQEmMy9txQQP3}s)6BK*S_v+?XCF|iE5W&DougqB zzt|R0w-0IRibT*Yv7YB;gJ4Y_As7PaNzi&T;WJshwG#PMpb_QxbsSM8%ML*wWC1}L z2oNstdXm!7?2#LBALFI$cLQB_1J*olKF`sq!g!zKWjCz4Nd)p_y+J!00Y)O5zzINz1N7Vvo)O`!;ao)A(*4>9G+ha|#PJrqSMDkaY_$g|_CEhjv(1)xjl z#*}pZ&agi*6_l9HgkoJwqyjVwoo|cF({^ZK%dR24-p-{^er+5 z1e0Iw!(d&Y1K2>KzPWIPc=?$n>yttdOIH@yWi^vmPt21h?M_zNTIsuAB>13i0BPf_ zS0QtU^{C2yx-du9=-?VtONAafJ)tGv;x>CLcN&Y_~6t}wsXZuWo0Tz z$#jqIhZRVK4|&MNP0+*Vlqx^`!+qwn=2bR-1DUzOk)v29Y?);Wf>t(NkI|Mq{Fc?D z@j0rw!=8S-M1&=gBB(KSf}fgoOISZ-zjV0W$k2d=st`3X9BEer7Bz|>J5gA!HE*8d z*CWZ;qOe!d2s|OWrTw8|kOm6D zaeP=-HHt2bQd#Toep+0S|T+W{(V?BY)-r9ECY#Pt?hqaW)OPQC{Y?%6Y53?68LK8Eh z0^_O#nDlm17`4>CPw~N_j`qN#e7a)%u17uABGp9C1 z&Pq;QuUa9+b!W}boL5!n+2Z(ClF<;_m}tUl98I#@eh)te0ag@;(CR)1pJ}@RWu<_| zwNzqx#!?2~DjqMsmnk7ARrs7yE`>fxNNoO8ldZZZBimr2M9s!+pxL;|DxnjsW5XCNz?wynj@FLk7V20+a zYx1ObPm&+7BU9k}Tw;j_GhNWueg3e<%JM&wMi1Wt3X)=Y2o;9RULuln7(PdoTYSTL zvW136JH)bb)hr4U_$*F%bPs}s6-GG$#iwQ(4?o?`Y@szcS!QFzDaqH#CWt)&4*{7j zE%ZIgGk*CI(zvdLVlO_LVdz;hyF#*N-vjhQMe)JXsqOR{ zIEY(+8j1M3AZH>rXB2g>B_lw3O|N8%alF_=LxfxnJhJ_Mnih2ggQJt3W{ShzaBpj4 z&2{wdu{{o(rj{Dzr1&9$ficuO`(-C~R4dfyd^&}x1(CBZr5c9Uc7O*%M3}?7f7aM+ zr%2ErfB*mxL;vL{;b7$GXl8BV@EdSjB9BMLu~zx+DIy<|ri@w572I@ww!M1k($8|9Vb0E`j}KuY(cf&J4q;6E z1ALh#od#}^(T+qOUm1T0U7Ov6GTqt6`(<;~48KY~i-eT7b0>#7ag49nm@akj%EyA} zhl?+|4+ph*-iFGF2@_(Z6$6#)DxMG|e=z&F$9#BNL;y{?a;1<6UAY+9&mE3@DO8UJ zLgF*-R)3e#wmG6*BMpOskqCxwWDgz5oKeDembdRlz!wv-SnpIp22$>=vHNWVD@dPb zYkDnKroqBDh!YTDiwatO{a`Qy*AckRJwe@_@iEA0?=@?hZam)B!C!2^i9Dr1u-Rl&zHhW-q@lu~5~sn;)E=`lz-%;iD0wA7&ZC=% zW9aqr*x%yGKDzWr{*2wkHZOML6{>In))WC5>$BE(h27utNiI%X-;};_IT)w1{<7{Y z?&6Cvtd0Y3nOix4sn}Iz+3~5<%*MKm*_H|DQE12f`YmiPidn#Tkz;<{})N5Che zxXT({7wWn<4~_X+)$sW*c>-OTPHZJri@O0_2fpY|gUfv&#trn1m>o)`4-vc<@R>ee z?2O7dyr8%*!oZ8^ul!1Xn@wk z>k%K;mmzN$MK1ZqhnP4P3g+5Rap2TJF>p+i&P*G>>)MoNoX7-t+7|P=#jsy8?+=CA zXN|TDG;`qd^B8aGVOz9zsjMH~2Gi}#3HtJf0S$%`)SPv7gmCmsXpCGvEqJUIa|lsJ z`x$$Ogdq;d=B+uhSl3r(jBy?lQYT>V<*znaNtMl?t=b|&N;?Nq&rba|> zrK>3%e0u)YFb$t8p9Iy;>2SFDy?6Y3L%5I(5L12YEx9(DQ-WWyhWx$#BC4xRuWp4F zFI6cww*TOCRK_%ar&d2ZPs6|sc&^5#*%G#Zm_Iu711wXx6=Cn12Kz)J?9g;NZ>J7u z`S=U6dwaKs?;|P$Pti>DH>U|(ns87QoxgLTQDY?d}l+Lpy@(?WO6U zr9NMV(>(FXBXV_&f2HF@tFW9wE^v*&OtK6K#d#joUBmiLZA1RbSbfFwqhXRcELJzA z;L-!bxYH@6tlALc2hhP;@xHs)m5Q^}^Zn~``#&n`TuP3P9X@LOJ`{Dxe~8Y`M*0eW zc{9evN?CW&!u#LHy9Exoi-Ok*Apk<)=ZS08-2g;v6DeDL*c#+nJxTFjY90BMaoR7R z8FLdyP}jx5IIPnF(qkrR2>|Dz?X!pDJgnz@$sp1S*$WXFWd<`is*`xQM~?FL7C+tN z=rjS4EfI(0=UuH4=^d!{qI?yg)ikI9C@tzQr4kT2ou7k7`y$Xf;D_vm+b4G;$sX1k z2qc7$rUST4Ug3ERN0lfFa!RhZ60E!~P};fI2edu5$t{lK8UpFr7e>N@N1O!u$sc!% zepQeP@-(-oJgx;G;|Xw!fwyX>ZbsLPgbpZ;h!-u{0IYGL@eKM%aEA{l7=0`n(tHYHrDV8b9}oCqZbk-t>8fE;1gSo4$|%Q((&lCYWMI||CM8Xqt7LOFtCoVmU(a@F{$-YPVL7!bPQBuh$Jqn_#N2i7=VKi&&o;`^#JI$0 zpq*VKRGn~CrMebQ)-T(j^HJRLEr&*QSvcKKt z&6Q6WpPj;`Y{j^I8EqJ3Hf}W~M-ME48~UhNN#! zmFXFCi6lc3uWrZ0KGQ4@)xOGw%#TVQRw3N}qW@Xig@ikVXtS|KuMHmJy=~*MA%-+{ z*Lx*Jwh~HTZU5*zHk5F>*DTrN0sT53ma>l7Bzft!m6?`HF?4h+{Lx#vl5p9?>JDnG zwkao9%g>A((yok3eBX3A`F5--wOp2i-L)J$y=^XHOxr?a|3_VJ=={=T^ZZhD=SwmN zqHC8oGrwOm;EX3$B*r9Gk z@15ZicKv(~^rJm{L%<7b=GhFiyWhY6$T{Nlt!B1%|9p;R%2<}H%i$odX~8I~PL5Ne zrod5p*|)_QMj4L7V&vpHxct6@2SF=kTmyWmt3EPv{)(V4h{2tq(j*?TLzxons#PTZ z)wJ97&9|_`I7~I>3l4tehLV+!Q{Uo!WTa;0l$La1owl~sRJf7t4HxTJQDNC=&kR8Go#Dm;2= zE~+b6i$H^^;+Fb#&`#YR0)*u#CUw=gc}f|nDX!U3vKUvnx{!rvt00G-*{Y;zU}?Bg zH=!k=kA_^FA-!ooqToeq#+bRYykVOZMIei1HwJa-YMI~?XDE@W5&1T03ggSA(IAvk z0v8O)>JVf6IA=DYbO}Fm)t>mW-2(;>PVxXko(v^>;sCJ*T=7dm491d6%cfE1nc zr!TK*$>Y@TCgjxZ&gItbilXEEu3#T^j|m+%^a)J($Y;~}fVFb7 z;qZgpA2HJAkof@ThA>QRW*(47{+9a7T@!nckU2U-lw=)b7o|wIk9P=`(z3NEk6Pw} z&+jGrn1+ysXJrcKpLVG6YP7b}Bjq!*U!>4A=;WJgf91?gY>{FtS0B0&_C-R0EO@Nk z3JlAj(er$XyQUv>JRorrjx6+%zW{=Uvwx>S>GsNSP~SZTNAv9X>(X^>5>1I|wQA<6 zGu?imJCzFPbHd^qcKz++qg~*lNk$O61`{&3q@CB)`hwt1!sVgY_Nb)(@KsqM@yh+n_1Z<*$d1mQxB1T8n0@sPqf-k%2{nP0>AA=*MKzNlk1oYhlA%_UgjyG)`8 zX~+jxY^&-}`K%olqPKhUTt1xAkzXm$+FvQS9S=nwATFr92^>UY$1;w-%{j~XwAheL zw$kt8)>)1%+i2Myz01z0r?Bo4N2;@tzS3w~8KHag+)1-|37)rXi`+=_dI|oJ++h;Q zC*sL>w!R{CBPHVjN-y6C@)=g1z)396@)WKA9v5ZFq>H*Ca+3l3fMA-<529WKYz*lI zB3{(NDOwcu9hF=#%OCQirV9d1x@ZE2RM8ZdKv5I|fjsZu<-Z}|zx}Hj25ZB8$|ndE z`3Zi1@LE}XASy)$9V|RW(?}%pTDT8{ANXJEf_R}&2!3lCC;QDcN){iKO7Zt1D;y^1 z&*ZiJ5GYH59}s>&NV0!V?e~Fxn-BkgPcbFbAJ`A_)Q;c(4xisY4nCV7@;`I?H{`c0 zA~`J_;(ul@sN%6C5!beS5_w_5)#`k5-|lFHc{}SFw=9%?BT}xuYjW$2x+y$VSajRj zjig|6;~Qi~p2sG1+E{jGKT3sA1eK}Nw<`1S^X40kR`oc4l0^Z4*U~&>Fi@5CnmwKjZ0}li}p-I-4SfohHi^KD%&Ob%>O2Vq$WHc!~Zldp8kUjo||jd&FuY2 zj=lj`fBu-?N9o}Q*>Ps7P&aq@8@X!2P@($zAM*Iys7soEBY&O5oub62aSdGEDa-3R znmW7N>YXR-l`&ujv1?d)cZ3N`m&7ujxV-SM5(LkeUz!&fT^2nGN-Q(f6*Vf=dZ9qs zS;m_W?zc35h$h_`ipIZOO7;Cl~7ti^a z@u`$leh4zx% z`@s|AV~_nUKW<-xhaPgOX6%FC;3B}5HF zLTEzHH+{-`tEUjn@>0sopC%LP@AE9ZQ{H&S^Mbxuo_eDNK)`EbDD?3FK15l!FPB|vM7|@8SdbrF9R(Tqr4+e>-BtDPevK8_slq*+%GGhwqVi{ zg@4G^;S~XlhDSANtx!pz1*{T?H>NuQ&WaaSSl;m!=2$4FVNSx@$^W*ijLZo9uM$Rt=9e z00;SC!>+FAf)ulZ?A=PB;zfWQT^MRTr*KQK-JR`QH!Wp=k?{5l%A13`L*@^4@pPwN zz)9r`l7R`}R+FJS*%d&fUSGSM1++F9-v$?b#MAponhxO6L$V-~Gau0HgS&a=+x;i9 z#EeapKKwn;lQba&q>aW{=AM2o7n5Mo`;oxqhb0-ro?THEMD|!F9mwFX7bMdx*!%GnR1wlm5J37l#tV&M)n{2+<%$- zv{ox}nc>@h%s2-T+}g`Lz`&m_DtVQb*DseeEB%1jOv}0=#T(36Zj;2#j+|8~s`|#e z#Y*C2KQPCV$_0(XnQ1b@!VuNs`Ob9VuE8SK`o-g97*4)@KR~+ns%yXh?OX@dX2gqT z^u*TaS?+-QPG_a|{cZJry>&IbORCZl$yOik0Q|%1?}YPwOc^TT%Xd_^+98b#G%l9I z=r)9t_61E)MkZq$)=91!<4X)>=XbTnk~lc@YzP$G-5|fcCer~*d**ML z#up*JJ-3}$IkZ~tmuq1Xb%2{qiq*vERWL7CEn1WomKL-UC)f`Q6nV*SkT8%Qj1JYp zYB{RWnnFz9jUh)Z5*Q#XX;yR|2u#g4hTJ$nhqAvvBwN{eN#;nk%|Px>Ejp-jQHHGfi2QelksR!1VT1 z>2@M<5l4Hg%v)dQX)DO`IiN)P*;fl@QIBp_qd%w4t(49|;qR-i1*kho0lh0FtgHh@MPB2e$L(+l*ogQH4LOmp0hP+SaB z1&nwFHuWap^(m9SBC_JD)zz{5JHYg zhDiK_$>BcFx|C(7UlEGA*X;tKSSj0F#V-657I-ws`7qQStNxa`Ajy7+KDd~1Zx4l*wogtE>W|b zya#0tt;97$EA4RMt08b+h{7gY;lMCHeJxAZZr}ZC*A%cW0c<7hRg!`3$;>4$ByBiz z@IFba%o%J1E-()#_Y$n&F1X;5I|5*j_xn>SaF|siB2}2TPtA3Sh&phUYZ4x!rX0QPW7Ayd-kCMvPjeeskDd)^$SziwUNVvAmB*U{qnSk zY6v&q1d<`mBNi7c`iy}i{qM&1hcMb1>O;1Adbq_Uxhus(Wcv|&@y7)@z;5YH#ik)w zHi<#h#RoAV)Q9;4A^%Q&WHScA&k7|%@G4BOn`$SZ%_;~zmYl^%rxel03l_fXizHmL zFZRyf+ro0xi;@>Dw-WfX`r`#Iuf8+s>4Hh;eVXyKiH1(&kE&0kE_w&Ft)+71yBQSB z^nHdcKLPSEu3G-5mnG+(`)LxfTWNK zpCc-J0z1|gc?`s)8hpCH4fiH%kCG#5MaK6m&Bo~OlC{|tWCniY`DEb5?GuYeZOake z_&Efx@P{HSo=SPRzoq&=e%g(|?`f7;uPhP;u2;0NeE)2X3*rxL0x`^V+StgJ1kus( ziX_j~e28@e(&YdN_%fuzQWW900k!9OXH}MjXDLYg8F-zI5RBb=JItZ+o(nl2Ex@cf zKxde@v7UuyM7#Um{$?b*d4pxiohA+hXPBcA!Gzz6h5UajCTwbPEeE|UzE&5Q+wZfr zzqFx_(uV)=M`;&-d{K9;b&=NLEF3pDh95s{mj?*lzv*>&(gN4LOlxzI#{INBI>7$v z9!bf3>pThT-7keMK}jst6g&&+fO8Y!Ra&q&ohND?0vfd8^GXIbU+3w^dH>fmcYn#J z_tke2J>QK)Fiig@cm`-Y{1e&-Y);Yud>|ieFoi&*?g+10SDq09Xn|)gC)LN**PnW( zvE8t-!$v*f0(23$B4`0=7#w9UT%aqoGxD9Vgi_T5tCibBIwc(ugshMrT+cJC-wTo9 zm;hN`jgCoz8-^5m>5nL_vHLmZajuB@W9E z91ck~=C05FS&T41@Pp<3aN&o8_=^}}{1IuRsHboFFM+rvUMg~l7CzuS{t1_0J&_fk z5_hRGr&hG}X2N>5h7MNsR>UxM^y-|$32}jnk6<}OFgk61o8>Myd9Zss6nT8SYk)n6S_&O>Y3U6 z!L7n1rqe$NG^g1Cmz%o{?z*&a44DI5j)Q|{oK#88N2y}ciGk+)NXF!Rm>{P%oN=tH zWkrDUN6)c}2TEF?4~9M;GV|ClRZb=y>MSZdIw^8JvYFNaQ4BisNL{(I?dgocC)7nD zrB}Dk4-4QjD!xn*4GflvD zYSG@c58~E%Ar50;9k`mN0~u}GmOdU;@qFZYh#_z&*khJ&lkU0kg5(tsIZC#Zb*d{j zA)$^LHJtv_6mwZPzJ0BDB`Z6bb;N*<=K!K=QK@*Z%psvfHnk7xV!%*t?WXy`9g8%d zbiPZrYKf)aoZ8j{`%@#!y=R@t*R&6U7n@((llms04&z(Vx>FBn}k93w0rY?Sv%kmd~iJvps-dy;>!qT*b5O;)Cr#wcnYI6#G>6pL&6rtnDEDNe|GDCNYD%^SVN%gM(z(rP-V7hk z_jx6`e95=(bV(xKsU}7Gx_p@5LrUB9z-pT$47M$A2qcy|tHudB zQ&DN@dPL-y#Y=mO^kX&rTZaJ%MD<~v{^!`pKi142-~SLPDJ${!4*nj!^#|~`@5~Ry z$X{Z)eg*zLtmUu3cCg>06aGIzF2DBlYh=TpeSv-OqW_9>_!a)E$LpVPst*J4zu>?6 zzy8|AuMSavb|LrSL;J5T{^}m}EBsf-fj{A<7{9}RaU=M(hhMGQfA#=_^~VJMW8?l6 z{C7>(pHKh*KsVzB*|`+tY6)ZqXC literal 0 HcmV?d00001 diff --git a/src/PhpWord/Template.php b/src/PhpWord/Template.php index 9d9cc604..537e0343 100644 --- a/src/PhpWord/Template.php +++ b/src/PhpWord/Template.php @@ -257,6 +257,70 @@ class Template $this->_documentXML = $result; } + /** + * Clone a block + * + * @param mixed $blockname + * @param int $clones + * @param bool $replace + * @return null + */ + public function cloneBlock($blockname, $clones = 1, $replace = true) + { + $xmlBlock = null; + preg_match('/(<\?xml.*)(\${'.$blockname.'}<\/w:.*?p>)(.*)()/is', $this->_documentXML, $matchs); + + if (isset($matchs[3])) { + $xmlBlock = $matchs[3]; + $cloned = array(); + for($i = 1; $i <= $clones; $i++) { + $cloned[] = $xmlBlock; + } + + if ($replace) { + $this->_documentXML = str_replace($matchs[2].$matchs[3].$matchs[4], implode('', $cloned), $this->_documentXML); + } + } + return $xmlBlock; + } + + /** + * Replace a block + * + * @param mixed $blockname + * @param $replacement + */ + public function replaceBlock($blockname, $replacement) + { + $this->deleteTemplateBlock($blockname, $replacement); + } + + public function xmlpretty($xml) + { + $domxml = new DOMDocument('1.0'); + $domxml->preserveWhiteSpace = false; + $domxml->formatOutput = true; + $domxml->loadXML($xml); + $xml_string = $domxml->saveXML(); + return $xml_string; + } + + /** + * Delete a block of text + * + * @param mixed $blockname + * @param string $replacement + */ + public function deleteTemplateBlock($blockname, $replacement = '') + { + $xmlBlock = null; + preg_match('/(<\?xml.*)(\${'.$blockname.'}<\/w:.*?p>)(.*)()/is', $this->_documentXML, $matchs); + + if (isset($matchs[3])) { + $this->_documentXML = str_replace($matchs[2].$matchs[3].$matchs[4], $replacement, $this->_documentXML); + } + } + /** * Save XML to temporary file *