From ef4ed769603ac69d6e4c59a7c7aa03486937cac1 Mon Sep 17 00:00:00 2001 From: "Adam D. Ruppe" Date: Fri, 6 Jan 2023 21:06:38 -0500 Subject: [PATCH] stream experiment idk if it works --- dom.d | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/dom.d b/dom.d index 65fabf5..3741446 100644 --- a/dom.d +++ b/dom.d @@ -135,6 +135,10 @@ class Document : FileResource, DomParent { inout(Document) asDocument() inout { return this; } inout(Element) asElement() inout { return null; } + void processNodeWhileParsing(Element parent, Element child) { + parent.appendChild(child); + } + /++ Convenience method for web scraping. Requires [arsd.http2] to be included in the build as well as [arsd.characterencodings]. @@ -1031,13 +1035,13 @@ class Document : FileResource, DomParent { if(n.type == 3 && n.element !is null) { // special node, append if possible if(e !is null) - e.appendChild(n.element); + processNodeWhileParsing(e, n.element); else piecesBeforeRoot ~= n.element; } else if(n.type == 0) { if(!strict) considerHtmlParagraphHack(n.element); - e.appendChild(n.element); + processNodeWhileParsing(e, n.element); } else if(n.type == 1) { bool found = false; if(n.payload != tagName) { @@ -1049,7 +1053,7 @@ class Document : FileResource, DomParent { if(n.element) { if(!strict) considerHtmlParagraphHack(n.element); - e.appendChild(n.element); + processNodeWhileParsing(e, n.element); n.element = null; } @@ -1084,13 +1088,13 @@ class Document : FileResource, DomParent { } if(!found) // if not found in the tree though, it's probably just text - e.appendChild(TextNode.fromUndecodedString(this, "")); + processNodeWhileParsing(e, TextNode.fromUndecodedString(this, "")); } } else { if(n.element) { if(!strict) considerHtmlParagraphHack(n.element); - e.appendChild(n.element); + processNodeWhileParsing(e, n.element); } } @@ -8545,6 +8549,21 @@ unittest { auto document = new Document("broken"); // just ensuring it doesn't crash } +unittest { + static class StreamDocument : Document { + override void processNodeWhileParsing(Element parent, Element child) { + import std.stdio; + writeln("Processing: ", child); + } + + this() { + super(""); + } + } + + auto test = new StreamDocument(); +} + /* Copyright: Adam D. Ruppe, 2010 - 2022 License: Boost License 1.0.