zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 28ad74e8a6ed3484d632a6a615f5d0935c03676a (tree)
parent 116a99d3cef91046bf132b6fcecbd2708f912896
Author: Loris Cro <kappaloris@gmail.com>
Date:   Mon,  3 Jul 2023 19:18:44 +0200

autodoc: wire in js tokenizer to frontend

Diffstat:
Mlib/docs/index.html | 82+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mlib/docs/main.js | 45++-------------------------------------------
Mlib/docs/ziglexer.js | 6+++---
Msrc/Autodoc.zig | 1+
4 files changed, 88 insertions(+), 46 deletions(-)

diff --git a/lib/docs/index.html b/lib/docs/index.html @@ -680,7 +680,88 @@ .banner a { color: black; text-decoration: underline; + } + + </style> + + <style> + pre{ + --zig-keyword: #333; + --zig-identifier: 'black'; + } + + @media (prefers-color-scheme: dark) { + pre { + --zig-keyword: 'white'; + --zig-identifier: 'purple'; + } + } + + .zig_keyword_addrspace, + .zig_keyword_align, + .zig_keyword_allowzero, + .zig_keyword_and, + .zig_keyword_anyframe, + .zig_keyword_anytype, + .zig_keyword_asm, + .zig_keyword_async, + .zig_keyword_await, + .zig_keyword_break, + .zig_keyword_callconv, + .zig_keyword_catch, + .zig_keyword_comptime, + .zig_keyword_const, + .zig_keyword_continue, + .zig_keyword_defer, + .zig_keyword_else, + .zig_keyword_enum, + .zig_keyword_errdefer, + .zig_keyword_error, + .zig_keyword_export, + .zig_keyword_extern, + .zig_keyword_fn, + .zig_keyword_for, + .zig_keyword_if, + .zig_keyword_inline, + .zig_keyword_noalias, + .zig_keyword_noinline, + .zig_keyword_nosuspend, + .zig_keyword_opaque, + .zig_keyword_or, + .zig_keyword_orelse, + .zig_keyword_packed, + .zig_keyword_pub, + .zig_keyword_resume, + .zig_keyword_return, + .zig_keyword_linksection, + .zig_keyword_struct, + .zig_keyword_suspend, + .zig_keyword_switch, + .zig_keyword_test, + .zig_keyword_threadlocal, + .zig_keyword_try, + .zig_keyword_union, + .zig_keyword_unreachable, + .zig_keyword_usingnamespace, + .zig_keyword_var, + .zig_keyword_volatile, + .zig_keyword_while { + color: var(--zig-keyword); + font-weight: bold; + } + + .zig_doc_comment, .zig_container_doc_comment { + color: #545454; + font-style: italic; + } + + .zig_builtin { + color: #005C7A; } + + .zig_string_literal { + color: #d14; + } </style> </head> <body class="canvas"> @@ -906,6 +987,7 @@ </div> <script src="data.js"></script> <script src="commonmark.js"></script> + <script src="ziglexer.js"></script> <script src="main.js"></script> </body> </html> diff --git a/lib/docs/main.js b/lib/docs/main.js @@ -660,25 +660,7 @@ const NAV_MODES = { if (!decl.decltest) return; const astNode = getAstNode(decl.decltest); domSectDocTests.classList.remove("hidden"); - domDocTestsCode.innerHTML = renderZigSource(astNode.code); - } - - function renderZigSource(code) { - let lines = code.split("\n"); - let result = ""; - let indent_level = 0; - for (let i = 0; i < lines.length; i += 1) { - let line = lines[i].trim(); - if (line[0] == "}") indent_level -= 1; - for (let j = 0; j < indent_level; j += 1) { - result += " "; - } - if (line.startsWith("\\\\")) result += " " - result += line; - if (i != lines.length - 1) result += "\n"; - if (line[line.length - 1] == "{") indent_level += 1; - } - return result; + domDocTestsCode.innerHTML = generate_html_for_src(astNode.code); } function renderUnknownDecl(decl) { @@ -1774,7 +1756,7 @@ const NAV_MODES = { return payloadHtml + "}"; } case "comptimeExpr": { - return renderZigSource(zigAnalysis.comptimeExprs[expr.comptimeExpr].code); + return generate_html_for_src(zigAnalysis.comptimeExprs[expr.comptimeExpr].code); } case "call": { let call = zigAnalysis.calls[expr.call]; @@ -5016,26 +4998,3 @@ function RadixTree() { } } -// RADIX TREE: - -// apple -// appliance - -// "appl" => [ -// 'e', => $ -// 'i' => "ance" => $ -// ] - -// OUR STUFF: - -// AutoHashMap -// AutoArrayHashMap - -// "Auto" => [ -// 'A', => "rrayHashMap" => $ -// 'H' => "ashMap" => $ -// ] - -// BUT! - -// We want to be able to search "Hash", for example! diff --git a/lib/docs/ziglexer.js b/lib/docs/ziglexer.js @@ -1,3 +1,5 @@ +'use strict'; + const Tag = { invalid: "invalid", identifier: "identifier", @@ -1941,7 +1943,7 @@ function tokenize_zig_source(raw_source) { } - toks = [] + let toks = [] for (let i = 0; i < raw_source.length * 2; i++) { const tok = next(); @@ -1960,7 +1962,6 @@ function generate_html_for_src(src) { var toks = tokenize_zig_source(src); var html = []; - html.push("<pre>"); let offset = 0; for (let z = 0; z < toks.length; z++) { const t = toks[z]; @@ -1980,7 +1981,6 @@ function generate_html_for_src(src) { html.push(src); - html.push("</pre>"); return html.join(""); diff --git a/src/Autodoc.zig b/src/Autodoc.zig @@ -435,6 +435,7 @@ pub fn generateZirData(self: *Autodoc) !void { var docs_dir = try self.comp_module.comp.zig_lib_directory.handle.openDir("docs", .{}); defer docs_dir.close(); try docs_dir.copyFile("main.js", output_dir, "main.js", .{}); + try docs_dir.copyFile("ziglexer.js", output_dir, "ziglexer.js", .{}); try docs_dir.copyFile("commonmark.js", output_dir, "commonmark.js", .{}); try docs_dir.copyFile("index.html", output_dir, "index.html", .{}); }