<div dir="ltr">As a more concrete example of why human-writable-computer-readable files must keep using<div>a reduced subset of similar looking characters can be seen in the discussion below, that took place</div><div>along ~50 e-mail messages in a mailing list to discuss improvements to the Python language. </div><div><br><a href="https://mail.python.org/archives/list/python-ideas@python.org/thread/ILMNJ46EAL4ENYK7LLDLGIMYQKZAMMWU/#ILMNJ46EAL4ENYK7LLDLGIMYQKZAMMWU">https://mail.python.org/archives/list/python-ideas@python.org/thread/ILMNJ46EAL4ENYK7LLDLGIMYQKZAMMWU/#ILMNJ46EAL4ENYK7LLDLGIMYQKZAMMWU</a><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, 16 Sep 2020 at 12:11, Joao S. O. Bueno <<a href="mailto:gwidion@gmail.com">gwidion@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><span style="font-family:monospace"><span style="color:rgb(0,0,0)">Of course they are different things - but when you create characters to use in computers with</span></span><div><span style="font-family:monospace"><span style="color:rgb(0,0,0)">a 7 bit restriction, back in the 60-70's, they had to choose to overlap things.<br><br>Nowadays, in a "pretty text" context, it makes sense that the tools automatically transform</span></span></div><div><span style="font-family:monospace"><span style="color:rgb(0,0,0)">the symbols to the one that is semantically more correct - everyon is familiar with</span></span></div><div><span style="font-family:monospace"><span style="color:rgb(0,0,0)">Microsoft Word and others changing single quotes to curly quotes, with open/close context; </span></span></div><div><span style="font-family:monospace"><span style="color:rgb(0,0,0)"><br></span></span></div><div><span style="font-family:monospace"><span style="color:rgb(0,0,0)">But when one talks of a file format that is meant to be possibly typed by a human and read by </span></span></div><div><span style="font-family:monospace"><span style="color:rgb(0,0,0)">a computer, like xml, and others, the extra "translation layer", and the physical limitation</span></span></div><div><span style="font-family:monospace"><span style="color:rgb(0,0,0)">of symbols in a keyboard makes it not worth to use what would be a "correct" character</span></span></div><div><span style="font-family:monospace"><span style="color:rgb(0,0,0)">in every language. Thus, "less-than" doubles as "Left angle bracket" in all computer-scripts</span></span></div><div><span style="font-family:monospace"><span style="color:rgb(0,0,0)">or languages that use it in that way.<br>(I am quite sure the above paragraph will sound childish for people on this list, and I'd love</span></span></div><div><span style="font-family:monospace"><span style="color:rgb(0,0,0)">to see a more formal rewrite of the same idea)<br><br>But the unicode standard surely have the characters for every use <br>(I produced the following output using my own tool, sorry if</span></span></div><div><span style="font-family:monospace"><span style="color:rgb(0,0,0)">it is not the most readable, but I think it conveys enough</span></span></div><div><span style="font-family:monospace"><span style="color:rgb(0,0,0)">information to understand the case). <br><br><br>Character(code=0x3008, value='〈', name='LEFT ANGLE BRACKET', category='Ps', width='W'),
</span><br> Character(code=0x300A, value='《', name='LEFT DOUBLE ANGLE BRACKET', category='Ps', width='W'),</span><span style="font-family:monospace"><br> Character(code=0x2991, value='⦑', name='LEFT ANGLE BRACKET WITH DOT', category='Ps', width='N'),<br></span><div><span style="font-family:monospace"><span style="color:rgb(0,0,0)"> Character(code=0x27E8, value='⟨', name='MATHEMATICAL LEFT ANGLE BRACKET', category='Ps', width='Na'),
</span><br> Character(code=0x27EA, value='⟪', name='MATHEMATICAL LEFT DOUBLE ANGLE BRACKET', category='Ps', width='Na'),<br></span></div><div><span style="font-family:monospace"><span style="color:rgb(0,0,0)"> Character(code=0x276C, value='❬', name='MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT', category='Ps', width='N'),
</span><br> Character(code=0x2770, value='❰', name='HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT', category='Ps', width='N'),<br>
</span><span style="font-family:monospace"><span style="color:rgb(0,0,0)"> Character(code=0xFE3D, value='︽', name='PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET', category='Ps', wid</span><br>th='W'), </span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">And then: <br> Character(code=0xFE3F, value='︿', name='PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET', category='Ps', width='W')<br></span></div><div><span style="font-family:monospace"><span style="color:rgb(0,0,0)">Character(code=0x003C, value='<', name='LESS-THAN SIGN', category='Sm', width='Na'),
</span><br> Character(code=0x2264, value='≤', name='LESS-THAN OR EQUAL TO', category='Sm', width='A'),
<br> Character(code=0x2266, value='≦', name='LESS-THAN OVER EQUAL TO', category='Sm', width='A'),
<br> Character(code=0x2268, value='≨', name='LESS-THAN BUT NOT EQUAL TO', category='Sm', width='N'),
<br> Character(code=0x226A, value='≪', name='MUCH LESS-THAN', category='Sm', width='A'),
<br> Character(code=0x226E, value='≮', name='NOT LESS-THAN', category='Sm', width='A'),
<br> Character(code=0x2270, value='≰', name='NEITHER LESS-THAN NOR EQUAL TO', category='Sm', width='N'),
<br> Character(code=0x2272, value='≲', name='LESS-THAN OR EQUIVALENT TO', category='Sm', width='N'),
<br> Character(code=0x2274, value='≴', name='NEITHER LESS-THAN NOR EQUIVALENT TO', category='Sm', width='N'),
<br> Character(code=0x2276, value='≶', name='LESS-THAN OR GREATER-THAN', category='Sm', width='N'),
<br> Character(code=0x2277, value='≷', name='GREATER-THAN OR LESS-THAN', category='Sm', width='N'),
<br> Character(code=0x2278, value='≸', name='NEITHER LESS-THAN NOR GREATER-THAN', category='Sm', width='N'),
<br> Character(code=0x2279, value='≹', name='NEITHER GREATER-THAN NOR LESS-THAN', category='Sm', width='N'),
<br> Character(code=0x22D6, value='⋖', name='LESS-THAN WITH DOT', category='Sm', width='N'),
<br> Character(code=0x22D8, value='⋘', name='VERY MUCH LESS-THAN', category='Sm', width='N'),
<br> Character(code=0x22DA, value='⋚', name='LESS-THAN EQUAL TO OR GREATER-THAN', category='Sm', width='N'),
<br> Character(code=0x22DB, value='⋛', name='GREATER-THAN EQUAL TO OR LESS-THAN', category='Sm', width='N'),
<br> Character(code=0x22DC, value='⋜', name='EQUAL TO OR LESS-THAN', category='Sm', width='N'),
<br> Character(code=0x22E6, value='⋦', name='LESS-THAN BUT NOT EQUIVALENT TO', category='Sm', width='N'),
<br> Character(code=0x2343, value='⍃', name='APL FUNCTIONAL SYMBOL QUAD LESS-THAN', category='So', width='N'),
<br> Character(code=0x2976, value='⥶', name='LESS-THAN ABOVE LEFTWARDS ARROW', category='Sm', width='N'),
<br> Character(code=0x2977, value='⥷', name='LEFTWARDS ARROW THROUGH LESS-THAN', category='Sm', width='N'),
<br> Character(code=0x2993, value='⦓', name='LEFT ARC LESS-THAN BRACKET', category='Ps', width='N'),
<br> Character(code=0x2996, value='⦖', name='DOUBLE RIGHT ARC LESS-THAN BRACKET', category='Pe', width='N'),
<br> Character(code=0x29C0, value='⧀', name='CIRCLED LESS-THAN', category='Sm', width='N'),
<br> Character(code=0x2A79, value='⩹', name='LESS-THAN WITH CIRCLE INSIDE', category='Sm', width='N'),
<br> Character(code=0x2A7B, value='⩻', name='LESS-THAN WITH QUESTION MARK ABOVE', category='Sm', width='N'),
<br> Character(code=0x2A7D, value='⩽', name='LESS-THAN OR SLANTED EQUAL TO', category='Sm', width='N'),
<br> Character(code=0x2A7F, value='⩿', name='LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE', category='Sm', width='N'),
<br> Character(code=0x2A81, value='⪁', name='LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE', category='Sm', width='N'),
<br> Character(code=0x2A83, value='⪃', name='LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT', category='Sm', width='N')<br>,
<br> Character(code=0x2A85, value='⪅', name='LESS-THAN OR APPROXIMATE', category='Sm', width='N'),
<br> Character(code=0x2A87, value='⪇', name='LESS-THAN AND SINGLE-LINE NOT EQUAL TO', category='Sm', width='N'),
<br> Character(code=0x2A89, value='⪉', name='LESS-THAN AND NOT APPROXIMATE', category='Sm', width='N'),
<br> Character(code=0x2A8B, value='⪋', name='LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN', category='Sm', width='N<br>'),
<br> Character(code=0x2A8C, value='⪌', name='GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN', category='Sm', width='N<br>'),
<br> Character(code=0x2A8D, value='⪍', name='LESS-THAN ABOVE SIMILAR OR EQUAL', category='Sm', width='N'),
<br> Character(code=0x2A8F, value='⪏', name='LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN', category='Sm', width='N'),
<br> Character(code=0x2A90, value='⪐', name='GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN', category='Sm', width='N'),
<br> Character(code=0x2A91, value='⪑', name='LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL', category='Sm', width='N<br>'),
<br> Character(code=0x2A92, value='⪒', name='GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL', category='Sm', width='N<br>'),
<br> Character(code=0x2A93, value='⪓', name='LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL', categor<br>y='Sm', width='N'),
<br> Character(code=0x2A94, value='⪔', name='GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL', categor<br>y='Sm', width='N'),
<br> Character(code=0x2A95, value='⪕', name='SLANTED EQUAL TO OR LESS-THAN', category='Sm', width='N'),
<br> Character(code=0x2A97, value='⪗', name='SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE', category='Sm', width='N'),
<br> Character(code=0x2A99, value='⪙', name='DOUBLE-LINE EQUAL TO OR LESS-THAN', category='Sm', width='N'),
<br> Character(code=0x2A9B, value='⪛', name='DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN', category='Sm', width='N'),
<br> Character(code=0x2A9D, value='⪝', name='SIMILAR OR LESS-THAN', category='Sm', width='N'),
<br> Character(code=0x2A9F, value='⪟', name='SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN', category='Sm', width='N'),
<br> Character(code=0x2AA1, value='⪡', name='DOUBLE NESTED LESS-THAN', category='Sm', width='N'),
<br> Character(code=0x2AA3, value='⪣', name='DOUBLE NESTED LESS-THAN WITH UNDERBAR', category='Sm', width='N'),
<br> Character(code=0x2AA4, value='⪤', name='GREATER-THAN OVERLAPPING LESS-THAN', category='Sm', width='N'),
<br> Character(code=0x2AA5, value='⪥', name='GREATER-THAN BESIDE LESS-THAN', category='Sm', width='N'),
<br> Character(code=0x2AA6, value='⪦', name='LESS-THAN CLOSED BY CURVE', category='Sm', width='N'),
<br> Character(code=0x2AA8, value='⪨', name='LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL', category='Sm', width='N'),
<br> Character(code=0x2AF7, value='⫷', name='TRIPLE NESTED LESS-THAN', category='Sm', width='N'),
<br> Character(code=0x2AF9, value='⫹', name='DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO', category='Sm', width='N'),
<br> Character(code=0xFE64, value='﹤', name='SMALL LESS-THAN SIGN', category='Sm', width='W'),
<br> Character(code=0xFF1C, value='<', name='FULLWIDTH LESS-THAN SIGN', category='Sm', width='F'),
<br> Character(code=0xE003C, value='', name='TAG LESS-THAN SIGN', category='Cf', width='N')<br></span></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, 16 Sep 2020 at 10:34, Andrea Giammarchi via Unicode <<a href="mailto:unicode@unicode.org" target="_blank">unicode@unicode.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>What your right eye sees can't compete with what the outer world actually is 😂</div><div><br></div><div>(emoji with no less-than on purpose)<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Sep 16, 2020 at 3:22 PM Shriramana Sharma <<a href="mailto:samjnaa@gmail.com" target="_blank">samjnaa@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="auto">There's a less than symbol in that 😉 as well.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, 16 Sep, 2020, 18:07 Andrea Giammarchi, <<a href="mailto:andrea.giammarchi@gmail.com" target="_blank">andrea.giammarchi@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>easy to visualize too, same for me too ... it's actually semantic, if you don't think it's a "v" but an equal = that rotates axes to indicate 0 < 1, 1 = 1, 2 > 1 😉</div><div><br></div><div>also, what's the meaning of winking? (kidding)</div><div><br></div><div>best regards<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Sep 16, 2020 at 2:19 PM Shriramana Sharma via Unicode <<a href="mailto:unicode@unicode.org" rel="noreferrer" target="_blank">unicode@unicode.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">When I was a child and first taught < and > at school, I figured that<br>
they were derived from the equals sign =, except that the bigger<br>
number has the bigger separation between the lines and the smaller<br>
number has the smaller separation becoming none. So I do see meaning<br>
in it.<br>
<br>
And it was obviously named the less than sign long before it was used<br>
for XML tags.<br>
<br>
-- <br>
Shriramana Sharma ஶ்ரீரமணஶர்மா श्रीरमणशर्मा 𑀰𑁆𑀭𑀻𑀭𑀫𑀡𑀰𑀭𑁆𑀫𑀸<br>
<br>
</blockquote></div>
</blockquote></div>
</blockquote></div>
</blockquote></div>
</blockquote></div>