authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-10-26 16:48:29-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-10-26 16:48:50-07:00
log7d0dc2fd75fd0e62cb842e00e82633a35509f12b
tree8cb7022b59f4a39ef5c0f8c1ea37f6822f92ed4e
parent9db293492bbbc5b8d70638bd9c59dea19d13596c

docgen: fix not escaping html in shell samples


1 files changed, 43 insertions(+), 17 deletions(-)

doc/docgen.zig+43-17
...@@ -1168,7 +1168,7 @@ fn printSourceBlock(allocator: Allocator, docgen_tokenizer: *Tokenizer, out: any...@@ -1168,7 +1168,7 @@ fn printSourceBlock(allocator: Allocator, docgen_tokenizer: *Tokenizer, out: any
1168 try out.writeAll("</pre></figure>");1168 try out.writeAll("</pre></figure>");
1169}1169}
11701170
1171fn printShell(out: anytype, shell_content: []const u8) !void {1171fn printShell(out: anytype, shell_content: []const u8, escape: bool) !void {
1172 const trimmed_shell_content = mem.trim(u8, shell_content, " \n");1172 const trimmed_shell_content = mem.trim(u8, shell_content, " \n");
1173 try out.writeAll("<figure><figcaption class=\"shell-cap\">Shell</figcaption><pre><samp>");1173 try out.writeAll("<figure><figcaption class=\"shell-cap\">Shell</figcaption><pre><samp>");
1174 var cmd_cont: bool = false;1174 var cmd_cont: bool = false;
...@@ -1176,15 +1176,41 @@ fn printShell(out: anytype, shell_content: []const u8) !void {...@@ -1176,15 +1176,41 @@ fn printShell(out: anytype, shell_content: []const u8) !void {
1176 while (iter.next()) |orig_line| {1176 while (iter.next()) |orig_line| {
1177 const line = mem.trimRight(u8, orig_line, " ");1177 const line = mem.trimRight(u8, orig_line, " ");
1178 if (!cmd_cont and line.len > 1 and mem.eql(u8, line[0..2], "$ ") and line[line.len - 1] != '\\') {1178 if (!cmd_cont and line.len > 1 and mem.eql(u8, line[0..2], "$ ") and line[line.len - 1] != '\\') {
1179 try out.print(start_line ++ "$ <kbd>{s}</kbd>" ++ end_line ++ "\n", .{std.mem.trimLeft(u8, line[1..], " ")});1179 try out.writeAll(start_line ++ "$ <kbd>");
1180 const s = std.mem.trimLeft(u8, line[1..], " ");
1181 if (escape) {
1182 try writeEscaped(out, s);
1183 } else {
1184 try out.writeAll(s);
1185 }
1186 try out.writeAll("</kbd>" ++ end_line ++ "\n");
1180 } else if (!cmd_cont and line.len > 1 and mem.eql(u8, line[0..2], "$ ") and line[line.len - 1] == '\\') {1187 } else if (!cmd_cont and line.len > 1 and mem.eql(u8, line[0..2], "$ ") and line[line.len - 1] == '\\') {
1181 try out.print(start_line ++ "$ <kbd>{s}" ++ end_line ++ "\n", .{std.mem.trimLeft(u8, line[1..], " ")});1188 try out.writeAll(start_line ++ "$ <kbd>");
1189 const s = std.mem.trimLeft(u8, line[1..], " ");
1190 if (escape) {
1191 try writeEscaped(out, s);
1192 } else {
1193 try out.writeAll(s);
1194 }
1195 try out.writeAll(end_line ++ "\n");
1182 cmd_cont = true;1196 cmd_cont = true;
1183 } else if (line.len > 0 and line[line.len - 1] != '\\' and cmd_cont) {1197 } else if (line.len > 0 and line[line.len - 1] != '\\' and cmd_cont) {
1184 try out.print(start_line ++ "{s}</kbd>" ++ end_line ++ "\n", .{line});1198 try out.writeAll(start_line);
1199 if (escape) {
1200 try writeEscaped(out, line);
1201 } else {
1202 try out.writeAll(line);
1203 }
1204 try out.writeAll("</kbd>" ++ end_line ++ "\n");
1185 cmd_cont = false;1205 cmd_cont = false;
1186 } else {1206 } else {
1187 try out.print(start_line ++ "{s}" ++ end_line ++ "\n", .{line});1207 try out.writeAll(start_line);
1208 if (escape) {
1209 try writeEscaped(out, line);
1210 } else {
1211 try out.writeAll(line);
1212 }
1213 try out.writeAll(end_line ++ "\n");
1188 }1214 }
1189 }1215 }
11901216
...@@ -1254,7 +1280,7 @@ fn genHtml(...@@ -1254,7 +1280,7 @@ fn genHtml(
1254 },1280 },
1255 .Shell => |content_tok| {1281 .Shell => |content_tok| {
1256 const raw_shell_content = tokenizer.buffer[content_tok.start..content_tok.end];1282 const raw_shell_content = tokenizer.buffer[content_tok.start..content_tok.end];
1257 try printShell(out, raw_shell_content);1283 try printShell(out, raw_shell_content, true);
1258 },1284 },
1259 .SyntaxBlock => |syntax_block| {1285 .SyntaxBlock => |syntax_block| {
1260 try printSourceBlock(allocator, tokenizer, out, syntax_block);1286 try printSourceBlock(allocator, tokenizer, out, syntax_block);
...@@ -1730,7 +1756,7 @@ fn genHtml(...@@ -1730,7 +1756,7 @@ fn genHtml(
1730 }1756 }
17311757
1732 if (!code.just_check_syntax) {1758 if (!code.just_check_syntax) {
1733 try printShell(out, shell_buffer.items);1759 try printShell(out, shell_buffer.items, false);
1734 }1760 }
1735 },1761 },
1736 }1762 }
...@@ -1788,7 +1814,7 @@ test "shell parsed" {...@@ -1788,7 +1814,7 @@ test "shell parsed" {
1788 var buffer = std.ArrayList(u8).init(test_allocator);1814 var buffer = std.ArrayList(u8).init(test_allocator);
1789 defer buffer.deinit();1815 defer buffer.deinit();
17901816
1791 try printShell(buffer.writer(), shell_out);1817 try printShell(buffer.writer(), shell_out, false);
1792 std.log.emerg("{s}", .{buffer.items});1818 std.log.emerg("{s}", .{buffer.items});
1793 try testing.expectEqualSlices(u8, expected, buffer.items);1819 try testing.expectEqualSlices(u8, expected, buffer.items);
1794 }1820 }
...@@ -1806,7 +1832,7 @@ test "shell parsed" {...@@ -1806,7 +1832,7 @@ test "shell parsed" {
1806 var buffer = std.ArrayList(u8).init(test_allocator);1832 var buffer = std.ArrayList(u8).init(test_allocator);
1807 defer buffer.deinit();1833 defer buffer.deinit();
18081834
1809 try printShell(buffer.writer(), shell_out);1835 try printShell(buffer.writer(), shell_out, false);
1810 try testing.expectEqualSlices(u8, expected, buffer.items);1836 try testing.expectEqualSlices(u8, expected, buffer.items);
1811 }1837 }
1812 {1838 {
...@@ -1825,7 +1851,7 @@ test "shell parsed" {...@@ -1825,7 +1851,7 @@ test "shell parsed" {
1825 var buffer = std.ArrayList(u8).init(test_allocator);1851 var buffer = std.ArrayList(u8).init(test_allocator);
1826 defer buffer.deinit();1852 defer buffer.deinit();
18271853
1828 try printShell(buffer.writer(), shell_out);1854 try printShell(buffer.writer(), shell_out, false);
1829 try testing.expectEqualSlices(u8, expected, buffer.items);1855 try testing.expectEqualSlices(u8, expected, buffer.items);
1830 }1856 }
1831 {1857 {
...@@ -1846,7 +1872,7 @@ test "shell parsed" {...@@ -1846,7 +1872,7 @@ test "shell parsed" {
1846 var buffer = std.ArrayList(u8).init(test_allocator);1872 var buffer = std.ArrayList(u8).init(test_allocator);
1847 defer buffer.deinit();1873 defer buffer.deinit();
18481874
1849 try printShell(buffer.writer(), shell_out);1875 try printShell(buffer.writer(), shell_out, false);
1850 try testing.expectEqualSlices(u8, expected, buffer.items);1876 try testing.expectEqualSlices(u8, expected, buffer.items);
1851 }1877 }
1852 {1878 {
...@@ -1865,7 +1891,7 @@ test "shell parsed" {...@@ -1865,7 +1891,7 @@ test "shell parsed" {
1865 var buffer = std.ArrayList(u8).init(test_allocator);1891 var buffer = std.ArrayList(u8).init(test_allocator);
1866 defer buffer.deinit();1892 defer buffer.deinit();
18671893
1868 try printShell(buffer.writer(), shell_out);1894 try printShell(buffer.writer(), shell_out, false);
1869 try testing.expectEqualSlices(u8, expected, buffer.items);1895 try testing.expectEqualSlices(u8, expected, buffer.items);
1870 }1896 }
1871 {1897 {
...@@ -1888,7 +1914,7 @@ test "shell parsed" {...@@ -1888,7 +1914,7 @@ test "shell parsed" {
1888 var buffer = std.ArrayList(u8).init(test_allocator);1914 var buffer = std.ArrayList(u8).init(test_allocator);
1889 defer buffer.deinit();1915 defer buffer.deinit();
18901916
1891 try printShell(buffer.writer(), shell_out);1917 try printShell(buffer.writer(), shell_out, false);
1892 try testing.expectEqualSlices(u8, expected, buffer.items);1918 try testing.expectEqualSlices(u8, expected, buffer.items);
1893 }1919 }
1894 {1920 {
...@@ -1910,7 +1936,7 @@ test "shell parsed" {...@@ -1910,7 +1936,7 @@ test "shell parsed" {
1910 var buffer = std.ArrayList(u8).init(test_allocator);1936 var buffer = std.ArrayList(u8).init(test_allocator);
1911 defer buffer.deinit();1937 defer buffer.deinit();
19121938
1913 try printShell(buffer.writer(), shell_out);1939 try printShell(buffer.writer(), shell_out, false);
1914 try testing.expectEqualSlices(u8, expected, buffer.items);1940 try testing.expectEqualSlices(u8, expected, buffer.items);
1915 }1941 }
1916 {1942 {
...@@ -1927,7 +1953,7 @@ test "shell parsed" {...@@ -1927,7 +1953,7 @@ test "shell parsed" {
1927 var buffer = std.ArrayList(u8).init(test_allocator);1953 var buffer = std.ArrayList(u8).init(test_allocator);
1928 defer buffer.deinit();1954 defer buffer.deinit();
19291955
1930 try printShell(buffer.writer(), shell_out);1956 try printShell(buffer.writer(), shell_out, false);
1931 try testing.expectEqualSlices(u8, expected, buffer.items);1957 try testing.expectEqualSlices(u8, expected, buffer.items);
1932 }1958 }
1933 {1959 {
...@@ -1946,7 +1972,7 @@ test "shell parsed" {...@@ -1946,7 +1972,7 @@ test "shell parsed" {
1946 var buffer = std.ArrayList(u8).init(test_allocator);1972 var buffer = std.ArrayList(u8).init(test_allocator);
1947 defer buffer.deinit();1973 defer buffer.deinit();
19481974
1949 try printShell(buffer.writer(), shell_out);1975 try printShell(buffer.writer(), shell_out, false);
1950 try testing.expectEqualSlices(u8, expected, buffer.items);1976 try testing.expectEqualSlices(u8, expected, buffer.items);
1951 }1977 }
1952 {1978 {
...@@ -1961,7 +1987,7 @@ test "shell parsed" {...@@ -1961,7 +1987,7 @@ test "shell parsed" {
1961 var buffer = std.ArrayList(u8).init(test_allocator);1987 var buffer = std.ArrayList(u8).init(test_allocator);
1962 defer buffer.deinit();1988 defer buffer.deinit();
19631989
1964 try printShell(buffer.writer(), shell_out);1990 try printShell(buffer.writer(), shell_out, false);
1965 try testing.expectEqualSlices(u8, expected, buffer.items);1991 try testing.expectEqualSlices(u8, expected, buffer.items);
1966 }1992 }
1967}1993}