<html><head></head><body><div style="font-family: Verdana;font-size: 12.0px;"><div style="font-family: Verdana;font-size: 12.0px;">
<div>Question: How do you copy text preserving the styling?</div>

<div>For example, you have the following text (in these examples I use ^ as escape character and visible characters instead of the proposed tagging characters.)</div>

<div> </div>

<div>This is a ^[31mred Text^[0m ECMA-48 styling.</div>

<div> </div>

<div>You now want to copy the word "text" and insert it to another document. The styling information gets lost.</div>

<div>Then you copy the words "a ^[31mtext" and your whole document after these words becomes red until the text color is changed again. This is very confusing and unintuitive. ECMA-48 styling is stack-based and stateful, which makes it hard to select and copy text to another location.</div>

<div> </div>

<div>Another question: How are you supposed to compare ECMA-48 styled texts? The strings</div>

<div>"This is a ^[31mred^[0m Text" and "This is a ^[31mr^[0m^[31me^[0m^[31md^[0m" text look and behave exactly the same, but are technically different.</div>

<div> </div>

<div>This opens up a wide range of attack vectors, e.g. on source code, file names, URIs, legal documents etc. For example, a user could create two different versions of identically looking documents, which result in the same hash to spoof digital signatures. It also allows watermarking texts by inserting a detectable pattern to prevent copyright violations.</div>

<div> </div>

<div>Regards,</div>

<div> </div>

<div>Marius Spix</div>

<div> </div>

<div> 
<div> 
<div style="margin: 10.0px 5.0px 5.0px 10.0px;padding: 10.0px 0 10.0px 10.0px;border-left: 2.0px solid rgb(195,217,229);">
<div style="margin: 0 0 10.0px 0;"><b>Gesendet:</b> Donnerstag, 11. Januar 2024 um 11:32 Uhr<br/>
<b>Von:</b> "Giacomo Catenazzi via Unicode" <unicode@corp.unicode.org><br/>
<b>An:</b> "Kent Karlsson" <kent.b.karlsson@bahnhof.se><br/>
<b>Cc:</b> unicode@corp.unicode.org<br/>
<b>Betreff:</b> Re: Ecma-48 proposed styling controls update updated & math expression representation proposal update</div>

<div>On 9 Jan 2024 23:12, Kent Karlsson wrote:<br/>
(...)<br/>
<br/>
Let's skip a lot of *details*.<br/>
<br/>
>><br/>
>> But how do you input the formatting?<br/>
><br/>
> For output to a terminal emulator from a program, the source program would have string constants for control sequences or parts thereof, just like done now.<br/>
><br/>
> For a styling enhanced plain text editor one should be able to select a text portion, and then use a menu or keyboard shortcut to select a styling, as it is done in just about any modern text editor. There is no need for an end user to see the styling codes. Using something like HTML syntax would have terrible consequences in that it is hard to tell content from controls. For HTML for instance one MUST use &lt; for <, so that it is not taken as start of a “tag”. That is absolutely nothing you want to see for a terminal, nor for a styling enhanced plain text editor.<br/>
<br/>
I dislike this part, and I think it is the main problem.<br/>
<br/>
Note: I'm actively fighting the use of "string constants" for CSI, in<br/>
programs. Note: maybe we have a different interpretation.<br/>
<br/>
For emulators I want that they uses libraries or at least they check<br/>
terminal capabilities and they issues formatting codes (CSI, from<br/>
ECMA-48 or common usage which are de-facto standards).<br/>
<br/>
Every terminal emulator is different, and users want to use it also<br/>
differently (so changing the settings). A programmer should not make a<br/>
choice for me.<br/>
<br/>
Do a program want to print on console? I'm ok that it may write some<br/>
warnings in colours (but often they fails: they assume a background<br/>
colour (and please: it is my choice!)), if I want to write to a log<br/>
file, no CSI codes.<br/>
<br/>
Hard coded formatting code are bad (and BTW html strongly discourage<br/>
them, for reason: we learn from past).<br/>
<br/>
And now I stop with the first rant.<br/>
<br/>
<br/>
HTML (and LaTeX) can format text according the medium, and HTML is<br/>
responsive. I find no good way to do it with ECMA-48 style. We can ask<br/>
the size of the screen, or get a signal when it changes, but there is<br/>
not real support on emulators: rendering is performed by programs (e.g.<br/>
using dialog, or directly with curses library). Could you find a good<br/>
way to display in a sensible way tables with different terminal widths<br/>
(starting from 40 or less columns?). It is not code we want in most (or<br/>
any) terminal emulator.<br/>
<br/>
But also in an editor...I feel that programmers must transform it in<br/>
html/css, do the rendering with existing libraries (which they are<br/>
huge), and render it as text + CSI.<br/>
<br/>
<br/>
What problem are you solving? Real case problem. The more I look the<br/>
proposal, the more I think other tools are much easier and simpler.<br/>
<br/>
Note: HTML with years solved many problems (also considering colour<br/>
blind people, printing, etc.). Note: HTML as technology, not what we got<br/>
from web (but so, possibly you should implement your proposal in that<br/>
way: you just convert CSI to html (DOM), and lets' display it): so we<br/>
have a real case to look. (and there are already libraries that do it,<br/>
but without your extension proposal).<br/>
<br/>
Your proposal is in any case doesn't maintain plain text: CSI sequences<br/>
have punctuation, letters and numbers. So there is no much differences<br/>
of text in elements and tags in HTML: a program/person which want the<br/>
plain text, e.g. for copy/past, must do a lot of work removing<br/>
formatting. In modern html is easy.<br/>
<br/>
<br/>
I find it would have been nice idea if we were in 1990s (and so an<br/>
alternative of HTML), but now we have good designs, so do not let's to<br/>
duplicate the huge work HTML did in past). For a practical point (if I<br/>
need to implement it): just a filter to a DOM engine (which at the end<br/>
would be a subset of existing HTML engines) and a rendering (which trend<br/>
go in direction of HTML like formatting API for different graphical<br/>
environment).<br/>
<br/>
<br/>
And in any case, you should start at a higher layer: show programs, and<br/>
if it is useful emulators and editors will adopt it. Or like tmux (so a<br/>
sort of filter, and IIRC in past some *extensions*, e.g. the UTF-8 where<br/>
done first as filter between user and terminal emulator.<br/>
<br/>
cate</div>
</div>
</div>
</div>
</div></div></body></html>