authorgravatar for kappaloris@gmail.comLoris Cro <kappaloris@gmail.com> 2023-07-03 19:18:44+02:00
committergravatar for kappaloris@gmail.comLoris Cro <kappaloris@gmail.com> 2023-07-03 19:18:44+02:00
log28ad74e8a6ed3484d632a6a615f5d0935c03676a
treec78e1a5a08e24cc50b9e652d01f0a4e9e1fe1890
parent116a99d3cef91046bf132b6fcecbd2708f912896

autodoc: wire in js tokenizer to frontend


4 files changed, 88 insertions(+), 46 deletions(-)

lib/docs/index.html+82
......@@ -680,7 +680,88 @@
680680 .banner a {
681681 color: black;
682682 text-decoration: underline;
683 }
684
685 </style>
686
687 <style>
688 pre{
689 --zig-keyword: #333;
690 --zig-identifier: 'black';
691 }
692
693 @media (prefers-color-scheme: dark) {
694 pre {
695 --zig-keyword: 'white';
696 --zig-identifier: 'purple';
697 }
698 }
699
700 .zig_keyword_addrspace,
701 .zig_keyword_align,
702 .zig_keyword_allowzero,
703 .zig_keyword_and,
704 .zig_keyword_anyframe,
705 .zig_keyword_anytype,
706 .zig_keyword_asm,
707 .zig_keyword_async,
708 .zig_keyword_await,
709 .zig_keyword_break,
710 .zig_keyword_callconv,
711 .zig_keyword_catch,
712 .zig_keyword_comptime,
713 .zig_keyword_const,
714 .zig_keyword_continue,
715 .zig_keyword_defer,
716 .zig_keyword_else,
717 .zig_keyword_enum,
718 .zig_keyword_errdefer,
719 .zig_keyword_error,
720 .zig_keyword_export,
721 .zig_keyword_extern,
722 .zig_keyword_fn,
723 .zig_keyword_for,
724 .zig_keyword_if,
725 .zig_keyword_inline,
726 .zig_keyword_noalias,
727 .zig_keyword_noinline,
728 .zig_keyword_nosuspend,
729 .zig_keyword_opaque,
730 .zig_keyword_or,
731 .zig_keyword_orelse,
732 .zig_keyword_packed,
733 .zig_keyword_pub,
734 .zig_keyword_resume,
735 .zig_keyword_return,
736 .zig_keyword_linksection,
737 .zig_keyword_struct,
738 .zig_keyword_suspend,
739 .zig_keyword_switch,
740 .zig_keyword_test,
741 .zig_keyword_threadlocal,
742 .zig_keyword_try,
743 .zig_keyword_union,
744 .zig_keyword_unreachable,
745 .zig_keyword_usingnamespace,
746 .zig_keyword_var,
747 .zig_keyword_volatile,
748 .zig_keyword_while {
749 color: var(--zig-keyword);
750 font-weight: bold;
751 }
752
753 .zig_doc_comment, .zig_container_doc_comment {
754 color: #545454;
755 font-style: italic;
756 }
757
758 .zig_builtin {
759 color: #005C7A;
683760 }
761
762 .zig_string_literal {
763 color: #d14;
764 }
684765 </style>
685766 </head>
686767 <body class="canvas">
......@@ -906,6 +987,7 @@
906987 </div>
907988 <script src="data.js"></script>
908989 <script src="commonmark.js"></script>
990 <script src="ziglexer.js"></script>
909991 <script src="main.js"></script>
910992 </body>
911993</html>
lib/docs/main.js+2-43
......@@ -660,25 +660,7 @@ const NAV_MODES = {
660660 if (!decl.decltest) return;
661661 const astNode = getAstNode(decl.decltest);
662662 domSectDocTests.classList.remove("hidden");
663 domDocTestsCode.innerHTML = renderZigSource(astNode.code);
664 }
665
666 function renderZigSource(code) {
667 let lines = code.split("\n");
668 let result = "";
669 let indent_level = 0;
670 for (let i = 0; i < lines.length; i += 1) {
671 let line = lines[i].trim();
672 if (line[0] == "}") indent_level -= 1;
673 for (let j = 0; j < indent_level; j += 1) {
674 result += " ";
675 }
676 if (line.startsWith("\\\\")) result += " "
677 result += line;
678 if (i != lines.length - 1) result += "\n";
679 if (line[line.length - 1] == "{") indent_level += 1;
680 }
681 return result;
663 domDocTestsCode.innerHTML = generate_html_for_src(astNode.code);
682664 }
683665
684666 function renderUnknownDecl(decl) {
......@@ -1774,7 +1756,7 @@ const NAV_MODES = {
17741756 return payloadHtml + "}";
17751757 }
17761758 case "comptimeExpr": {
1777 return renderZigSource(zigAnalysis.comptimeExprs[expr.comptimeExpr].code);
1759 return generate_html_for_src(zigAnalysis.comptimeExprs[expr.comptimeExpr].code);
17781760 }
17791761 case "call": {
17801762 let call = zigAnalysis.calls[expr.call];
......@@ -5016,26 +4998,3 @@ function RadixTree() {
50164998 }
50174999}
50185000
5019// RADIX TREE:
5020
5021// apple
5022// appliance
5023
5024// "appl" => [
5025// 'e', => $
5026// 'i' => "ance" => $
5027// ]
5028
5029// OUR STUFF:
5030
5031// AutoHashMap
5032// AutoArrayHashMap
5033
5034// "Auto" => [
5035// 'A', => "rrayHashMap" => $
5036// 'H' => "ashMap" => $
5037// ]
5038
5039// BUT!
5040
5041// We want to be able to search "Hash", for example!
lib/docs/ziglexer.js+3-3
......@@ -1,3 +1,5 @@
1'use strict';
2
13const Tag = {
24 invalid: "invalid",
35 identifier: "identifier",
......@@ -1941,7 +1943,7 @@ function tokenize_zig_source(raw_source) {
19411943
19421944 }
19431945
1944 toks = []
1946 let toks = []
19451947
19461948 for (let i = 0; i < raw_source.length * 2; i++) {
19471949 const tok = next();
......@@ -1960,7 +1962,6 @@ function generate_html_for_src(src) {
19601962 var toks = tokenize_zig_source(src);
19611963 var html = [];
19621964
1963 html.push("<pre>");
19641965 let offset = 0;
19651966 for (let z = 0; z < toks.length; z++) {
19661967 const t = toks[z];
......@@ -1980,7 +1981,6 @@ function generate_html_for_src(src) {
19801981
19811982
19821983 html.push(src);
1983 html.push("</pre>");
19841984
19851985 return html.join("");
19861986
src/Autodoc.zig+1
......@@ -435,6 +435,7 @@ pub fn generateZirData(self: *Autodoc) !void {
435435 var docs_dir = try self.comp_module.comp.zig_lib_directory.handle.openDir("docs", .{});
436436 defer docs_dir.close();
437437 try docs_dir.copyFile("main.js", output_dir, "main.js", .{});
438 try docs_dir.copyFile("ziglexer.js", output_dir, "ziglexer.js", .{});
438439 try docs_dir.copyFile("commonmark.js", output_dir, "commonmark.js", .{});
439440 try docs_dir.copyFile("index.html", output_dir, "index.html", .{});
440441}