diff --git a/src/browser/dom/element.zig b/src/browser/dom/element.zig index 3a780b65..a1a7f33e 100644 --- a/src/browser/dom/element.zig +++ b/src/browser/dom/element.zig @@ -192,11 +192,9 @@ pub const Element = struct { // a new fragment const clean = try parser.documentCreateDocumentFragment(doc); const children = try parser.nodeGetChildNodes(body); - const ln = parser.nodeListLength(children); - for (0..ln) |_| { - // always index 0, because nodeAppendChild moves the node out of - // the nodeList and into the new tree - const child = parser.nodeListItem(children, 0) orelse continue; + // always index 0, because nodeAppendChild moves the node out of + // the nodeList and into the new tree + while (parser.nodeListItem(children, 0)) |child| { _ = try parser.nodeAppendChild(@ptrCast(@alignCast(clean)), child); } @@ -210,22 +208,18 @@ pub const Element = struct { { // First, copy some of the head element const children = try parser.nodeGetChildNodes(head); - const ln = parser.nodeListLength(children); - for (0..ln) |_| { - // always index 0, because nodeAppendChild moves the node out of - // the nodeList and into the new tree - const child = parser.nodeListItem(children, 0) orelse continue; + // always index 0, because nodeAppendChild moves the node out of + // the nodeList and into the new tree + while (parser.nodeListItem(children, 0)) |child| { _ = try parser.nodeAppendChild(node, child); } } { const children = try parser.nodeGetChildNodes(body); - const ln = parser.nodeListLength(children); - for (0..ln) |_| { - // always index 0, because nodeAppendChild moves the node out of - // the nodeList and into the new tree - const child = parser.nodeListItem(children, 0) orelse continue; + // always index 0, because nodeAppendChild moves the node out of + // the nodeList and into the new tree + while (parser.nodeListItem(children, 0)) |child| { _ = try parser.nodeAppendChild(node, child); } } diff --git a/src/browser/netsurf.zig b/src/browser/netsurf.zig index 5cf3ba13..ffa81006 100644 --- a/src/browser/netsurf.zig +++ b/src/browser/netsurf.zig @@ -2500,31 +2500,22 @@ fn parseParams(enc: ?[:0]const u8) c.dom_hubbub_parser_params { } fn parseData(parser: *c.dom_hubbub_parser, reader: anytype) !void { - var err: c.hubbub_error = undefined; - const TI = @typeInfo(@TypeOf(reader)); - if (TI == .pointer and @hasDecl(TI.pointer.child, "next")) { - while (try reader.next()) |data| { - err = c.dom_hubbub_parser_parse_chunk(parser, data.ptr, data.len); - try parserErr(err); - } - } else { - var buffer: [1024]u8 = undefined; - var ln = buffer.len; - while (ln > 0) { - ln = try reader.read(&buffer); - err = c.dom_hubbub_parser_parse_chunk(parser, &buffer, ln); - // TODO handle encoding change error return. - // When the HTML contains a META tag with a different encoding than the - // original one, a c.DOM_HUBBUB_HUBBUB_ERR_ENCODINGCHANGE error is - // returned. - // In this case, we must restart the parsing with the new detected - // encoding. The detected encoding is stored in the document and we can - // get it with documentGetInputEncoding(). - try parserErr(err); - } + var buffer: [1024]u8 = undefined; + var ln = buffer.len; + while (ln > 0) { + ln = try reader.read(&buffer); + const err = c.dom_hubbub_parser_parse_chunk(parser, &buffer, ln); + // TODO handle encoding change error return. + // When the HTML contains a META tag with a different encoding than the + // original one, a c.DOM_HUBBUB_HUBBUB_ERR_ENCODINGCHANGE error is + // returned. + // In this case, we must restart the parsing with the new detected + // encoding. The detected encoding is stored in the document and we can + // get it with documentGetInputEncoding(). + try parserErr(err); } - err = c.dom_hubbub_parser_completed(parser); - try parserErr(err); + const err = c.dom_hubbub_parser_completed(parser); + return parserErr(err); } // documentHTMLClose closes the document.