From 6ea88eaad22bc866f635e2ecfcfd7941379ffd94 Mon Sep 17 00:00:00 2001 From: Alexander Wang Date: Tue, 9 Apr 2024 09:51:14 -0700 Subject: [PATCH] cli: apply theme to pdf exports --- ci/release/changelogs/next.md | 1 + d2cli/main.go | 9 +++++---- e2etests-cli/main_test.go | 12 ++++++++++++ .../TestCLI_E2E/internal_linked_pdf.exp.pdf | Bin 66069 -> 66068 bytes .../testdata/TestCLI_E2E/no-nav-pdf.exp.pdf | Bin 96035 -> 96034 bytes .../testdata/TestCLI_E2E/no-nav-pptx.exp.pptx | Bin 122135 -> 122126 bytes .../TestCLI_E2E/renamed-board.exp.pdf | Bin 109973 -> 109975 bytes .../testdata/TestCLI_E2E/theme-pdf.exp.pdf | Bin 0 -> 17306 bytes 8 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 e2etests-cli/testdata/TestCLI_E2E/theme-pdf.exp.pdf diff --git a/ci/release/changelogs/next.md b/ci/release/changelogs/next.md index 0d7fc98ef..3ce0badec 100644 --- a/ci/release/changelogs/next.md +++ b/ci/release/changelogs/next.md @@ -10,6 +10,7 @@ #### Bugfixes ⛑️ +- Theme flags on CLI apply to PDFs [#1894](https://github.com/terrastruct/d2/pull/1894) - Fixes styles in connections not overriding styles set by globs [#1857](https://github.com/terrastruct/d2/pull/1857) - Fixes `null` being set on a nested shape not working in certain cases when connections also pointed to that shape [#1830](https://github.com/terrastruct/d2/pull/1830) - Fixes edge case of bad import syntax crashing using d2 as a library [#1829](https://github.com/terrastruct/d2/pull/1829) diff --git a/d2cli/main.go b/d2cli/main.go index 34ba5a717..93a103db9 100644 --- a/d2cli/main.go +++ b/d2cli/main.go @@ -936,10 +936,11 @@ func renderPDF(ctx context.Context, ms *xmain.State, plugin d2plugin.Plugin, opt } svg, err = d2svg.Render(diagram, &d2svg.RenderOpts{ - Pad: opts.Pad, - Sketch: opts.Sketch, - Center: opts.Center, - Scale: scale, + Pad: opts.Pad, + Sketch: opts.Sketch, + Center: opts.Center, + Scale: scale, + ThemeID: opts.ThemeID, }) if err != nil { return nil, err diff --git a/e2etests-cli/main_test.go b/e2etests-cli/main_test.go index a47f2f819..5a2f925d7 100644 --- a/e2etests-cli/main_test.go +++ b/e2etests-cli/main_test.go @@ -765,6 +765,18 @@ i used to read assert.Testdata(t, ".svg", svg) }, }, + { + name: "theme-pdf", + skipCI: true, + run: func(t *testing.T, ctx context.Context, dir string, env *xos.Env) { + writeFile(t, dir, "in.d2", `x -> y`) + err := runTestMain(t, ctx, dir, env, "--theme=5", "in.d2", "out.pdf") + assert.Success(t, err) + + pdf := readFile(t, dir, "out.pdf") + testdataIgnoreDiff(t, ".pdf", pdf) + }, + }, { name: "renamed-board", skipCI: true, diff --git a/e2etests-cli/testdata/TestCLI_E2E/internal_linked_pdf.exp.pdf b/e2etests-cli/testdata/TestCLI_E2E/internal_linked_pdf.exp.pdf index 4cf0f8d375cf10f549fc44c635014860e5eaa480..29ec7f45fed8a988fb97ad792e70a8f4f52bf2bf 100644 GIT binary patch delta 1019 zcmbQ*!ZM|WWkV=qy@{P2S8+*EYGN)|1>=$lv0jG_1&-V=?y_{WdihT6?CKwl`&Rzv z&Y9#U(Ea1dSJkbyj*$^*krL0$k9aHC9k!eFgST9|tbftg>CcRN=bcHjPci$NoT+D| zZJhmFz~4j4Ge?*|Izgp#`2i0hd2@@u4y8vGJ55h*vhjSf+9G4iXP5o+H&p8_ejeoh zZAs~cBcD>fKV0@`7MJwvdCq-1{vXTs_~>)WV`ajUwR5k0_$DtG_DSn;iRkp--0ycZ zzS3u4`2U|pBP4FKBvU?PJ*y#4%kMc!eiO{^-T0X)Xy3$lgS%ofuh1jTz{1)sLi}1< zZ=P-LzIaA}zp;W>$g`$xwdnHOOV&<5ySzs)ZS(arzP0+Zmzzi%M?d$_6X;dB);ZhM zz{u3#l9YriuYY;tM3uOIioY3ky`LCbeEYuX^l$cGlFO@Ql`Ku=onMBqAY`FA2%~O)i%q>&Q5)Dl(Qw&UvP0i8_k`q%BO-+mwO$^Nq zk_;@33{s3!6^slO3>1QZI!saw4b6-#6H`)53=&N(5)DlgQ;ZBOOp;TREzHf#Oj1%4 z&5aB#k|(eIm!@uFU}9itUAbTLCi3o{HcV?#>}F%xr4y%uJe>MV`TA$sfKPBJhu zG(mT!fswI=1-d21<|a_h2)#gM7#;zJff2f16BC%lP`&lQ;4m>Yz;LyRIi~MSEX^=1 zF*7zs*K1^Eh~XGxQ*#6KP%t$!HaFHlbD^235r%=$lzFsbd0xjPyUFRwU&-~|kFYJ$F`K#Ry zlgtH=IL1`gp0p@#a(52)bq-z6+&*9DDg_!ff+?S|-o=oo<@cN!rCt?Vp>{n zo^9^Fct(J~ucGwex6WdKUrj0 z=B?Jdc+Endrq|^*yWZcZpVj{CZN{@2#`W}IwdYGRmZW)9?=rKFgo zCYzZg8X6c|m>MN17#S)UCSegCK)AKm{^)88XKh=n*)^?C0m+U8YdZ~ zSfr(x8WAy0t|%rG;tG%}t1_`h|%DVmIdfrW_~x|pG%g*k?pv5^6W zn29;2UJG+fb(Y2!5WV$qCm9$4{eo_wk+Fp(x|p%K2~;yeud#&%hDS^cOn@PW;%x&H z6PU$Nz4btO6H@~WSDTn)`p(4C48syLV`Fr^MrMW>jxjbhH$)EwQ!}7XG|*gVW@?0C YpqZ($sloKajEtTf7F?>TuKsRZ093z5egFUf diff --git a/e2etests-cli/testdata/TestCLI_E2E/no-nav-pdf.exp.pdf b/e2etests-cli/testdata/TestCLI_E2E/no-nav-pdf.exp.pdf index 0c8250ecc5433ced4e94f68666f52a827575e8c7..1051f9022e25ae704139f72e395d7330a98eebb2 100644 GIT binary patch delta 1064 zcmZXRc}Nsd9LJr)vb9wcrCQO(TCptGH*emXnP*@@nnzxhWf>al%q}V2TG?S+VMVk> zGTD?}kkUez;S`+;m9$viMA_vZ5~a`qL8+P58g?-A{(5|W@5}pq-mCiPeeR?8)$OAk zC@#)WRJ_qC!JN<1X-J9y$O<%cN-*AH5Yimnu z&wP^IaBy1O>$l0@Z{G>s?>=66tUWr_IQ2X(s@^%P%Dw8)i8Lbm`!vd(M*llikq06Z zGXkgZ!qD8pp}kvPd3~Aa<@NJt50$k?oilnJxzZ#s0%XuC2=&6WMpZ%NolYLe5O6 zA2p2JUX?hg=6KfyDTl)-vz+7HCEqgnsXflk^WyxclKyEFZCdZl_@(ZV* z>Na&|D0yKNP+JT6aOKiQ>Uu5^MUL1JA{gb{u-z{49KaG5FvCMJUu5i1kcb3X8ZtDX z7a3xbk;E_@ORSQFfE5c?23sWv1SHx-f#*0R*{nQd1d)cUQeQ-gkq96_02zLY8HSj& zbyB>w*hWu}kA(pKH&c>|sfu8p2E&V9OB;S~2oeZTJ{ME79fD>A7=|Uf3<*G&aSW@= zcuv=a9xv@V2w9K#@N)cR@?f)CP5?OpYRewGk@CMTVtAbhVp&et<^Nnf(sg(k5KnZ} z80hUV#JWp34r;r|^D$au4s$%#zz7`6lIfa|U}5>V${zfOxnj(ir9tC*}G@jpH^%k2-UzQs95m52D!m`0V=lm@9S zi-v!c`$9|aH)%t=`Yk>E8Ckx*H_qA7YXc%e%9- zDUY3APRurGORhQn-qH>^1wnb|&?cK;6UELfP69b5nS8tt zoK@Yv)V`$$rYszZb8c03%QCF{N0oDQKyX+X+B#x+}>I$CYJmQU(ZLQgISMm&L8Dcm}Ml zdc_<-JvS7G&q&$~06iA>qHL+Y0JLmI1|k{^B4^SgBtR^R(7<7AGU%Y%q(g+T96>sY z^$aEqWHM!{wW3}$AR`v_SjSU=(-ABZj%P782vi_?Xyi>s79zr6B;70ohA4tC;t{2k z#Vcg0_4!7v&L%R;wec9@e>`c84OGZ^22LEt!pMGK1j-9Y^4UOwT=26XLKI3Xi$ItL z1z2iC12m3<{u)MVDxH~#zyTH|{xA@$`SCUU2M8&oSn8jM2mqvnZ~^5U31~%m2qjbu z!t4RiEM@~@)oS8D2kW&PT7gh2m1fgS&dKXtSJ?wut_Ej=s-Yo}9LL_~7> GYS}OD98XpN diff --git a/e2etests-cli/testdata/TestCLI_E2E/no-nav-pptx.exp.pptx b/e2etests-cli/testdata/TestCLI_E2E/no-nav-pptx.exp.pptx index 0d0f5f7cc2b57084d8e9d765205b9e6a30a5b645..9f70349684bf2d660e09fe059631609123d9bb6d 100644 GIT binary patch delta 476 zcmV<20VDpGx(ANB2Y|Ez7RP_hZrd;rgztF@f_I6ulKzCS6`&1rYJdQB(Oy|{BeUTj z$aN&WeIdGH;x@M)$20qJhqSggle6R*QZ~Ww=%(eAfLB2qKkVqY{ay2sl8n-8X@iFy zogvek{$i`5P$9uX3K0?-$QOhVGCAwBP;o~Oh*2<>)d8H$ZHV9}XCHqS0!9ybszu8qlBS(^CKbT;mCz&GI+vHzii(x@dWqQzg)3 z%0`^tWOcq@e!kt`(Z1u|Rl~0ue!b_{;vE-@{2(}AHa&yzd|&W&wo~DA)q6LZQ+(SS1TKoTJGQB^em7;4rbaZW%3JglN-;fvm7=veh^T z_|U$JSBWX^GL$M5G00&VZ zC^Bk1k-LsmWNDW;W2!U44Yl+(AM}<{4l^R*gID@VgZebTU+-^22}XF)%cs}3*;dAN z<@{Eca-hhRG{3yls(jykzB}I2zH7Qo)pk|8JGNWC-SYpMs@XB|rdf8rg1kf9KTG`^ zd!@V-M@_j-KvC z`U$_!xp0U$9)9iKwmOI{^48T8m)@Ll{}IsAylECk_*S`%Rmsz{G z=Vi1|>~xM-!n(;mmMtqM&1_kFzI2}D!5w)8=YRd5mOeqvuhwh+F;2beHSPv4Up&x! z;US@J!<%ZsSNWq(j{io_jg_A-HFaE=Kl#e+vaLCtQF-^jwp`tv8yDjY z(dN2&I`cWkdSe3vlwb-vofl;&@by>S(a3Gxvo;=od|Yg5*xSBu{~Ff6^=@(CF#A*Y z#34YyORQ73(q!8?=VG59)&kp_FS=OppBC(ne-p$RJkM9xEk*C*9aK#w~?S_50h;dEKb5Y5X>|ahLu3T799oQ~lZ1Su^yxwpD1KY%z*V zGiH4jwDg%kmSS-0+Ve|I{S4N9j_HyAnDKYZ!6KH)eSG)2`dT(Vnmy}^U+UK{wRe(C zlm0S>?dki*$IZI+#dF@jKNI)Aw~Uzku5`84inG3-ImFj2+jn96l6i`Pj(OLwKi_ox zk-zooWvphF$82s(SQx0D?9EUUU-~o2E6>LAk4=K@mn{YF5^evnO8-8iUv>K`!lc>FbJ@1fWn(HFrVxFnXODrmS^0bPM4H+|Va-BGc+?o5d?`Dn`8Lc%nUPREX+;N z^_rL)TA(}7%+k~p-GP>-#>NI3s1_R*6~t%(Xfch_13zw zs5ekmB6xPTWlPw~S;n`XTluOv-pngF|Lgy>^ngoC>|*DivWoc@(Qh#2;vwS`9zDGN z&XRr3a{J~VXEswVd$ebZLg&9V-g`5{PnQMmx?OIY_|?z0QtkAF8Dr4JC4`qGL&R?|7^I~{5dGeZ}Q5c2L4O=r_@R%`$lA3x$>t~AnM_dz<1}~CLSpX+MpUCChWcK z+)SCd+EcT;Hi{Wdoy)tjXR)xv{R+Qh-*;@Si%7IPF!7yjQ|evewyt`u)xBP?-u~Zk zEa|`}b{+P+x3zUduB@3W{^fo9-@VT>w#K{;+Zw#O`Ziiw4hxq^|Qf`LL1m%e9WqFGW(vO%I@lA)17 zqNSmsxmk*3VycF*8dH zR{%rWX!=Bu5eDeW&5X@4JYr^Mg5g>Va}$H<53#wz%+k~p-4&Lm#zq#XRv8*t8X8+p ZH(bjo%xFB_buFV8has1$s;j>n7XT7&uRQ<& diff --git a/e2etests-cli/testdata/TestCLI_E2E/theme-pdf.exp.pdf b/e2etests-cli/testdata/TestCLI_E2E/theme-pdf.exp.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f76bc25b539d9675f8c9ccae039ffb5bdb1c0fde GIT binary patch literal 17306 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 literal 0 HcmV?d00001