| ... | ... | @@ -295,7 +295,7 @@ const Link = struct { |
| 295 | 295 | const Node = union(enum) { |
| 296 | 296 | Content: []const u8, |
| 297 | 297 | Nav, |
| 298 | | Builtin, |
| 298 | Builtin: Token, |
| 299 | 299 | HeaderOpen: HeaderOpen, |
| 300 | 300 | SeeAlso: []const SeeAlsoItem, |
| 301 | 301 | Code: Code, |
| ... | ... | @@ -355,7 +355,7 @@ fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc { |
| 355 | 355 | try nodes.append(Node.Nav); |
| 356 | 356 | } else if (mem.eql(u8, tag_name, "builtin")) { |
| 357 | 357 | _ = try eatToken(tokenizer, Token.Id.BracketClose); |
| 358 | | try nodes.append(Node.Builtin); |
| 358 | try nodes.append(Node{ .Builtin = tag_token }); |
| 359 | 359 | } else if (mem.eql(u8, tag_name, "header_open")) { |
| 360 | 360 | _ = try eatToken(tokenizer, Token.Id.Separator); |
| 361 | 361 | const content_token = try eatToken(tokenizer, Token.Id.TagContent); |
| ... | ... | @@ -718,8 +718,7 @@ fn isType(name: []const u8) bool { |
| 718 | 718 | return false; |
| 719 | 719 | } |
| 720 | 720 | |
| 721 | | fn tokenizeAndPrint(allocator: *mem.Allocator, docgen_tokenizer: *Tokenizer, out: var, source_token: Token) !void { |
| 722 | | const raw_src = docgen_tokenizer.buffer[source_token.start..source_token.end]; |
| 721 | fn tokenizeAndPrintRaw(docgen_tokenizer: *Tokenizer, out: var, source_token: Token, raw_src: []const u8) !void { |
| 723 | 722 | const src = mem.trim(u8, raw_src, " \n"); |
| 724 | 723 | try out.write("<code class=\"zig\">"); |
| 725 | 724 | var tokenizer = std.zig.Tokenizer.init(src); |
| ... | ... | @@ -928,13 +927,18 @@ fn tokenizeAndPrint(allocator: *mem.Allocator, docgen_tokenizer: *Tokenizer, out |
| 928 | 927 | try out.write("</code>"); |
| 929 | 928 | } |
| 930 | 929 | |
| 930 | fn tokenizeAndPrint(docgen_tokenizer: *Tokenizer, out: var, source_token: Token) !void { |
| 931 | const raw_src = docgen_tokenizer.buffer[source_token.start..source_token.end]; |
| 932 | return tokenizeAndPrintRaw(docgen_tokenizer, out, source_token, raw_src); |
| 933 | } |
| 934 | |
| 931 | 935 | fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: var, zig_exe: []const u8) !void { |
| 932 | 936 | var code_progress_index: usize = 0; |
| 933 | 937 | |
| 934 | 938 | var env_map = try os.getEnvMap(allocator); |
| 935 | 939 | try env_map.set("ZIG_DEBUG_COLOR", "1"); |
| 936 | 940 | |
| 937 | | const builtin_code = try escapeHtml(allocator, try getBuiltinCode(allocator, &env_map, zig_exe)); |
| 941 | const builtin_code = try getBuiltinCode(allocator, &env_map, zig_exe); |
| 938 | 942 | |
| 939 | 943 | for (toc.nodes) |node| { |
| 940 | 944 | switch (node) { |
| ... | ... | @@ -950,8 +954,10 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: var |
| 950 | 954 | Node.Nav => { |
| 951 | 955 | try out.write(toc.toc); |
| 952 | 956 | }, |
| 953 | | Node.Builtin => { |
| 954 | | try out.print("<pre><code class=\"zig\">{}</code></pre>", builtin_code); |
| 957 | Node.Builtin => |tok| { |
| 958 | try out.write("<pre>"); |
| 959 | try tokenizeAndPrintRaw(tokenizer, out, tok, builtin_code); |
| 960 | try out.write("</pre>"); |
| 955 | 961 | }, |
| 956 | 962 | Node.HeaderOpen => |info| { |
| 957 | 963 | try out.print("<h{} id=\"{}\">{}</h{}>\n", info.n, info.url, info.name, info.n); |
| ... | ... | @@ -968,7 +974,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: var |
| 968 | 974 | try out.write("</ul>\n"); |
| 969 | 975 | }, |
| 970 | 976 | Node.Syntax => |content_tok| { |
| 971 | | try tokenizeAndPrint(allocator, tokenizer, out, content_tok); |
| 977 | try tokenizeAndPrint(tokenizer, out, content_tok); |
| 972 | 978 | }, |
| 973 | 979 | Node.Code => |code| { |
| 974 | 980 | code_progress_index += 1; |
| ... | ... | @@ -980,7 +986,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: var |
| 980 | 986 | try out.print("<p class=\"file\">{}.zig</p>", code.name); |
| 981 | 987 | } |
| 982 | 988 | try out.write("<pre>"); |
| 983 | | try tokenizeAndPrint(allocator, tokenizer, out, code.source_token); |
| 989 | try tokenizeAndPrint(tokenizer, out, code.source_token); |
| 984 | 990 | try out.write("</pre>"); |
| 985 | 991 | const name_plus_ext = try std.fmt.allocPrint(allocator, "{}.zig", code.name); |
| 986 | 992 | const tmp_source_file_name = try os.path.join(allocator, tmp_dir_name, name_plus_ext); |