| ... | @@ -864,6 +864,21 @@ fn isType(name: []const u8) bool { | ... | @@ -864,6 +864,21 @@ fn isType(name: []const u8) bool { |
| 864 | return false; | 864 | return false; |
| 865 | } | 865 | } |
| 866 | | 866 | |
| | 867 | const start_line = "<span class=\"line\">"; |
| | 868 | const end_line = "</span>"; |
| | 869 | |
| | 870 | fn writeEscapedLines(out: anytype, text: []const u8) !void { |
| | 871 | for (text) |char| { |
| | 872 | if (char == '\n') { |
| | 873 | try out.writeAll(end_line); |
| | 874 | try out.writeAll("\n"); |
| | 875 | try out.writeAll(start_line); |
| | 876 | } else { |
| | 877 | try writeEscaped(out, &[_]u8{char}); |
| | 878 | } |
| | 879 | } |
| | 880 | } |
| | 881 | |
| 867 | fn tokenizeAndPrintRaw( | 882 | fn tokenizeAndPrintRaw( |
| 868 | allocator: *Allocator, | 883 | allocator: *Allocator, |
| 869 | docgen_tokenizer: *Tokenizer, | 884 | docgen_tokenizer: *Tokenizer, |
| ... | @@ -873,7 +888,8 @@ fn tokenizeAndPrintRaw( | ... | @@ -873,7 +888,8 @@ fn tokenizeAndPrintRaw( |
| 873 | ) !void { | 888 | ) !void { |
| 874 | const src_non_terminated = mem.trim(u8, raw_src, " \n"); | 889 | const src_non_terminated = mem.trim(u8, raw_src, " \n"); |
| 875 | const src = try allocator.dupeZ(u8, src_non_terminated); | 890 | const src = try allocator.dupeZ(u8, src_non_terminated); |
| 876 | try out.writeAll("<code>"); | 891 | |
| | 892 | try out.writeAll("<code>" ++ start_line); |
| 877 | var tokenizer = std.zig.Tokenizer.init(src); | 893 | var tokenizer = std.zig.Tokenizer.init(src); |
| 878 | var index: usize = 0; | 894 | var index: usize = 0; |
| 879 | var next_tok_is_fn = false; | 895 | var next_tok_is_fn = false; |
| ... | @@ -888,7 +904,7 @@ fn tokenizeAndPrintRaw( | ... | @@ -888,7 +904,7 @@ fn tokenizeAndPrintRaw( |
| 888 | const comment_end_off = mem.indexOf(u8, src[comment_start..token.loc.start], "\n"); | 904 | const comment_end_off = mem.indexOf(u8, src[comment_start..token.loc.start], "\n"); |
| 889 | const comment_end = if (comment_end_off) |o| comment_start + o else token.loc.start; | 905 | const comment_end = if (comment_end_off) |o| comment_start + o else token.loc.start; |
| 890 | | 906 | |
| 891 | try writeEscaped(out, src[index..comment_start]); | 907 | try writeEscapedLines(out, src[index..comment_start]); |
| 892 | try out.writeAll("<span class=\"tok-comment\">"); | 908 | try out.writeAll("<span class=\"tok-comment\">"); |
| 893 | try writeEscaped(out, src[comment_start..comment_end]); | 909 | try writeEscaped(out, src[comment_start..comment_end]); |
| 894 | try out.writeAll("</span>"); | 910 | try out.writeAll("</span>"); |
| ... | @@ -897,7 +913,7 @@ fn tokenizeAndPrintRaw( | ... | @@ -897,7 +913,7 @@ fn tokenizeAndPrintRaw( |
| 897 | continue; | 913 | continue; |
| 898 | } | 914 | } |
| 899 | | 915 | |
| 900 | try writeEscaped(out, src[index..token.loc.start]); | 916 | try writeEscapedLines(out, src[index..token.loc.start]); |
| 901 | switch (token.tag) { | 917 | switch (token.tag) { |
| 902 | .eof => break, | 918 | .eof => break, |
| 903 | | 919 | |
| ... | @@ -1103,7 +1119,7 @@ fn tokenizeAndPrintRaw( | ... | @@ -1103,7 +1119,7 @@ fn tokenizeAndPrintRaw( |
| 1103 | } | 1119 | } |
| 1104 | index = token.loc.end; | 1120 | index = token.loc.end; |
| 1105 | } | 1121 | } |
| 1106 | try out.writeAll("</code>"); | 1122 | try out.writeAll(end_line ++ "</code>"); |
| 1107 | } | 1123 | } |
| 1108 | | 1124 | |
| 1109 | fn tokenizeAndPrint( | 1125 | fn tokenizeAndPrint( |
| ... | @@ -1126,9 +1142,9 @@ fn printSourceBlock(allocator: *Allocator, docgen_tokenizer: *Tokenizer, out: an | ... | @@ -1126,9 +1142,9 @@ fn printSourceBlock(allocator: *Allocator, docgen_tokenizer: *Tokenizer, out: an |
| 1126 | const raw_source = docgen_tokenizer.buffer[syntax_block.source_token.start..syntax_block.source_token.end]; | 1142 | const raw_source = docgen_tokenizer.buffer[syntax_block.source_token.start..syntax_block.source_token.end]; |
| 1127 | const trimmed_raw_source = mem.trim(u8, raw_source, " \n"); | 1143 | const trimmed_raw_source = mem.trim(u8, raw_source, " \n"); |
| 1128 | | 1144 | |
| 1129 | try out.writeAll("<code>"); | 1145 | try out.writeAll("<code>" ++ start_line); |
| 1130 | try writeEscaped(out, trimmed_raw_source); | 1146 | try writeEscapedLines(out, trimmed_raw_source); |
| 1131 | try out.writeAll("</code>"); | 1147 | try out.writeAll(end_line ++ "</code>"); |
| 1132 | }, | 1148 | }, |
| 1133 | } | 1149 | } |
| 1134 | try out.writeAll("</pre></figure>"); | 1150 | try out.writeAll("</pre></figure>"); |
| ... | @@ -1142,15 +1158,15 @@ fn printShell(out: anytype, shell_content: []const u8) !void { | ... | @@ -1142,15 +1158,15 @@ fn printShell(out: anytype, shell_content: []const u8) !void { |
| 1142 | while (iter.next()) |orig_line| { | 1158 | while (iter.next()) |orig_line| { |
| 1143 | const line = mem.trimRight(u8, orig_line, " "); | 1159 | const line = mem.trimRight(u8, orig_line, " "); |
| 1144 | if (!cmd_cont and line.len > 1 and mem.eql(u8, line[0..2], "$ ") and line[line.len - 1] != '\\') { | 1160 | if (!cmd_cont and line.len > 1 and mem.eql(u8, line[0..2], "$ ") and line[line.len - 1] != '\\') { |
| 1145 | try out.print("$ <kbd>{s}</kbd>\n", .{std.mem.trimLeft(u8, line[1..], " ")}); | 1161 | try out.print(start_line ++ "$ <kbd>{s}</kbd>" ++ end_line ++ "\n", .{std.mem.trimLeft(u8, line[1..], " ")}); |
| 1146 | } else if (!cmd_cont and line.len > 1 and mem.eql(u8, line[0..2], "$ ") and line[line.len - 1] == '\\') { | 1162 | } else if (!cmd_cont and line.len > 1 and mem.eql(u8, line[0..2], "$ ") and line[line.len - 1] == '\\') { |
| 1147 | try out.print("$ <kbd>{s}\n", .{std.mem.trimLeft(u8, line[1..], " ")}); | 1163 | try out.print(start_line ++ "$ <kbd>{s}" ++ end_line ++ "\n", .{std.mem.trimLeft(u8, line[1..], " ")}); |
| 1148 | cmd_cont = true; | 1164 | cmd_cont = true; |
| 1149 | } else if (line.len > 0 and line[line.len - 1] != '\\' and cmd_cont) { | 1165 | } else if (line.len > 0 and line[line.len - 1] != '\\' and cmd_cont) { |
| 1150 | try out.print("{s}</kbd>\n", .{line}); | 1166 | try out.print(start_line ++ "{s}</kbd>" ++ end_line ++ "\n", .{line}); |
| 1151 | cmd_cont = false; | 1167 | cmd_cont = false; |
| 1152 | } else { | 1168 | } else { |
| 1153 | try out.print("{s}\n", .{line}); | 1169 | try out.print(start_line ++ "{s}" ++ end_line ++ "\n", .{line}); |
| 1154 | } | 1170 | } |
| 1155 | } | 1171 | } |
| 1156 | | 1172 | |