<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:"MS Gothic";
panose-1:2 11 6 9 7 2 5 8 2 4;}
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:Aptos;}
@font-face
{font-family:Consolas;
panose-1:2 11 6 9 2 2 4 3 2 4;}
@font-face
{font-family:"\@MS Gothic";
panose-1:2 11 6 9 7 2 5 8 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
font-size:12.0pt;
font-family:"Aptos",sans-serif;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
pre
{mso-style-priority:99;
mso-style-link:"HTML Preformatted Char";
margin:0in;
font-size:10.0pt;
font-family:"Courier New";}
span.HTMLPreformattedChar
{mso-style-name:"HTML Preformatted Char";
mso-style-priority:99;
mso-style-link:"HTML Preformatted";
font-family:Consolas;}
span.EmailStyle21
{mso-style-type:personal-reply;
font-family:"Aptos",sans-serif;
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
font-size:10.0pt;
mso-ligatures:none;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal">> We're being presented with actual use-cases<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Actually, I’d say we’re being presented with incomplete use cases.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Peter<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> Unicode <unicode-bounces@corp.unicode.org>
<b>On Behalf Of </b>Mark E. Shoulson via Unicode<br>
<b>Sent:</b> Thursday, April 10, 2025 4:59 PM<br>
<b>To:</b> unicode@corp.unicode.org<br>
<b>Subject:</b> Re: Proposing new arrow characters with Bidi_Mirrored=Yes<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p>These really are two separate issues, and maybe it were best not to conflate or confuse them.<o:p></o:p></p>
<p>The "proposed solution", as I see it, is there is some character that attaches to the previous character (or probably the previous base character or grapheme cluster, if it comes to that), and flags it as subject to BiDi mirroring. I imagine this wouldn't
necessarily be available for EVERY SINGLE CHARACTER in Unicode; we don't need to make sure it's possible to write a mirror-reversed
<span style="font-family:"MS Gothic"">ネ</span> or @ or whatever (I mean, unless we do need those), but presumably some selected list of characters, mainly arrows and things like directional math operators and possibly some directional emoji. This might be
a good idea? I don't know all the possible ramifications. And I'm not even sure that considering it like a variation selector would be wrong. If it isn't honored, what's the damage? Possibly huge, since assigning
<span lang="HE" dir="RTL" style="font-family:"Times New Roman",serif">אחת←שתיים</span><span dir="LTR"></span><span dir="LTR"></span><span dir="LTR"></span><span dir="LTR"></span> is drastically different from
<span lang="HE" dir="RTL" style="font-family:"Times New Roman",serif">אחת→שתיים</span><span dir="LTR"></span><span dir="LTR"></span><span dir="LTR"></span><span dir="LTR"></span> (and
<span lang="HE" dir="RTL" style="font-family:"Times New Roman",serif">אחת</span><span dir="LTR"></span><span dir="LTR"></span><span dir="LTR"></span><span dir="LTR"></span>, not
<span lang="HE" dir="RTL" style="font-family:"Times New Roman",serif">אחד</span><span dir="LTR"></span><span dir="LTR"></span><span dir="LTR"></span><span dir="LTR"></span>, to at least be consistent, right?) but maybe that's acceptable anyway, if the author
understands that going in.<o:p></o:p></p>
<p>I'm hearing a lot of knee-jerk opposition to this whole notion, and I don't think that's warranted. We're being presented with actual use-cases and why this would be helpful. Still "it would be nice if," but things that are nice enough graduate beyond
that.<o:p></o:p></p>
<p>"Characters that look the same but act different are bad" is a point... but then "(" and ")" look the same (when one is mirrored), so we're already playing that game; that's what BiDi *does*. The question is, is this a good thing that it's doing and should
it be doing it to more things? Now, "()" are *always* BiDi-sensitive, and we're talking about making it possible for a character to be only sometimes BiDi-sensitive... but we already have that, too, since we can flip directionality with embeddings and isolates.<o:p></o:p></p>
<p>To be sure, there are legitimate objections being brought up too. Characters that look the same and act different really *are* bad news, and that bad news should be considered also. And other objections also make sense. It just feels like there's some
reflex opposition to any change.<o:p></o:p></p>
<p>The other issue, the thing about fonts being able to ligature -> and <- into → and ←, is, I think, mostly kind of confusing things. It's a thing fonts can do, and it's cool when they can do it, but it doesn't answer the underlying question either way.
It does point out that BiDi already does handle the ASCII-art arrows -> and <- because BiDi flips the order of the characters and reverses the point on the angle. It's an example of how this is *used* and *works* for developers and for internationalization,
and why being able to make an arrow do the same thing would work for them too.<o:p></o:p></p>
<p>~mark<o:p></o:p></p>
<div>
<p class="MsoNormal">On 4/10/25 6:04 PM, Nitai Sasson via Unicode wrote: <o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<pre><o:p> </o:p></pre>
<pre><o:p> </o:p></pre>
<pre>On Friday, 11 April 2025 at 00:27, Doug Ewell via Unicode <a href="mailto:unicode@corp.unicode.org"><unicode@corp.unicode.org></a> wrote:<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<pre>OK, so just to be clear, you’re talking about a mechanism where the user enters:<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>U+05D0 HEBREW LETTER ALEF<o:p></o:p></pre>
<pre>U+0020 SPACE<o:p></o:p></pre>
<pre>U+002D HYPHEN-MINUS<o:p></o:p></pre>
<pre>U+002D HYPHEN-MINUS<o:p></o:p></pre>
<pre>U+003E GREATER-THAN SIGN<o:p></o:p></pre>
<pre>U+05D1 HEBREW LETTER BET<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>(where the entire sequence --> is mirrored to look like <-- when surrounded by strong RTL characters) and have it replaced by:<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre><o:p> </o:p></pre>
<pre>U+2192 RIGHTWARDS ARROW<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>except that the arrow is visually mirrored depending on the directionality of the surrounding characters.<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>From my casual reading, it feels like two separate topics are being discussed — glyph mirroring, and replacement of Basic Latin fallback input with true arrow characters — and I want to make sure I understand the use case.<o:p></o:p></pre>
</blockquote>
<pre><o:p> </o:p></pre>
<pre>That is 100% correct. Including the bit about these being two topics.<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>The replacement of Basic Latin fallback input with true arrow characters is an example use case of the proposed solution.<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>Here is another example use case: a string template "%s → %s" where the input strings are of unknown directionality, and the intention is for the arrow to point "forwards" from the first argument to the second argument. For the sake of argument, both strings are guaranteed to have the same directionality throughout.<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>Glyph mirroring is the solution to these example use cases, and already works for other characters.<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>For example, the template: "%s <span style="font-family:"Cambria Math",serif">⊸</span> %s" will always have the line next to the first string and the dot next to the second string. The operator character is U+22B8 MULTIMAP <a href="https://util.unicode.org/UnicodeJsps/character.jsp?a=22B8">https://util.unicode.org/UnicodeJsps/character.jsp?a=22B8</a><o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>Demonstration:<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>one <span style="font-family:"Cambria Math",serif">⊸</span> two<o:p></o:p></pre>
<pre><span lang="HE" dir="RTL">אחד </span><span lang="HE" dir="RTL" style="font-family:"Cambria Math",serif">⊸</span><span lang="HE" dir="RTL"> שתיים</span><o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>Results may depend on your system, but on my screen the operator points in opposite directions between these two lines.<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>The discussion is about making this behavior available for arrow characters.<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
</blockquote>
</div>
</body>
</html>