diff --git a/src/html/document.zig b/src/html/document.zig index f6f608ff..36be1b3b 100644 --- a/src/html/document.zig +++ b/src/html/document.zig @@ -49,7 +49,7 @@ pub const HTMLDocument = struct { } pub fn get_head(self: *parser.DocumentHTML) !?*parser.Head { - const root = try rootNode(self) orelse return null; + const root = parser.documentHTMLToNode(self); const walker = Walker{}; var next: ?*parser.Node = null; while (true) { @@ -85,8 +85,7 @@ pub const HTMLDocument = struct { if (name.len == 0) return list; - const root = try rootNode(self) orelse return list; - + const root = parser.documentHTMLToNode(self); var c = try collection.HTMLCollectionByName(alloc, root, name, false); const ln = try c.get_length(); @@ -100,18 +99,12 @@ pub const HTMLDocument = struct { return list; } - inline fn rootNode(self: *parser.DocumentHTML) !?*parser.Node { - const doc = parser.documentHTMLToDocument(self); - const elt = try parser.documentGetDocumentElement(doc) orelse return null; - return parser.elementToNode(elt); - } - pub fn get_images(self: *parser.DocumentHTML, alloc: std.mem.Allocator) !collection.HTMLCollection { - return try collection.HTMLCollectionByTagName(alloc, try rootNode(self), "img", false); + return try collection.HTMLCollectionByTagName(alloc, parser.documentHTMLToNode(self), "img", false); } pub fn get_embeds(self: *parser.DocumentHTML, alloc: std.mem.Allocator) !collection.HTMLCollection { - return try collection.HTMLCollectionByTagName(alloc, try rootNode(self), "embed", false); + return try collection.HTMLCollectionByTagName(alloc, parser.documentHTMLToNode(self), "embed", false); } pub fn get_plugins(self: *parser.DocumentHTML, alloc: std.mem.Allocator) !collection.HTMLCollection { @@ -119,11 +112,11 @@ pub const HTMLDocument = struct { } pub fn get_forms(self: *parser.DocumentHTML, alloc: std.mem.Allocator) !collection.HTMLCollection { - return try collection.HTMLCollectionByTagName(alloc, try rootNode(self), "form", false); + return try collection.HTMLCollectionByTagName(alloc, parser.documentHTMLToNode(self), "form", false); } pub fn get_scripts(self: *parser.DocumentHTML, alloc: std.mem.Allocator) !collection.HTMLCollection { - return try collection.HTMLCollectionByTagName(alloc, try rootNode(self), "script", false); + return try collection.HTMLCollectionByTagName(alloc, parser.documentHTMLToNode(self), "script", false); } pub fn get_applets(_: *parser.DocumentHTML) !collection.HTMLCollection { @@ -131,15 +124,15 @@ pub const HTMLDocument = struct { } pub fn get_links(self: *parser.DocumentHTML) !collection.HTMLCollection { - return try collection.HTMLCollectionByLinks(try rootNode(self), false); + return try collection.HTMLCollectionByLinks(parser.documentHTMLToNode(self), false); } pub fn get_anchors(self: *parser.DocumentHTML) !collection.HTMLCollection { - return try collection.HTMLCollectionByAnchors(try rootNode(self), false); + return try collection.HTMLCollectionByAnchors(parser.documentHTMLToNode(self), false); } pub fn get_all(self: *parser.DocumentHTML) !collection.HTMLCollection { - return try collection.HTMLCollectionAll(try rootNode(self), true); + return try collection.HTMLCollectionAll(parser.documentHTMLToNode(self), true); } pub fn get_currentScript(_: *parser.DocumentHTML) !?*parser.Element { diff --git a/src/netsurf.zig b/src/netsurf.zig index 2e021e24..a8af4bbb 100644 --- a/src/netsurf.zig +++ b/src/netsurf.zig @@ -1357,6 +1357,11 @@ pub inline fn documentCreateAttributeNS(doc: *Document, ns: []const u8, qname: [ // DocumentHTML pub const DocumentHTML = c.dom_html_document; +// documentHTMLToNode is an helper to convert a documentHTML to an node. +pub inline fn documentHTMLToNode(doc: *DocumentHTML) *Node { + return @as(*Node, @ptrCast(doc)); +} + fn documentHTMLVtable(doc_html: *DocumentHTML) c.dom_html_document_vtable { return getVtable(c.dom_html_document_vtable, DocumentHTML, doc_html); }