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