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 @@...@@ -680,7 +680,88 @@
680 .banner a {680 .banner a {
681 color: black;681 color: black;
682 text-decoration: underline;682 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;
683 }760 }
761
762 .zig_string_literal {
763 color: #d14;
764 }
684 </style>765 </style>
685 </head>766 </head>
686 <body class="canvas">767 <body class="canvas">
...@@ -906,6 +987,7 @@...@@ -906,6 +987,7 @@
906 </div>987 </div>
907 <script src="data.js"></script>988 <script src="data.js"></script>
908 <script src="commonmark.js"></script>989 <script src="commonmark.js"></script>
990 <script src="ziglexer.js"></script>
909 <script src="main.js"></script>991 <script src="main.js"></script>
910 </body>992 </body>
911</html>993</html>
lib/docs/main.js+2-43
...@@ -660,25 +660,7 @@ const NAV_MODES = {...@@ -660,25 +660,7 @@ const NAV_MODES = {
660 if (!decl.decltest) return;660 if (!decl.decltest) return;
661 const astNode = getAstNode(decl.decltest);661 const astNode = getAstNode(decl.decltest);
662 domSectDocTests.classList.remove("hidden");662 domSectDocTests.classList.remove("hidden");
663 domDocTestsCode.innerHTML = renderZigSource(astNode.code);663 domDocTestsCode.innerHTML = generate_html_for_src(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;
682 }664 }
683665
684 function renderUnknownDecl(decl) {666 function renderUnknownDecl(decl) {
...@@ -1774,7 +1756,7 @@ const NAV_MODES = {...@@ -1774,7 +1756,7 @@ const NAV_MODES = {
1774 return payloadHtml + "}";1756 return payloadHtml + "}";
1775 }1757 }
1776 case "comptimeExpr": {1758 case "comptimeExpr": {
1777 return renderZigSource(zigAnalysis.comptimeExprs[expr.comptimeExpr].code);1759 return generate_html_for_src(zigAnalysis.comptimeExprs[expr.comptimeExpr].code);
1778 }1760 }
1779 case "call": {1761 case "call": {
1780 let call = zigAnalysis.calls[expr.call];1762 let call = zigAnalysis.calls[expr.call];
...@@ -5016,26 +4998,3 @@ function RadixTree() {...@@ -5016,26 +4998,3 @@ function RadixTree() {
5016 }4998 }
5017}4999}
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,3 +1,5 @@
1'use strict';
2
1const Tag = {3const Tag = {
2 invalid: "invalid",4 invalid: "invalid",
3 identifier: "identifier",5 identifier: "identifier",
...@@ -1941,7 +1943,7 @@ function tokenize_zig_source(raw_source) {...@@ -1941,7 +1943,7 @@ function tokenize_zig_source(raw_source) {
19411943
1942 }1944 }
19431945
1944 toks = []1946 let toks = []
19451947
1946 for (let i = 0; i < raw_source.length * 2; i++) {1948 for (let i = 0; i < raw_source.length * 2; i++) {
1947 const tok = next();1949 const tok = next();
...@@ -1960,7 +1962,6 @@ function generate_html_for_src(src) {...@@ -1960,7 +1962,6 @@ function generate_html_for_src(src) {
1960 var toks = tokenize_zig_source(src);1962 var toks = tokenize_zig_source(src);
1961 var html = [];1963 var html = [];
19621964
1963 html.push("<pre>");
1964 let offset = 0;1965 let offset = 0;
1965 for (let z = 0; z < toks.length; z++) {1966 for (let z = 0; z < toks.length; z++) {
1966 const t = toks[z];1967 const t = toks[z];
...@@ -1980,7 +1981,6 @@ function generate_html_for_src(src) {...@@ -1980,7 +1981,6 @@ function generate_html_for_src(src) {
19801981
19811982
1982 html.push(src);1983 html.push(src);
1983 html.push("</pre>");
19841984
1985 return html.join("");1985 return html.join("");
19861986
src/Autodoc.zig+1
...@@ -435,6 +435,7 @@ pub fn generateZirData(self: *Autodoc) !void {...@@ -435,6 +435,7 @@ pub fn generateZirData(self: *Autodoc) !void {
435 var docs_dir = try self.comp_module.comp.zig_lib_directory.handle.openDir("docs", .{});435 var docs_dir = try self.comp_module.comp.zig_lib_directory.handle.openDir("docs", .{});
436 defer docs_dir.close();436 defer docs_dir.close();
437 try docs_dir.copyFile("main.js", output_dir, "main.js", .{});437 try docs_dir.copyFile("main.js", output_dir, "main.js", .{});
438 try docs_dir.copyFile("ziglexer.js", output_dir, "ziglexer.js", .{});
438 try docs_dir.copyFile("commonmark.js", output_dir, "commonmark.js", .{});439 try docs_dir.copyFile("commonmark.js", output_dir, "commonmark.js", .{});
439 try docs_dir.copyFile("index.html", output_dir, "index.html", .{});440 try docs_dir.copyFile("index.html", output_dir, "index.html", .{});
440}441}