From 8ae189f14d5f87297ad8e7f5ef8e04fd08bccecb Mon Sep 17 00:00:00 2001 From: Janos Erdos Date: Fri, 13 Sep 2019 11:03:18 +0200 Subject: [PATCH 1/5] fix: hyperlinks in relations file --- src/stencil/model.clj | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/stencil/model.clj b/src/stencil/model.clj index d5cd4db4..35bb8ee1 100644 --- a/src/stencil/model.clj +++ b/src/stencil/model.clj @@ -73,7 +73,7 @@ :when (= tag-relationship (:tag d))] [(:Id (:attrs d)) {::type (doto (:Type (:attrs d)) assert) ::target (doto (:Target (:attrs d)) assert) - ::mode (:TargetMode :attrs)}])))) + ::mode (:TargetMode (:attrs d))}])))) (defn- parse-style @@ -284,6 +284,7 @@ (.getParentFile (file (:source-file m)))))) path-parent (some-> m :path file .getParentFile)] relation (vals (:parsed (:relations m))) + :when (not= "External" (::mode relation)) :let [path (str (.normalize (.toPath (file path-parent (::target relation)))))] :when (or (:writer relation) (not (contains? result path))) :let [src (or (:source-file relation) (file @src-parent (::target relation)))]] From c74cc439bdeb40c9b91d753536ed1ce7798ad0be Mon Sep 17 00:00:00 2001 From: Janos Erdos Date: Fri, 13 Sep 2019 19:56:17 +0200 Subject: [PATCH 2/5] asdf --- src/stencil/model.clj | 1 + 1 file changed, 1 insertion(+) diff --git a/src/stencil/model.clj b/src/stencil/model.clj index 35bb8ee1..b60eb17b 100644 --- a/src/stencil/model.clj +++ b/src/stencil/model.clj @@ -376,6 +376,7 @@ (doall (for [[old-rel-id m] (-> model :main :relations :parsed (doto assert)) :when (= rel-type-image (::type m)) + :when (not= "Remote" (::mode m)) :let [new-id (->relation-id) extension (last (.split (str (::target m)) "\\.")) new-path (str new-id "." extension)]] From ee99dc93c183ef1a33b71a62d6b34f5713bfa96d Mon Sep 17 00:00:00 2001 From: Janos Erdos Date: Fri, 13 Sep 2019 19:57:35 +0200 Subject: [PATCH 3/5] typo fix --- src/stencil/model.clj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stencil/model.clj b/src/stencil/model.clj index b60eb17b..13fa19b0 100644 --- a/src/stencil/model.clj +++ b/src/stencil/model.clj @@ -376,7 +376,7 @@ (doall (for [[old-rel-id m] (-> model :main :relations :parsed (doto assert)) :when (= rel-type-image (::type m)) - :when (not= "Remote" (::mode m)) + :when (not= "External" (::mode m)) :let [new-id (->relation-id) extension (last (.split (str (::target m)) "\\.")) new-path (str new-id "." extension)]] From a522fa5066e2720faad819757097de31234f5a02 Mon Sep 17 00:00:00 2001 From: Janos Erdos Date: Fri, 13 Sep 2019 20:09:47 +0200 Subject: [PATCH 4/5] asdf --- src/stencil/model.clj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/stencil/model.clj b/src/stencil/model.clj index 13fa19b0..34109310 100644 --- a/src/stencil/model.clj +++ b/src/stencil/model.clj @@ -376,10 +376,10 @@ (doall (for [[old-rel-id m] (-> model :main :relations :parsed (doto assert)) :when (= rel-type-image (::type m)) - :when (not= "External" (::mode m)) :let [new-id (->relation-id) - extension (last (.split (str (::target m)) "\\.")) - new-path (str new-id "." extension)]] + new-path (if (= "External" (::mode m)) + (::target m) + (str new-id "." (last (.split (str (::target m)) "\\."))))]] {::type (::type m) ::mode (::mode m) ::target new-path From 5c05dd28cf7a1508e95eb76bdc9e3501d23ed67b Mon Sep 17 00:00:00 2001 From: Janos Erdos Date: Fri, 13 Sep 2019 20:47:57 +0200 Subject: [PATCH 5/5] support hyperlinks in footers too --- examples/Multipart Template/footer.docx | Bin 4238 -> 4543 bytes examples/Multipart Template/template.docx | Bin 5441 -> 5747 bytes src/stencil/model.clj | 14 +++++++++++--- src/stencil/ooxml.clj | 3 ++- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/examples/Multipart Template/footer.docx b/examples/Multipart Template/footer.docx index de3a009342e29238990875343f7a77eeacac603d..c642c71de8004eda5c8f7aca5ffb666382a2ef39 100644 GIT binary patch literal 4543 zcmaJ^cQ}=QAI7n=LL4GlDP-@gP-m-T#hiu_UMwH}8junzUlMa%- z-*b9@m0#EU_Ia-Bxt>3s`}tna{aN>|tq#Da!67Cl#wkwV)xtRwq?qUXuGS82{CwDZ zWuk^UK%OjY{h0RF+N8tv2qbEUO~Hw6n zF1oj%V~lYtS6iKkc)1^!eGK!zGI%&R+W(i4OPDvjoLsH=|4WONlcfj5+R>d43UT;{ zq8`l-0ZPT)W0D@&Ts=!jnFQ?|tH&$CP!DUgszoRN7@*!i&V&R44>Gp$?#gkiwkZZx zRI;v9Chf!y+3M)xY5KsyU0>8Up)R-Rwu^iS*#-PnTPY$JE~iPXQgviKy8^3Wqm>Ql z;jfG{G)sMEDUXzQZ@01b?wu119=Ud>RzK@4JX3ej0q-b$b=*+Barb*~P=_#(XZEe! zyW3P!a++=K2{)3npXWZdoqnJz@`*eg-^AgasdH!eWp^BSXKaH3+7M(sxlivqVgB+k zr{!J34Q}DHu2GX5x=awnlNPl_r^4mZYSoW?t6D36y^9HXr#xWQ(S$ z#3_cRzP}Pl{gX%=Cr5XEa|;J+EQbhfc`SV`nPn1;qv&Z_aJY^#B^yil13k zvsbGwue(g%R)_~EEZVHUN4-b69?w=R3)F1rckfrkvD~dOU`6CB~Tk4&af0aNt8~7TQasNEfuX*fM_~{ zUCmS|gl5HsURFJRd#!q!Nw*~mzn*f4U?M$r(N5*sL1H_+A2uJ~350E|Flk?1Cd8W$ z9SW?p(osp-ZNCV+T*5je+@JaMiOZC{fO8Er@WU`V{L31eVoKA8*Krl0nrvI%UDqi7 z-oM^QkcjMs!?O;v6*P&M;|0kT-*poWjwjPiA=TXhQ0|Y268|V+Y3TMjY>mQq)m}5= z;@}tn{#K(@KdE)Ic6YaReBg#C2+VW0vwWJU26zRumKqor%60kkf9kST2+X#~rVo5O9kwP(3hTnTe(mI|et4 zsM)LyzGF0g0uN5Q>!{E_d;6RRN5)4)VRFb){T=fJp(QpzsgFqSY<^X)!fRwdZ1K5D zS?X22ixIt_rAH_qg(k#8b0BfyUPu@V>m1IqX)BBbBq< z(}v*)BhLs+cbb#I=UT_-u}l=^Aqsjh|4ENwyI1n=$FoFbXMO$@?@y zK5~|!h5%1!d<`+}XsPxPZgX4nN_H($QkzSq(z!kL;n@CIxYp)N5A{f~0$=OHP28UB z>xV85-mwH90pNlH<6;fm*ajPhK7^`z;SG>_7oCu-T4GWoPQEeh{jAI9JO$^%O4J1I zsA5Ik9cMCSoda`f!%&CwoO|jdT1)$1CCglT@uNA&$l?xPOWlsC;=JZ*kjFCLbDq*}4*GNkPB(u) z;>Wtv1cT~fYu7nzcv}Mj@cTycLr{bEmYZ~?Iph)NN494xRCxwsP=}exoz*BjvAslHfJb zHL_=ysyQU|M13LWO!41cC}It}H~EH+k~%N-c21jCH{pyWohHDp#t9r9>8rSw@VPZoGqnC$n$MYg!yVWb7~MMr>$eC(e$+1 z3dnerm8KnRDz;iL=-Yg-uJ@%9PLaQL?~DHUT%V|a_#wm~HS7e~|FGS~Af9RU@;dB! z+v~$aChnE>e7_9|Kl?T%?#|9wm*oMkufs6pbQOBc3EK%ZQxi9OF{74_w;>b3>M)p>X zG?UOblpCVQ*9`h1(etvHg@znCIy$(28FCCdMi?G9^|Bg>0~-N7A-fMl3?X0*_}HtM zS^&Os7C20*NQkJ(TmL&(LXVgP%fW+qDTZq*g>KdI@+~?I;o{Y$7XYAb*?Rk$>!XFX zo)I98*++{7mK0v@Tq$JZN_%p4?gz4lhdHg}{5x?r`x@3f{qWbp0dlHV%2%Pl)KsVW z<;>iRA|28WDJo+7nPou}io;Pwg5RUJ>&RdrIVn;>UZ%GcggKpJ-lco>#qsDIph*vxQ9c!L3yCUUsIW z^$YVCX-DTe=NsF-%l^9p^D*widZ+Gd&pzH%RvenMfhi*-4h{=;PQzls*)Zjc2Xk^z zTzmPe-P+%R+_H9HqBr{y47DTeeQe6@u{FHQ<)8F9rJcxuZ4l?TyC4MRPO=7a}9rP z9YV4g+1$6HEae9S_Pm^Q&@s{dS52(CAV$vwIQgp;R^v(qI<(qk{U#@=yD z!l}7(I(Vw9{*D()l8#Q)VJiMU@!u+*5;OZT#jfq@Ru`*8;Ir05 z0#Fzgi5!W+ZY^)W@_sE+$BZdWlsP#B58Pfr-dreEC_+CPOzs<0Pq30TWFJ$xY_=e_ zRlB8D_#T;EQruZ)>x0{;<{QVt6k8Z!CLt9s`hir2pulAAVBv%jbloMp?@=n<>Lxv} z`3HbkJLgF-+|`%!kji)=_nHDT;{F_pPez0dZM5kjF6m(#$BcC2yB!~6MuJWv(qEMV8}MR2#}q}rP#YKl(ONp}0qtz?O5$TDM4D_y@C4KGA!rV`}x3~L&-%D)oS*AA{H9157L8wslF9VU`-%dZHP;cnz+>Q?m= zu%K>$FxKnvdmQT>HTZyb3l9`L%jW`W7e1)G7Zo54{Y*BOKY?sfIv=-BZOxkRmOF94 z+WUp)s`;J5UHns@>5CLDg>|tq06IFeM&P?9Mv8^FkPh0UMHH_z;7eNttUGx{^RA$! z(b_U2Zs+lUw`uodrs0x_HuhdWhDBDF%{R%WF(M3GDWYh_-QC(6e#uu=_H~DQ_>SQT zS7$7)I}qIRAv-i$82~a4rd3%3H#PG@k|JRu!ji zh#LZ0(>3|I#3chLY$IflJZ+&-m6`Dq5NGc$MJZKB&!z}&;<|=}ECQY(V|c49(PL(T zDujeu+FFwJvV-U&uF9K-Ic6Sy`0?DDz|ljdYTyAc1Xm`maZ-~+1^7Ocs90Mrcm9e9 zqj!$%V6%%w+=Z}enjoR%Q^qC*h3eGF67kR${O_C2M5eXg2Sc_`!D?KH19!`PJ+={{)`3 zSy)&4JE$>7{mrBP`K7b20&B~DhY6;LethX)ChbrBSuKuj|KHJo@hLy>XPwBO@UsF2 zE7*TWJN{4jFZuo_`0OtD_u21={sEs=Jb%K^&NS@8_#G`6IrVFf{j)y)M4#=oe;+PP nb_V@(3jPT{TNc=c{2gQD|Fb={)d>i(FP+0&(wNjhe$e$Fp{0-K literal 4238 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

pB=R}ru3uA) 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 Y!uVB8{8@H3iY{in4*O|p%rB&W0pH&dh5!Hn diff --git a/src/stencil/model.clj b/src/stencil/model.clj index 34109310..a9bc2e81 100644 --- a/src/stencil/model.clj +++ b/src/stencil/model.clj @@ -40,6 +40,10 @@ "Relationship type of image files in .rels files." "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image") +(def rel-type-hyperlink + "Relationship type of hyperlinks in .rels files." + "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink") + (def tag-relationships :xmlns.http%3A%2F%2Fschemas.openxmlformats.org%2Fpackage%2F2006%2Frelationships/Relationships) @@ -273,6 +277,7 @@ (into result (for [m (tree-seq coll? seq evaled-template-model) :when (and (map? m) (not (sorted? m)) (:path m)) + :when (not= "External" (::mode m)) :when (not (contains? result (:path m)))] [(:path m) (or (:writer (:result m)) (resource-copier m))])) @@ -364,8 +369,11 @@ (assert (every? string? (keys id-rename))) (assert (every? string? (vals id-rename))) (doall (for [item executable] - ;; Image relation ids are being renamed here. - (update-some item [:attrs ooxml/embed] id-rename)))) + (-> item + ;; Image relation ids are being renamed here. + (update-some [:attrs ooxml/r-embed] id-rename) + ;; Hyperlink relation ids are being renamed here + (update-some [:attrs ooxml/r-id] id-rename))))) ;; generates a random relation id @@ -375,7 +383,7 @@ (defn- relation-ids-rename [model fragment-name] (doall (for [[old-rel-id m] (-> model :main :relations :parsed (doto assert)) - :when (= rel-type-image (::type m)) + :when (#{rel-type-image rel-type-hyperlink} (::type m)) :let [new-id (->relation-id) new-path (if (= "External" (::mode m)) (::target m) diff --git a/src/stencil/ooxml.clj b/src/stencil/ooxml.clj index 05d944e4..7f270869 100644 --- a/src/stencil/ooxml.clj +++ b/src/stencil/ooxml.clj @@ -39,4 +39,5 @@ (def style-id :xmlns.http%3A%2F%2Fschemas.openxmlformats.org%2Fwordprocessingml%2F2006%2Fmain/styleId) ;; relation id used with images -(def embed :xmlns.http%3A%2F%2Fschemas.openxmlformats.org%2FofficeDocument%2F2006%2Frelationships/embed) +(def r-embed :xmlns.http%3A%2F%2Fschemas.openxmlformats.org%2FofficeDocument%2F2006%2Frelationships/embed) +(def r-id :xmlns.http%3A%2F%2Fschemas.openxmlformats.org%2FofficeDocument%2F2006%2Frelationships/id)