autodoc: wire in js tokenizer to frontend

This commit is contained in:
Loris Cro 2023-07-03 19:18:44 +02:00
parent 116a99d3ce
commit 28ad74e8a6
4 changed files with 88 additions and 46 deletions

View File

@ -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>

View File

@ -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!

View File

@ -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("");

View File

@ -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", .{});
}