From 18838dcbe0f776428cea12f8ae13a814b16d1076 Mon Sep 17 00:00:00 2001 From: Rene Schallner Date: Thu, 13 Feb 2025 12:36:26 +0100 Subject: [PATCH 1/3] Migrate to latest patched 0.14-compatible zine, update this to zig 0.14 --- assets/main.wasm | Bin 198696 -> 0 bytes assets/zml_api.js | 1 + build.zig.zon | 7 ++--- zig_docs/Decl.zig | 36 ------------------------- zig_docs/Walk.zig | 22 +++++++-------- zig_docs/html_render.zig | 48 ++++++++++++++++++++++++++------- zig_docs/main.zig | 40 ++++++++++++++------------- zig_docs/markdown/Document.zig | 2 +- zig_docs/markdown/Parser.zig | 18 ++++++------- 9 files changed, 84 insertions(+), 90 deletions(-) delete mode 100644 assets/main.wasm diff --git a/assets/main.wasm b/assets/main.wasm deleted file mode 100644 index c97f31c86ea0e32a9911399251ba6cb73dbb4142..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 198696 zcmeFa3%pO-i6?f>7J6*g_FHML(UMe&%=%FfG>Z zP-q}!>U=8Mmb9kIXj)M-%4i&!6I8HxiVn6|Q>BWEBXdN>IgBz6Dk{!!X7D5D$jJHr zp7&krzyA9YC~d9nG=Z%3f7g3?-sko{&-31bYi@dP7z9ChcX-Ctjl=v2t`4HZhuwR4 z`0A$8NNm~jFe!Wut`7AU+m}GU0{c-F)Jt^u7N5rza%n0T9@e|7nV-IDtMnFCAKr3x zsIsczma7Ba;#+Px9Nluu)s0*D!%MU&ik5DQue;&hL6eu}`>whEJ?{*f@t;OdMy+@kThUB36-Dic+)*^sZANjk&DUX* z2YDlkbi3VQ)NFQJ!(nrJI^y3X-Y^`tTGP#TFuk$U>V&h@)a-7WZU^!7^fc|Lb^f%P z(;GK7gJFBvj)ogIPYYPH+b!=^xNlc7nU$SNT9)E^%9)&{^b%_q&xzoO9$-xqef%{UBZT3wi- zSYAFA^xMDHIJ5QMYu|grjo%&x&1)9JA#n-?#v5wr;+?IS(@UgHz&UI7p zasTsu*W7r`dv6MUB<#87zU|O^uM6%7r^k7(vZPP>B+KuTJ{@jwxvszJeK+24=mwYi zfQRO$8{U88JFj(Vp9yCy=eurr=b>wFI^+_6DeSo72d@uKjiI>~=sz0{>fH=}Ids_h z*7sa@?N#r)=FqnVzvA0|=QW3}eK)wi>iTQmdu{Mw*tII{$LD+@8okN2_^Up}Fk`*? zwXpx*8{YMPYPBN25hmaIp6lOrl~23zh8qqA4~GflxavLEzwiBruDa>ajqkbs-N7T_ zl;tycEZ4seyOyHngWn1J@21E#*S+VOo36b!_`Pu2gZZ9+eytCc$O1O)7Pc)$1 zPk%Q(-4k`JisZxAm7xEBhhbFW=2)YS9N<>|+Zt)O|JitN^gK|5kRy$yJ<(ATd4DeE z{fK*4@^f*tPdF@&g4w5*X|I?{eoyrjFT4;Rq~`%(>z_vP^r!jkvL?S@&jRX~4fl)G z=g<=te-keiuf8ZyfuDIixH$OhxOg@;0yPXl5hSD%tMOQ)#K);40$RGyWGnStHsP8)nnSrL+=ejR9QYIIN)W zX=7<;5G3Di7>IWUgEtLB>J69381$8M%*W(~c#Q-7w@ozWk)wvvFmJjF#KEv*vpBqz zhiOo2q(LJ?RXv6tFq-{)8c}>WzQs#hS|MG?jP|7w&^IJ^ph<7yVQ}QW`aB_BDgN=& zR2)Phy=;i%L;8|NfRV<@_gF7g3*R;`ofo>g(#B%ALDfZ6XL%w3va8WRycCMspes|N*N_zR@RZrY#Y?MRon6kww6^0?+i^!wXSg42|SHFHBU;xp61!3}O{tQDJBe z(O}W^TFNnh$G9AVprgVb0x%^~H7ZgSX(^#!KcTZq0WF~fOL6j9BR8l94r#zK!}b3# zYG5B?{zYpuoUvOee#bvq7r$fvmoZ;zEGJ%oER(zd1ddEi_@E^rG$x3o##JhBdmd^O zgQc`R$q9qJt$dIcybK^z%a^xXo_0Nx{~7-#HV^s{FV`)G>D&&aTtQYhAM!5 zLE7>fL#g$8W zT)Yq-EV^$Q2A1+mhnFnj6_*PU#brxb>`__#*yN|5q-A}h;pU!@VU+S#89-6xWd^SM zLigf}0`!@whyFLBpp;poF(SvPp|?)XFx8Y+x@?rk!Y=|WjgCHupYJg~tD1YnDhMX2 zjCuWk7Dc!UUMp#wi`-aH>Q#{gVUI-)+P87s4RZUJH2^L*-Zsh`-(i?!a07JYzHu`7 zJ~5|o!|+BGpf@V2@h6S@Z=c}rv8CWz08Z7Tfi+5w8J{!qcW4D$VUX!_O>dLwvLZZ` z2BZGR!#Fm^A6qqEcIZS?9E!#QLwV~hu#Xcbp(sjQYOZy_44fHSTn_9XldinIUq7CC z;SIOurme`Hwom5WC6r57y@O*rLT@K+-E(AxF#cRP(br~)U?_+Zfp0wLEk;MbA4!z) z0?N;gmi3Fe#3IcC{ikn(v}v^71I?Qx8x^Uk>F^bK#5YRB1Cxmebznp#A6G4zlpyJ< zgRc7qksGyB;@rs1^6i#(YiJz48--3r{l9PR~v zhzhK-w~T**V%9OdGb|j1%IXc*zLm6C%| z;swV^fXQ7{w3mu-B}W-1BXo8i?@y1O977>QGWa`f5uY@^h)@g$R2uCJ+BFqGGZm%Y z8-=$>Aw;mYDbEH)jAKt>5Sb1zC4q7LzDciZaVHJgK9sn??ouhTq&Ou6O|qxS4!#T8mgi;946EP zsfs59r(pU=Ybs!jGj-cLf(>Naso%KtFaZt2YKyZGD}aT7Su+!b2{)|4NVNgYfd+%9 zD-zv_k@~K%KERFDQGsMgVxoOT>3JGxH8q2}{8vuVoExWk(}cCutENt+Sko9!!YNk~ zk)h@F(s2T0md5}`!z4$Q8-y^Oh8@q@HHGp|LZle-h$Q=;f8m7}rYT@XfsmHRCt>KQ zKp6=TiqDv!03e#o71DcRg&^5jtvCAnO;xFK%17Qf&`6s%PQoxh^}9dyyZ@YY;8li( zYoIe@uD>kBrinyf~56K&fVuWH|4Ps<%97^sG z38aO#7#%>vY!Pg&hfNQ$wsSEwjX1t!7|=u6eSs`*h>1Ny`E80IvT zg_6Yu9(+rwZpTt#S&|=fP%K8T!zKZS-C0YIU0GX?9htzUZT?M{#+l!YP0i;wX1xgD z7NaZjKJD^yWgd_6K>C3n`#g)pqqO5+n`l-@Xl5lvEoX0>tzFL+SJ_l~S#NioyH(Ha zE2WEI>>a@S*o$E-WKcJLDDj5Cqhf5o^@HR~q8@XN3y ztFGBN4^@4?V(XXjGICj&D4*#>-LbXw2y*DnatD_CSFAQrgoRGQy)teUX)uVJw3~Mf z;En@0jAG!F!~TB=qjC;~V9BLn-4sjtX2XqVdkrL>;douhJEIJ2f@`11Z^bu=EG$MT z49joDIWX-n88#qQTU^jpxQWIEvpA+9-bhZG443077LlyS79^36+qV7~fHdf15-w7- zD1EaQ=!gYXiMVA3L#E|CcmcoE?{o{Im$aMYoDkzDA6n2o(OWNo)mIcbM~EgHr@x5#1~~BQ`MFIKw!YMM;eEH4!|oT;F8qO) zVi(@`1=)pngx8(UFuZqN!|?9XFtqjy)l;(!U1A{X&oZ9gGPEqoT^f`$PQ4V%u*&=o z&@wz0UgyG?D^0`G;H4J8qfE4dgIKgRe%~-jh=2%H5rIE52ZIN>(gNi7Hh3qj0 z7`WxZ`??vm`_II2gDH>` z%Ox;84hd59i)akVL`aL|-X7Ogg(cd19FD3sF?C3m|FXxSY}|T_*0HG+k-=Ja!ReMo z+-jvUS3hB0Cj8)6(=cr$V=PSW)rY+0=O1K!weaF)#sQSxWCoir4+qG>uUlRHvxs5D z`>@_Y=gld#6RV0a>;t0rl(Lvr(EmVvegb|RMVM(W4tP=)n~M(3+Mf*cG?^kaGNi5K31*c7>XP?|C2hqz zLs|HXOd=$Y8KHg5U^i?72Vad+u@<+cU!-AiML~ur!bNi-hwCOGhu>DD2N-p z4rX^@+3twXs)slLMtHlnr~$*hu3x3H6y`}KZ;OyjIm!EdHPm9qaF-Aj-Ia`Fsk~@`0yliVy=wI@m zghy4-dD9R;rPtIoLc=8z<*gYCQhhFCGQ1KV8$mWY(l&gs63nBBbdo~nbtymrV$7cv z#eMupejEa)fLF`KkAf&PC-Y%~qP}spc%`qD*Kbj9MV=WQSd88wZ7|A)5U!sNFM;?2 zX%~xyB!8@aWq8VI2SQq~Wr~9Bw4Y7KK!KhO(=^tp_9dW856Kwl_l7#heghX_805iS{;jCPRBG%wdAh$ zio?EN8tdqnIC4e5B$wT^Edd<&rC2YOqUAcBrn8HiS}s%O&{ zY?@D7KyY}TXVinng+hR7Oo#`QiLS%6EADNkR>1MFX`eSDBV7pxtk{5?%bzRt+#B6j zV{a5z=jJ@Ln7q^7Wiu1?yEg0KD>`dz-=-mF&@ec6%5DVe#*_re%N%3ui$hJI!$P0g zG&~xn)9I9;8`_}Z%0pbq>=g0Wp_4f1j_{#k^>C{B^dbmlEO=X|%v8N=(;6tOS5q1# zy6N;mW@sdALqgm6%t@A6nY?+z2mnVI50Jg6wLz1#jfW5(i zoo>k5TJhyV=!|Mq$nr-AXCM0X%gUw{Ceb=DhCCwIP_aW%MciuyDhH7PgNQYt@n}Kh zv+(Qb6zEHntBQhNvZPgpi=|dE(Q?XVwQNaci1#VtG>*yEn@eGW>5PP4)K-%4&F-ty zMF>~2zHn6yAY3$BC*x^^OFaqH6NC$OS1L&}VP6bz3=bDeugMnxmhz>ZBVW?8ri2`?hh%=JsIZ4E?E(esAB?F=k>dQq^0UxOu!s`ECx zln=`HEk1P&c(ELo-bzg79q?-Mf2#Ya9T6EkX`zasm-RbqZ+;0uHsw1x?VkzA9ao*t zIGi{)ZKl{_Ws`J9IIx8dGp;`QdL(wTDML(3^xs#wLEWD5*xMisVCrp@ilHSfdDKh! z7o9DuI`1oLpU)PzEKN084H9W?VYc`%;qvBXIGeM@pWL!k#Fq^lnxvabH#nWClCvsV zybv5Lu*{p75Hsm)@=0TcesW(OE2fbWN+J`KM0I7ef^{mLNSv&ZRj3=+uhQJXUfRR3 zHchyw`mjUig?O78Hr2|CFBv^Hj+Q+ypIG~bf!)=0B>9$Q^skZ@b2)+`=mOc^NSVsxi$07stW7hHjz!9yXl8X&q^ zJW5V6qvR#I+kHPTd@RiSLuNb(iy&2Gdz@_Q*QYFp`sGuTPb;MqgSIMNfu~>+Pi|U< z1tzL^EC$6hRXm`V_LB$dwOYp?UK7wq1StAHLncyD6TZ~IIi^ykHO#kg~Nc?>e_a*&aRrSFzEFA8KcHwp)!$a}Fh1I817_`cUx%KdUyV zTF{h{W}28)Yim|bGqWUUADyPjL|7LqBoL+f3e6)bnkc`@CezZc0+uFq`_fvy1RGoO z!sI*KIFTRkv2u$a6P zOno<&hT=kYH;Xq{^hj(=YR4ce%&-?^iO zx#6bGsx{Y|RWpjJj0pHG)d)1>gOX*`(}I)acw4r?xZ3gXmD!A+k|sb~Da1jY?1>a2 z|F?{Jd&INan(9f)39OBpz#57*jX^aIc%>vZ6yZ0feQ{{d&%?EhyzJ8sZl>^$MO~S2MjeW#!`t@F!`!o`xB5kXzLizBtyAS zgI;v$76@PlZ(tLVHiKt#gw+h5NhGM!_tg4pnz-IYi&6q2gGdWS3|0l|l$*h`@(7MF z)y{^fj;4ja)}O&!hYL1(E*Sdfj1SYkEt_#%Fx2D9Y@_D__FGk4KsuTa&pt4(77^>NDe5t>?9o-E?0CQ})V@u>q^tAD_;!y5`-6{u>Vm0=aUc zaK_=&jD`hi{o4HCI=u14*ASjRCUu0==tj-Mp(B{0aXNBsEg>B#SrlWii4;XuuklH} zmzZX5Wmip80Bxx$gfsX~*gCzY(99977>8&IvMp6mPt?pKrlvNQ*rXpEWiyXW&EV-g z2hHG#E7zNV{Pcx!?{MRmRyhIrOgvug)+io`y}`*-rtRZASrRe+D-nzKnYZAlDLZ~j zu3L?2e%)Et_xfz0PIUZa-GDbYb%~g0DvA?z*uXVz;lzzkA#&shA+@|ZnTA=fnN)-TT{PxXmhh2;L#~|m)n?i5(n6Roje)S;4<;< zXX;M_>V107?2Yc$v$rR@OV4C)d_vFZz4389r}oCjcoxUvCB(0>l+$LA{Dl00GvHJ# zS2Qm#tVm_y>?VN(EuAf|le$8zfuWz$a+(DTU@*e*wB>vuQ%~9j7OUqJ&0|0J_NU&* zW8kxOey`8~*l>#j{q(qeRPW$`LN^D-cEDFKqwCNsQ0kQfmwa5mqLzJOzVwi8umjX4 z(F8jbDM8&Zm_H5W=!B8YoxwoYx6}#jdgM-J0Q+0WOqLx^z9H^j&Ma{V(%Qx3&(ve! zpLCXk^3YXV&3)wf3VO?J4Xu3y+81Y@It&wo17Xs*nIjMFgODMJFR~Q%iSqzUV&~l5O zQN!y4R>V!{0~YZ(0ueco=AfWNyiyJDjHw1x#Jx(#tT7egjZ>$+O6Go4IX1HFT~AhT zJ;`&wy4TwqJOUY9%l%RCmyX!E6N<%c(MbHL^86LuuRkxz!F3q&v z3Iwe{WWC4q>;b`DD#evOM=8>CR;3w-_65WM@pT-kG1)jBUS*-+xzR3Z;Fg2y!V=@P z71*VYLnoPF3RR5kg9Ce_C-gdW_Qf8y$;K_?x{5sAF_{RWJ<#VM>Q}e&|{u)@=?bxi_yE>l9j792H3D7KYBt342SfM5h-Rw z(s~3P^kO3S5=Nvc8=m?Xs z_J|DstMtdmS!xppVT5t{;tHhc6o`yADTWn%Z)t1E$D{&j6b~Y*PKk{524N{uU#{YC z+Q=kreH}uiTslOn(WEzYLW!h8za=QE`2Q~^^ayU$7(qMaf32x#33fNIY8CUgsOoA3 z`jYjC;qyYF%E`KRBGq*Zy5qFErPQjXIO0?4^7_aD86|Q|YxK}F$d74xVe3V(BjdXo zf4*w5gT6DYcw5A{s4_-goQJ#)z0h=Mf>KA7G7+Q)Cv0ol{Q5I*rIg9> z+PV9cN~_!}7~H+e$< zXZ#Bz#zW{<*$rljNsVAfO&}Wk%FtRf)>@X?sSR(Rt&emYO`WYc=iESVRiv{Xshd5L zi2$xCDHF)`lCr}~O4CWopp+D6g4hfj8?-`s^YYihX+AWo_`h46ur#qD`y(mX60nqYEdJ(l4koMb`3jnqB=+RaRYr=j`yD_p z&Iu~xslj0iOPEeii`y_@&Ct?jvDKNvS|;C^D;-rIIKkKfM;jA95svWKK#C7k1vr;Z zV>8-`5(`w!up6u-0|rNkP4_b|J( z^hlnTs`C83YJB{w31zXuKU)hU4Tq7jfA(d@$my&F)P-qGIxi#$H`1JXt|{D;$XH=Y z8MCDMS~yw7B`ZxynOBo|THjHcFrIM4OaZ<$?l=uD%0A1TGKSEqeW`c}bvdvgy~e6$ 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[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 D`EVYI diff --git a/assets/zml_api.js b/assets/zml_api.js index 7c5cabb..64e56f0 100644 --- a/assets/zml_api.js +++ b/assets/zml_api.js @@ -983,3 +983,4 @@ wasmArray.set(jsArray); } })(); + diff --git a/build.zig.zon b/build.zig.zon index 57541de..8a8c109 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -8,11 +8,8 @@ // .hash = "1220a59c2cf0e42a6f42cf1bf9b6a6c2691abfd91fcafa0e81a6282c4a197d05c41a", // modified zine - .url = "git+https://github.com/renerocksai/zine#170567737efc5333b38886cfe83211e011267b24", - .hash = "1220ec97928f9e1f1a95ff8c39a943cf6ebab2ff2e6acb1900aeb7844f906b1ce3aa", - - // rene local dev - // .path = "../../renerocksai/zine", + .url = "https://github.com/renerocksai/zine/archive/refs/tags/zig-0.14.0.tar.gz", + .hash = "1220dfe5a9352fc7c9c16b07c5c6d7417fc96ee92dbab5f27b8d4d02400ba5a9f88c", }, .pcre2 = .{ .url = "https://github.com/renerocksai/pcre2/archive/refs/tags/pcre2-10.45.tar.gz", diff --git a/zig_docs/Decl.zig b/zig_docs/Decl.zig index 4f0d2c3..2546355 100644 --- a/zig_docs/Decl.zig +++ b/zig_docs/Decl.zig @@ -12,9 +12,6 @@ file: Walk.File.Index, /// The decl whose namespace this is in. parent: Index, -/// Delete this to find out where URL escaping needs to be added. -const missing_feature_url_escape = true; - pub const ExtraInfo = struct { is_pub: bool, name: []const u8, @@ -160,16 +157,6 @@ pub fn fqn(decl: *const Decl, out: *std.ArrayListUnmanaged(u8)) Oom!void { } } -threadlocal var _fqn_buf: [1024]u8 = undefined; - -pub fn fqnAsHref(decl: *const Decl, allocator: std.mem.Allocator, out: *std.ArrayListUnmanaged(u8)) Oom!void { - var _fqn = std.ArrayListUnmanaged(u8).fromOwnedSlice(&_fqn_buf); - _fqn.items.len = 0; - try decl.fqn(&_fqn); - - try renderHref(out.writer(allocator), _fqn.items); -} - pub fn reset_with_path(decl: *const Decl, list: *std.ArrayListUnmanaged(u8)) Oom!void { list.clearRetainingCapacity(); try append_path(decl, list); @@ -237,26 +224,3 @@ pub fn find(search_string: []const u8) Decl.Index { } return current_decl_index; } - -/// Replace a fully qualified name from Zig std symbol by an external link. -/// fqn is not allowed to alias to out. -pub fn renderHref(writer: anytype, noalias name: []const u8) !void { - std.log.debug("checking fqn: \"{s}\"", .{name}); - - const std_module = std.mem.indexOf(u8, name, ".std."); - const std_root = if (std.mem.endsWith(u8, name, ".std")) name.len - 4 else null; - - if (std_module orelse std_root) |std_dot_start| { - const std_href = " href=\"https://ziglang.org/documentation/0.13.0/std/#"; - try writer.writeAll(std_href); - _ = missing_feature_url_escape; - try writer.writeAll(name[std_dot_start + 1 ..]); - try writer.writeByte('"'); - std.log.debug("replaced name: \"{s}\" -> {s}{s}", .{ name, std_href, name }); - } else { - try writer.writeAll(" href=\"#"); - _ = missing_feature_url_escape; - try writer.writeAll(name); - try writer.writeByte('"'); - } -} diff --git a/zig_docs/Walk.zig b/zig_docs/Walk.zig index ae924b8..49a5e73 100644 --- a/zig_docs/Walk.zig +++ b/zig_docs/Walk.zig @@ -10,9 +10,9 @@ const Oom = error{OutOfMemory}; pub const Decl = @import("Decl.zig"); -pub var files: std.StringArrayHashMapUnmanaged(File) = .{}; -pub var decls: std.ArrayListUnmanaged(Decl) = .{}; -pub var modules: std.StringArrayHashMapUnmanaged(File.Index) = .{}; +pub var files: std.StringArrayHashMapUnmanaged(File) = .empty; +pub var decls: std.ArrayListUnmanaged(Decl) = .empty; +pub var modules: std.StringArrayHashMapUnmanaged(File.Index) = .empty; file: File.Index, @@ -36,23 +36,23 @@ pub const Category = union(enum(u8)) { /// A function that returns a type. type_function: Ast.Node.Index, - pub const Tag = @typeInfo(Category).Union.tag_type.?; + pub const Tag = @typeInfo(Category).@"union".tag_type.?; }; pub const File = struct { ast: Ast, /// Maps identifiers to the declarations they point to. - ident_decls: std.AutoArrayHashMapUnmanaged(Ast.TokenIndex, Ast.Node.Index) = .{}, + ident_decls: std.AutoArrayHashMapUnmanaged(Ast.TokenIndex, Ast.Node.Index) = .empty, /// Maps field access identifiers to the containing field access node. - token_parents: std.AutoArrayHashMapUnmanaged(Ast.TokenIndex, Ast.Node.Index) = .{}, + token_parents: std.AutoArrayHashMapUnmanaged(Ast.TokenIndex, Ast.Node.Index) = .empty, /// Maps declarations to their global index. - node_decls: std.AutoArrayHashMapUnmanaged(Ast.Node.Index, Decl.Index) = .{}, + node_decls: std.AutoArrayHashMapUnmanaged(Ast.Node.Index, Decl.Index) = .empty, /// Maps function declarations to doctests. - doctests: std.AutoArrayHashMapUnmanaged(Ast.Node.Index, Ast.Node.Index) = .{}, + doctests: std.AutoArrayHashMapUnmanaged(Ast.Node.Index, Ast.Node.Index) = .empty, /// root node => its namespace scope /// struct/union/enum/opaque decl node => its namespace scope /// local var decl node => its local variable scope - scopes: std.AutoArrayHashMapUnmanaged(Ast.Node.Index, *Scope) = .{}, + scopes: std.AutoArrayHashMapUnmanaged(Ast.Node.Index, *Scope) = .empty, pub fn lookup_token(file: *File, token: Ast.TokenIndex) Decl.Index { const decl_node = file.ident_decls.get(token) orelse return .none; @@ -464,8 +464,8 @@ pub const Scope = struct { const Namespace = struct { base: Scope = .{ .tag = .namespace }, parent: *Scope, - names: std.StringArrayHashMapUnmanaged(Ast.Node.Index) = .{}, - doctests: std.StringArrayHashMapUnmanaged(Ast.Node.Index) = .{}, + names: std.StringArrayHashMapUnmanaged(Ast.Node.Index) = .empty, + doctests: std.StringArrayHashMapUnmanaged(Ast.Node.Index) = .empty, decl_index: Decl.Index, }; diff --git a/zig_docs/html_render.zig b/zig_docs/html_render.zig index 684452e..d9cb74f 100644 --- a/zig_docs/html_render.zig +++ b/zig_docs/html_render.zig @@ -8,11 +8,24 @@ const Decl = Walk.Decl; const gpa = std.heap.wasm_allocator; const Oom = error{OutOfMemory}; +/// Delete this to find out where URL escaping needs to be added. +pub const missing_feature_url_escape = true; + pub const RenderSourceOptions = struct { skip_doc_comments: bool = false, skip_comments: bool = false, collapse_whitespace: bool = false, fn_link: Decl.Index = .none, + /// Assumed to be sorted ascending. + source_location_annotations: []const Annotation = &.{}, + /// Concatenated with dom_id. + annotation_prefix: []const u8 = "l", +}; + +pub const Annotation = struct { + file_byte_offset: u32, + /// Concatenated with annotation_prefix. + dom_id: u32, }; pub fn fileSourceHtml( @@ -25,7 +38,7 @@ pub fn fileSourceHtml( const file = file_index.get(); const g = struct { - var field_access_buffer: std.ArrayListUnmanaged(u8) = .{}; + var field_access_buffer: std.ArrayListUnmanaged(u8) = .empty; }; const token_tags = ast.tokens.items(.tag); @@ -48,6 +61,8 @@ pub fn fileSourceHtml( } } + var next_annotate_index: usize = 0; + for ( token_tags[start_token..end_token], token_starts[start_token..end_token], @@ -71,6 +86,18 @@ pub fn fileSourceHtml( if (tag == .eof) break; const slice = ast.tokenSlice(token_index); cursor = start + slice.len; + + // Insert annotations. + while (true) { + if (next_annotate_index >= options.source_location_annotations.len) break; + const next_annotation = options.source_location_annotations[next_annotate_index]; + if (cursor <= next_annotation.file_byte_offset) break; + try out.writer(gpa).print("", .{ + options.annotation_prefix, next_annotation.dom_id, + }); + next_annotate_index += 1; + } + switch (tag) { .eof => unreachable, @@ -159,8 +186,9 @@ pub fn fileSourceHtml( const fn_link = options.fn_link.get(); const fn_token = main_tokens[fn_link.ast_node]; if (token_index == fn_token + 1) { - try out.appendSlice(gpa, ""); try appendEscaped(out, slice); try out.appendSlice(gpa, ""); @@ -193,9 +221,10 @@ pub fn fileSourceHtml( g.field_access_buffer.clearRetainingCapacity(); try walkFieldAccesses(file_index, &g.field_access_buffer, field_access_node); if (g.field_access_buffer.items.len > 0) { - try out.appendSlice(gpa, ""); + try out.appendSlice(gpa, ""); try appendEscaped(out, slice); try out.appendSlice(gpa, ""); } else { @@ -208,9 +237,10 @@ pub fn fileSourceHtml( g.field_access_buffer.clearRetainingCapacity(); try resolveIdentLink(file_index, &g.field_access_buffer, token_index); if (g.field_access_buffer.items.len > 0) { - try out.appendSlice(gpa, ""); + try out.appendSlice(gpa, ""); try appendEscaped(out, slice); try out.appendSlice(gpa, ""); break :i; diff --git a/zig_docs/main.zig b/zig_docs/main.zig index 3e0d19b..0ec2227 100644 --- a/zig_docs/main.zig +++ b/zig_docs/main.zig @@ -9,7 +9,7 @@ const Decl = Walk.Decl; const fileSourceHtml = @import("html_render.zig").fileSourceHtml; const appendEscaped = @import("html_render.zig").appendEscaped; const resolveDeclLink = @import("html_render.zig").resolveDeclLink; -const renderHref = Decl.renderHref; +const missing_feature_url_escape = @import("html_render.zig").missing_feature_url_escape; const gpa = std.heap.wasm_allocator; @@ -60,8 +60,8 @@ export fn unpack(tar_ptr: [*]u8, tar_len: usize) void { }; } -var query_string: std.ArrayListUnmanaged(u8) = .{}; -var query_results: std.ArrayListUnmanaged(Decl.Index) = .{}; +var query_string: std.ArrayListUnmanaged(u8) = .empty; +var query_results: std.ArrayListUnmanaged(Decl.Index) = .empty; /// Resizes the query string to be the correct length; returns the pointer to /// the query string. @@ -93,11 +93,11 @@ fn query_exec_fallible(query: []const u8, ignore_case: bool) !void { segments: u16, }; const g = struct { - var full_path_search_text: std.ArrayListUnmanaged(u8) = .{}; - var full_path_search_text_lower: std.ArrayListUnmanaged(u8) = .{}; - var doc_search_text: std.ArrayListUnmanaged(u8) = .{}; + var full_path_search_text: std.ArrayListUnmanaged(u8) = .empty; + var full_path_search_text_lower: std.ArrayListUnmanaged(u8) = .empty; + var doc_search_text: std.ArrayListUnmanaged(u8) = .empty; /// Each element matches a corresponding query_results element. - var scores: std.ArrayListUnmanaged(Score) = .{}; + var scores: std.ArrayListUnmanaged(Score) = .empty; }; // First element stores the size of the list. @@ -238,8 +238,9 @@ const ErrorIdentifier = packed struct(u64) { try out.appendSlice(gpa, "
"); try out.appendSlice(gpa, name); if (has_link) { - try out.appendSlice(gpa, " "); try out.appendSlice(gpa, decl_index.get().extra_info().name); try out.appendSlice(gpa, ""); @@ -254,8 +255,8 @@ const ErrorIdentifier = packed struct(u64) { } }; -var string_result: std.ArrayListUnmanaged(u8) = .{}; -var error_set_result: std.StringArrayHashMapUnmanaged(ErrorIdentifier) = .{}; +var string_result: std.ArrayListUnmanaged(u8) = .empty; +var error_set_result: std.StringArrayHashMapUnmanaged(ErrorIdentifier) = .empty; export fn decl_error_set(decl_index: Decl.Index) Slice(ErrorIdentifier) { return Slice(ErrorIdentifier).init(decl_error_set_fallible(decl_index) catch @panic("OOM")); @@ -380,7 +381,7 @@ export fn decl_params(decl_index: Decl.Index) Slice(Ast.Node.Index) { fn decl_fields_fallible(decl_index: Decl.Index) ![]Ast.Node.Index { const g = struct { - var result: std.ArrayListUnmanaged(Ast.Node.Index) = .{}; + var result: std.ArrayListUnmanaged(Ast.Node.Index) = .empty; }; g.result.clearRetainingCapacity(); const decl = decl_index.get(); @@ -402,7 +403,7 @@ fn decl_fields_fallible(decl_index: Decl.Index) ![]Ast.Node.Index { fn decl_params_fallible(decl_index: Decl.Index) ![]Ast.Node.Index { const g = struct { - var result: std.ArrayListUnmanaged(Ast.Node.Index) = .{}; + var result: std.ArrayListUnmanaged(Ast.Node.Index) = .empty; }; g.result.clearRetainingCapacity(); const decl = decl_index.get(); @@ -671,7 +672,7 @@ fn render_docs( defer parsed_doc.deinit(gpa); const g = struct { - var link_buffer: std.ArrayListUnmanaged(u8) = .{}; + var link_buffer: std.ArrayListUnmanaged(u8) = .empty; }; const Writer = std.ArrayListUnmanaged(u8).Writer; @@ -694,8 +695,9 @@ fn render_docs( g.link_buffer.clearRetainingCapacity(); try resolveDeclLink(resolved_decl_index, &g.link_buffer); - try writer.writeAll("{}", .{markdown.fmtHtml(content)}); } else { try writer.print("{}", .{markdown.fmtHtml(content)}); @@ -815,7 +817,7 @@ export fn find_module_root(pkg: Walk.ModuleIndex) Decl.Index { } /// Set by `set_input_string`. -var input_string: std.ArrayListUnmanaged(u8) = .{}; +var input_string: std.ArrayListUnmanaged(u8) = .empty; export fn set_input_string(len: usize) [*]u8 { input_string.resize(gpa, len) catch @panic("OOM"); @@ -837,7 +839,7 @@ export fn find_decl() Decl.Index { if (result != .none) return result; const g = struct { - var match_fqn: std.ArrayListUnmanaged(u8) = .{}; + var match_fqn: std.ArrayListUnmanaged(u8) = .empty; }; for (Walk.decls.items, 0..) |*decl, decl_index| { g.match_fqn.clearRetainingCapacity(); @@ -886,7 +888,7 @@ export fn type_fn_members(parent: Decl.Index, include_private: bool) Slice(Decl. export fn namespace_members(parent: Decl.Index, include_private: bool) Slice(Decl.Index) { const g = struct { - var members: std.ArrayListUnmanaged(Decl.Index) = .{}; + var members: std.ArrayListUnmanaged(Decl.Index) = .empty; }; g.members.clearRetainingCapacity(); diff --git a/zig_docs/markdown/Document.zig b/zig_docs/markdown/Document.zig index 8eec974..59a4013 100644 --- a/zig_docs/markdown/Document.zig +++ b/zig_docs/markdown/Document.zig @@ -170,7 +170,7 @@ pub fn ExtraData(comptime T: type) type { } pub fn extraData(doc: Document, comptime T: type, index: ExtraIndex) ExtraData(T) { - const fields = @typeInfo(T).Struct.fields; + const fields = @typeInfo(T).@"struct".fields; var i: usize = @intFromEnum(index); var result: T = undefined; inline for (fields) |field| { diff --git a/zig_docs/markdown/Parser.zig b/zig_docs/markdown/Parser.zig index fe4fc2f..1b5f407 100644 --- a/zig_docs/markdown/Parser.zig +++ b/zig_docs/markdown/Parser.zig @@ -31,11 +31,11 @@ const ExtraData = Document.ExtraData; const StringIndex = Document.StringIndex; nodes: Node.List = .{}, -extra: std.ArrayListUnmanaged(u32) = .{}, -scratch_extra: std.ArrayListUnmanaged(u32) = .{}, -string_bytes: std.ArrayListUnmanaged(u8) = .{}, -scratch_string: std.ArrayListUnmanaged(u8) = .{}, -pending_blocks: std.ArrayListUnmanaged(Block) = .{}, +extra: std.ArrayListUnmanaged(u32) = .empty, +scratch_extra: std.ArrayListUnmanaged(u32) = .empty, +string_bytes: std.ArrayListUnmanaged(u8) = .empty, +scratch_string: std.ArrayListUnmanaged(u8) = .empty, +pending_blocks: std.ArrayListUnmanaged(Block) = .empty, allocator: Allocator, const Parser = @This(); @@ -816,7 +816,7 @@ fn isThematicBreak(line: []const u8) bool { } fn closeLastBlock(p: *Parser) !void { - const b = p.pending_blocks.pop(); + const b = p.pending_blocks.pop().?; const node = switch (b.tag) { .list => list: { assert(b.string_start == p.scratch_string.items.len); @@ -928,8 +928,8 @@ const InlineParser = struct { parent: *Parser, content: []const u8, pos: usize = 0, - pending_inlines: std.ArrayListUnmanaged(PendingInline) = .{}, - completed_inlines: std.ArrayListUnmanaged(CompletedInline) = .{}, + pending_inlines: std.ArrayListUnmanaged(PendingInline) = .empty, + completed_inlines: std.ArrayListUnmanaged(CompletedInline) = .empty, const PendingInline = struct { tag: Tag, @@ -1564,7 +1564,7 @@ fn parseInlines(p: *Parser, content: []const u8) !ExtraIndex { } pub fn extraData(p: Parser, comptime T: type, index: ExtraIndex) ExtraData(T) { - const fields = @typeInfo(T).Struct.fields; + const fields = @typeInfo(T).@"struct".fields; var i: usize = @intFromEnum(index); var result: T = undefined; inline for (fields) |field| { From 7bbab6125d72793f9bb1f7530eee5ee18b0f578b Mon Sep 17 00:00:00 2001 From: Rene Schallner Date: Tue, 18 Feb 2025 15:35:54 +0100 Subject: [PATCH 2/3] fixed pcre2 using fork --- build.zig | 11 ++++++++--- build.zig.zon | 4 ++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/build.zig b/build.zig index f01cc38..458835b 100644 --- a/build.zig +++ b/build.zig @@ -7,6 +7,11 @@ pub fn build(b: *std.Build) !void { // the zine dev server needs this option!!! const opt_debug = b.option(bool, "debug", "zine debug, unused") orelse true; + const include_drafts = b.option( + bool, + "include-drafts", + "Include drafts in zine output", + ) orelse false; const pcre2_dep = b.dependency("pcre2", .{ .target = target, @@ -15,7 +20,7 @@ pub fn build(b: *std.Build) !void { }); const docs_wasm = try buildDocsWasm(b, optimize); - const website_step, const serve_step = try buildWebSite(b, docs_wasm, opt_debug); + const website_step, const serve_step = try buildWebSite(b, docs_wasm, opt_debug, include_drafts); // has to be run with zig build website _ = website_step; // has to be run with zig build serve @@ -54,7 +59,7 @@ fn buildDocsWasm(b: *std.Build, optimize: std.builtin.OptimizeMode) !*std.Build. return docs_wasm; } -fn buildWebSite(b: *std.Build, docs_wasm: *std.Build.Step.Compile, debug: bool) !struct { +fn buildWebSite(b: *std.Build, docs_wasm: *std.Build.Step.Compile, debug: bool, include_drafts: bool) !struct { *std.Build.Step, *std.Build.Step, } { @@ -107,7 +112,7 @@ fn buildWebSite(b: *std.Build, docs_wasm: *std.Build.Step.Compile, debug: bool) "website", "Builds the website", ); - zine.addWebsite(b, opts, website_step, site); + zine.addWebsite(b, opts, website_step, site, include_drafts); const serve_step = b.step( "serve", diff --git a/build.zig.zon b/build.zig.zon index 8a8c109..43d978f 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -12,8 +12,8 @@ .hash = "1220dfe5a9352fc7c9c16b07c5c6d7417fc96ee92dbab5f27b8d4d02400ba5a9f88c", }, .pcre2 = .{ - .url = "https://github.com/renerocksai/pcre2/archive/refs/tags/pcre2-10.45.tar.gz", - .hash = "12207d56c8b27a141c793fc596af11e6eca919efbbcf49b04f7803c603e2f6081b1b", + .url = "https://github.com/renerocksai/pcre2/archive/refs/tags/zig-0.14.tar.gz", + .hash = "12202a2e5043bd8641208b0eb597bc0346fd94fdec5b1ae92ee0096e83d6ff33fc45", }, }, .paths = .{"."}, From 822128836f560fa075339a5daf5bcc1bb1193ec6 Mon Sep 17 00:00:00 2001 From: Rene Schallner Date: Tue, 18 Feb 2025 15:38:50 +0100 Subject: [PATCH 3/3] update README to reflect new zig version 0.14 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3e82d53..132def8 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ## REQUIREMENTS: -- zig 0.13.0 +- zig 0.14.0 ## HOW TO EDIT WITH LIVE-PREVIEW & COMMIT DOCS