Path: ...!weretis.net!feeder8.news.weretis.net!reader5.news.weretis.net!news.solani.org!.POSTED!not-for-mail From: Mild Shock Newsgroups: comp.lang.prolog Subject: The shortest DOM machine I have ever written [Not an Aprils Fool joke] Date: Wed, 2 Apr 2025 23:07:58 +0200 Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Wed, 2 Apr 2025 21:07:56 -0000 (UTC) Injection-Info: solani.org; logging-data="749204"; mail-complaints-to="abuse@news.solani.org" User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0 SeaMonkey/2.53.20 Cancel-Lock: sha1:halSMouYYAxNHUwSbKfkxd+Cjxs= X-User-ID: eJwNy8EBwCAIA8CVjIQg46jI/iO09z83QTcoF729aQkYywmklDoDvsU562UI27sU9pdha/RSktU890b3g30MeRRU X-Mozilla-News-Host: news://news.solani.org:119 Bytes: 2297 Lines: 43 Hi, Ok, today was an interesting day. Well yesterday was also an interesting day , but I didn't want to post a DOM machine on april fools day. But yesterday I came up with: function fiddle_out(data, buf) { let i = 0; let k = buf.indexOf("<", i); while (k !== -1) { let k2 = buf.indexOf(">", k+1); if (buf.charCodeAt(k+1) === 47) { // '/' data.insertAdjacentHTML("beforeend", buf.substring(i, k)); data = data.parentElement; i = k2+1; k = buf.indexOf("<", i); } else if (buf.charCodeAt(k2-1) !== 47) { // '/' data.insertAdjacentHTML("beforeend", buf.substring(i, k2 + 1)); data = data.lastElementChild; i = k2+1; k = buf.indexOf("<", i); } else { k = buf.indexOf("<", k2+1); } } data.insertAdjacentHTML("beforeend", buf.substring(i)); return data; } And today I came up with the idea that fiddle_out has not only data as an input argument, but also as a return value. Namely the DOM cursor before and after. My streams now have general understanding of Sinks that are state machines. Every Sink can be a state machine now, and modify this data. Holy Cow! Bye