| ... | ... | @@ -8,6 +8,7 @@ const Progress = std.Progress; |
| 8 | 8 | const print = std.debug.print; |
| 9 | 9 | const mem = std.mem; |
| 10 | 10 | const testing = std.testing; |
| 11 | const Allocator = std.mem.Allocator; |
| 11 | 12 | |
| 12 | 13 | const max_doc_file_size = 10 * 1024 * 1024; |
| 13 | 14 | |
| ... | ... | @@ -326,7 +327,7 @@ const Action = enum { |
| 326 | 327 | Close, |
| 327 | 328 | }; |
| 328 | 329 | |
| 329 | | fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc { |
| 330 | fn genToc(allocator: *Allocator, tokenizer: *Tokenizer) !Toc { |
| 330 | 331 | var urls = std.StringHashMap(Token).init(allocator); |
| 331 | 332 | errdefer urls.deinit(); |
| 332 | 333 | |
| ... | ... | @@ -630,7 +631,7 @@ fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc { |
| 630 | 631 | }; |
| 631 | 632 | } |
| 632 | 633 | |
| 633 | | fn urlize(allocator: *mem.Allocator, input: []const u8) ![]u8 { |
| 634 | fn urlize(allocator: *Allocator, input: []const u8) ![]u8 { |
| 634 | 635 | var buf = std.ArrayList(u8).init(allocator); |
| 635 | 636 | defer buf.deinit(); |
| 636 | 637 | |
| ... | ... | @@ -649,7 +650,7 @@ fn urlize(allocator: *mem.Allocator, input: []const u8) ![]u8 { |
| 649 | 650 | return buf.toOwnedSlice(); |
| 650 | 651 | } |
| 651 | 652 | |
| 652 | | fn escapeHtml(allocator: *mem.Allocator, input: []const u8) ![]u8 { |
| 653 | fn escapeHtml(allocator: *Allocator, input: []const u8) ![]u8 { |
| 653 | 654 | var buf = std.ArrayList(u8).init(allocator); |
| 654 | 655 | defer buf.deinit(); |
| 655 | 656 | |
| ... | ... | @@ -695,7 +696,7 @@ test "term color" { |
| 695 | 696 | testing.expectEqualSlices(u8, "A<span class=\"t32\">green</span>B", result); |
| 696 | 697 | } |
| 697 | 698 | |
| 698 | | fn termColor(allocator: *mem.Allocator, input: []const u8) ![]u8 { |
| 699 | fn termColor(allocator: *Allocator, input: []const u8) ![]u8 { |
| 699 | 700 | var buf = std.ArrayList(u8).init(allocator); |
| 700 | 701 | defer buf.deinit(); |
| 701 | 702 | |
| ... | ... | @@ -789,8 +790,15 @@ fn isType(name: []const u8) bool { |
| 789 | 790 | return false; |
| 790 | 791 | } |
| 791 | 792 | |
| 792 | | fn tokenizeAndPrintRaw(docgen_tokenizer: *Tokenizer, out: anytype, source_token: Token, raw_src: []const u8) !void { |
| 793 | | const src = mem.trim(u8, raw_src, " \n"); |
| 793 | fn tokenizeAndPrintRaw( |
| 794 | allocator: *Allocator, |
| 795 | docgen_tokenizer: *Tokenizer, |
| 796 | out: anytype, |
| 797 | source_token: Token, |
| 798 | raw_src: []const u8, |
| 799 | ) !void { |
| 800 | const src_non_terminated = mem.trim(u8, raw_src, " \n"); |
| 801 | const src = try allocator.dupeZ(u8, src_non_terminated); |
| 794 | 802 | try out.writeAll("<code class=\"zig\">"); |
| 795 | 803 | var tokenizer = std.zig.Tokenizer.init(src); |
| 796 | 804 | var index: usize = 0; |
| ... | ... | @@ -1016,12 +1024,24 @@ fn tokenizeAndPrintRaw(docgen_tokenizer: *Tokenizer, out: anytype, source_token: |
| 1016 | 1024 | try out.writeAll("</code>"); |
| 1017 | 1025 | } |
| 1018 | 1026 | |
| 1019 | | fn tokenizeAndPrint(docgen_tokenizer: *Tokenizer, out: anytype, source_token: Token) !void { |
| 1027 | fn tokenizeAndPrint( |
| 1028 | allocator: *Allocator, |
| 1029 | docgen_tokenizer: *Tokenizer, |
| 1030 | out: anytype, |
| 1031 | source_token: Token, |
| 1032 | ) !void { |
| 1020 | 1033 | const raw_src = docgen_tokenizer.buffer[source_token.start..source_token.end]; |
| 1021 | | return tokenizeAndPrintRaw(docgen_tokenizer, out, source_token, raw_src); |
| 1034 | return tokenizeAndPrintRaw(allocator, docgen_tokenizer, out, source_token, raw_src); |
| 1022 | 1035 | } |
| 1023 | 1036 | |
| 1024 | | fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: anytype, zig_exe: []const u8, do_code_tests: bool) !void { |
| 1037 | fn genHtml( |
| 1038 | allocator: *Allocator, |
| 1039 | tokenizer: *Tokenizer, |
| 1040 | toc: *Toc, |
| 1041 | out: anytype, |
| 1042 | zig_exe: []const u8, |
| 1043 | do_code_tests: bool, |
| 1044 | ) !void { |
| 1025 | 1045 | var progress = Progress{}; |
| 1026 | 1046 | const root_node = try progress.start("Generating docgen examples", toc.nodes.len); |
| 1027 | 1047 | defer root_node.end(); |
| ... | ... | @@ -1048,7 +1068,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any |
| 1048 | 1068 | }, |
| 1049 | 1069 | .Builtin => |tok| { |
| 1050 | 1070 | try out.writeAll("<pre>"); |
| 1051 | | try tokenizeAndPrintRaw(tokenizer, out, tok, builtin_code); |
| 1071 | try tokenizeAndPrintRaw(allocator, tokenizer, out, tok, builtin_code); |
| 1052 | 1072 | try out.writeAll("</pre>"); |
| 1053 | 1073 | }, |
| 1054 | 1074 | .HeaderOpen => |info| { |
| ... | ... | @@ -1069,7 +1089,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any |
| 1069 | 1089 | try out.writeAll("</ul>\n"); |
| 1070 | 1090 | }, |
| 1071 | 1091 | .Syntax => |content_tok| { |
| 1072 | | try tokenizeAndPrint(tokenizer, out, content_tok); |
| 1092 | try tokenizeAndPrint(allocator, tokenizer, out, content_tok); |
| 1073 | 1093 | }, |
| 1074 | 1094 | .Code => |code| { |
| 1075 | 1095 | const raw_source = tokenizer.buffer[code.source_token.start..code.source_token.end]; |
| ... | ... | @@ -1078,7 +1098,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any |
| 1078 | 1098 | try out.print("<p class=\"file\">{s}.zig</p>", .{code.name}); |
| 1079 | 1099 | } |
| 1080 | 1100 | try out.writeAll("<pre>"); |
| 1081 | | try tokenizeAndPrint(tokenizer, out, code.source_token); |
| 1101 | try tokenizeAndPrint(allocator, tokenizer, out, code.source_token); |
| 1082 | 1102 | try out.writeAll("</pre>"); |
| 1083 | 1103 | |
| 1084 | 1104 | if (!do_code_tests) { |
| ... | ... | @@ -1497,7 +1517,7 @@ fn genHtml(allocator: *mem.Allocator, tokenizer: *Tokenizer, toc: *Toc, out: any |
| 1497 | 1517 | } |
| 1498 | 1518 | } |
| 1499 | 1519 | |
| 1500 | | fn exec(allocator: *mem.Allocator, env_map: *std.BufMap, args: []const []const u8) !ChildProcess.ExecResult { |
| 1520 | fn exec(allocator: *Allocator, env_map: *std.BufMap, args: []const []const u8) !ChildProcess.ExecResult { |
| 1501 | 1521 | const result = try ChildProcess.exec(.{ |
| 1502 | 1522 | .allocator = allocator, |
| 1503 | 1523 | .argv = args, |
| ... | ... | @@ -1521,7 +1541,7 @@ fn exec(allocator: *mem.Allocator, env_map: *std.BufMap, args: []const []const u |
| 1521 | 1541 | return result; |
| 1522 | 1542 | } |
| 1523 | 1543 | |
| 1524 | | fn getBuiltinCode(allocator: *mem.Allocator, env_map: *std.BufMap, zig_exe: []const u8) ![]const u8 { |
| 1544 | fn getBuiltinCode(allocator: *Allocator, env_map: *std.BufMap, zig_exe: []const u8) ![]const u8 { |
| 1525 | 1545 | const result = try exec(allocator, env_map, &[_][]const u8{ zig_exe, "build-obj", "--show-builtin" }); |
| 1526 | 1546 | return result.stdout; |
| 1527 | 1547 | } |