Deutsch   English   Français   Italiano  
<vsk8vb$mrkk$1@solani.org>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!weretis.net!feeder8.news.weretis.net!reader5.news.weretis.net!news.solani.org!.POSTED!not-for-mail
From: Mild Shock <janburse@fastmail.fm>
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: <vsk8vb$mrkk$1@solani.org>
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