From 35f9dfe2f407a33d240678ae64f7a2b972142872 Mon Sep 17 00:00:00 2001 From: Lukas Hollaender Date: Fri, 17 Jul 2020 15:45:06 +0200 Subject: [PATCH] fix rounded rects when either rx or ry is omitted - when rx===ry===0 write a regular rect instead of a rounded rect with 0 radius fixes #82 --- src/nodes/rect.ts | 51 ++++++++++-------- test/common/tests.js | 1 + .../attribute-style-precedence/reference.pdf | Bin 3275 -> 3149 bytes test/specs/clippath-svg/reference.pdf | Bin 5318 -> 3933 bytes test/specs/clippath/reference.pdf | Bin 6864 -> 6050 bytes test/specs/complete-bpmn/reference.pdf | Bin 59436 -> 49339 bytes .../complete-computer-network/reference.pdf | Bin 120160 -> 116079 bytes test/specs/complete-diagram1/reference.pdf | Bin 15511 -> 15287 bytes test/specs/complete-diagram2/reference.pdf | Bin 579115 -> 575897 bytes test/specs/complete-flowchart1/reference.pdf | Bin 17779 -> 14316 bytes test/specs/complete-movies/reference.pdf | Bin 22437 -> 21920 bytes .../reference.pdf | Bin 14857 -> 14632 bytes .../complete-social-network/reference.pdf | Bin 211172 -> 196272 bytes .../reference.pdf | Bin 3928 -> 3578 bytes .../fill-and-stroke-inheritance/reference.pdf | Bin 3691 -> 3355 bytes .../fill-and-stroke-opacity/reference.pdf | Bin 4250 -> 3732 bytes test/specs/fill-and-stroke-rgba/reference.pdf | Bin 3664 -> 3412 bytes .../reference.pdf | Bin 4594 -> 4335 bytes .../gradient-percent-offset/reference.pdf | Bin 4594 -> 4335 bytes test/specs/gradient-units/reference.pdf | Bin 4922 -> 4698 bytes .../reference.pdf | Bin 7734 -> 6469 bytes test/specs/hidden-clippath/reference.pdf | Bin 3466 -> 3240 bytes test/specs/image-svg-urls/reference.pdf | Bin 4699 -> 4262 bytes test/specs/opacity-and-rgba/reference.pdf | Bin 4621 -> 4090 bytes test/specs/pattern-units/reference.pdf | Bin 15272 -> 13443 bytes test/specs/patterns/reference.pdf | Bin 6732 -> 6532 bytes test/specs/rect/reference.pdf | Bin 0 -> 4293 bytes test/specs/rect/spec.svg | 13 +++++ test/specs/references/reference.pdf | Bin 9281 -> 8276 bytes test/specs/remote-images/reference.pdf | Bin 14351 -> 14239 bytes test/specs/symbols/reference.pdf | Bin 20678 -> 20444 bytes test/specs/transforms-parsing/reference.pdf | Bin 6330 -> 4740 bytes .../url-references-with-quotes/reference.pdf | Bin 4312 -> 3933 bytes test/specs/zero-width-strokes/reference.pdf | Bin 3314 -> 3174 bytes 34 files changed, 43 insertions(+), 22 deletions(-) create mode 100644 test/specs/rect/reference.pdf create mode 100644 test/specs/rect/spec.svg diff --git a/src/nodes/rect.ts b/src/nodes/rect.ts index 1e3770c6..1e91a28a 100644 --- a/src/nodes/rect.ts +++ b/src/nodes/rect.ts @@ -16,29 +16,36 @@ export class Rect extends GeometryNode { if (!isFinite(w) || w <= 0 || !isFinite(h) || h <= 0) { return null } - const MyArc = (4 / 3) * (Math.SQRT2 - 1), - rx = Math.min( - parseFloat(getAttribute(this.element, context.styleSheets, 'rx') || '0'), - w * 0.5 - ), - ry = Math.min( - parseFloat(getAttribute(this.element, context.styleSheets, 'ry') || '0'), - h * 0.5 - ) - let x = parseFloat(getAttribute(this.element, context.styleSheets, 'x') || '0'), - y = parseFloat(getAttribute(this.element, context.styleSheets, 'y') || '0') - return new Path() - .moveTo((x += rx), y) - .lineTo((x += w - 2 * rx), y) - .curveTo(x + rx * MyArc, y, x + rx, y + (ry - ry * MyArc), (x += rx), (y += ry)) - .lineTo(x, (y += h - 2 * ry)) - .curveTo(x, y + ry * MyArc, x - rx * MyArc, y + ry, (x -= rx), (y += ry)) - .lineTo((x += -w + 2 * rx), y) - .curveTo(x - rx * MyArc, y, x - rx, y - ry * MyArc, (x -= rx), (y -= ry)) - .lineTo(x, (y += -h + 2 * ry)) - .curveTo(x, y - ry * MyArc, x + rx * MyArc, y - ry, (x += rx), (y -= ry)) - .close() + const rxAttr = getAttribute(this.element, context.styleSheets, 'rx') + const ryAttr = getAttribute(this.element, context.styleSheets, 'ry') + const rx = Math.min(parseFloat(rxAttr || ryAttr || '0'), w * 0.5) + const ry = Math.min(parseFloat(ryAttr || rxAttr || '0'), h * 0.5) + + let x = parseFloat(getAttribute(this.element, context.styleSheets, 'x') || '0') + let y = parseFloat(getAttribute(this.element, context.styleSheets, 'y') || '0') + + const arc = (4 / 3) * (Math.SQRT2 - 1) + if (rx === 0 && ry === 0) { + return new Path() + .moveTo(x, y) + .lineTo(x + w, y) + .lineTo(x + w, y + h) + .lineTo(x, y + h) + .close() + } else { + return new Path() + .moveTo((x += rx), y) + .lineTo((x += w - 2 * rx), y) + .curveTo(x + rx * arc, y, x + rx, y + (ry - ry * arc), (x += rx), (y += ry)) + .lineTo(x, (y += h - 2 * ry)) + .curveTo(x, y + ry * arc, x - rx * arc, y + ry, (x -= rx), (y += ry)) + .lineTo((x += -w + 2 * rx), y) + .curveTo(x - rx * arc, y, x - rx, y - ry * arc, (x -= rx), (y -= ry)) + .lineTo(x, (y += -h + 2 * ry)) + .curveTo(x, y - ry * arc, x + rx * arc, y - ry, (x += rx), (y -= ry)) + .close() + } } protected computeNodeTransformCore(context: Context): Matrix { diff --git a/test/common/tests.js b/test/common/tests.js index 9c88b7f4..44579d37 100644 --- a/test/common/tests.js +++ b/test/common/tests.js @@ -36,6 +36,7 @@ window.tests = [ 'pattern-units', 'patterns', 'polyline', + 'rect', 'references', 'remote-images', 'strokes-and-bounding-boxes', diff --git a/test/specs/attribute-style-precedence/reference.pdf b/test/specs/attribute-style-precedence/reference.pdf index 78a388b24bfc22898db64be1fbbbe3d1a657b728..8c4fc8b3fd9f47d16a71be1622b77321b142b36c 100644 GIT binary patch delta 368 zcmX>tc~)XVH?yIc`NY1df`;a%dI~vQMnDq6+`NfVkWw&3GdNQ%jJL5^|WB7@#}W$i%{OvOdpbPE$)`E>%@m Ge>VVc*h=sK delta 495 zcmZXQyA8rH5Qc@QVj5@=bP-Zou?4UTDUD*G9 z{_kObHt+4Noue!7*GGf2&%yNDpQuD&VXG%P(x@sirq)r8Y!rjfhl9;4T>d(Tpx4z) z%~si3X_ZUA@{0(kM6}SIg>DFeT}iDpN5&+`Nyl6ulSBZWxX{^{*o1LFl`^sck>)M? oTKpMclkve3uZ7Z_lN2I`)RE;HanQ5;UkFQqnO82|tP diff --git a/test/specs/clippath-svg/reference.pdf b/test/specs/clippath-svg/reference.pdf index b2b71c2643b23b4332badbcf9d29683e68dc46a9..afaf2ced1a39df7894d2a140066391bd31935d4f 100644 GIT binary patch delta 532 zcmX@6c~@>iH?yUw;l%#wLM8?VdI~vQh9C;Uo_vJSVX`@spi~Z*fu50qfu5NG3NTd2 znY^BPo`5k#Cr}@RHTf)yC8l5wr{3f(tg=GpNcKS3lk?dK+7rbw3B$jD85$dypbME8V+fg=nWL*R$JA(HgrUmP)C{h% z9_kze3k$dyRLIB(-AW^4Qw)EYU^w5%%mBkIa}z^!<1I{#fkMj2fnscEf$msiBXi@) SS|XFUjE&9Bxl~nM{oMeHWN*3v literal 5318 zcmeHL?{3>R5dY4nxG%w447No5vppCA8oOzOb#P(_=&+z4WSMak=uaZaU9xBD6ZB=a zN7)@k{k2kih5ezx2toSkcqEU)&7gVJ7GhFYnoStX)4p2+%Iw zwP5&8M3e!?+BwtaB8@kRCsHtS!f#^byJzte+~`QKb-fQme0^ftB#ts{nSv!bPfwYM zRx|+p=L0eAgNWAI9T=u*Gvr9KM7SZ-`-ZOTh7Er*9p14=#`}OB;laTI2bo#ioE5%Wa^(* zw^q=$`diIuxPABz$@PM4xNP;3tD-};Exu0KzLSfV`Xh@_E4pqridy!Lik{wYaGItC zT{P)QkJvSJg`SbD8;;VlC1MIog9}Pjm|*es@*4T8xFqg+k>){h7O4G|JV+$VDCevI zY3EitLh0BDItAx;-W+{Pq4pO&kZP1T74AZZ68x$u{5M0D3?nL3NxVD!NVWmR2*oRL zMXituKZ;jsP~tB1-@;lEstR=%DwaJ<0saqFI>o|{(6SXCf0R(=)XSiB+pQReVX4lE zctD$dD}34creE9B3oozihsMAZ;79gyLkS-;iDb4D$c>)D#1$n{DpOJ^6=i2zxm(J# zU;R}IHhKbvL6)g# zp7g#r{oZUD_>UXRh!3p>%*gf@g4A#{K}I_TnPBqoi{$V+;BL~bN1JFg~;GW z!;25luEi5>ZxkdcL`Ly!(ma0Fa#$_SB@=QkvXIY{Fp7Ubo{XvoZq@sL?6ZBDzm_WNvkFT4y; zQ2ed-bzYC~DE;g~L~lImyU0E;Bgo!Ev+~UoT!C7_g2FJEd8;~vwCPt_cDu8EVSuE2)MN%nAx=#9Rk~qzxK{9No z-OzA`sKF-Jkd)dajchcq2FcX78kz>Jdy~twP*Y8kH9(VSk{rD~qB$_z(>8}&(wn1E zyDy6yXibgoEyF<5ZIbLkTU5)jE3PbY{Q&oW@{5K4m!Kum=5d^XG!0z&i|956X?^rF hg&P>lA-?fC-G}89nMazrNhXcM8aM_!Ie9xf{};bt_C){y diff --git a/test/specs/clippath/reference.pdf b/test/specs/clippath/reference.pdf index cbfa0f413a730e04be9c84376fea8dc7e0e68938..8e8723c144293fbe3c1093cdffdb9ffcc8d79586 100644 GIT binary patch delta 513 zcmca$x=4RQH;a*_h2h42Hbw~}0|PyU94;UMWo2+VaRqV}P7dJno1D$$CTIvzU(;?0=F*LMggAhs@D7{GRXjxBXUq9X_fcI1VjLPCrT`2Yq`Gc&*kAffyN zGylVa&rWb+vp0%;FE8)ze0P37`G%LLjiS`>`8>`ldOQVcx1Ke`F&yb-4+l0NL#(J( zb||(^<6_w@dUHc=$tk%c_w~)zdHs_uDzFlUxd*@y$GL6U!+{M53ut5D`Tq; oI2 zFGB>oxb>E4u11HO>+Vx#>c`2vDxe(~AEIt#vaQ7$j@S=si2TUBveU)ZYcR*s4H%Kt z?6|ZjM#3~-lcTlYpv0al3-W5|H7p1dlqVv#9YNSZ46`|NVETVJ;4G=`zhn z{xDkq9ckG1b-u4ha?})P$6zBEp9#n#I5&aWP=$PVVLJ4MDI0z~rb(CeIQq=aV zb*vnqLKnp!=P95vP69U`=jtZg5Xe4 z*j&Yom5NFYX+=e>T-*?mZ^Ng0j+e0&*p&_g9?e8+sEXE+g)FGA9)UW|z_Iv(!(}JN zxxdSn+R3Ce0u2_9Ihi_RMa*Mk*-hBWkHOv9H1{=v3Y^I*V9!Z#@3;)joM>QPc|PD- zoH3!Z8iq%c2;NWjJ+4ajGk=m`N3{w99|eU z)Un)BLqG^8YVQ$gNQ_OYA;RyXH@9||{g{Bnl`(iz5rY#KZ`&4ZTonuq{7WkEDco8==gHPtCG7i)qC4#Iq7DDH`=mg?MMdFfDs` U5^O^AS8K#zl$23Ee{T8we>*QG0ssI2 delta 3952 zcmcIn&2Jl35Z7kC5p2|y_+!7EI?kaIl7+SF^?q2;*lUY|l%kZ6V^ra;gpi1u1dupz zND(*0fo8-7A*4ziOVlXhM4>GQdf|YCxF9&dKR|=TEeB@a+ikobb>b>n`Muxs+qW}s zW`48t_PdY7Tfc~(eJVMw?b$bO+!f7c9To(gnh?T$NrlUT3O`B;Vg+XtSO{ga2`hp* z#XyPR98K5pw-zD)$NLbj3-2;D_fZWtRI?kXP?MUlAeBK78`QYyeJ*-mV4@L@5N)Y- z_*tBV%Ts3*RM+AvBM4<2z`me~9F;Uana&+`8Fh9~$)xRa4W*ww7x~j-INFD@#f+L_ zpd{gmEaEEj3|cQs@Smt-eAFrA3BvQuItw=Lhy{CeXE+{91k&RaUSp2iEGRJ+FlZrc z6fAhZ@GNW=8r1Sh63spot4Z&33!a95k+Rd$#Zg{Gk1QjxzbdG3i7_sLxMC<(;i{z7 za3>aWrDcv>ZO0*M<2($DC6N*!!%`G+v+u*6)MNWPc0Ng=+-8}ifjq5?e5}N{$nNsI z!do;*LI|sam-gP7J~NY2JDgj9t8?>|zSAw=Z#tCY$}%6a81W$sAs?df)L?8ZF{y2+ zm0wN9fhG2AQHAd-8az`hK~QQ?BmWeuaIK`p?HGA|rTAPqYqH!%5r#m$mgpx{L1}zy z25gtR^W!oY)=RozVXr3o32oReujlyxq?6W#mEaQ7lasU>oGmJtuqt9XjZyC96M||$ zCXu06`8-7&TK8*(C`DA#;I|6Vis4g?qLy#LTv3OADkTf~f`6N4XXJ974ol#?`HaIc zBj1+ag8l1l*!p-DUZ~E%8_G91UVf3s+_gGv}fH1|!d3cqU_40$_}<*(#3e5et_ zQAnbnRQ!(m<>_pkUbnZEMdR@dhr8&Ad+3CyP3ju1A@A*S((EQnH27K{!|YR0-DP!*SjyWcP77Ux))*bqG|RUf#Ph|HWcz2Y+2?!rvDf>~z@} z@KYut+S2V-q1V;oc0~SA4Z73IvZRT=Q{dK81&^BvoLB>$FAtVj9f}T>5#ZSpH)#me zYl(hRBd89Ysu9GvJH5s6^(g34Jqo&1j}H3@ZQ+`-@lfI9v-V&~8&{W948Mxm%EO;R zq`_`5jwFxG+=Ji)*jXy&@M<^E;k|x^F>e!*m^Xs_V7}33Urrl+_IZPlB_z(=?0<6X zgb4=o&>!enCy0lvKl<3Xw>k(u)Ew7odv$iwtzVNFI=(P4Gr{bEN>U3JEDbLD0=(U{8D%-c>2e+dAc#dVqbMchhPOJ3rO0VizU~%J;#OGz3myt_gzyyfBwali~j=?Lc3}J diff --git a/test/specs/complete-computer-network/reference.pdf b/test/specs/complete-computer-network/reference.pdf index 3f37fc61fbefd3e4edaead94104ca2036334b12c..246e3055f2f4de5d66feb1b9fb5efa8ed0439631 100644 GIT binary patch delta 1468 zcmZWoO>0w85alL;>ci4Di3MAfE-Yfea_4^EorqNsszlIbw{}rXtth&B6hW;ZmR{ji z@T0hlS_)YNE4mOX1|hic2Xy1ch2k%$lh@MbP2T3gVeZU1XU=TZ`~E)aTVI_iXe(v% za+)0t7YF(q?V0Vv;aOY`+i``>hGPp~@>2W8uZ2G+!mD~IvL=+S(-=a?mR=<&6S&MDwh}FQ(?*KBI|D!Z?oJ`vh@I~CLgj&a{n>A(0sSZo}Vp9 z0jfFGX1`f1wB}6p=cq1Ig^-rn_6VUStm@3)6%HJ@+h^7xhL8gK5{%5M#42y-Ljg__7D7W- z5pWS(Vi|DBiDd{0Lz`hpX)|dZ<*GnXdz6GOsG}b^T1_oePG`LauEAwPfRMD5n6{h} z)6P@Jj1Z|~IDgN6BtiKbOVSD4c-6%}rEi6$^es&fa7)vJkdJ#d?qm-Or@JjnM>@

