Commit 28ad74e8a6

Loris Cro <kappaloris@gmail.com>
2023-07-03 19:18:44
autodoc: wire in js tokenizer to frontend
1 parent 116a99d
Changed files (4)
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>
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!
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("");
 
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", .{});
 }