* IOhannes m zmoelnig via Pd-list <[email protected]> [2026-01-28 15:04]:
> On 1/28/26 14:36, Benjamin Wesch wrote:
> > On Wed, Jan 28, 2026 at 12:10 PM IOhannes m zmoelnig via Pd-list
> > <[email protected]> wrote:
> > > like in the attached patch.
> > 
> > this is really cool - thanks for the contributions and inspiration,
> > cyrille and iohannes!
> > with left-aligned text, i saw that the lists with additional line
> > break characters result in a leading whitespace on the left.
> 
> yes.
> that's because we are actually adding a *word* with the content "\n" - and
> the word is surrounded by whitespace.
> 
> basically, my advice is to use the [string( message with unicode points:
> - use [file] to read the raw UTF-8 bytes
> - use [unicode/utf82codenumber] to convert the UTF-8 bytes into
> unicode-points
> - prefix [string(

I tried to implement this (see attached) but [text2d] renders the actual
bytes as numbers... Something I am missing?

Thanks to all of you!
best, P
I am only a test
and this is my second line
#N canvas 248 231 595 447 12;
#X declare -lib Gem;
#X msg 169 227 close \, open /tmp/peter.txt;
#X obj 397 187 file size;
#X msg 397 127 /tmp/peter.txt;
#X obj 397 157 symbol .;
#X obj 379 233 i;
#X obj 171 53 t b b b;
#X msg 171 23 bang;
#X obj 74 339 utf82codenumber;
#X obj 38 24 declare -lib Gem;
#X obj 39 80 gemwin;
#X msg 38 55 create \, 1;
#X obj 59 166 gemhead;
#X obj 59 402 text2d;
#X obj 74 374 list prepend string;
#X obj 74 305 file;
#X connect 0 0 14 0;
#X connect 1 0 4 1;
#X connect 2 0 3 0;
#X connect 3 0 1 0;
#X connect 4 0 14 0;
#X connect 5 0 4 0;
#X connect 5 1 0 0;
#X connect 5 2 2 0;
#X connect 6 0 5 0;
#X connect 7 0 13 0;
#X connect 10 0 9 0;
#X connect 11 0 12 0;
#X connect 13 0 12 0;
#X connect 14 0 7 0;
#N canvas 174 201 649 594 10;
#X obj 102 142 inlet byte;
#X obj 216 450 outlet byte;
#N canvas 327 61 739 602 shifter 0;
#X obj 166 290 +;
#X obj 166 343 t f f;
#X msg 215 309 0;
#X obj 166 314 << 6;
#X obj 166 365 >> 6;
#X obj 134 403 f;
#X obj 134 208 t b l;
#X obj 134 169 inlet multibytelist;
#X obj 134 431 outlet bytestream;
#X text 74 60 converts a correctly-sized multi-byte list into a single
code-point \, by shifting and adding the elements appropriately.;
#X text 77 108 header-bits (e.g. bits not carrying any pay-load) MUST
be stripped off beforehand.;
#N canvas 6 61 450 300 serialize 0;
#X obj 110 85 until;
#X obj 123 168 list store;
#X obj 144 52 t b b l;
#X obj 110 110 f;
#X obj 148 111 + 1;
#X msg 167 85 0, f 2;
#X msg 110 141 get \$1 1;
#X obj 123 193 outlet;
#X obj 144 28 inlet;
#X connect 0 0 3 0;
#X connect 1 0 7 0;
#X connect 1 1 0 1;
#X connect 2 0 0 0;
#X connect 2 1 5 0;
#X connect 2 2 1 1;
#X connect 3 0 4 0;
#X connect 3 0 6 0;
#X connect 4 0 3 1;
#X connect 5 0 3 1;
#X connect 6 0 1 0;
#X connect 8 0 2 0;
#X restore 166 260 pd serialize;
#X obj 166 234 t l b;
#X connect 0 0 3 0;
#X connect 1 0 4 0;
#X connect 1 1 0 1;
#X connect 2 0 0 1;
#X connect 3 0 1 0;
#X connect 4 0 5 1;
#X connect 5 0 8 0;
#X connect 6 0 5 0;
#X connect 6 1 12 0;
#X connect 7 0 6 0;
#X connect 11 0 0 0;
#X connect 12 0 11 0;
#X connect 12 1 2 0;
#X restore 186 263 pd shifter;
#X text 175 140 UTF-8 multibyte;
#N canvas 272 61 977 874 stream2multibytelist 0;
#X text 259 228 aux;
#X text 393 231 2byte;
#X text 456 233 3byte;
#X text 526 233 4byte;
#X text 180 232 1byte;
#X obj 181 249 & 127;
#X obj 391 249 & 31;
#X obj 251 249 & 63;
#X obj 460 249 & 15;
#X obj 530 249 & 7;
#X obj 251 270 t f b;
#X msg 213 292 1;
#X obj 248 581 t l l;
#X obj 181 613 list prepend;
#X msg 423 294 2;
#X obj 181 271 t f b;
#X obj 391 270 t f b;
#X obj 460 273 t f b;
#X msg 492 297 3;
#X obj 530 271 t f b;
#X msg 562 295 4;
#X obj 248 555 list prepend;
#X obj 181 207 moses 128;
#X obj 251 207 moses 192;
#X obj 391 207 moses 224;
#X obj 460 207 moses 240;
#X obj 329 534 t b b;
#X obj 181 689 outlet multibytelist;
#X obj 181 154 inlet bytestream;
#X obj 456 683 outlet error;
#X text 58 35 converts a bytestream into atomic multibyte representations
(aka "list"s) of characters.;
#X text 63 69 header-bits (used for describing the multibyte-nature
in the incoming stream) are stripped of the lists);
#X text 521 479 errors:;
#X text 550 502 a continuation-byte at the beginning;
#X text 550 518 a continuation-byte after the last byte;
#X text 550 542 a start-byte within a sequence;
#X text 555 587 192-193: overlong encoding;
#X text 555 618 245-253: restricted by RFC-3629;
#X text 556 637 254-255: not defined;
#X obj 530 207 moses 245;
#X obj 590 238 t b;
#X text 653 243 5byte \, 6byte;
#X text 653 229 codepoint > 0x10FFFF;
#X text 653 259 undefined;
#X obj 520 634 t b;
#X obj 181 181 t f f;
#X obj 181 643 t l b;
#N canvas 234 245 992 588 multibyte 0;
#X obj 70 66 inlet byte;
#X obj 313 61 inlet newlength;
#X obj 115 543 outlet byte|bang;
#X text 246 539 byte: append byte to list;
#X text 247 556 bang: list has finished;
#X obj 527 464 outlet error;
#X obj 527 175 select 0;
#X text 577 206 unexpected byte (continuation-byte at beginning);
#X obj 70 100 pack 0 0;
#X msg 132 100 0;
#X obj 70 258 select 0;
#X text 148 263 state: 0=expect new sequence;
#X text 199 280 1=expect continuation;
#X obj 70 196 == 0;
#X text 76 214 0=newbyte;
#X text 76 227 1==contbyte;
#X text 605 312 overlong;
#X obj 115 483 f;
#X obj 70 145 swap;
#X obj 70 168 t f f;
#X obj 70 279 f;
#X obj 70 308 select 0;
#X obj 70 347 i;
#X obj 99 347 - 1;
#X obj 70 390 select 1;
#X obj 70 413 t b b;
#X msg 185 350 0;
#X obj 121 328 t f b;
#X msg 153 349 1;
#X obj 185 372 t f;
#X obj 330 383 < 1;
#X obj 330 408 select 1;
#X obj 70 121 t l b l;
#X obj 549 317 t b b;
#X obj 527 213 t b b;
#X obj 70 369 t f b f;
#X obj 116 509 t a a;
#X obj 527 422 t b b;
#X text 79 30 now this is a bit overcomplicated....;
#X connect 0 0 8 0;
#X connect 1 0 8 1;
#X connect 6 0 34 0;
#X connect 8 0 32 0;
#X connect 9 0 8 1;
#X connect 10 0 20 0;
#X connect 10 1 34 0;
#X connect 13 0 10 0;
#X connect 17 0 36 0;
#X connect 18 0 19 0;
#X connect 18 1 17 1;
#X connect 19 0 13 0;
#X connect 19 1 20 1;
#X connect 20 0 21 0;
#X connect 21 0 22 0;
#X connect 21 1 27 0;
#X connect 22 0 23 0;
#X connect 22 0 35 0;
#X connect 23 0 22 1;
#X connect 24 0 25 0;
#X connect 24 1 30 0;
#X connect 25 0 36 0;
#X connect 25 1 26 0;
#X connect 26 0 29 0;
#X connect 27 0 22 0;
#X connect 27 1 28 0;
#X connect 28 0 29 0;
#X connect 29 0 10 1;
#X connect 30 0 31 0;
#X connect 31 0 33 0;
#X connect 32 0 18 0;
#X connect 32 1 9 0;
#X connect 33 0 37 0;
#X connect 34 0 37 0;
#X connect 35 0 24 0;
#X connect 35 1 17 0;
#X connect 36 0 2 0;
#X connect 37 0 5 0;
#X connect 37 1 26 0;
#X restore 181 424 pd multibyte;
#X obj 181 450 route bang;
#X obj 262 450 t b b;
#X obj 213 335 t f;
#X text 266 407 #expectedbytes;
#X text 233 371 byte;
#X obj 181 368 t f f;
#X obj 321 207 moses 194;
#X obj 521 582 t b;
#X obj 712 141 inlet reset;
#X connect 5 0 15 0;
#X connect 6 0 16 0;
#X connect 7 0 10 0;
#X connect 8 0 17 0;
#X connect 9 0 19 0;
#X connect 10 0 53 0;
#X connect 11 0 50 0;
#X connect 12 0 13 1;
#X connect 12 1 21 1;
#X connect 13 0 46 0;
#X connect 14 0 50 0;
#X connect 15 0 53 0;
#X connect 15 1 11 0;
#X connect 16 0 53 0;
#X connect 16 1 14 0;
#X connect 17 0 53 0;
#X connect 17 1 18 0;
#X connect 18 0 50 0;
#X connect 19 0 53 0;
#X connect 19 1 20 0;
#X connect 20 0 50 0;
#X connect 21 0 12 0;
#X connect 22 0 5 0;
#X connect 22 1 23 0;
#X connect 23 0 7 0;
#X connect 23 1 54 0;
#X connect 24 0 6 0;
#X connect 24 1 25 0;
#X connect 25 0 8 0;
#X connect 25 1 39 0;
#X connect 26 0 21 1;
#X connect 26 1 13 1;
#X connect 28 0 45 0;
#X connect 39 0 9 0;
#X connect 39 1 40 0;
#X connect 40 0 44 0;
#X connect 44 0 29 0;
#X connect 45 0 22 0;
#X connect 46 0 27 0;
#X connect 46 1 26 0;
#X connect 47 0 48 0;
#X connect 47 1 49 0;
#X connect 48 0 13 0;
#X connect 48 1 21 0;
#X connect 49 0 29 0;
#X connect 49 1 26 0;
#X connect 50 0 47 1;
#X connect 53 0 47 0;
#X connect 54 0 55 0;
#X connect 54 1 24 0;
#X connect 55 0 29 0;
#X connect 56 0 26 0;
#X restore 186 241 pd stream2multibytelist;
#X text 47 43 converts a stream of UTF-8 bytes into a stream of Unicode
code numbers;
#X text 53 95 multibyte characters are not output before the last byte
has been received;
#X obj 500 306 outlet error;
#X text 161 478 if the bytestream is invalid \, a message is sent to
the output;
#X text 134 519 (c) 2009 IOhannes m zm�lnig & Maira Sala;
#N canvas 6 61 450 467 args 0;
#X obj 104 51 loadbang;
#X obj 104 101 pdcontrol;
#X msg 104 76 args 0;
#N canvas 6 61 450 300 serialize 0;
#X obj 110 85 until;
#X obj 123 168 list store;
#X obj 144 52 t b b l;
#X obj 110 110 f;
#X obj 148 111 + 1;
#X msg 167 85 0, f 2;
#X msg 110 141 get \$1 1;
#X obj 123 193 outlet;
#X obj 144 28 inlet;
#X connect 0 0 3 0;
#X connect 1 0 7 0;
#X connect 1 1 0 1;
#X connect 2 0 0 0;
#X connect 2 1 5 0;
#X connect 2 2 1 1;
#X connect 3 0 4 0;
#X connect 3 0 6 0;
#X connect 4 0 3 1;
#X connect 5 0 3 1;
#X connect 6 0 1 0;
#X connect 8 0 2 0;
#X restore 136 162 pd serialize;
#X obj 136 190 select -l;
#X msg 136 215 1;
#X obj 118 245 i;
#X obj 104 132 t b a;
#X obj 118 270 s \$0-mode:list;
#X connect 0 0 2 0;
#X connect 1 0 7 0;
#X connect 2 0 1 0;
#X connect 3 0 4 0;
#X connect 4 0 5 0;
#X connect 5 0 6 1;
#X connect 6 0 8 0;
#X connect 7 0 6 0;
#X connect 7 1 3 0;
#X restore 488 105 pd args;
#X obj 102 165 route bang;
#N canvas 6 61 450 300 serialize 0;
#X obj 110 85 until;
#X obj 123 168 list store;
#X obj 144 52 t b b l;
#X obj 110 110 f;
#X obj 148 111 + 1;
#X msg 167 85 0, f 2;
#X msg 110 141 get \$1 1;
#X obj 123 193 outlet;
#X obj 144 28 inlet;
#X connect 0 0 3 0;
#X connect 1 0 7 0;
#X connect 1 1 0 1;
#X connect 2 0 0 0;
#X connect 2 1 5 0;
#X connect 2 2 1 1;
#X connect 3 0 4 0;
#X connect 3 0 6 0;
#X connect 4 0 3 1;
#X connect 5 0 3 1;
#X connect 6 0 1 0;
#X connect 8 0 2 0;
#X restore 186 217 pd serialize;
#X obj 159 317 list store;
#X msg 186 286 append \$1;
#X obj 159 191 t b a b;
#X obj 216 430 t l;
#X obj 159 351 route bang;
#X text 304 452 unicode code number(s);
#X obj 102 188 t b b;
#X connect 0 0 11 0;
#X connect 2 0 14 0;
#X connect 4 0 2 0;
#X connect 4 1 7 0;
#X connect 11 0 19 0;
#X connect 11 1 15 0;
#X connect 12 0 4 0;
#X connect 13 0 17 0;
#X connect 14 0 13 0;
#X connect 15 0 13 0;
#X connect 15 1 12 0;
#X connect 15 2 13 1;
#X connect 16 0 1 0;
#X connect 17 1 16 0;
#X connect 19 0 13 1;
#X connect 19 1 4 1;
---
[email protected] - the Pure Data mailinglist
https://lists.iem.at/hyperkitty/list/[email protected]/message/67RHGQ4336GUNTFFZ5NPU453FKRTCVOZ/

To unsubscribe send an email to [email protected] mailing list
UNSUBSCRIBE and account-management -> https://lists.iem.at/

Reply via email to