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)) { switch (try parser.nodeType(node)) {
.element => { .element => {
// open the tag // 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) { if (tag_type == .script and opts.exclude_scripts) {
return; 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 // area, base, br, col, embed, hr, img, input, link, meta, source, track, wbr
// https://html.spec.whatwg.org/#void-elements // https://html.spec.whatwg.org/#void-elements
fn isVoid(elem: *parser.Element) !bool { 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) { return switch (tag) {
.area, .base, .br, .col, .embed, .hr, .img, .input, .link => true, .area, .base, .br, .col, .embed, .hr, .img, .input, .link => true,
.meta, .source, .track, .wbr => true, .meta, .source, .track, .wbr => true,

View File

@@ -340,7 +340,7 @@ pub const Tag = enum(u8) {
} }
const testing = @import("../testing.zig"); 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);
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)); return @as(*Document, @ptrCast(node));
} }
// Combination of nodeToElement + elementHTMLGetTagType // Combination of nodeToElement + elementTag
pub fn nodeHTMLGetTagType(node: *Node) !?Tag { pub fn nodeHTMLGetTagType(node: *Node) !?Tag {
if (try nodeType(node) != .element) { if (try nodeType(node) != .element) {
return null; return null;
} }
const html_element: *ElementHTML = @ptrCast(node);
return try elementHTMLGetTagType(html_element); return try elementTag(@ptrCast(node));
} }
// CharacterData // CharacterData
@@ -1595,6 +1595,11 @@ fn elementVtable(elem: *Element) c.dom_element_vtable {
return getVtable(c.dom_element_vtable, Element, elem); 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 { pub fn elementGetTagName(elem: *Element) !?[]const u8 {
var s: ?*String = undefined; var s: ?*String = undefined;
const err = elementVtable(elem).dom_element_get_tag_name.?(elem, &s); 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); 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 // HTMLScriptElement
// scriptToElt is an helper to convert an script to an element. // 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 current = next.?;
const e = parser.nodeToElement(current); const e = parser.nodeToElement(current);
const tag = try parser.elementHTMLGetTagType(@as(*parser.ElementHTML, @ptrCast(e))); const tag = try parser.elementTag(e);
if (tag != .script) { if (tag != .script) {
// ignore non-js script. // ignore non-js script.
@@ -809,7 +809,7 @@ pub const Page = struct {
if (try parser.elementGetAttribute(element, "form")) |form_id| { if (try parser.elementGetAttribute(element, "form")) |form_id| {
const document = parser.documentHTMLToDocument(self.window.document); const document = parser.documentHTMLToDocument(self.window.document);
const form_element = try parser.documentGetElementById(document, form_id) orelse return null; 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 @ptrCast(form_element);
} }
return null; return null;

View File

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