remove netsurf.elementHTMLGetTagType

This commit is contained in:
Pierre Tachoire
2025-08-01 18:26:56 +02:00
parent 8d7c35d034
commit c38c1fa93a
4 changed files with 15 additions and 25 deletions

View File

@@ -62,7 +62,7 @@ pub fn writeNode(node: *parser.Node, opts: Opts, writer: anytype) anyerror!void
switch (try parser.nodeType(node)) {
.element => {
// open the tag
const tag_type = try parser.elementHTMLGetTagType(@ptrCast(node));
const tag_type = try parser.nodeHTMLGetTagType(node) orelse .undef;
if (tag_type == .script and opts.exclude_scripts) {
return;
}
@@ -150,7 +150,7 @@ pub fn writeChildren(root: *parser.Node, opts: Opts, writer: anytype) !void {
// area, base, br, col, embed, hr, img, input, link, meta, source, track, wbr
// https://html.spec.whatwg.org/#void-elements
fn isVoid(elem: *parser.Element) !bool {
const tag = try parser.elementHTMLGetTagType(@as(*parser.ElementHTML, @ptrCast(elem)));
const tag = try parser.elementTag(elem);
return switch (tag) {
.area, .base, .br, .col, .embed, .hr, .img, .input, .link => true,
.meta, .source, .track, .wbr => true,

View File

@@ -340,7 +340,7 @@ pub const Tag = enum(u8) {
}
const testing = @import("../testing.zig");
test "Tag.elementTag" {
test "Tag.fromString" {
try testing.expect(try Tag.fromString("ABBR") == .abbr);
try testing.expect(try Tag.fromString("abbr") == .abbr);
@@ -1428,13 +1428,13 @@ pub inline fn nodeToDocument(node: *Node) *Document {
return @as(*Document, @ptrCast(node));
}
// Combination of nodeToElement + elementHTMLGetTagType
// Combination of nodeToElement + elementTag
pub fn nodeHTMLGetTagType(node: *Node) !?Tag {
if (try nodeType(node) != .element) {
return null;
}
const html_element: *ElementHTML = @ptrCast(node);
return try elementHTMLGetTagType(html_element);
return try elementTag(@ptrCast(node));
}
// CharacterData
@@ -1595,6 +1595,11 @@ fn elementVtable(elem: *Element) c.dom_element_vtable {
return getVtable(c.dom_element_vtable, Element, elem);
}
pub fn elementTag(elem: *Element) !Tag {
const tagname = try elementGetTagName(elem) orelse return .undef;
return Tag.fromString(tagname) catch .undef;
}
pub fn elementGetTagName(elem: *Element) !?[]const u8 {
var s: ?*String = undefined;
const err = elementVtable(elem).dom_element_get_tag_name.?(elem, &s);
@@ -1797,21 +1802,6 @@ fn elementHTMLVtable(elem_html: *ElementHTML) c.dom_html_element_vtable {
return getVtable(c.dom_html_element_vtable, ElementHTML, elem_html);
}
pub fn elementHTMLGetTagType(elem_html: *ElementHTML) !Tag {
var tag_type: c.dom_html_element_type = undefined;
const err = elementHTMLVtable(elem_html).dom_html_element_get_tag_type.?(elem_html, &tag_type);
try DOMErr(err);
if (tag_type >= 255) {
// This is questionable, but std.meta.intToEnum has more overhead
// Added this because this WPT test started to fail once we
// introduced an SVGElement:
// html/dom/documents/dom-tree-accessors/document.title-09.html
return Tag.undef;
}
return @as(Tag, @enumFromInt(tag_type));
}
// HTMLScriptElement
// scriptToElt is an helper to convert an script to an element.

View File

@@ -365,7 +365,7 @@ pub const Page = struct {
const current = next.?;
const e = parser.nodeToElement(current);
const tag = try parser.elementHTMLGetTagType(@as(*parser.ElementHTML, @ptrCast(e)));
const tag = try parser.elementTag(e);
if (tag != .script) {
// ignore non-js script.
@@ -809,7 +809,7 @@ pub const Page = struct {
if (try parser.elementGetAttribute(element, "form")) |form_id| {
const document = parser.documentHTMLToDocument(self.window.document);
const form_element = try parser.documentGetElementById(document, form_id) orelse return null;
if (try parser.elementHTMLGetTagType(@ptrCast(form_element)) == .form) {
if (try parser.elementTag(@ptrCast(form_element)) == .form) {
return @ptrCast(form_element);
}
return null;

View File

@@ -141,7 +141,7 @@ fn collectForm(form: *parser.Form, submitter_: ?*parser.ElementHTML, page: *Page
continue;
}
const tag = try parser.elementHTMLGetTagType(@as(*parser.ElementHTML, @ptrCast(element)));
const tag = try parser.elementTag(element);
switch (tag) {
.input => {
const tpe = try parser.inputGetType(@ptrCast(element));
@@ -246,7 +246,7 @@ fn collectSelectValues(arena: Allocator, select: *parser.Select, name: []const u
fn getSubmitterName(submitter_: ?*parser.ElementHTML) !?[]const u8 {
const submitter = submitter_ orelse return null;
const tag = try parser.elementHTMLGetTagType(submitter);
const tag = try parser.elementTag(@ptrCast(submitter));
const element: *parser.Element = @ptrCast(submitter);
const name = try parser.elementGetAttribute(element, "name");