W3&JjtNPiib~i5iRkld}YDCWzN~%`^l6O7GB*_v{BSiYyMm sTM_~gU}%4#JV`&`Ia5WF)3XG{MVXc<+;H;wCwm$x0X!NXpS*PLKMmkaw*UYD delta 2610 zcmb_dO^6&t6sEEZi<5*HdT0GZ(;ni?X2Vdg{tNULl?aIl3I=~JJ!AH;gy13W7@a}A zNkFi~x_D4L42TC|GOiKHZeUL)1Vr@Y!JnH%6UB4ltL{vuyJm9HG`v?e-+T3bzE|CI z_1%S^KU?_XJ=)ecfxgbBLfI@@sF! z{f5783L@>^viqgC9GzwiIqaDI@uw+GE2XnJd~kZgE;@a?X7#u&IuXWwx9Mv2=wY6L-l zK3Z{N)Eo;UFOBYZFOTjS%h9YxTPbZ>!R+MGCSAJ?KHGbYx@V5v>#v+7ce%^2s^R(3 zlQs9#X5#+ZTr96x#})$vZbErhTp&4vdqjNH7`THG6&`ss zG}eo_w{|!^oUQ*SBZqvWL!J#P@sD;eR8SbI)4{aIJDB#BfCe>AaJo~Zt$W-hA$PGW z?8`;&Z-qeJtWS-J7zdGb5yb82Xs zzeMSYTD}SmN>m|ZrO{Q$N~u@{0?Gu=v>Xc|!)yd`3KJ-Q(SdRG(s$K%1R>-(8t4&;(MXcI5 zj+f?)Vg51wNOsIMR>n)khFSsd)D*;JR6fAe?E#p&J-}!`o;WZuRRxn}%JM3hjTr+D zz@sj4Y!N-c6)z77`^RHe#VrYJAPOc#Oe_ecqlo}=7;`PBE&)i%3r`lV*k;6PCs uT>?-{#POBX(d`GUEAB|+;G&KU(8buz;F$b(+vI~9emS7FfB)l8Kk+Xlq?BL) diff --git a/test/specs/complete-diagram1/reference.pdf b/test/specs/complete-diagram1/reference.pdf index 6b1c2fdab9d0d3056f813a85e53b34d428d0f5c0..7154491cdf4e72a4405a2b8c6ba2f9488229d61e 100644 GIT binary patch delta 482 zcmZXQu?oUK42BUw^jtbQcX5^El3aV@s;jH3gM&~UiXh_9!A%e<4ubFC(1G9oM3N?!dYIN@TykUn`AmTk4$6nl&o~9 zJ?b}?qo1=p216{@N9;{u$dbpX{4Z8o9GoetFpd9=@q7LT7fi0Rd3BGbATW8ieu*-0 zM0JG%UQ3=EDFmxrWSc?)Zd@p_77lqFAhuAoz2r!@BoX}#^3C`ZQD?Drtl}A*WGVHp re}Yc`1!EvxNzh8%*ZRak^4Cop+!e#}zFDPm*+ zQk=u33)TbSOfD3$o@~W$Ir%WZFk{Z-Zc*vU3Vf`SEd`zk85$#0L)eoAg%u{>7My`y zY7aKyLXk2o!kfEASs1a111*rA>>)lEyOhl2`4aU4Miz#8V1Fw>Sexfb?q|Xfojgyn zV*3Rr#@b2Kr`j?{Oy_fE6x>`b8#QV2FDdJGpaf8osaX}9K8x+#nM|`But`-+2kI2v z{??ZH*`)Rvw#?gS*s^@wiB;t`3AXzFwhq>99c(S@v8n)>CAj_Gd-m{XkQ+lF%%ju4LIi#oe@8dW(-Sz-bc=Z7eE^ZS`7%-duU_Xb{_6G+! zz6gpNSr{287=VC69v6r*H8(LgGnoGRGKXosk%hTAnxwITff2fpp)rP#k(nvFDichN zrbZa5%uG$-8tWnMF*dg_gNs3hERE2uG%+y6@Q5LX^G%Em(9JS2F}6fA-o(_z5GVw) z9}y~M#^_;TVrFK6uG7pCL&)3+-F#C6b7M4(riP{nRV77Em delta 3439 zcmd5;O=#3W7-hG$jgh+Dx@D1iSS@9H*rt<7CNrUj>OsXq=~1kgYV;s3LQ4=g`n4lUT#P}F=R34zAj}6kH(3eHps#wgG zX^rE}_bu-16~UNSJ`e_F*zg+Zg+V?@hkNuoo*(iGhku;o!MFnnMYZKqQE53&Ygld% z3=~dDF}OC`2%p-yhPm9^4)j#={^Xv{@GT&O8V4~39aRjXa>WMea33o+-#6iX@1GFv zVCo5RRKZ8?VuN(Jf9`_ue0Qb;Z|IOWH?Y!qzK%Q@0a^(mOQTQdX3q{6WgyWt`jlhX z+bSHJq>6}YAh~Cce-?;6{8=CWIsVpa_NKQvI32i!znS*tz3)vH^S8>yTDh1B%f;;H zsrKe4;n~aC$0ysDv_^|f|6SqMYWJ1t_T^aPdNp#LpUiW15={?|YmXH%6{Q=o4mQ?m>U5Iedo>>sZyLw>HV z^k>E3=s>z?Ti#6zYnH}z3(z+-Zlt0;#E^YlBs^>@-jx)Jz`N24spC)7l~4YcI<4OO zIxP`vXw81sY0Z8yqS*}6%^?lgmT4d$E)zn(cTG9r#t6DwWFn2&01_+Ov1!<)l(qXH z6`owlR8(%ir8MCP=OYCd86g+Io^Q<@f~Jy0nlOxTRWLxOA<0b-_RMQMs)Wlj!Qm J$my9g{{VR**A)N& diff --git a/test/specs/complete-flowchart1/reference.pdf b/test/specs/complete-flowchart1/reference.pdf index 2b27ec39538bd42cd4703e608a2802e4c3fad242..e76988775d2c7135a08354d46f137ba6d582a88d 100644 GIT binary patch delta 819 zcmZ{gyGjF55Qf<#-cAuAao3H;WxXV7koDYl&u(i}(uogXp&}Sq6oYnRKs&WirVzUn zHiBKi&dOHw1vI4bQV15lfN`Ty&gwLC_~xH~=FI!P^16O>7{lDf$46(dsw5#E)w_JO zil)#!+JJggz;Yx7kFlVl_;A~qhs)?T6dU9s()UHS+jaxZQtX=)I?92c)!ro6-|lUJ zJ5&<+>K&>ecvCf4=+%N;H+quH@_vUPjtPpIs~Y-_0!F_I4}B9*Gqi*xQ>r~!oXk>YG$sXPk}mg8YkQ`eS|GDcz`+l5=N77K63RpPQyq>1222g*OmW4acF%?nCwNVpprdhf;Z6T{MJz@7xFDA_d;fZ k$Yu<4c`?Sl5VFOO*Jf$4=&zLEX?hPa$7Lv!nVFmY0I9FWDF6Tf delta 2296 zcmd5+J!lj`6lQPl6t;-#CO5muop=hDGl7Ji-JSixR0*+-0Z}V|SOkT`keE)%DWafQ zTzH)pCTOREF^!FlU>mTovJe{!v9qxC&Ft=6cGp;mWRExBH{YB0vomx1W9jEZrT?hv zMxMLge?DSQw|pCiT^Pf1tpO`F3+_~fRbmaOGL1&K9f`FhpqpYcOU4*3Dd)#roKS{C zj>H;en81R!6{{jB$sk|hn5e*GMF~#QTq(rxu`&mp%B@lEbNLJ8NUXVFE2Hp2wG__G zWUTJp!31}uX}SX{HA#5s4<@hXW$Pu0p|3XJ3GUjuDoov@5v(Sg?hdHbBuQTMV6`VI zij(4{B`KYiQtAO~$p*UvDm6)xTED8dO+PD3pNA*sI*!>NC3Rd;W%usoX$_6T_3B|-{9UkjVj#WQ!Tj(aGNsW7A z*dbQtR#Aa3^@;8I!)Fy(GU}=udO(d%hM4}IF$MRH$;?pMLgkGysX9Rf4{&XY!b332 z0oXLgIUcej`G~HjjmDoey|6Cn5f=~T9ir89!;uOzWEd9732s>SG$GI@b+{>%I&$t6 zSc^3lQdlDkYJ%+yF>ahpz%ycsY#oe6Lv@F2_3)@@D2^%x{6pZJdi*#uRzz{)$r2uq zYxD5eF9p91+M>3Mzu7ae);I~D%nja$ljKPu);LLuWUPq)w2$NPa;pC6xiM%*XqjUYuzg=a51>61=RDkc6)x|)Neg`^Jf46 diff --git a/test/specs/complete-movies/reference.pdf b/test/specs/complete-movies/reference.pdf index a3cd203af41a2dd64646807082ee6399804a0976..7edaaad599c47265a55dc4caf410fb2077d599b3 100644 GIT binary patch delta 215 zcmZ3wo^ioy#ti~i%tq!0n}w~InI})M6%*7mGcdJ829x`3#U}4}<=C8HzfF|Iz|6vU zvs7prW4)o7nSucbDCBX0X+ujBOLKG~Gcyx(AxleBR3Re+LsJYP6ALusjSLNp3=tYR ZL3SD$8XA~S<_Mp{31o4ps=E5S0RYtNFS`H$ delta 416 zcmZ3mnsMoR#ti~i%;py6n}w~InJ2%o5t)3$MgxQylP5FUYENdiRh!IYs}92T$y_FS zW(H;k2w-TYU}U6cY-E8DGB8%iAyOT2romOIKrO*;Db#V3ZR}K7!CHVUC2TClb$m0UjKp8_5bRk0vLv$fiLnCw{GjntyLjz!tpc-#z fYHWcJ;si+=8JZcHOlA(9!f9?~!KJF|>hA^s`14q( diff --git a/test/specs/complete-organization-chart-new/reference.pdf b/test/specs/complete-organization-chart-new/reference.pdf index cecc415c584287d80eb755abbcab6c08574473c7..e7aec9e5e904faae18e640ac80b2d4c38d713995 100644 GIT binary patch delta 482 zcmZXQzX}2|48~EnPEO9Z+$w3(rj5IVY;KqPSOZLxOx0HxRgb|eg0J;(WhX#3f#xK8)xMgHaP@Xvg5dub zXw)u5WFlldgjpO5or$tMOD`4T5Yr^u*a)avr-<<$@ q8}0(Vr%)*vBMy)z4?iv&M>Udu{374%vTd%agB%r!h)UD>a`6F@WMlaN delta 725 zcmc(dy-EZz5XV`t8nCeO+HJ19V`eg&j|Vtgu@GxnloJlY5SX!!Q5&3i;@sxBHhPLhoO9Z#^z+ZsIYqEhIu1*=FKrn!OgH=vR60v`w0n zD;{bex3Gp=xPS+sWj&lMX2VrA`|qx*_Vcm2Y);u?jpM5CAz3nxY520XH{||aA&Ia? zjVqADMyq@o7_3$?2FZbaYKNI^WV$A8 zjS9WUOC{y4nr36o_=1h`p~i5>4{N6+tC{-JTU#CZ<3HKf4ixe zif05jboo!eOh>2wv;$^z8;~hnc5|lC>lUhmj|)0PUBZp1yx&0D5o{9Wpg~kQ7&~$> zEr3_!ZcVaM<;)?)bZiMgEgYKckmd4WNv~8{zpJ>g+;m$p0pkVEvTV7X4hl|gB#UEg z58ja&9+e-vvzUQ9fbP#DsEMZ!2NVAsNej?%<}O+YUTwhe;CQ#u$;GnlaSts(K&~D` zw*sK}y@`(KP~Wi$(J==@?@M$d@p&;oB*h!cSA_47lt5nnvkD;mmYuNhqZ5Az5BB zD>L`<*%Sr*yY?X(Rw(#6nZn?Q=?n<#-H&8ujDM7h4*3iB_*^O)hA()G&Va(wd6|wi zkJB84vn9(7^E0ekp2*DDxgbF|hJXK)v;$@wU6||;<;kaLA%tI*zb{JakmcVM+5xv? z(U8$m^GqhsJr+~CaO|&HlGxgqXZLKTqi!iJfbtQ`XaNM)KSu>Z$Bg9}9rK>2P|&e> z1?>P!RDP*!1vEWcZudH8;OAp`ZtioPO` zdx=89@S2jk3n%K*_4F9Po?qFNeDg%vYeU8>w=ppznmC|2Gh^7MOcKYwOm`4iO?ibD z;MSY_DlI_A)0=4lZl6`JQ4;}bbR2st19fr>h1$6_ z@qkD8Q*YD70RQi{%-k;TBmxqly1z^J2!6=bZqGnnwfWb0 z2z%5-7RNUr{30X2{z3H2-3g}fTVM|@Km?ZVrG)^c%5@(mXQ*=XzKnm{KT34O;rl*L z%!q{}pU?va*Vpk+X#uw4`~3;1xOu-ENU(}CP93DIAme90qXoDLyL?W!0t(#^(;0y- z`DF=A*%ul3K3`H4fFJx7)du(JsIO_p!KV6eXb0qA)=_#vf#^lY(jCiI9542)INs@k z@!gr!R@buluXc9V_=kI8%9iUpn+lUgis~AZR$KhZIs8d6!O$wjNuv^utWwOkHC9^b zFr^i5`_}f!STfQvq=P9>=xb&$mgZg|crCoCWtEPmFfBdyLMuT(X^Fv%h?wPCMBQu>oNJW35HWnOIv$QhwTX@gN$8Uh=S-}$+wX*uD2gt` z0!s?F7835H@R+Mq4yE5o$1w}VWCi=9!h3+oDvhu3u$3GW(;P?9X@#Tcw9!=)E5Uy4 z30cGO<>pMd!x1rKCH5k?kG%+20p5{d>$%2CTl&KZ7g)IC8e8V1#=@N;^qprID`XfQ zi0~L_RY8(Mh%s63@#PuN@lE5y+f`+3c;cBeh`#3x?MQ|D5MpGk4@oDVyhOsi;P^iB iB1o!M(w! z0uBdsy<7re9Qf}vwAfsy{tpL-1_uW_2S@4Ww%zq>$D_IWtu#8on#i@e0BJ%3G=UUG z0(Pj$8&5^E_2n#jxY4A@SaHB`&wo0YA+`x|qA`sC*@Ohx1X36Y*tI6#EJPC!1hCFLxxAGayS0oCvQ1L4i2&Jz z1lR;p7zx;+O_(RIm(fC_Nht&Y3hng%^(Rn7TWhx=Z%+|L!3E;evun{1N zkbtm(6h;DeXpR*Zon@cotVAh5J|O`+6y?|wZL?vgYe&trlC#91dD?p4T0XY^@7zx;+O_(RkAL&7kW$%38Hsn|-IC-c$ zjUYA&lEw~g!hQ5B(4^@EDUbo{+%t-IZbw%j#wdbK8UbAaq%ab&Lz_^~I8(oGtMJ5h z4oWsT#|?pL0PmtEY3U9$Ns?Ym0SaIe5WtYaNWcyq!|8S7HaJGoYc4=#xJ|D?(%7LU z9KgTWCN@ELWYZ)OS*Pp6cgmE!5Vrs*fLrebNn_VGdCy%vXxF&pyc{&Kj2&Vu&$p1= z0Yug|p9M){myT&F@YQ$sfUI0?etb9jBg>wVQ^^DOprf~(<#4r$?(M;Ri!1Q=?nR=P zuqg#7(UX8g4=IcU?2xg{lil|rl}NK#gr2bx&{gSx`Y+G~RS!TN zeH*|*(%7vgv-O!zig!?JY)TF<1!waTz@|GW9Ke5sCY5Z)0)~S|kn|cPjU9T2i{Hsl zMUU`?jx3Lt0u;sV@_3LmcCE>W?-xx>dBQgN-TggaEUyrpd;pBKoM7-&XVZhov6h-p z?9A4$K8Q(|I>V?n1JF$@yIU(gE|4BO;4k7KLYawUi6 zI~N*?m^y~Zdi|4V94(6swcR-nlEx0J4IgP(`GVxLT*3xGn$Yh! z<^d^;1nf`~+MDgkA?0hoh(aUFSvE(5Id-o=6YLe(Y#DGq+jAT?k)<0OvQmzhW3ZNm zh9l* zThH>Q>o-q;rD_$5|IhVI*LO-jO-@vpCdfS^TLX;#6ju z*{R0N*2}j?SJfAviymscV|wc5+EYE~0C?%@Pp8l`TW(Zv&;0!J=$S1wVV=aN#U?nV z23Y6AYOKlcPh%TN61~xkra5x@+?S;*vfdz{t~Z^*Vyk6q#M{!Zo{9GJx`ZTpo9>wt z{SzSscj)$T96%;2>%2&@o*67S4gJmWya?lk3hSsad8H4&a}jM;~puoX0lV zcLBxE(mTwPcVC1}EK3gU@6FaPUF^YEx7a)LU&F4N<=ldoj-pFF*tg-OqaR*E6kDEf zX>4+O{>A7g^Dl0A=l+d}%d284ZvIUz4H`(}s;H0tdqX)&T#=LiKJ^CXOgp`y|s>8p7BJ?KU^p}zN}dR7|8J|BO48YjM- zibrdVlB99!l`YaZODBhlOg}7h6VEU6_ATX&(z4Q8WFvY>b!VRVROw%)S)=S)U8~eN zH$LPtpDV>&p6bWDJTF%j<+R-fNIllT;Styr0- z&3iYW4^Gl$r6z$ZeWlFrs>JE%SB0jctExnQq>FQ9YUf62sbAa`UYXy~)AU>VWR=9? zUgxt^vD5joP=0gX;gd?3PM;sl z?oqd%*klIO{>zbEN`OOoD z_2Y>tYZasSPkd2KJinm$Qm<6Th2otrQ)8<0fmWL7`tf zD<;&>T&$l(9A3-2rUd6%k&l#SL}IOMPHs|H6{*TJMCx4CK^m$`t$yK^M@DH(B-Vzd v(ls&UGX3IJtnv|c74%9l2pJg~p{p{+)M#Rk zp~}p_5U#Nv;u=G9V`I1&RLH^%!%9m_3~v}>IN!*~6x}Q%V+%7h#`KE9h7#VS?s=E5S0RYy)Q`-Ol delta 746 zcmah_K}y9i5G8KJpiA9+kRp6=CCN;hCR@R7J%OuiKOVsz;3FvYCSJf(h-Y!-bbi{D z$p=fAdAxb^^3vbU&-L5>B)a$4{b24IG*nhSX=d7q-mP$93rdJnh}@X3KzB@z9B1*Sn=ea6fdg3r&WMMz_};QD0>%t3{m3oOI=1gc^twm zh-TTD-jb2*>GNA{^p&-?Ys~aD&zie|h~w$GA86vl$U=;ga!^sN2dVP)Vt`5&Te~a{ yIgJUpaG3%tuLN|}Gh7uPys5l8^wK_HAnIoQPtXP#7Qv5C7awQXf!=N(9{WGjzK_TN diff --git a/test/specs/fill-and-stroke-inheritance/reference.pdf b/test/specs/fill-and-stroke-inheritance/reference.pdf index 1fec3f18faa375d2c20ab961cde53f4579ec39ea..b61ce492bf77241a3b9bcdb648e63b7de54cf8ea 100644 GIT binary patch delta 410 zcmaDYGh1pxH?y(1@x;F60)_?#dI~vQKmx*=yp_=pQ?QxI7ejD!0JAWsn5l`0f&mC9 zU|N delta 748 zcmbO&^;%{^H?z5c<;1?_^#*zhh6X?aiB9GMi-3t7BsM}6!Aj vY=&-@k%^@xn(;4tjq zS$5yi05nkw^-9^a{Dj^ov%Fb@G*+neXQtk?SSrmlB;;>I)DTop)3-KL%8sEmu z?3i3;Q|x~EcjljelaJ%iled?J_wfGu)v418^swygp&$j+plx<|QYQ)pHgoBSDa1N5 z7ce(tm1yaceiQutJl1?|cJH2uv%GyGui;tWh(OQ~)X$*NXXwP~ZXNtO3@ zZ0uqj4cd(wOWMkj+IV>n-6ZjczQn6_AnlzqgM{-=5E{XA3o<6T(MkUTwneH=6J`z diff --git a/test/specs/fill-and-stroke-rgba/reference.pdf b/test/specs/fill-and-stroke-rgba/reference.pdf index 8185214b020f1d88ee8c64353683928a461faed4..ce049bdb62537883bab88e422d368604103bd0c7 100644 GIT binary patch delta 397 zcmZWkD-Oa?5DcJrDWV2J5Eayt-Fe?i1XvP|fF@i4han-rvxEa+=|K=2h?W|%Z^eFQ zXD2)F>1T2|4dCtd{K%PTUhEW_+_kapZF018hj#7j-aih<#<+soDE8`C30hY%WNvFo zixoKp33;19p<=;eN)DMV$7eP>FeKR;Dap>uH#sElaiyge$XOweM(ht-w5|asy+V_8 Ufz&=cn^=!-3W0+v%jJ6Y1&Ci#Jpcdz delta 675 zcmZXPziz@X5XOa=FwCt~F=T+Xy*tN_ErpS;mD(q$q7F!?1M0+*tqW3BlpXO7ya)pi zMEpmPoHN}0{N?WR=gZT1`o9}0D)xVe8lE$xwsd+Wyn@hb>ki-5J5|Ch$I%<65azsL zye+g*7LQf47`)fP*su3X%tTI&nLPUiM&YhF>J~hv5VHqMSMkvgIqE@mIu3qE589dx z+?Ra|-+`3HrX1_CP>THmV}MBrm`Iq*<}#kuAo;M8#3ikBE}1q>KNDI?VnPy+&~&|O z=Rpz+W=1($E-B=1C8czmil=5w|F+K93gFCVLIbDnI4gaX8TzI=PV0##0i AHvj+t diff --git a/test/specs/gradient-default-coordinates/reference.pdf b/test/specs/gradient-default-coordinates/reference.pdf index 75334dc7382475eac0e86a735f99c405bd19f8a0..c12da9921683d09f75ecc2dbd349ea216743411a 100644 GIT binary patch delta 485 zcmeyQ{9bWFH?y&!(Zs$^0Yd{lg&ZyrX$WRcp2s9N`7ooappg+=2EtrCkBL{z#KKs? z00b2BxWKf5v5}$SDqQMOS5PV1cg6*c8L9#-^4Chm{m1X6B?8aZOGaY~nOGFy>NKb@g`x08sN} AZU6uP delta 746 zcmZXQ&q@O^5XMac@U1jEmj>B%{E1P&FG1n5E%mbgong-R7JO(qxiA&wxhS&NcY#Yji|8VE&v zMC83t8o}D5GSW-q{NtOT*8DBdI$)I&fV-qrg^P-;(&`*+w|#zHzijJab@O)V4A#qK H`}Ft^dTf&c diff --git a/test/specs/gradient-percent-offset/reference.pdf b/test/specs/gradient-percent-offset/reference.pdf index cf272e43b8468175ddf9c82cca5c520db21c706c..820b3940b76d49356ab37d494568d7f915d57f80 100644 GIT binary patch delta 485 zcmeyQ{9bWFH?y&!(Zs$^0Yd{lg&ZyrX$WRcp2s9N`7ooappg+=2EtrCkBL{z#KKs? z00b2BxWKf5v5}$SDqQMOS5PV1cg6*c8L9#-^4Chm{m1X6B?8aZOGaY~nOGFy>NKb@g`x08sN} AZU6uP delta 746 zcmZXQ&q@O^5XMac@U1jEmj>B%{E1P&FG1n5E%mbgong-R7JO(qxiA&wxhS&NcY#Yji|8VE&v zMC83t8o}D5GSW-q{NtOT*8DBdI$)I&fV-qrg^P-;(&`*+w|#zHzijJab@O)V4A#qK H`}Ft^dTf&c diff --git a/test/specs/gradient-units/reference.pdf b/test/specs/gradient-units/reference.pdf index 8ccb7b82e8d6f50bda4a80b9bed96ce621269d00..4f91f7ac9861c60cb2ae87da00eb9caba2cff8d8 100644 GIT binary patch delta 462 zcmdm`c1vYKH?x_!@y0$z#>pF)q$XQ2s&95+QU!7BHVd;{;t@BnFfmau00D(OE--Ci zY-(;Y`Hz5Uy@92HA)1__fsq-ykfAAtkdcKYx+)V)jix3Ts?5wS;2P^8&M~wwG=Pgi zg)B|btu!()NB4)35r*@PjE&LFGBPnUMl;^X)XWqp1hO9x7y)4b05AR8?L5-2mCWV3q&? delta 718 zcmcbmvP*43H?xJM`Nlp*#(D!i1w#WMfkY>BfknVX4iXz7ieM#k!8GQ;Suhb84ORo> zfK>o#WW<;}*?`e-^94rL!QhktCcVwZ%$In?4GqjJ6bwK>A&(188yK5gT1=J^Fs(N< zG%`h#1Bw`+3mIEr2$>ohqpLE*)M##wp~}+02(Gan;v6FbV-vU-RLIaA-AW@POLTu2 znP52I$kY_WEHevpbmPq}EP+BG`{99NWMP3G7RE+~W@tK%jZM&9VQgj&G7Q-)6JV;s e5VAm+RZ^6gnUh*H`J7-gr;()rm#V6(zZ(DsRgC}u diff --git a/test/specs/gradients-and-patterns-mixed/reference.pdf b/test/specs/gradients-and-patterns-mixed/reference.pdf index 2468a7b825981382a232133d2856a641604be599..5f4e80f1d598749ddc4f990936de5e16118c3d5d 100644 GIT binary patch delta 740 zcmbtQy-EW?5GDy09&&P;2oi*A(uSGYnf*aqO_|cdSCG6y9zYOvJF&MBn*-lKEYsvE zd;}}^?$mg@oo=x^eEZEe-#0HOuXJ-YP?~P9*98Gg%gcDHmDuf`o|vX{?vxAo>D>Awh=?mJ`Ss8?g|RMkJN6ls22jWitrbxeeAry53{Q z1sWa4K%3Ynz*vh=DAFPluAwmhXD6g2-UVrkQ70=-#B5OMdS#ugT#@_=-q6_{Cn=TX Y*uRL0U5FOr?~m>>F&eYUR5dW^H;Fn-6hDap!e+UZHaoq-Mku(m_Zb3iDGUKRlq(qjxbkDRW*vo8> zvfojZEXzrq4RtYWNo4YLcO;MG-SK$ZI~k7lh3#56?WczpEHc$~0Bm}050VNlVf#~-nSNK*_B%CpB7h1z5`|G z9M^ax=z|D;Le2@nu3Mzg|fk@Q1~`D96`Hil}?2K4qyoeK{a> zQBnX>$8?Ct1jW_OHZVb(gP8oqE#mAcJFm*6VpM$S1POA}DVjL24G6Uqh(}Jan^p62 zmdzUhK^oK%z78t64gX?$kmUWiQr84q&QB|_b44(hh9=0zzO91%8${z+&pJ|nxeD>S zVP`#Yx)9Kii2Dq%UZn=@wG3K760H3ZkA9&(47OVty6yq^wWkg$-?8y(_*GL1|FNBd zEiO$g&21kCfbG%XVZh4Swz**u%;aha>!LADO|oeW3KGA8?}E%c3@7^4%uU6(+Zq|j$+~ftG+>MSTfO!24>NW z2WEZqIi+~A38uB66p86byCyX$Pt1Wh-ycsts#H%2uXs!vPj+wY|KBBYP9)R!g?jPs zT`f|DCeQM?TBNl|r|Vd9%fdab8#$AemUY(6Iq{gRZT*Xu+D)rK_omAfS%4=W7v#>6 zgs}Nj+?(+gi4qmVq*Cn3@COk`p^ySscKZ9C^Y8FH?b`ol8s#uScB+`st$2p7UFIfx ze68~5ItkKz7C<7Rdd2ePd=7s}yswkb#S%{SI9IsVFR${>IJc#`z$YykTeT=uvH%~X zd8-{cfUPnbye?+8c`qP$TLwYHLeqYj!p%QD|OE1PDw2t!Q{z}N0)NPH+$7jeM z%H>|ap&!M4QQgSvPdmVjdVP6e*q1(t+`bS&OfJ~SRh3CL#|Hy48=YK(>NuxGQ87s> s3(s?uUldH5gYjs{&e?%({DtD#Ls)bUX;CF*rIj{Brp(&gdvQGa3-Y=^hX4Qo diff --git a/test/specs/hidden-clippath/reference.pdf b/test/specs/hidden-clippath/reference.pdf index fdd00dac3db9bc3e6fb109289ad755a48878339d..acb57111d0ce9472fd8c82a29f412e6c4bc51f7c 100644 GIT binary patch delta 397 zcmeB@ULiT5o7u?JVq#yLsJW@0LJpS^kc6-@xWc*eCLdrFo4k?HM!?X(03;10Ags-~ zOro4(CPtPD1|Xo2#|5ShjEqdoCePqDt2ePQLz6NvGc-gOGB?2xvM@J6Q)Os?q0!LL z7(-gBCKhPM8yT7!fP|Eg c!^FfA-Lb$hH<n0O86}#Q*>R delta 625 zcmZXQv1-FG5QZ^bnj>oiC5s4T4Z5=|$q?w&j_ue7(2_y;6})9gptR^EvIp{fm1JZK z$@ujD`uv}K_U-ku{k=X3E&hJaBXtL+eC28&kWhAZi6k|UI_&HcNjhc1Zps8#)H5@1 zf^QhyXR~o{&2i)hhTJci8i*t=HuDQzoPpG6XO~FQnDLvK@S5L^xnG-?)kbz5tIy!o_=KW7 hi%5y$ct5HPXqW#JMdh%hxpeEbTlL6czkmPw_y=S~d0qej diff --git a/test/specs/image-svg-urls/reference.pdf b/test/specs/image-svg-urls/reference.pdf index 8cc0ecbabcb2f79146eebf5506ce792a622c4bed..4bdddb2f894bddac23d3563ae1c03c692812c556 100644 GIT binary patch delta 493 zcmZXQI}SlX6o$hsB$o)4_DX2wJm$<}0kj&WC5T>i7eEAe2@-`?qf=Xe$_nhlTjb0X zGbi7i|DS)(wXjLC=C5IHhD@ZN^4)Fcu@lskuqnnviz8{o&vaPdR4z delta 947 zcmZ3ccw1#cH?xI_$;7@@^#*zhh6X?aiB9GMi-3t7BsM}6!Aj-DUw$9o0VWw=lb z-?>UPa2%a5Yody5l}D-oQ6fI5c^vk$2e`HoA#J+@+_gI&nKj5#jWY{y4CToQQ|X)- z(0|E@S?^W4(6_*)XEUTIbgsfBvpd4JZQ;W2%!YIJiSZ8L!uX)P^dS}yE$bssB#1^B zXLewL1m$g=PdO}#%|iJC2?E);P_T;6)`0LjUgPq+z*{KKCy~k}mQ0X{_#{uz8ngaJ z<%rx65oksmKtyYnR29(tm~liU6>kKeo`~JD8}<`w0W}~<132{UTYpX+uY2!uZ+mxJ zcK5mSn(bb?0-lIHc)Z^_1+RST=<-g@>=;SD`N-S<7vuNw&~I*xyj5teVlajCtzcg; z>&JLrz%`|U378nZqS#NNxti!cO=MM?7-5`eRzEBhL14X8$!|)>QOK<6YNkypp@hPj zb(TiiJWdy2{T!#KX%Vjx%o@dcp$E5N4pLxR2&*6Ax;5tB%b6edvt+)13H+~+U_49W zPb*BJ`&L8n6+)024kk!@Ref#L)rvzdJB) z_J1%TcE`qF!~2^d#{XHUG1s)i;)_xM-yQs>kIPw>{MYsCF)a$Qk{0z0BEeB!j=uJEA@bR_F{?sS-<)Ys_z9RZIgz3 zJp?$AXJXqn5uCT|v6z9lK+{MO$E>spBjik^papKk#ngbHTCe zr0aXz{tlnF^;Ne+%pk<$oGqwDUSLC9Njbh(>1jl3uj?qRZS*@xS4o1#A=>xhW41yI zj#D+rlGQS;@p;JA4K}^#bfqZt2G4b+3y3!tcO`0pE=VhsbOO|P17+J}kS2^h1RHbcJd6{pipcY)@gIuJZB4RF ugCI9UzrRRtGBBP@KSQ{Np5gj0ualRMd?Z&ZbeL=7XtEo0+0oJ2c=QkAfrRJ) diff --git a/test/specs/pattern-units/reference.pdf b/test/specs/pattern-units/reference.pdf index 051c99c648fa593123999e6f51272f2c879357e0..b7d2c6c2747147f799512d74a3a5e8f28d407fd7 100644 GIT binary patch delta 1188 zcma)(y-EW?5XVX47iW<}@Ds$7a1aQ@nfLEsec5)KAV-(rv%55kPtAB_K zGrf@9nhnWZ&OOc7xM2ApKB&~0EF8HzePsLTntiXomIL=o-EyF{{8kQpu3px-U#I1x=JHBNBqplZk%+iUZj-f@X>|t285vMMO>8&x9l|jwplI&D==7{PxfK(LFD* UMCNv87k6#MB&aA&_YU{J0O_j=!vFvP literal 15272 zcmeHOU2fY(5Ps(=_9bY7!s7msOBP0e*p5@939Q%wnl{J-O*0MynMx$OO?sxDpqFWn z(r=bai6SM-PNWuzX-njAIJ-L>&CcI0?+p(Qcf>$>_x}3(&wo6{I2)h6^LBUr7oXl| z%pWEfnTO*fD@rDC_r&v0vg!D0l4esTE5x(xJWuw z2$o(p@61Sm28@;ib^(G91U$jPa3gqVA|awM&?ZDbEmXjEmf$+5kVWWHR2<-l&!q>3 zEi{@zHKsnN)g3{Ej>^LJehW&8X-8Q@?X#t^ec{mhq~2RRIDWgb%q9g(r+_7!riHiX zJ;(nxgd#&Q@zqI1Z&@m&D)Ot7O1NdISY7%0#1d^;ETk;@t5X)i8)6~r@|-NaGv&_a zll$m67g(jA^7AQsMXu+BS)Xx5zJ^?ZYZ%NLdd@8!!moJ#UNX%HV*ZcW=(nuQ)5P;n zug*&Ay2ybE&wpH`H;Icr7FQh)(isvUwRm$=B(E8+%Kd zAm&qO)l8@v*qZzW1$}kswtPa=JZx1D#5`7AC5spNWj5V88DA#F7L=hG!Y-FXHU4&t zf>>`9tKpBzWR#~{c>eWUV`9B+{55(1<^cBpEGgk@+Gg=aE|b{6ii_H3;k#8Zc(Y-W7iE3%A|K(w>Z`pf1G9Mmh2hF(U@uS0>^;M^=l^0spqnY2 zAbX0W&Lv@5$Bi7Uk#tQi<_TCc%|drf1eE;{6b_6CjEqbm0~PT&Vp0ucq@@v38y$+6 z!+caNa7w*y1E8076jJ&JM2i>6Wid*zlsrRPNl=uKMZopQ`0n}Cu zK?RIF2P~daiM+R6q-W!M&KE%+XbGm#xT@KgJ`LMK-Bdcu_r=}fm92jCookDoGFa# zHmE3;;xUjbws(8&HgK#FW7MkKgb3)n{Ei*$rjaK)qR5n2k_a3;!mu^G3?jDdeXOv| zXaUc$bBJi|7>>4v=h!(kqXj?IZ_V2>Xl0P9Hl7gSVMyXL#l&^3mq0HVT9**jhE`}X z&{C)%l*%X`2Z9SMLA9_t5{B&|(K>t(N(^+JsLAJZ)b!_W+X+ZK2ucG-r(yh%Z8A6-OpiY)4C?jPM0* z7{@9?XpOKqRNR=za21BwO@9xTUisMk$ov=CN9-Uuy2MV$J$K%B=Od_--C(l23qUYu zfe$4kKY-%Jp<+(^4>hAXNVtHx6!I{{UO0y|&|wEg%&wsmY0T_0Hi4iN6kb_aU`?%t zq5bt}AV!+$Xf(6yk|$I)@lW3-c9RPjrAt@GVeazf@!7j9E#2jOV~t&qxtn6~hl1I4 z*GhgXB}7r@otF@89JLFFYlKBQ+Y4(hEPtpNoF7eCnw2Y+jOKJNx21CPhnmUC{#`3V zGP%77*NM;{B5bPs)OFIdHK1Oaw~(ek46*RBcBb1RMlaaU6RbZp*r>Z+#=RG!Ao7c4 z><=Sm3x3x-FV#D*O^e$f#>`flu9tjsk>GCSG>zbWqk7&DJci&*-N0400*~{nG@G#d z@1~SniUHPTAK*1OywO(X(bZ+q80X_8 zdxO{OwD24+II$3gmVg0o{{%`b%tEZFP(qmi5gGl}D1el(E~2oTrG*j(Yp07;RQ+kA z;!gLHN09SE_fmEmqPEnb(gwfbV#AP<@b8jDk)(;&>>gsK@<|iLW6t4vnkb=E=hu$0E2KrGg>H=~ zG9u;rKOhI;J`Hv3RE4FJHx#sZjCM2(E WYEH{!Qrd|rv{He0@809%!+!x42!A#J diff --git a/test/specs/patterns/reference.pdf b/test/specs/patterns/reference.pdf index 5e2c74e66ff83c798e1a5a5f5e5ebb233b8a1643..f2ce50d303d0745b9088c6163efe5d70c71154e2 100644 GIT binary patch delta 533 zcmZXQJqiLb5QP!7Nns&^*ln||OlBsNq_ogZJc!~Iwy{(Y)?=t3Ucdu*D0d_HGf9zz zFEj7G%#(L?+;`x1xO4{u(_&+qEnVt!Z>i9I-JcCd$W%bPimgc}II17xP*H>aA1tHO z$hizj2)ZidjgfT~g7@FXDtRM9{IWM9)|SX#e*z_oj~+9vAgJY|aEluM&qUago&|wu r#GGX%vR3J{M4f_MOqM^64q}#{0*exJLRqJ;ualE;0oj!0e6@H1wDW76 delta 759 zcmc&wJ8l9o5EX*TB|?aD8(OgE<4;EeZD?|UXoW-(AqCNILrJ7an`=Z$#5Fia&X6)* z6WB050G8z$znOXO*?TVN zptC_Rly!k~?O>I(fploGGsGk%!8-W}@R@xGAh}Rm5cFs)HBi*Q{spMy4)p|cz7ls(77dK7sjoGUkBKTK z=m6i1BjSEm#k9Gj+~bUZM%`2@nGxm)#+Z=wPr~TW8~R2(=mh@>z4*pG!5G2eJJaE0gi9`|J^nPg!A z+Gct=noDg=Xs(T~&s@CC2oBVKQlbsoK=@X#NCodPXZS>OU`Z<>K8Q}sJ?6OB61K*n zho$62LOsNe88{*VO8&~z9Ijch2?avz0)aVO+56j3OJgp`jX!)cC+^20EhkwqrS7j;@u8@*wt={3SyeZK zyQBhgp~xrpMM$~gJb1nH!;>OI}n_Y^XzdB8{%8j5Pb&-q+xGB;+;SSu=i)G zdV3By9v<2=fjNC_CZhGdr%d3>CA4iNv;g+TKgT20>q*!jj^#;k8yDBvOx1^@a+VZ( zNQTt|Vt+Ci|NAKle0Nba?uSj1XXzf|-(47&@$U`9?%Mc!@^E_!^?#f+u-9ys#aC?s ze0TA?dY+BT{D0bCT~QZRnO>=e-nek@q3*SMg6(ZMgG@6;1m-A z?mlON;>@7rQKSbYpJE6oNs0v&r2sApRt(`pZN-S{1&#_aTzG6NXmWEw0#BUkqB-WS**uzPqn6bnY;Ry@v}L+_jpl zEKZX~(RZgm@i>B$7o0@(=SRkVfbaVitD;+_2MH{Ka*Ef)DO?I|tmhA^_>iLQ_VfWK zg60z~=6Md>qVDJ9xtzlUoEK_P=JQ#x;^(PSw{Yc;x@k0yS zm)_<;9t1Ec>sn#lX^I6*%bJ#8oq>W!9W4*%c734lLn5s= z$!OCf9*sA(q7Hfy2b;FwehqW8W*!c>kc8_^(%*#Y1>RDtsgf**{U6uGRrZ&{DRM_; x*-)JtkhjC)wuEb%N$%k(y`e|i#S4GOuTlAm=}|XH)#&8#LN6o-2OrPR{sU;GK;HlW literal 0 HcmV?d00001 diff --git a/test/specs/rect/spec.svg b/test/specs/rect/spec.svg new file mode 100644 index 00000000..b25c4b17 --- /dev/null +++ b/test/specs/rect/spec.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/test/specs/references/reference.pdf b/test/specs/references/reference.pdf index dccb3c452a220836576a70a47f779118eb286fe8..8e9f6b7bd1226d1406b3e979ee33029bdc163c43 100644 GIT binary patch delta 893 zcmZuty-EW?5GF@NSTM$m30Q~;A&mst-PvDkR7jLGK80dH#NHwxXr*8>eXy~xlwe_} zFJPt5VQHa)cPAufHdovo-+X^FFMDrWH&;3Fa6QNs9N(xOv*eZijQY_5#jqbW@jYM0 z`}~m7pXR>i@o}L=a9oX7@S@Pgk3xIa=y|b=>&4w!qwiuD50_>bp63MK#+y{rkLq|@ zx=e764=Ejabp3Mk8PO*hhd%6>a7WK_^X Z+aS_PMbB@O``}%Dz^nqz8jaR|`xmf(z;FNn literal 9281 zcmeHN?{3>R5dW^H;Fn@8hFByeQPL0;XyUpJ)*@M4pxJ_ckYzeiVN01Tcj=yKPq3HS z9%a9yBwK%)I9=-^0ctxEMIMi*JM!+wV;-FhM|)!6Sdaex=dXV)hjEro-dp?o_M4Aa zn%O7Og|=|bby_fi)>F$q)yr&^$9l{-a8m`;T@n4{1#SF7Up%KdaiDWRiS+|?WmepW1_hJ#nvSh z{g$Qm@SCnEK}>smDcJJz2CEo#ZdJ%FW;G1H$gHIZTV=S#tcJrEnAP-uz-H|(HKU5H z3iX<^yuDTpgY8CDO%BaP)^nRu}<7jKe+C3fdDm=|KwF_sBcboZr%%(Gb?)fIU>z^<&A-R2Q^VXXa-B_xW&j z*N=fa(_MSPmJ1Uae5kXoAGLR+Imr!*ueKoFjbW+Bd*$G^9#!-5K#)=qW!*r_e z=rPpT;@?V9!yl<=*FQ(%gW1ox|15us+Ysn7XLP94s*iZ$ocFpfBn<5+P% znZ*KEXENnHQj?JLFr2uY2k`_+=YU5s=e`qxgHjPVcwq<*ZXAMx%R_K*oDdwO3cx{x z0XXn!01nif^G|@B4ajB4VMdhAFq%Zt;xLb|k#HaC4@s;~UmQ?%mQzw?9WD$& ztj)kA83*b3=hsNFPuY2quQa2}J5mFxXn!Z0sJHI=P%KE=oJkICYsI1GX((WeI2N$N z1Px?CiPlI-w1%OB)*yD!8o)|qK^Lt`xoGu553O$O84IEs7F4)NrHloAwDPHs)*CIj z0r+3bf@GX+7IgX$ugdz-xr|Bw8G9m2c7pX-)DLfxc|FC@RBk!SnN;QLvF6Ukg}$Ox zy=DKpDQ?bp975(0uv&Sl?cy3ckETz%p}KvX((}|#A5(n0*R0R6x_d7=X);MukDImk zE%eab44vdzJk|v}w{c9z>^J%vY0{$w&g2fN`(brIf;CMRb$=fP!6@#*a3jeoFEMf$ zc_6BDSvBuQ9-}!;b&8q17!`eHGE`Iya86bcgiM&^E^0w32&xbTNKF#MlqD1OXdo8# zcpx^L?^E(iweMpjD4pfVifnu-nJmR2vO2R3GJ33{w&_LZa-tHPPT0);5dxfL4wJN6 zOxb0!lKm|6n5=|9%M_E9@MoFNaK1?N7y`e_XFAP|!FLlFou4?&IHJ;q-_jc2jbRo* zV?Ed#W6+_G@toh@E>3f|f>knI#QU9*pg6C`T5<%FllAL02i%N=KM=8S|l}j$N-O=-)ympledLstC7m{I5dWZX6 zUI>(!5-s)sWC#fDDwlUv==c;iT2wA4Z_}=F+^(puQe7$p>aGx;2VsCa=?sRT8|-ZO|N@MiADNN}>n?(prK z*|+a{d>n4)F_Eh;RmK3be5c~pRa>=D>-s%?Jx6n$aqu~$mG4!1A`|LnVr{97`M&}% z9wc%&Kwh&{g+U`CNEH%O-&l5btnS$tndr8yex3m>iEjY9fqnE|&Z4Ljvj{OHlwRpF a0U{JxAZsW5BO4Q%le@?8SQW)$wfq3KP*F($ delta 508 zcmZXQI}XAy42A^^h#UYhcIk@z$fFrSf)#OwN{FEXZqSJd38>1##348VH=|8eQqm~$ z?|iWx$FJk5vNnHqtz~02F*4g+?9;=nWo~I{ lq+kF73VB>$+R)O#!V+D`(A;#gX229qBXdhGRaIAiHvs*a8ioJ> delta 344 zcmcaJpYhm2#tpk&m`yD$C+~Byt2b0I&@%^O1f9$U5wTRrfwN#DFdC%B$PyI*4S{IE zDuF|NJq~dk78ruvgvA1o^GOj-=E~p-=gQ;SEZ|zk#%yM0u({K_hgr+Q$jD5=00b2B fxWKfbrLmDQx{!&1c{EX=JHj00IhmTwvP3*xY3DaWS)c zLrV)YG$|uPLql{SBNGfEpb6-zOffZ@8Dpq2H#3H7tcSS9$imVTE(Ud=fib$3#)hUC z-Y~*&zOjiRhFPX27U;&CnHm6vlu*LN(h}XVCI%LhWhEwanHXA_aH*=g`nv%DEWDQ! literal 6330 zcmd@Y?QYyQ?7yCZe}c6bVoR1K+d~kbxisrx9gdE^UE za}|bBq(KD2@pYtxRH0T<_*?~@IeuQyG=hhY4l$O7VTiXDt%UGEU~mdlq=hH_NQMZ= z@6k4RY1=S^PXdEGgM#u5dZr`JABwa1ZPdcM~a}L;8simhQjH*0Dhli%a6W!8f ziz2il_8N_0?ti>4=a>teQ}WbiM{OEK8QDg@Rx$UNbX36=Wpe|tY1ov~H_EQsftU)- z^RFh;JHb?qxkqtj2m<$=$v&DoO=9L=Ooz4228mKI_idgOqck6b`&*j7$*XjRVD3p; zR(0U2{e0&8M@2Szc?p8Akl=KfrT0_Jf?wJUcrSVG8dx*zOpxeF zL3)_*r>1;)8wjcx%nAY99kJ!TBTo>EEyUWI$NEl~39vK!bu=uPaKs+7%E*>YtBKyYqmv_`zStJ*xhAS6~o#0-Y2Rz>T6Rd0=wQa9$`*>E` z)9>H_0RiL?SnxdYfL4Ye31l9Ed>|DFQa}NeAWV@co)H*;jVuI)U^h5{5nxu(5Fn*! zs-nnAV469@Qz|ioCFWc+*avI00Uf07@2A6ClhlBM;_u>I7t6666(3C#Q^Kp;ic}X4 zclc|p%3^`FPK*3Ft_{38{z*h(An-2NJU?>&1HP}9X7x6sbT7tDP>iWIJjP0JTN*yS zGx?i@=APX?@J3L-gM6B0Xj`IvA3qjTT!7Qu^ondc$(Q&%l;#?%y`EsLEZBfnN-99S zeWW54>4CgODJjulD=5y%o~tOVVXUE~3f2e8fTJoa17#>TP?5%^TcPsB#z5cmHmIb+ z^osJ$j}hYcq3y& uV`L!*pshwG2I#?HWNu=BtPH5i*bu`?V(dH zx|N2emgv4PG{6p@3(#0cH7My7_7LwTlfni*Pfsj9mA Gy8!@wnoBVN delta 506 zcmZvYyA8rH6h#FcrlLTC2ALvl^gi(?13-ruB5g#&02u%wfx;dXOu-@yzy#n}$cc>$ z`@ZA*KK5(zUS3XP=Ii<1D99z-?}kHF2~VxcW!=+(22}|nSHXLO{-=Ik*R2+`>JnYx z%|lf^cB9#3u7D-DB@d!IftcE(Fpbg>-GH_#MivuP7B+GrB#B6nxR^~yY`ST%&}CpA tX^2~*;rJD3lku^%aV