From b8aa291e1e5abf7b4260bff8b9ae10621d84dea4 Mon Sep 17 00:00:00 2001 From: Francis Bouvier Date: Mon, 9 Oct 2023 17:31:42 +0200 Subject: [PATCH] Iterfaces generation refacto Signed-off-by: Francis Bouvier --- src/dom.zig | 36 ++++++------------------------------ src/dom/character_data.zig | 15 +++++++-------- src/dom/node.zig | 31 +++++++++++++++++++++---------- src/html/elements.zig | 23 ++++++++++++----------- 4 files changed, 46 insertions(+), 59 deletions(-) diff --git a/src/dom.zig b/src/dom.zig index 7ded63ec..08f4c3f5 100644 --- a/src/dom.zig +++ b/src/dom.zig @@ -2,38 +2,14 @@ const generate = @import("generate.zig"); const Console = @import("jsruntime").Console; -// DOM -const EventTarget = @import("dom/event_target.zig").EventTarget; -const N = @import("dom/node.zig"); -const CharacterData = @import("dom/character_data.zig").CharacterData; -const Comment = @import("dom/comment.zig").Comment; -const Text = @import("dom/text.zig").Text; -const Element = @import("dom/element.zig").Element; -const Document = @import("dom/document.zig").Document; +const DOM = @import("dom/dom.zig"); +const HTML = @import("html/html.zig"); -// HTML pub const HTMLDocument = @import("html/document.zig").HTMLDocument; -const HTMLElem = @import("html/elements.zig"); - -const E = @import("html/elements.zig"); // Interfaces -const interfaces = .{ +pub const Interfaces = generate.Tuple(.{ Console, - - // DOM - EventTarget, - N.Node, - N.Types, - CharacterData, - Comment, - Element, - Document, - - // HTML - HTMLDocument, - HTMLElem.HTMLElement, - HTMLElem.HTMLMediaElement, - HTMLElem.Types, -}; -pub const Interfaces = generate.Tuple(interfaces); + DOM.Interfaces, + HTML.Interfaces, +}); diff --git a/src/dom/character_data.zig b/src/dom/character_data.zig index 1346a2d4..a23dbf75 100644 --- a/src/dom/character_data.zig +++ b/src/dom/character_data.zig @@ -12,6 +12,13 @@ const Comment = @import("comment.zig").Comment; const Text = @import("text.zig").Text; const HTMLElem = @import("../html/elements.zig"); +// CharacterData interfaces +pub const Interfaces = generate.Tuple(.{ + Comment, + Text, +}); + +// CharacterData implementation pub const CharacterData = struct { pub const Self = parser.CharacterData; pub const prototype = *Node; @@ -76,14 +83,6 @@ pub const CharacterData = struct { } }; -pub const Types = generate.Tuple(.{ - Comment, - Text, -}); -const Generated = generate.Union.compile(Types); -pub const Union = Generated._union; -pub const Tags = Generated._enum; - // Tests // ----- diff --git a/src/dom/node.zig b/src/dom/node.zig index 15a22c72..df34886e 100644 --- a/src/dom/node.zig +++ b/src/dom/node.zig @@ -8,10 +8,30 @@ const generate = @import("../generate.zig"); const parser = @import("../netsurf.zig"); const EventTarget = @import("event_target.zig").EventTarget; + +// DOM const CData = @import("character_data.zig"); -const HTMLDocument = @import("../html/document.zig").HTMLDocument; +const Element = @import("element.zig").Element; +const Document = @import("document.zig").Document; + +// HTML +const HTML = @import("../html/html.zig"); const HTMLElem = @import("../html/elements.zig"); +// Node interfaces +pub const Interfaces = generate.Tuple(.{ + CData.CharacterData, + CData.Interfaces, + Element, + Document, + + HTML.Interfaces, +}); +const Generated = generate.Union.compile(Interfaces); +pub const Union = Generated._union; +pub const Tags = Generated._enum; + +// Node implementation pub const Node = struct { pub const Self = parser.Node; pub const prototype = *EventTarget; @@ -207,15 +227,6 @@ pub const Node = struct { } }; -pub const Types = generate.Tuple(.{ - CData.Types, - HTMLElem.Types, - HTMLDocument, -}); -const Generated = generate.Union.compile(Types); -pub const Union = Generated._union; -pub const Tags = Generated._enum; - // Tests // ----- diff --git a/src/html/elements.zig b/src/html/elements.zig index c3c0953a..17df069a 100644 --- a/src/html/elements.zig +++ b/src/html/elements.zig @@ -3,16 +3,8 @@ const generate = @import("../generate.zig"); const Element = @import("../dom/element.zig").Element; -// Abstract class -// -------------- - -pub const HTMLElement = struct { - pub const Self = parser.ElementHTML; - pub const prototype = *Element; - pub const mem_guarantied = true; -}; - -pub const Types = .{ +// HTMLElement interfaces +pub const Interfaces = .{ HTMLUnknownElement, HTMLAnchorElement, HTMLAreaElement, @@ -74,10 +66,19 @@ pub const Types = .{ HTMLUListElement, HTMLVideoElement, }; -const Generated = generate.Union.compile(Types); +const Generated = generate.Union.compile(Interfaces); pub const Union = Generated._union; pub const Tags = Generated._enum; +// Abstract class +// -------------- + +pub const HTMLElement = struct { + pub const Self = parser.ElementHTML; + pub const prototype = *Element; + pub const mem_guarantied = true; +}; + // Deprecated HTMLElements in Chrome (2023/03/15) // HTMLContentelement // HTMLShadowElement