diff --git a/src/main.zig b/src/main.zig index a8b024d2..9341072e 100644 --- a/src/main.zig +++ b/src/main.zig @@ -62,7 +62,7 @@ pub fn main() !void { const file = try std.fs.cwd().openFile("test.html", .{}); defer file.close(); - doc = try parser.documentHTMLParse(file.reader()); + doc = try parser.documentHTMLParse(file.reader(), "UTF-8"); defer parser.documentHTMLClose(doc) catch |err| { std.debug.print("documentHTMLClose error: {s}\n", .{@errorName(err)}); }; diff --git a/src/main_shell.zig b/src/main_shell.zig index ea9276fa..35d1fb39 100644 --- a/src/main_shell.zig +++ b/src/main_shell.zig @@ -43,7 +43,7 @@ pub fn main() !void { const file = try std.fs.cwd().openFile("test.html", .{}); defer file.close(); - doc = try parser.documentHTMLParse(file.reader()); + doc = try parser.documentHTMLParse(file.reader(), "UTF-8"); defer parser.documentHTMLClose(doc) catch |err| { std.debug.print("documentHTMLClose error: {s}\n", .{@errorName(err)}); }; diff --git a/src/netsurf.zig b/src/netsurf.zig index 5633515b..bd639e0a 100644 --- a/src/netsurf.zig +++ b/src/netsurf.zig @@ -1411,10 +1411,10 @@ fn parserErr(err: HubbubErr) ParserError!void { // The caller is responsible for closing the document. pub fn documentHTMLParseFromStr(str: []const u8) !*DocumentHTML { var fbs = std.io.fixedBufferStream(str); - return try documentHTMLParse(fbs.reader()); + return try documentHTMLParse(fbs.reader(), "UTF-8"); } -pub fn documentHTMLParse(reader: anytype) !*DocumentHTML { +pub fn documentHTMLParse(reader: anytype, enc: ?[:0]const u8) !*DocumentHTML { var parser: ?*c.dom_hubbub_parser = undefined; var doc: ?*c.dom_document = undefined; var err: c.hubbub_error = undefined; @@ -1429,6 +1429,8 @@ pub fn documentHTMLParse(reader: anytype) !*DocumentHTML { .daf = null, }; + if (enc) |e| params.enc = e; + err = c.dom_hubbub_parser_create(¶ms, &parser, &doc); try parserErr(err); defer c.dom_hubbub_parser_destroy(parser); diff --git a/src/run_tests.zig b/src/run_tests.zig index 05c9354d..8369ec61 100644 --- a/src/run_tests.zig +++ b/src/run_tests.zig @@ -43,7 +43,7 @@ fn testExecFn( const file = try std.fs.cwd().openFile("test.html", .{}); defer file.close(); - doc = try parser.documentHTMLParse(file.reader()); + doc = try parser.documentHTMLParse(file.reader(), "UTF-8"); defer parser.documentHTMLClose(doc) catch |err| { std.debug.print("documentHTMLClose error: {s}\n", .{@errorName(err)}); }; @@ -119,6 +119,6 @@ test "bug document html parsing #4" { const file = try std.fs.cwd().openFile("tests/html/bug-html-parsing-4.html", .{}); defer file.close(); - doc = try parser.documentHTMLParse(file.reader()); + doc = try parser.documentHTMLParse(file.reader(), null); parser.documentHTMLClose(doc) catch {}; } diff --git a/src/wpt/run.zig b/src/wpt/run.zig index 3d7ca437..65d5ee67 100644 --- a/src/wpt/run.zig +++ b/src/wpt/run.zig @@ -21,7 +21,7 @@ pub fn run(arena: *std.heap.ArenaAllocator, comptime dir: []const u8, f: []const const file = try std.fs.cwd().openFile(f, .{}); defer file.close(); - const html_doc = try parser.documentHTMLParse(file.reader()); + const html_doc = try parser.documentHTMLParse(file.reader(), "UTF-8"); const doc = parser.documentHTMLToDocument(html_doc); const dirname = fspath.dirname(f[dir.len..]) orelse unreachable;