From 5ee43cf3e1bf452254f7b5797ce8ff10fea17d9e Mon Sep 17 00:00:00 2001 From: Max P <48almonds@gmail.com> Date: Mon, 5 Nov 2018 17:36:05 -0800 Subject: [PATCH 1/4] Imported `unescape`. --- docxtpl/__init__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docxtpl/__init__.py b/docxtpl/__init__.py index c20bdc1..3291b61 100644 --- a/docxtpl/__init__.py +++ b/docxtpl/__init__.py @@ -15,10 +15,12 @@ from docx.opc.constants import RELATIONSHIP_TYPE as REL_TYPE from jinja2 import Template from jinja2.exceptions import TemplateError try: - from html import escape + from html import escape, unescape except ImportError: # cgi.escape is deprecated in python 3.7 from cgi import escape + import HTMLParser + unescape = HTMLParser.HTMLParser().unescape import re import six import binascii From 40bf39cde7fb9e00c70fbab15ddef106873e920b Mon Sep 17 00:00:00 2001 From: Max P <48almonds@gmail.com> Date: Mon, 5 Nov 2018 18:17:43 -0800 Subject: [PATCH 2/4] Added method `escape_values`. Exclusively for Python3. --- docxtpl/__init__.py | 41 ++++++++++++++++++++++++++++++++++++++--- tests/escape_auto.py | 12 ++++++++++++ 2 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 tests/escape_auto.py diff --git a/docxtpl/__init__.py b/docxtpl/__init__.py index 3291b61..287fcd0 100644 --- a/docxtpl/__init__.py +++ b/docxtpl/__init__.py @@ -19,13 +19,12 @@ try: except ImportError: # cgi.escape is deprecated in python 3.7 from cgi import escape - import HTMLParser - unescape = HTMLParser.HTMLParser().unescape import re import six import binascii import os import zipfile +import sys NEWLINE_XML = '' NEWPARAGRAPH_XML = '' @@ -171,7 +170,43 @@ class DocxTemplate(object): def map_headers_footers_xml(self, relKey, xml): self.docx._part._rels[relKey]._target._blob = xml - def render(self,context,jinja_env=None): + @staticmethod + def escape_values(context): + """Escape strings for an XML Word document + which may contain <, >, &, ', and ". + """ + def escape_recursively(d): + """Escape string values of the passed :dict: `d` in-place + including nested dictionaries. + """ + nonlocal hash_values + + for k, v in d.items(): + if isinstance(v, dict): + hash_value = id(v) + if hash_value not in hash_values: + hash_values.add(hash_value) + escape_recursively(v) + else: + # Avoid dict, Listing, InlineImage, RichText, etc. classes + # by comparing v to str. Do not use try-except. + if isinstance(v, str): + # Unescape at first to avoid secondary escaping + d[k] = escape(unescape(v)) + + # Avoid RecursionError (if back edges, i.e. cycles, exist) + # by using a set of hash values of iterated dictionaries. + hash_values = {id(context), } + + escape_recursively(context) + + def render(self, context, jinja_env=None): + if sys.version_info >= (3, 0): + self.escape_values(context) + else: + # Sorry folk, use awesome Python3 such as 3.6 + pass + # Body xml_src = self.build_xml(context,jinja_env) diff --git a/tests/escape_auto.py b/tests/escape_auto.py new file mode 100644 index 0000000..97708ef --- /dev/null +++ b/tests/escape_auto.py @@ -0,0 +1,12 @@ +from docxtpl import * + +tpl = DocxTemplate("test_files/escape_tpl.docx") + +context = {'myvar': R('"less than" must be escaped : <, this can be done with RichText() or R()'), + 'myescvar':'It can be escaped with a "|e" jinja filter in the template too : < ', + 'nlnp' : R('Here is a multiple\nlines\nstring\aand some\aother\aparagraphs\aNOTE: the current character styling is removed'), + 'mylisting': Listing('the listing\nwith\nsome\nlines\nand special chars : <>&'), + } + +tpl.render(context) +tpl.save("test_files/escape.docx") From 7e72603441999aa64aa2555d25219fcd3a735267 Mon Sep 17 00:00:00 2001 From: Max P <48almonds@gmail.com> Date: Mon, 5 Nov 2018 18:29:33 -0800 Subject: [PATCH 3/4] Added test files for the auto escape. --- tests/escape_auto.py | 5 +++-- tests/test_files/escape_auto.docx | Bin 0 -> 15118 bytes tests/test_files/escape_tpl_auto.docx | Bin 0 -> 17330 bytes 3 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 tests/test_files/escape_auto.docx create mode 100644 tests/test_files/escape_tpl_auto.docx diff --git a/tests/escape_auto.py b/tests/escape_auto.py index 97708ef..f38c3ed 100644 --- a/tests/escape_auto.py +++ b/tests/escape_auto.py @@ -1,12 +1,13 @@ from docxtpl import * -tpl = DocxTemplate("test_files/escape_tpl.docx") +tpl = DocxTemplate("test_files/escape_tpl_auto.docx") context = {'myvar': R('"less than" must be escaped : <, this can be done with RichText() or R()'), 'myescvar':'It can be escaped with a "|e" jinja filter in the template too : < ', 'nlnp' : R('Here is a multiple\nlines\nstring\aand some\aother\aparagraphs\aNOTE: the current character styling is removed'), 'mylisting': Listing('the listing\nwith\nsome\nlines\nand special chars : <>&'), + 'autoescape': """These string should be auto escaped for an XML Word document which may contain <, >, &, ", and '.""" } tpl.render(context) -tpl.save("test_files/escape.docx") +tpl.save("test_files/escape_auto.docx") diff --git a/tests/test_files/escape_auto.docx b/tests/test_files/escape_auto.docx new file mode 100644 index 0000000000000000000000000000000000000000..5507e43865762240d9ce0ff0e94d94104ad46003 GIT binary patch literal 15118 zcmeIZWpo@%vNbBS#mp93%*<$6%*@Q(VrH-yEM^9aWic}|%VLX}nXFItIdko!b?3hK zbAC*(mDSx@xudc&Dl?)ocF2f>f}sEb0YL!C#~4a#fX?lN0RsV%LIMFHztpOK1X$S{ zTG?wWxL6z7Y0@}bTJ*#ZS^3c+2;MwFb$=2Bmy#D+?CGr!-$C&${;2s! zD=5*Iq6NNWwRwCW<74(PA>T85b+itwFjTSp2|7#xV3GX#s39iT4BkE`Ssk3XR5USu ztfO|Jseu{i)+rrOi+C1TyPZpJg7_^NxfC*3BxwdivHjCos^I)XKN_E~H-74!vG(|y zhecu544(dBWl-o`mS;B9NLXYR7+g#NsFbjUvjIBOYwW7xKf;ktAR!%RnOV>mwDdoS zcoHd)wt-%Il(S(HvVk$0EkRR%4YBSq5;7I9;9*Zc_sbt-=m26=BCaKpfwcMlwO52r zitoTZb|ltkYAp~`ahW^#ogtg4!Xf8K-VN@C}8$}`Zx91x+A}0z1 zh_orev%ozk_UZ|4qVX9R4>E-g?zRm7gB2XO$8YD z9a?JF8+cA@kz*z6rp`VjmWDLvzzjE&vYm2WoT=cY_Vtm)r8a*&0gXe<+Xr zo4eNDi_#=PfPkQ1zO`))E$nD%ejZDsN5nws5xh@$1pA2#jx8vIM5LY`$7dhHj#f&g80cmF75(EUaT4 z1=Q3bJDX*B>PxOf`1W6eu4(p$nCy1j@cNUX^g!7#AP^MF?m|k>v^g zvr)fQFA8U|;mW)^`E`N7T!sEB=f}tiY%Xw~DUjWM6smc_!5W^b9J#Z^w|dl;Ow!C6 zK=Ni3YMm}QGgm@h($MJ`)C|7CNi+}cMjA+JKXyX4F?m@|=+!H<*8uMlH9y<{|8qn* zCvknPUmoYdmk~jD84&}3zKkuv+KyJ&+WP0SoF+FU)kTNUOn3$_dpvDgh@kL}P{E(= zG#YDgzLGUKKwrH!ba%Ciz!G9zNQ$#+!Sj0du(+;FIlD?$E`g&9nYTXJtL z46gJM7vK=uc~9}9uKBZnz7b<=`I zM*Id3Y(D3rD;g1wy4TXDtlhB46V%lYu&vxokvi&y7DXE!L!WXW#rcL18uA#4CIoW4 z7YR0XFjZnHgERJMc?oP4STL}IUgg_*(j9?)#NCSd1N@)b;WN1DqI%KJ&*v5KPwnUf zYz=>@CtBOQlMbb4^@dzb`+l0F5MOQqV)4|pQzs(4C1A5icLXnbc)w0tt!Dq!G;)Cb zCczHAaK~+igwt9JYuO;TT@@tx9l=%pz>0FHdpt1@9kq%%6Vp7fJ4*pPa~&!xoL1V` z@4jFe0#Vnfb&`#+9ZC=`t>8WGh&UV}<{K!`XS*!@3_nI#yv4!_L_X;Ff`4+=u@csE z<%i;Ve-vr{*84kznoOpja4!DtI_&q@HcmP+WhvsWj!w-3RqSOqT4DV;2SHZM5_;Yb z8AAzmx-%O4trT$NrQqfDplD$qt7(f3d8qVD%^}y%tefpBVmwY_r+4pFGHTh7_=wJ~ z_7ks4+$GY}l|y6W6Nhd2ZMihpDk%z3d$pPG8NGmuKLd6$;a zA>cqjj2M3ntrNi3fcE9-cd&d}%zqB;jEXv7kp;zbwH*Hvq0Spwv~@<-99`7X7q;L#`o{l!-T?Q+$eGZbJ%mD8G7Upicqx={&!%Ml!1iOTjTD*1r^_bSS*lq z3iqZ!x|ZMNnr18>Ib@n#n7q%&_9rADELl^GID#1JBjN#H!Z2qsAedtGwpRlW+f@nP z)Pl3&Q0}2RV^BPA(+i-g0@UUvq!2Do#4~~6fGGoq?xYF@X8X{Q@sTva(FgOJAH!R1 zIKWK|l~e*z<#<{Rk_|JhhVOC^Q|aMvQx1NqXf)0e^~cn@gVHI3m0ID#OSa9uO9A<7xU zS4hVVZ2My&cvLV_G4#AW*<;dO40o1eR+OwnG(oiNNW~a6Y4RgbN#jyvNJMmd^_f-_pDKOU2@Pl3W`XmBISj zk>u!!VFLS!G!+HEvG%;R;ef>~fDnTZ`P!`?ywMJ{3u7b*nbVo63}Cr;E0hsrl`#Eg z2|kB?E|RaZ?t$l8XEtt9?dmt=0Bd&TISvUe=b@YiPP&+c0{X~@6PlnMJ)LJ5JQh(nhMU;3PnbKffFrRqfl&AQH>|%LQ8Hu zSD*O3>o+stV^Vl^j&k7riYx6_p39c$C(-wL4RwjGe!;=e;KUQt*!WtLA`)M`_$X9| zuxRt5^S<#a1@u#Xzeu5WdLzDdzLQ%?t;>wjE>NJ+Zttdz_zecObw%?EPp(VRAWuZM zRU|Wo|05l~qKU!z^Qc(`sdjNR;pvt3iT16{07XnbL0D%AC&P^D&XrIetg1gdZkOFe zuBQ85may0c`ufn~B1w`RP9PaOf<{VrII6DoSiLC31^qo(odK{U9fU7*84I{$@OvAT zaf{j#Uim)na6bgkMuZ6Byk-L?tgcU#Bj@6Zy_dv>(39Dj*j1x>HD-6VpIKu`^>35% zcOb~u6YnxtOXgB)m{$RC?fyH9O#KDV$zj$$NIIw>UZ3hkQZ9AXhC|=PZr3%;Ah6!3 zotf~2Et^w?Z_wi@uokSbf#^Ru5Yy1R3_r1EEWT|*Wjr#jSIgNVF0&n=T{CN9`5DpD8Y@p<&lf-piS+!&ZC@hN{_ zoV>j~IImQv6uYb5KpJpU(H}O8Rr4VyX%b!LP~JsYSjSCjI1r3GbS>8&qycPT+Twfx zu*JTUH1BDYoCkhV2~J304|#iiJfCv9({zPNUl?D|G8~5{|)XooKef&e$#i*SgSl8qF_BFZ!&}VkmS#Ek9)3yAmJLZ%`qSt^L`{L zhh|SOIKp;9tVfxkgzuT4-*vC~$Z0Z-+u;lV`@6`A&e$>K745Z$vTA`!Za9m^l_DA$ zCwJ5uWG%!O)AiqgYGhLv7g2wgMLXe!NUg|>i-i~@vsDDGv@VJ1hX}A=;8nc^;NE!*jv(27FQCV)iSNYo0qc8STCYmMD3e^<0Y2SM6Wn3=t!V>UGykra z>MpdeNb~#et)TC|%QPJ(T%7nk6kp!|n40VC1h+nz!V@45%ZY0T^s)On|3FA(tUpWZ z$RNO0rwMwvLtk?yoT$psx`zFyxxAcWA^7w%>Xk1h^QWKqYt)SZ0DD7Q`k&S^FLp7) zmk!~RcEF`4H3qX)4oM2LRr6wrw2b-Z-gE})Y(N`0d%d}y41i2#JH=}|gMm_HpMZnB z5Qm&9C1==8oX(MIBc#y>2_}rO5RWdWLR7wkjRxlMlul}Wf7DlZi9PEkLjkYwBXdOB z{e&Z5D1ruvaH1g!7q3Iurfxq*+s2+(R3r6>N?DhY8J{d3u5Ki1z(=c9kU2TpT7D=m zxPIqJonh>)Own*>^SoGs&G&g)$q>6SH%OICRLU9;6ohYR{NChfl2|OtUr|w87{P8j zmj~rUe@P28xLn|)qAjy;=Q%g0jB6%qla^S=jff3m$&U1IV}C~+0<}!+S;VY7BH0@W z{E5{&cq5Xaml>p~YCl3q_olqz5uBtBN3vN+{ov!!WF)GJ^w1Sp(_FU&gISlXQdr5& z0?_hcCYduH_(S%f&lfIY6MD*^a3~O|L(grph`!nFhmrMc5$tw)f5>Z}Y94buCfFWGlMK&b!HnZ1djr6KLF<1fV> zsY*sJ3ShJnp5Y0#)G;=i(3hal(v&8BW$j`HRr8lchL9B`*?|r>_;#2Ak1H_0^YN@%u z^`3J{i@@A`(hyMTkOQlwJw-eXPt+_`z;g6AwaCH{Zm-4ragRgSM2{^OsiH1_tocU! zYxLfyzHXm{;9*gw5?adO$#`%|^X2=Z+jXHH~{|L3PGJ#nXr_TITE*yq~PX?Kdz8ic6u0M{9y?7rno~~|FcHmp-Hu55#pZcUdAGYimW%k;QwR!G026BwG zJ??jI;9*WJecp03OB24IaIp2ib^-f@2^QtUh9k(^tx)hS0yJ1ZbrNG-6E%K(jxvyj-;}@Y9o5DjSd=3FNYQ0#>be$ zQGWNP4KUlJWEDq#IXSz?5B)ZLdf76rk&zJeQOo(&n{%4`kTiEPS&Jw&^vsR9(r*VP z>;r@l5`slP1UU_`Hr2_bFd{$T*s2KeE9w~OiK+~QC!DFQ^?#v{NQ`Lyq-Y{{uJgV* zx+~9DTzPhPg8K2K-uGsR#WyJp2A^VqqLpY|~%y z`Vn)kxI`x_ks#{AkDDv;QZi1@&X3wc{dpUB_!0C*Af+%v~M17+<tzv(047pDQ;E=L;m^oWX1yG1<|L4x_q(K$Q;{ zzu3~6%C(%!6VL2V07a7nb~{iF ztc%u7JtQAMPD{Nl=r>}zr=WzTf%F-o(6Iu>uIO;~vPG0@u5Eu-o;Nid_>)z2I$BNs z1)iBM?WcH{z;1a;$L*nYTs+G6aQx2@u-{Y;^~amijT5AaxfqM40=%J0(Sw!C9x3gd{mLvvq_n2zU`bIy5@hZot&;x-u)4hKRr5*a&yE?JfeZ2Ztm$A?@Q086T59P zw9X%Z-6(@3S5B&9-EZKd1u^(u5%TM$gIy6Nd+JSTs_@FDuguXD5F}KZRDf?3x8k=u zBqJ$BuU08cR1c&4GKuq5V0NOC3?%?z%_{#|bqY#Ezjf$`D#;mU2v@-Aro1-&T`Cvu zF!+o#W9W2EemOT3ivOa35#rjsGyx> z!MhQbx0!bGj5LN$6K!JdM?p*#d)=q|c z@`m>IrdGywKMi(Vj3i)@4(8Jd=rtb9@;lBClkhpBKAF38nFpUrk2K@=1QLm$vXSPV zuJkPmL{o6~WBL;|^^tPR0a_)ZwFn|PDWPX%$dGISd5*;m&aTazO(>9pdt#>J9U4r0 z>qci+Lk?+kGLJqO>@i6BY=foAp$=g@((-cV712Vw9X1u6I)(}C?yo7-_d4zeM2ohu-fSmaY}0nxJ!S)l=jNpdqV{|3R=9eoxiG(3>TcGoxw_>MnYG7}Sjl&_#-j zwN@5|MuXNeEv%bv6HPmard>a$NEyvnjtOPSYOidt^iwxwqnJz^eAg04aXfP<`BbWW z@Z2A{E8Rof8+7eA8csD-QMI1cdqxc9xa*Km$Jneez6b?-4m=>)4W}Ey@lHv#`M^ZQ zk}cg`#MBj|k?{u5gmEdW{siTO5f5zcJMIB1aWTdHTo2$jg_&)`ZFQ*5S+zfVr9w}F zH&B7E{VfwiT?0c~hQItRbAT@$%BN?jy_-^;Pf)ft zjPzf$$z(?DR_s>f(NM`5g098PgeivP6r2H&y%DGyvNvDAKsO|g@seb}Z8qp&E5Bjj z3XZ97sM5i3lG;6@oZ;M;3DtkFsfIB@^)>&FYy=KIb^}V-fW^===KKRMcT}7){-7f1 zoy>Hg@HaidwSsDRAM--=cLV{vUerCX?@RUCA9F*u_i}Xh3>5xj&V_P@>MY z4g~oOWp*>2)>=yq|hrM+TS5?X$0Ua2`j((j&WBSCx#oRO+s=8A#5gq zM=#X5nwo|r7=VkkI-MM|O)_-=6vNm)e0G2^h32#T0aiGta`8dK^R4`X56N+k$9_h7 zUO8n&TKp8G<4v$C`t+xq5{$bgGf;a%zwGZGD2Jg~Z?o@XGq+kc=tyPqIg&*+weIzv>%~gEogL=yWT$# zE6^4{M-rS~bK3CFhEFm#sYGRO@?N87(84+02x~_B*=Lpvm~iREiV#|q4YTB|X3ViN zinZItTufpmO~in?wmsgim1&{OI^(mgw)2OE9XFSw$%5&TG6#Mx&F#?BP20u=EVE25 zJ$+MV?c5J>tC7t+FCf#k5aSGUgYQ8LKsv8Nb)yc4zaS(PCsG6DRP0DnY710SPf#9( zg7oG-sN6CwlZXtSf{s$^RILcW(`8%^0f8#$qte(rN7rG1iP8Yd#}6bR!Flf+6E7@Q zt>Qk9b#R+6fK)4Btw`j(SLv3NtA$bawRt^nfejT3l@-k(tOk^paS*B22$_quEjB!b zF+ABvuMbCL72d#7!@6{EiakILxH>@0RK?f&;V`=6(KxK{egn3n!o;ZPm3zr-6EDm6)J*$U2)LM4ze14r8HGA86z;F>(A=1IhG~?d_1y{*n{j zU>;0Hy?$Z!?Kl>jXVQdqRRdo1mFrk_Z`$;->Bo~3;a1)~8~GB`O6E#NUyGi*tpZXK z;hD}HXca~Wpq?Ep$jc#I_z*8Li7k1PfcdLO^4vy5vLYDTrs<(MjA-rsTa7#}KH7gD zy$y{x28ri=^%iT)!7V-YvOLE@{jvRM_s9C2r=)JT&w}82Qhs_HkbvY)>dZgN*KWxn z>b4!#dMQ~8W|AE$98Hj_y?P}`Ph=H1#Y5n+dR$i==Qy&Qz&e@=Dw`}uk9Wtq(oc{b zl^C+@ez_yg(u%{rfbWAC<2x)&nk}q-?A6GbpNs*jv;YjAC9gHS+(K{2k+iEP%{Iwe zNd(egs(_98t!UYw@JcOigZ~@}Gg)3}#1zR{Yu%B-_Ekp~(V1>J&!WsT6`m210$3fvJ^$%KA9AjKR=zYG&@MRA~igu@U3uLgl zRPiTk%16h$W;gKf+iSsVHiC&nK1z*SK1`;vP$z z_J6N|+poNfO^)D(V#(wzWqb&QS&48PU^|(aXd&A(3_Zvy6p!!57xgsVWJ!EeU@I*^ zc#h7LvXz5xb*C4JLIES2f`n>a1uus|oK(|w?qrIaS%sqEUJx{66e(6|272(onY53! z%P=uYKn$>^@-4K%(UcpWSX_c_Hc_IK_(T-3rzA$0OQ1b-2X~(7d>rw_a{cz(!6l7H zaC-&|o;{5$rQO=Mh#1crQ(@$Ki0(Bt+TM|>ZaU5g)4biQld&4X>zA+|56Q4p$?;}iFh^}@#1EUEl%uC2egR~w$2^50~d}Q!7CKWh_DmM2-SO#cb z=oSK!(dInXU1Z~d&Ndvq{9xWDoMD~Dpyo9;8E-=*IQk(vt&+D%US(Gl7aLnTrE@kI zy&VWKccQT{_Xfpu5wpvbyT|DTSGVPO`b~qGj5sT)Hf@%_v6>EZx_*|rjVBLN_j~@L544Jj<*+zuHlWv0lVWfdK;g>H-7=|1V=#N>f+f zU_or5YhVd&(q@ zuy|Ef;-x6Mbx_{c;_q`2LsB@F9hx)I6hjy&M04@Dd$zv&(6xSh*e}Y6JU6`*C$}@xbH;YqD?sK<0thi0&sD-*Xb!HN89@m3yKhLD*_L5*=mmXnf8FBYGa& z*GB`bAALv3ds;QOcDrf7Ba@g59Z)*gD$dKm3U3-K`k>1XDrF$sc(zfU%k7lKUDX|m zygkXZ)rb8CoR-M5x+g3j2<6_YQ?7P&<;+i(I-1OihvV~eKnEOM7jQ2SoisTdy?l`F zJ=SD`4|3xP0FN*}O0iw^F$#NyLfH2$UVSpI9q%ObfFBhqZ_IK=Mo+W z4#I4Ow>;lx`iyny(eb1u@V0Jc2a2ZC*TkqC<%Zz+;_mzyYH?8oL)8|a%Sd_<>yVs(cHz4vJ5GjtyG z%*&1=N(&)(G8HPWk0|DDDd10{?f(J4cJyg^H1Fjj19D{aj z(gk(+tGFgEgMy_=?In@18m9C07yUxS#)HqT4Lex%&rQMw3CC=2;shu~bq~gyJy(M8 ziPM3($j6RQx+@7Ag^u1_d|ZOYE^GvigX59<>RuF7GF^1V#)>7OV;gZH#C6qu@J z1VfAp3s6Sn0?Cu}JSiWil-hp&kY^Hq$~Sp>IO-S!Y2-b?aNu=v!l{@R>QujvL|jAm z{?QfAVZ6T-lvYGW6FU3L(^CJF{%s2S&ZuCVqap&b3Oh=-UX4_)hOf!o$m0n$rB|mg)GU7^DqzS028FY?g(wN*Yu%`SI45eFMUUI+=lU%QZ zhNyG{$`xONlE>KR8J*4_<#@q^jz4<1d{}NEv^fE7gb%`-pE#Pb5qWI?%Ia6|QvYzs zRiP4_l&yaVRIU>LbsS4R4f1j8t>)9B6ez6=B6f=!$AY+cK_JoLLLFT{3emRe`!myg zygQ{{nSqD2)-nuHF3#!)f3%wlgJ~oi(N4AsRCO*|o{L9)T^1sjXX0SmQRsQ7qPLV4 zgQi_f+E1d(KMIeb?MhNH?~{$sA9GUouiF;XyRI@wrmdd}Amk)@xFDWutSgu`p8ZPK zEN~7T_$H_4wD_5~=Q)<5jUSvJ(7i(XK;la-+O^)s^Ok@(ROQkc zsPbq=(-bph2KYv~|ARJgW=Z<6n2r9(4ywdwVv#1$6@bfv43_j99_uGJx0~)C$0Spu zNf(i+hTj>k>K{I8*14~vPy1Vw#6?qkMQH<$bl zoFezHzfdm{)2?9@Od_EbOaMq`Vfn*=~8WP;e`@CBgQXa2kr0SL~Qs&pTy zBb%2Z34$so@lwWp{%ZQW34#xlf{qo+pAsEb7-h1!X=JimL^JtAUJBG-(*Ds+86T+O z@ZS=HSe_LU$QE^MDGipy+DE^@V) zK^mn^)gG$XfOUPZrrsN@rviwrbs^GOi8G>ZeC}C``2DaiH4gnG86g1@~uhDnXFC@@J{@S2Gu6~L&V&kC=M&z zEB7%rY1*2s>(?0qU`mHEVAasyn6*tfN@gORyiZ^y(^3BfWr_)j{}lHEVkW{6g{9km zk@a;NVTPoJD^yR5T5;GWrXqyEimwb~J=(5kJX5Vm<(-l^s;_PhSPesQd{K6iqPXJK za8X`Sn9&T<_*99S8OrR-LE&48+N5}RaeQ(v3%o*=S)r(zMon%UmNIpX*h{TiUaz9K zYoX1IT+DR+&yyFM7E08nKWj_nHj46;UQR`8y+Edkn9J16qF->#qRV!CEPq3PHX?5M z3;JiH{|^Z-SFZk-c)8-~WHZxSjR&9@ouQMIv+%09#1JQIW!%KG5T~f3P;c8Vb-+Uw zkuH_m`WI=r!k)^Gec!A{UQrjtf?9TVOzFPR_4o5K1iFMvuz-N#mEv4ee^=i9Yhb)P z$LS{$Q>|=@l$wK7Tl1OurqJ9T#~SGD(xXv-3~I}Gy_)NESL2v`pPij$wf@B_sE{$2 zGcPN`iKnrBc_l&d7IX$O*5>>V*1{pBswJyTnFl2*oE+@tDs2=iFafUCZoUCh}?Jv~Ms&2*jRWyZ?Lb+X6w_4WlEx33$YwEPo_e^FZL%#J2Pu8PA0;F1~ z(5wur5NckWPTb!PWC3xrXQU^v9(@6H_9$z~$*WjVXeE}c&|c5=WIA{7OK5l=+KR1( zgmph_r-qmDh}HDiP0#hny|0=U+0#1jsM{f_0gOr3@$RptBR_<6o8Q?Xec8zkY@(gS zxh=uFtJ zB#zEJrg6?5m=)|bTUzw^Xgzxh+hKVxz3{Op-gTL4%XKIVB)76Ohnb_Q>Y{@?(rS2d z#M8Y$@XGTca(x*UAf>QRJ@&9(6giJArl?2`EvGI;5o6iKrj+1Zo2VTzYE~Ew-%xn3 zZbix7(o_Q>U~1hx@)1nH7b-Y7fW|MUNI!S;Wdn*0|?9ydVGncPjsm z4F7kh@;`2;^8X0uGyXT6|DPGo_Ynsg26`ca8ov-|3`?GijWC>qBcy z>Y8eh4J@`ks)E^zu6}&wkMAErX?cA&O-&Z8!BdiIqg@jhaN?(1 zeG0|RK~_*hbqX55&tnNzCtn^{|0e!eOY&|+Y#)vM=U>+o?9*5{0{8$!SX%d$~8hz>;G9A>hjs*F9e;6l1F}-^$Ug(mbfu#91 zF%1YULOU>s1I$sFT`PR>(5m>Hwpg5TvfHv+_==@s+5y;c`MlL{*-}r-*6cflI2!M9 zZ0%(Ykf6*1&>%V!D#X6J@9c&-mcmzFEVk|Xtaw*TM556F|LjC28W93E0K7*@4J zjig_+7f!?C19+ERiW0Jq)=5=sqe#`^M`hkHtRakW1=f+2z(UEATCw1fj2V`u#A^{Y zYpr!O8(wlOQZM3~v}%fE2=-N<^T&-KU!BuWp0>eU$`2U(;yy3m)BZCU@qa{+{+{Ch zU6=pk*5y!ZKmf?g9JhR#<9|eu0QP@O@{x!|e1yJ}xO+IX8!+S^S+gG1nsB)z%bGym;DNGaVfKlmRiuLJ^ zGW504@DV+uBGSDmfTgo4g};p{;;#A9^|i~PdU|}2bFQ7;h@CkCPv}hpCej+f`3{$8 zOdfP3j@3wq$idUhQAO@TX+L97wER(drNP;TluuT9fbymr-t9HGPwP4|K(}AZEnxbx6`_ccmm${J`Z-xM77>-NWKNd5`A@`GJq?| zwIZ3Jd|v;DDVfbU_}d{~RS(eO;KAu{p!hr|rd^OI=TxSmYuL zt-^$xhELCiMR;PZvDX9LWzVljUjK(B|2t6pUt->W0x=I51mzbOR6$>Dtse@*@U4flD;=K2NyH$>pql3vf6-;!=#LNdQ3{XuSh zjebq6{EaS#`y2h5X8BsgYl_Zq5xFmnonIYzMc8>Q;kAALEx{P=ZwY_!MP8#{Qx$%r zv0oBm{vLoohzqarujALh@xoYt0xUoO{XhNi_3!`y literal 0 HcmV?d00001 diff --git a/tests/test_files/escape_tpl_auto.docx b/tests/test_files/escape_tpl_auto.docx new file mode 100644 index 0000000000000000000000000000000000000000..9a8dd4592dff932c58d088e7b3f6d1f0e612c21e GIT binary patch literal 17330 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 literal 0 HcmV?d00001 From 8dc7cc7de37364fda6b5c7fe9bdac04dfc8e8fbd Mon Sep 17 00:00:00 2001 From: Max P <48almonds@gmail.com> Date: Mon, 5 Nov 2018 18:31:16 -0800 Subject: [PATCH 4/4] Added reminder for the test files. --- tests/test_files/escape_auto.docx | Bin 15118 -> 15169 bytes tests/test_files/escape_tpl_auto.docx | Bin 17330 -> 17378 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/test_files/escape_auto.docx b/tests/test_files/escape_auto.docx index 5507e43865762240d9ce0ff0e94d94104ad46003..634c112047cf5044703bd5d6935f3fc0d60879f4 100644 GIT binary patch delta 4519 zcmZ8lby!qgx1XV50AYY3rMnwuMCp(cP!MU5p_EcWa->6gVCWWU1VLaxY5?hOkybi= zrFFRAz3+FucmHwrex6l(owLqwMVwcM7f4SF7mpeM01yEdkowY8HO!?z;6iOLkP=9= zfQ0M3SWpT_uHf(?Dko4zM9${t&i+U!mvI1v<|ys0G3iEX0*cQb!?Hivkuc#aGe% zJa-UBMRLC5YkD?2u^PQBP4^`Xg+I0vKr~ZB`8?lzV)X?aayrHM6I6&SF9%2a`v5E6 zTg^wZ+7{sd=zdQAJapxYUty6(ok`$(xZ9W^pP$_MP?L|<8ixY?3GY&{ZqM*%I!t!G zhrIbHt*u}r0!Fmtk7lIUEfQ@k`uPdW&0fudQ(twANn&E;ANPwLY4vD!p|s>^>(lQI z(H&X@-G@NRzsv5I;QHC%#9Tk@xpDr<|!u$JUz;zTB60<~r0Duk-0Dz3ZqXEVuv+)Fg*2q4*6Aqp;)GLBfwxhjUd2Rn! zY*i&m>peaIP>5W@r$;<7efdR}I&jG{|47-G%AfEIQ>1@{S6Tv zj^)A0pXJ)M-Ns7?Bg_1^u_x}^_?QRm7%3dQs!xu)-W7T~v$Y84?-87sZNY+8YR#CR z=_2f=F=~@MCy#pDt6){gd))?SDtxp1;D3mXjL0|SQhQ}IxWL7+u@4!k5O6aRs)@HXG`rT34Hq7RmZU}h| z-`sc?WBl3wPQgxcb!1T5dtT+0^BjC6(Zkl+GuA0Vz8U9TLOpX_2mTK%DjX5jQ-UU; zpCy^whWj5Ia30~rwvz8<$Pd??1riRnz~@4yc6z@?$c7{I;`|SM2gACQ31Zq$hz27J zK&(_;MzkNc^zbD9VJs{q?2~QWF^*fS+u2+9E2nEpVI=Ug4W)WF!_}ar%=e>G8?k>J z)A4x`uQu*jL5c(Aj3~@gwJuN#cJaaqQ9X-k&K1l@J~EKuno? ztBfiX_n|+6g6E+cR8h}YFNTX*iz$LY!CrJkgN`J`qEi3hKy?LgL9fWV!M<@lL0!B% zY4KG5K#kzow^pXn7_L`2RkqJf&;n|(yqnh16jU2~GFsJQTkO#uno?}Dt4!UM#LLdp zwQWKgjK4*p>=gqp8cSfcF$=-#Rd!9oy5SgQK#f}nXSdxLc)lUNTqX?F$Q5G!Q8~dNxKMv?(c_&oZ`xR60 z9KqeA%ONwU4PuCt}t>+_vr}J!m%qT~zesQn$lL!x*!& zsTxG5M^5eUBHMoT&I1)N-f$cnB<-CT2U`F2ySfHJNwh&qR(YMj*v1~a!*~st68iij z;1n4llsyCRoV^gSWVx`|#s;z%p&QbCLjtI1Ni+*ep?RYE?^{tVEbUF>4b#Xb|qKs6Q0DbD7rtaO{j8Y}jvMusV99Y^G~{XzOjvVfFEj$y9Et~*E((k!51-<;`$t7HU zmDZzmui;jp!C;+b^-wgu*Bp21FYx?xFKh%wj^6Y(8%=a5zS@xNm`$LkXmsd6S8lHB zD2oz-1NOc*gOU{f(~*Q*=S0e5L&7%PFLXbEI*C8%j+^K~=jqg<&n}GiOECyPV_UWI z65vg!@WI!wMS*&x2kFbLO!0mNXs)XW$yIVJw?0B`#XjUt)S=1K1LJg*3<+;#A0R^ zc7NEFwXf1BJ$U1AG~DZOKjXGa{?it3lXa=5vWVL}uz;a+3vHLk1pFkObcR!{z>^Mc1dn0f^8Z7P5T$9*T#T6ud_08Opv*jl`Q2ZLD!R?;a_j> zsWCSMCIRN!1PJPez(dE6Lw1w7Gif*lmv8}qKBNT$FM?2x&At(>!{a!@G@jbphXUw$ z9BJTS&X3J4sg+l~WcR4XPxk_w$DL-rB7D{cq2QuY>e?X01{o7ONmS|V5CNjqwzIE& zjDR>MjoMaPmg?@=kHd-Id{bR?)#K#6MA<)V*7sxiCdM>q{V<8GNG?hRm!j3)cB4Ht zrqUT@1XPeyBrzWfpUhGZ+Td~#;IQ9UjH*kadtt&``hEJ5aOqbUN5wBJJNYhA^Nkg@ z?#n7^uvHC80;op*Y2Bnz?A2o_)>ETzXRZ;lFYNYoTfIBo9~i87$D59qGih>x3Z$qb zB{ErQ%$GNjqkg-0A{UrzP&nR8<&RU-d*rz(5dL5d$#b!&#uU0O2_9D?jat*HxA{2^ zRS7W5MM9DBp6mpY@1)~Fe(uW-y4l&6fcL+elfOcXxb*Rpeb+B?Hsbh|D23y{33$X& zN8XL*W{@ied4-XtgMKMNOZBzuH`@n6{W5AORzH=5-?N#LNtZ9tJOz+*P{z;?eF_2g;nt3$ipq^j2o^@y zaEo9z?kHH4^p}MlgAOt<*D*^dvTW;HgTz2*kpgRcidd;_$z zd_eDKc!rbE@>@@n!er=A%VMbzu&p6yx%f|5(&cf;{n;Kt%&XRYI2L`cd=L>&+j9J* z$C~cci0vOF@78gjku_80eCk9iZH`fH%r;P_oV00fCAJ5AWTyX3?lDV>K0L8}2A>8s zLL9^RqVG95nk%9+e3VHH)zMWQIZem92vjUdF+_<2oZC-@B)4MA-#uUfajAZK&MVWq8h4iWa_n!L5*5ZC6F#HQ)9 z@Zld;RnG;g#D(9}h>87vwkx(p;Th<{d9ar!^8y6W-ox*GpDa`9{GBpL1Or%i#{P z?n$*!aZh)}KIuIkQl#myFy>L@;mioYac@BBf`h#i9v>8%Y}9kxMqHy*XVpkk<|pKYsjadP@~SlSBv#!?HHbl>*(`&t zc)J!M`E}5*7yF39&oCjMrQqC?tj4)q9A_kPDaC-M^2bCMuUsL!lufm)I;QQOA6NAK zyD;n{Ckrka6ElLe7F@yXM$(#1ipkqkucY{Eo2&ZUgp%#v_U$-$U%;)l25@$pzIzfj z?{vwn4=x)T$+gZqR_~$}RE;kI1GJJfMBAnaCF!+i43BE$8RXVOtx-PJc&WA-3HK+n zBxJj1U;!FL{8;*`*08shU!r4D!VqmQEk%S}QsoN_LFk6#WzscXs#`UKApd6!AxhIx znL`nM%1?IeiU^ftp25-@Vl3>N;q$md4WO;UO<4yK&pA2$cvlXxs{sZ1WPkR}qa|lD zEY9B%bCWg3MNvTFn{;8#wu}KH-NjiDORir;DSDQ8_7IW3$aN`1A(Um#B@dU%>MwE4 zdf1Gf=ECpbVK2=CF`8j{pLV(80$N7`4u(&DxD-cQ2~;5SsKBwxV4@+m6klY5yvS)G zK5>>k436)Rn9$<(&E@!b;6t1}^sz!|gF&`P&VKsMLJ*}nS^C(4#}V^e z-G{gwk_-~n(LPyU$P5QtQ|v;`IzRcRg#GkW3IB%~mzb|I?oO9OfEQxnW9J0)wYQa*AEd08G>+}U+P~q6dauH|DwOpa9!Hexrw=)sW1aIQ z2{S&$p5!eNpjw4H_Uo8(t-LeSHnQkH^+)&IVkASgKuU=GSgbCC-{C4E0l`0;yS&&PSOlntA5${xbV2HNNJap#ziVsKlfvDO_+Cz=6?TDuXA9F zuV>D(X7XI+M)?HA>#XVZHoZV@iTdzATdDY|u<3N4@Dw$+^IWHXVbuRJ>)v2|$caJf zkihY;dozb^+Q-U$8{_vf$Q!3D|BjNIq600NdQ)cTODkMIlcZ(;cQi0AE&V5a{`9Iy zN*QUEn_&7+3rYt7P+kug{#~zu14ug=)@vmZGPiL`LC9n!rMa zJd|O+=DH<&8#sX!lI8rP^=v6fJ@L99KDe%GZrJ}_uYrR|H(8Er{y6Au`FIEb;O+Xt zR>T2rZ3}-PF8s>*`TsQm*ZC|NvwC^0NtFNq0ROAzdVdX6K_1Go{jv6+`ibQK`{0Tc zh2Hp}54{ZxK)OP2ZhCDQsEVwBvRt39T>xGnx1lV5Ueh1&rG!C%RY+dgjo1zA0@5DF e^4EVC52FDlA&X#a|0CXs{0`$F@Rq*0+kXLB9Y|vU delta 4598 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 diff --git a/tests/test_files/escape_tpl_auto.docx b/tests/test_files/escape_tpl_auto.docx index 9a8dd4592dff932c58d088e7b3f6d1f0e612c21e..c6f7a6c5b5456134779f35fb5a4fa6deae65aac9 100644 GIT binary patch delta 4078 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 delta 4022 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