adraffy / ens-normalize.js

ENSIP-15 in JS
https://adraffy.github.io/ens-normalize.js/test/resolver.html
MIT License
63 stars 17 forks source link

Polish characters disallowed #10

Closed djstrong closed 1 year ago

djstrong commented 1 year ago

Why some of Polish characters are disallowed now? https://adraffy.github.io/ens-normalize.js/test/resolver.html#%7B105%7D%7B15B%7D image

adraffy commented 1 year ago

It's a subjective at the moment.

Here are the exemplars: https://unicode-org.github.io/cldr-staging/charts/latest/by_type/core_data.alphabetic_information.main.html

Here are the characters with marks that I allow currently: https://github.com/adraffy/ens-normalize.js/blob/main/derive/rules/cm.js

From my code comments, I'm aware of:

//'ą', // 105 (ą) LATIN SMALL LETTER A WITH OGONEK (polish)
//'ś', // 15B (ś) LATIN SMALL LETTER S WITH ACUTE (polish)
//'ź', // 17A (ź) LATIN SMALL LETTER Z WITH ACUTE (polish)

The question is whether these characters are actually necessary. When I was scanning for words in other Latin languages, most of these were very low on usage. I computed frequency distributions for every language from 250K word+ dictionaries and whitelisted the most frequently used adorned characters.

image
djstrong commented 1 year ago

For me, it is obvious that whole alphabets should be allowed (at least for Latin based alphabets).

For Polish, if you disallow ąśźżę then 2,909,243 Polish words out of 7,410,540 will be disallowed. (Disallowing ąśź it will be 2,404,017)

Here are stats for each letter (how many words contains a letter):

i 73.38%
o 68.15%
a 67.44%
e 64.21%
n 59.09%
w 47.89%
c 47.50%
z 46.49%
r 45.96%
y 42.08%
s 37.59%
k 37.05%
m 36.86%
p 27.87%
t 27.79%
u 25.96%
l 25.32%
d 22.83%
ł 21.30%
j 19.30%
b 19.16%
ś 18.06%
h 15.71%
g 15.41%
ą 13.90%
ę 6.68%
ż 4.50%
f 4.42%
ó 4.05%
ń 3.90%
ć 2.40%
ź 0.84%
v 0.05%
x 0.02%
q 0.01%
adraffy commented 1 year ago

The acute s and z seem reasonable.

I'm not a fan of the ogonek a and e.

image

Considering these characters have been legal but haven't been registered:

ens-normalize.js$ node tools/reg-count.js 105
0x105, // (ą) LATIN SMALL LETTER A WITH OGONEK
Filter: 1
Loaded 2360176 labels in 2.0s
==== Same (0) ====
==== Diff (0) ====
==== Fail (22) ====
ąąą => disallowed character: "ą" {105}
ɱɛȶąʋɛʀʂɛ => disallowed character: "ɱ" {271}
a̵̝͈͖͈̍̀̋ǎ̵̧̧̛͈̝͎̭͔͙̻̳̮̝̠͓͍̐̏̀̍̎̊̄̆͛̑̀̊̅̐̎͑͐̈́̉̑̽̒̈́̌͋͒̈́͒́͘̚̕͝͝a̷̢̢̨̨̛͓͕̫̥̼̼͓͖̗͔̻̞̞̦̩̞̳̟̮̤̓̏̽́͂́̆̀́̈́̈́̑̌̍͊̑̈́̋̐̊̿͘͜͝͝ι̙̰͎̳̦̣̗ą̷̢̛̫̘͕̯̭̰̤̯̲̼̦̥̞̼͔͈̪́̀̏̾̽̎̔̈̎͂͆̐̐̐́̂̽͌̓́̑͂̇̌̂̇̍̈́̈́͊͊́̽̓̏̆͘̚̕͝͝ι̧̹̮̥͔̘͈̭͈̝͜a̵̡̡̨̨̡̧̡̢̡̰̰͕̦͕̖̲͉̠̯̫̟͚͇̭̫͕̼̣͓͖͚̘͖̲̲̪̫̐̇̎̓̓̀͝ḩ̴̢̮̘̻̲͕͖̭̫͕̯̝̌͒̔̔̓̈́͒͌̂̎̌̋͋̏͆́̊̑͛̽̀̌̀͒͝͠h̸͍̫̤̩̖͌̍͆͛̇̈́͊̓̽̈́̔́͘͘͝ι̤͈̘͇̘̝̺̜͇̼͙̪̫̥̰͍͎͍͓͉̗ι̡̝̮͔̝̭̝̳͍̪͍̥͇͉̺̘̱h̸̺͉̗͎͖̗̜͓̼͉͘ι̢̳̹͖̮̝̟͙̰̠̘̮̫̼̙͎̱͓͈͓̥̞̼͚̮͙͚̗̠̼̤͙̜͜h̵̢̤͉͕̥̤̱̼͓̙͇̍͛͆͒̔̀̃̑̓̈́͊͊͒̾͂̔̉̎̉͑͂͂̈́́͂̔̌̔̐̒͂̓̕͠͠ι̧̝̜̗̞̗̫͓̙̪̯͖͓̲͙̳͔̦̙̯͙̯͎͍̘̹h̵̛͈̄̾̈̀͋̓͗͑̓͑̉͐̿̎́̈́́́͐̓̈́̑̈́̕͘͝͠ι̡̧̘̜͍̹̼̦̪̥̱̪̦̮̯̲̼͍̟̲ḩ̴̡̢̛̛̩͉̦̬͉̠̹͍͓͚̮͚̻͖̺̭̠̻̮̙̦͚͆́̋͂̐͒̈͆̉̓̉̕͘͜͠h̸͈̠̰̱̋͆͐̓͐͋́̿̒̏̿̍̐̅̐̇̏̈́́̇̂̚͘͝͝͝ι̯ι̢̡̘̰̗̫̰̫̯͎̠̤̖͚̮̜͉̼̝̟̥̮̞̥͍̟̤̺ḩ̴̨̦̥̺̺͕̥̥͎̭͉̗̖̗̳̮̓̓̈̽͒͆̔͂̈̇͘ => disallowed character: "◌̵" {335}
ąalex => disallowed character: "ą" {105}
gołąbki => disallowed character: "ą" {105}
grudziądz => disallowed character: "ą" {105}
igaświątek => disallowed character: "ś" {15B}
jeszczepolskaniezginęłakiedymyżyjemyconamobcaprzemocwzięłaszabląodbierzemymarszmarszdąbrowskizziemiwłoskiejdopolskizatwoimprzewodemzłączymsięznarodemprzejdziemwisłęprzejdziemwartębędziempolakamidałnamprzykładbonapartejakzwyciężaćmamymarszmarszdąbrowskizziemiwłoskiejdopolskizatwoimprzewodemzłączymsięznarodemjakczarnieckidopoznaniaposzwedzkimzaborzedlaojczyznyratowaniawrócimsięprzezmorzemarszmarszdąbrowskizziemiwłoskiejdopolskizatwoimprzewodemzłączymsięznarodem => disallowed character: "ę" {119}
łążyn => disallowed character: "ą" {105}
ąmazon => disallowed character: "ą" {105}
ąmązoŋ => disallowed character: "ą" {105}
pączek => disallowed character: "ą" {105}
pączki => disallowed character: "ą" {105}
pieniądze => disallowed character: "ą" {105}
piątek => disallowed character: "ą" {105}
ąpple => disallowed character: "ą" {105}
prąnksy => disallowed character: "ą" {105}
świątek => disallowed character: "ś" {15B}
w̷̡̧̮͇̪͕̭̳̙͈̜̬̣͑̋̓̐̾͐̆̈́̾̊̕ι̤͓ŏ̷̢̯̖̭͕̜̮̘̪̳̖̦͓̲̮̊͒̑̉͗̊͜l̵̨̛̞̣͌̀̓͂̅̏̏͛͠f̵̨͈̗̬̮̲͕̟̞̯̺̫͕̏r̶̭̗̞̳̯̫̠̼̪̺̆͐̈͑̅̎͋ą̵͎͇̹͔̙͉̘̠͍̰̟̘̂̌͂̎̏̐͊̅̓̓̓m̶̧̯͍̫̂͒̀̈́̈͆͗͂̎̚͜ι̰̹ => disallowed character: "◌̷" {337}
y̷̹̻̓̏͂̅͆͗͐̓̀͘o̴̧̨̟̥̻͆̾͊̎̕͜u̶̡͚͉͖̼͚̻͖̜̓̈́͑͒͂̎̎ĥ̴̥̠̝̲̙̪̜̓͋̾̓̉̆́͠a̴̳͖̦͂̂̓v̴̲͕͑͋͆̈̽̆́̚e̸̲̰̙̤͈͓̞̻̬͈̐͆́̓̾̍͝ḩ̷̤̻̱͉͛̈̀̏͠ă̶̛͔̫͓̜̪̞̿̓͂̍͛͝d̷̢̟͙̯̘̜͔̺͋̈́ą̸̧̼̭̟̥̖̣̀̓͗͑̐͋̀̇s̸̩͎̼͈͚̙͖͔̕͜t̷̛̛̲̻̖͌̓͆̈́̈́̃̐ι̥̮̜͉̳ȓ̴͚͓͈͉̳͉̪̗̀̒͑̈́̅̓̉͋͝ơ̷͇̹̤̠̳͒́̎̍̇̕͜k̶̨̨̲͖̬͍͓̣̝͓̈́̔̑͂̀͆̋͝e̴̼̒̃̈͌̚ => disallowed character: "◌̷" {337}
zając => disallowed character: "ą" {105}
ą̵̧̛͍͖̻̣̠̪͉̘͉̠̆͗̏̐̍̀̂̄̿͒͂̑̌̄̾̒̃̕͘̚͝͝͝͝ι͓̤͍̟̪s̵̗̼̮͔̥͑͛͂͒͗̎c̶̢̢̨̢̜̻͉͇̝̮̖̝̼͕̲̞͑͐̂͋̒̀́̊̕̕ȩ̸̩̠̺̗̲͖͂̃̈́́͐͝n̷̨͈̪̝͈͎̮̭̺̜̩̬̱͓̈́̉̏̀̋͑̀́̊̾͜ď̸̨̡͔̳̼̩̬̘͓̬̺̥̦͖͈̹̖̦̻̦̣̘̺̘̜̭̟̌̿͋̔̈́̓̈́̂̆̉̈́̀̀̇̈́̐̐͗͊̂͝ => disallowed character: "ą" {105}
{ found: 22, same: 0, diff: 0, fail: 22 }
ens-normalize.js$ node tools/reg-count.js 119
0x119, // (ę) LATIN SMALL LETTER E WITH OGONEK
Filter: 1
Loaded 2360176 labels in 2.0s
==== Same (0) ====
==== Diff (0) ====
==== Fail (11) ====
częstochowa => disallowed character: "ę" {119}
jeszczepolskaniezginęłakiedymyżyjemyconamobcaprzemocwzięłaszabląodbierzemymarszmarszdąbrowskizziemiwłoskiejdopolskizatwoimprzewodemzłączymsięznarodemprzejdziemwisłęprzejdziemwartębędziempolakamidałnamprzykładbonapartejakzwyciężaćmamymarszmarszdąbrowskizziemiwłoskiejdopolskizatwoimprzewodemzłączymsięznarodemjakczarnieckidopoznaniaposzwedzkimzaborzedlaojczyznyratowaniawrócimsięprzezmorzemarszmarszdąbrowskizziemiwłoskiejdopolskizatwoimprzewodemzłączymsięznarodem => disallowed character: "ę" {119}
ęlvis => disallowed character: "ę" {119}
mężczyzna => disallowed character: "ę" {119}
metavęrse => disallowed character: "ę" {119}
piękno => disallowed character: "ę" {119}
ęth => disallowed character: "ę" {119}
tyronę => disallowed character: "ę" {119}
t̷̂̔̕ι̨͎̯̝ô̵̢͕̯̟͚̜̟̘̭̝͔͕͕͗̔̾̇̓̃̈́̉̕p̷̣̟͇̱͉̝̹̭̋̎̈́͊͋̿̒̀̔̆̏͌̈́͂̓͆̈́̎̆̏̎̐̃̈́̓͒͂̆̀̉͑͆̈̓̾̓̚̚͠͝͠͝ι̫̺͈͎̮͖̯̼͇̞̦̭̺̟̖̗̗̯̠̪̫͈͜k̶̢̗̜̪͇̲̗̼͎̹̜̣̯͙͒̾͊͆̽͂̈́̑̌̒͗̉͌̽̔̉̓͋̔̒̏̋͂̇̅̃̇̈́͠͝e̵̡̓̉̌̿͆̆̋̂̍͐̓̄̓͛̆̑͛̾͊̐̆̏̓͌̈́͌̆̎̿̽͒͊̅̇̉̋̏̓̃͛̆̇͒͋̚͘̕͠͝͝k̴̨̧̛͕̞͔̩͓͍̖̘̘̼͈̩͇̝̠̞͖͙̯̘̫͉̾̎̌̂̐̎͑̊͆́͛̓͜t̷̨̢͔̳̪͔̉̈́̒͒̽̑͊̀̿̄̈̑̐͆̈́͂̑̃̾̋͐͑̈͗̀͘͝͠͝͠o̵̝͒͛̑̏̋͐̉͊̊̂͆̉͒́p̶̧̧̤̗̖͔̺̻̜̫̦̱͚̠̫͇̪̪̲̯̩̠̜̌͑̒̉̋̏͂̐̀̌̈͋̈̀͑͆̕k̵̫̜̟̯̳̞̥͉̮̩̤̮̥̹͇̘̜̮̮͒͆̇̈́̀̐̊͆̇̄́̾̎̓̌̑͌̿̇͆̕͜͜͜ë̶̛̩̗́̓̓̌̅̇̅͒̎͂̇̑́͑̄́̒̆̀́̏̾́̔̇̽̎̐̑̀̑́̋̾̍͑̌́͐̆͋̕͘͘̕͝͝k̴̛̯̯͉̲̬̟̺̰̄́̆͗̈̎̌̉͑͂̓͗́̐͆̔͘͠͠͝͝t̸̨̢̘̟̜͈̣͇̣̞̙̲̰̯̱̗̗̦͔̥̩͍̭̺̞̣͓̙̞͕̬̩̳̮̀̅̅̅̇̓̉̚͝͠ι̲̜̘͜ιó̸̢̯̼̄́̿̀͋͆͒͋̈̾͑̒͆͑̽̑̽͘͝p̵̢̨̨̡̝̰̳̣͍̠̻͖̗̥̦̥͇͔̲̺̲͓̱͈͚̫̬̬̟̲̥̻̳͙͎̝̏̓̋́͂̏̓̆̄͑͐͗̂̎̽́̀̉̐͊̃͐̿̕͝͝ι̙͈̱̬̙͇̦̫͜k̸̢̢̨̛̤͇̬̝̞͙̩̪̭̘̤̯̤̫̬͛̍̋̉͛͐̾̈́̒͌͗́̋͌͊̐̇̋̓̌̀̈̂͐̒̓́̕̚̚̕̚͝͠͝e̷̤̞̠̙̞̣͇̹̿̃̀̓̾͂̍̽͑̍͒̿͜ι͎ι̣k̶̨̡̛̛̹͚̥̤̰̙̦͉̻͚̩̙̥̍͗͒̎̅̌̽̀̏̿͌͂̔͗̃̆͊̑̓͆̃̓̀̔̀̄̇̈́́̓͛̓͌̉̅̈́͗̕͝͝͠͝͝͝͝͝ι̖̺͔̣͓͍̰ι̨̹̥̫ţ̶̡̡̹͕̜̱͉̪̮̲͇͎̰͍̦̱͇̺͉͎̰̞̮̟̼̹̟̫͉̃̃̓́̈́̃͊͊̊̓͗̔̒̂̀̅̑̓̾͐̏͒̀͛̃̒̆̎̓͘̕͘͘͝͝͠ι͚͈̖ö̶̡̨̩̰̼͕̤̭̟̤̘̘̻̮̮̘̩̠͈̱̣̰̹͓̦̤̞̟͎̗̦̱́̀̓́͆̅͗̉́̊̑̌͋̉͗̔͜͝͝ι̧͔̖̮͇͇͕̺̟p̷̛̛̛̺̬͍͎͈̜͖͉̫̣̫͎̪̯̹͖͔̻̯̱̟̖͍̖͖͎͊̉̈́͊̒̓̾̿͊̾̈́͐̌̏̀̐̾́̈́̅̎̑͊̈́̎̅͐̐̾̇̓̓͒͘̕͝͝͝͝͝͠ιk̷̜͔̳̺͇̰̭͙̣̘̺͋̅̔̃̈̍̍̀̌̔̇̈́̐̓̋̀̽̅̉̂͌͂̌́̿̅́́́́̀́́̐̑̽̃̌̕̚͝͝͝͠ι̡̨̧̖̟̣̪̞̤̖͖͍̮̙̜͎̦̖̗̝é̸̢̲̼̟̺̯̯̯̆̆̾̆̑̈̋̈́͆̐͆̈́͋͘͠ι̧̱̭͜ḱ̵̯̐̊̔͊̑́̿͊̉̌̍̈̄͋͛͐̌̌̓̍̓̎̓̉̽̔̿͑̀̒̇̐͒̇͌͊̓̊͐̇̇͒̈́͝͝͝t̴̨̡̠̯̱͙̲̲͚̼̪̥͈̳̲̰̭̳͙̥̦͕̘̭̭̜̯̖͇̝̳̺̥͔̝̰͚͙̤̹̞͈̳̙̱͎̾͛̍̉̑̇͐͋̏̈́̋̄̔̉̔͆̉̈́̀̎̾̑͑̑̇͂̑̑̑̊̽̓͗͐͛́͝͠͝ơ̶̡̦̺̞̻̦̩͈̹̬͎̼̖̞̱͓͉̗͙̪̘̹̬̦̮̲͚͖͍̦̞͕̥͓̈́̓͗̀̋̂̓̔̓͆̚͜ι̞̲̤̗͇͙̥̜̲͎͍p̴̢̛̮͓͚͚̜̯̝̱͙͓̤͚͕͔̥̱̮͍͑͋̉͐̊̅̐́͆̀̽̆͋̑͂̚̚͝ķ̶̡̢̨̢̨̨̛͔̗̱̝͉̠͕̪̭͕̬̼̟̹̱͇͍͍̜̩͔͕̱̼̺͍͖̗͖͇̪̂̈́͋̀͋̓͂͛̀̑̐̆̊́͆̏̈̇̑̀̀͒̈́͗̊̈́̽͐͂͗̏̈́̃͐̿̾̌̔̔͘̚͘̚̕͜͜͠ë̷̡̡̢̹̰̩͙̞̦̤̗̺̞͖̬̯͖̤͖̼̦̘́̂̓̈͝ι̡̡̡̘͙̘̺̰̹̦̩͔̙̲̻̹̤̣̳͜k̷̨̡̨̢̛͎̰͖̜̠͎͔̝̫̳͚͚̮̮͈̰͍̬̥̖̫̭͆̌̄͊̄̀̅̒̔̋̎̅̏̈́̀͐́͆̓͗̈̀̾͋͋̋̿͊̀͋͘͠t̶̡̨̡̥̲̲͖̩̦͈̙̜̝̘̭͕̪̯̻́̐̂̀̍͑̂̓̄̀̈͗̀́̂͗̓̂̏̌̒̐̾̈́̑̓̋͌͛̊̚̕̚͘͜͝͝ι̢̯̬͖̭̰̙͈͇̜̞̺ι̤̹ơ̷̛̲̼̻̙̥̘̯̟̩̈́̓́͂͒̏͒̈́̃͊̋̐̑̓̾̽͋̀̃̈́̈́̽̆̈́̑̒͑̌̿̏̃̔̏̽̑̅̇́̋̇͋̚̚͘͜͝͠ι̡̠͚͓̟̳̹̯͚̘̪͉̹̦̪̹̩̟̬̥͕̥͉̤̦̪͇̹̭̼̩̝̺ι̨͕p̸̡̡̞̪͚͉̹̠͍͈̩̝͍̩̳̥̖̺̪̤̦̫͙̟̭̠̽̓̓̔̉̈̄̾̇̃̐̈̊͛͂̿̽͌̂͊̈́͌̄̋̓̍̂̈̐̎̓̿̌͂̓̃̎̈́̕͘̚͘͝͠k̴̢̲͔̲̹͚̥͈͎̯̗͈̣̰̼̳̖̜̮̲̥͎̭̲͙̣̝̞̼̳̘͖̳͍͚͚̖̹͇̲͒͌͌̊͂̎͌͑͒̃̈́̉͑͌̃̀̾̂̾̋̈́̑͐́͋̌̋̊̈́̌̎̉̈̐͊̚̚͝͠͝e̵̛̛̟̼͖̍̍̄͋̈̾͛̂̂́̒̈́̍̂̇́̔̂̋͂͗̏̈́͆̾̌̀̐̔̈́́̕͜͠͠ι̨̡̪̤͔̘͎̰͚̩̭̰͇̦̙̪̻̲̖̪̥̬͓̱̦̬̘k̸̨͔̙̘͉̖͕̪̜̪̖̙̰̪͇̼̭͓͚̘͍̭̪̠̤̦̲̻͕̫͚̝̋͑̈́̀̊͂͆̉̊͑̓̃̏̆͑́̓̈́̆̃͌̃̃̕͜͝t̸͔̮̪̲̯̖̜̘̻̳͔͙͕̖̭͉̱̟̼̭͇̋̏̿̂̌͊̂̀̓̆̓̿̇̀̽͠͝ι̨͍͚͖̠̞̣͕̻o̴̡̨̡̘̝̫̺̖̳̗͉̮͇͐̓ι̢͚̭̜͙͓͚̠̰͓̹̺̞̖͈̯̮̹̘̫͚̹̖̳͜͜͜͜p̸͍͉̘̄̄͐͗̎́͌̌̌̇̈́̓̇̐̋͊̃͗͒̚͘͝͠ιk̵̭͙̙̤̙̉̅̀̿̒́̐̓́̅͐̓̐̓͂̀̂̿́̽̿̏̓̓̃̀͛̓́͆̓̂̏̍̅͑͊̀͘̚͝͝͝ι̧̧̡͔̞͕͉̝̫͖̻͎̱͍̜͇̳̘̺̞̼̤̤͈̞̭̟̦̯̞͓̣͇̯͚̹̮̳͜ę̶̛͚̠̱̹͖̗̣͔͓̭̦̺̙͙̠̠͖̪͙̖͔̆̈́̀̇̈́̏̏͗͋̎̎̅͗̿k̴̡͈̊͛͆̕̚͜͝ι̙̩̱̰̮͔̝̹̪ι̧͇͇ṯ̶̡̨̛͇͔͖̱͈̺͚͙̅͒̏̋̐̏̈́̋̈̏̌̾̂̋̀̽̌͘͘͝ι̢̱̱͎̺̦̝̤̫̩͈͉̺͍̘o̵̧̢̼̖̣̘͖̣̻͉̥̖̜̬̯̰̘̲̗͖̥̩̱̠̣̣̮̥͇͚̲͙͇̞̐̋͆͘͜͝ι̰̲p̶̨̢̨̡̨̡̧̧̧̘̱̥̻̣̭͍̯̱̩̼̲͙̭̗̰͈̹͔̮̝̲̣̠̗͚̳͍͚͉̰͓̺̹̀̀́̊̐̎́̍̾̏̄̎͒̔̉͋̈͜͜͜͝͝ķ̵̡̨̦̞̯̗̞͔̗̯̣̞̼̆̓̎̒̍̏͘͝͝͝ę̸͈̬̿̑̓̇́̂̅͋̈́́̓̒̆̈̆̅̀̒͒̾̆̈́̽̈̀̅̃̀̀̎̉̚̚͝͝͠͝͝ķ̶̢̛̗̤̭̩̠̥̥̘͇͈͙͚͖̼͙̹̦͉̺̤͙̲͖͓͖̜͙̝̈́́̇̊̒͂̎̀̽̾͑͊́̎͒̿͗̋̄̌̄̄̇̆́̈̂̈́̊̄̄̾͘͜͜͝t̴̛̛̺̣̭͇̰̺̬͕̣̠̘̃̇̈́̎̿̾̀̀́̊̿͗̂̈̾̓̒̓̒̓́̃͆̂̐̉͌̓̐̇͌̉̓̉͗̆̕͘͝͝ι̡̡̖̣͇̖̞̦̝͔̪̫͈̣̙͕̰̺͜͜ō̷͋̔͒̈́́̽̓̑̀͋̅̈́̅̋̄ι̦̳ι̬͔̼̝͎͓̪̘̮̦͜p̴̧̡̯̠̤̘̝̦͉̞͕̠̟̪͇̮̙̮̱̝̟̠͚̯͓̣̬̱͖͈̞̲͎̟̥̳̠̜̩̖͕̻̤̗͎̙͙̝̃̄̾́̿̾̾̉̅̏̇̈̈̐́̽͊̈́̎̈́̅̿̈́̿́̓͗̂͐̾̏̋̂̂̋̀͂̑̄̈́̌̒̊͘̕̚͝͝͝k̷̨̡̛̮̠̙͎̼̱̟̰͔̜̦̹̤̗͙͖͕̋͐̓̾͑̐͌̈̈́̅̓́̇̌̇̓̾́̂̌̍̐̍̋̚̕͜͠ι̼̳̜̖̦̯̣̞͚͜ę̵̧̢̧̨̨͚̳̮̲̰̰͍̹̙̟̖͈̤͔̻̥̩̮̗̯͚͇͙͍̘͎̣̖̹̀͌̓͊̈̀̓̋̅͑͗̈́͑̈́͘͝k̶̡͓̲̤͕̰͖̟̣̟̜̰͔̱̪̪̬̲͉̜̣͕̰̹̭̘̀̏̊̃͑̅̑̎̓̆͆̓̃͂̍̑̆͒̈̀͐̐̓̊͒̈̍̃̽͐͊̓̓̊̔̉͊͐̎̕͘̚̚̚͠ṭ̴̢̛̙̻̲͍̘̗͑͊̃͒̓̋̌͒́̀̄͆̓̃̍͊́͒́̂̅̇̂̓͂̓͘̕̚͠͝͠͠o̷̡̢̨̗̪̰̳͚̱̲̳͔̹͓̗͓̜̦̱̘̯͎̱̲̲̱̱̔͜͜p̶̡͉̤͈̞̳̻̒̆̽̓̃̏̉͑͐̊̎͊̓̐̆̇͌̚͝ι̯̼̟̱̭ι̡̪̥k̷̨̛̮̹͖̻̰̪̃̿̉̂͐̃̅̈̈́̑̀͊͒̿̍͆̔̈͋̒̍̓̍̂͆̇̎̔̌̌̈́̑̒̆̒̈́̃͗̒̅̕͘̕͜͠͠ι̨̥̟̜̦͓̼͎é̵̠̦̥̱̙͓̥̦̜̫̠̱̫̬͓̫̦̼̳̼̼̩͕͔̗̮̼͈͙̈́̈́̉̐͛̽̊͋̊͑̃́̏͛̃̄̾̅̔͆̚͘̚͜͝k̶̡̨͎̱̝̤̬͔̞̘̲͍͛̊̽̑̔̅̕͘ι̬̥̱̝̝͇̫ι̧͚͉͙̖̼̬͔̯͔̙͇̩̲̠̙̗͓͇̲͖̩ţ̵̢̥̞̺͕̜̹͓̣̭͉͓͇̬̙͕̺͎͕̥̬̳̳̗͚́͂̈̐̑̈́͛̕͜͝ǫ̸̨͓̯̺̗̻͙̱̩̫͇͚̩͖͇̘͎̗̥̖̼̭͖̣̹̬̖͉̙̙̞̱͚͎̘̺͉̮̪͚̪͖̈́͆̋̍p̴̨̛̛̛̣̠̹̯̭̗͇̰͇̣͕͔̲͆̊͆͒͛̔̎́̍̏͗̔͂̀̾̃̿͌̿̐̈́̀̐̏̄̐̚͜͝͝͝k̵̲̤͒̈͌̅́̂̾̌̄́̚͠ιι̢̬̖͓͙̻͇̥̩͙̺͇̥̮͉͇͕̘͕̗͉͈̬e̷̛̼͒̎̋̌͆̔̀̀͑̅̀̐́̍̓͆̋̈̂̂̅͒̈́̋̇̅́͒̅̾̈̄̚͘̕͘͜͝͝͝͝͝ķ̴̢̡̣̤̲͚͎͔̞̙̺̹̰͖̥̤́̈́͑̀̔͆̍̒̓̀̎̈͋̋͑͗̾̾̈͗̀̊̕̚͠͠͝ι̨̭̭̤͓̗̼̫͚̞̝̫̭͜t̷̂̔̕ι̨͎̯̝ô̵̢͕̯̟͚̜̟̘̭̝͔͕͕͗̔̾̇̓̃̈́̉̕p̷̣̟͇̱͉̝̹̭̋̎̈́͊͋̿̒̀̔̆̏͌̈́͂̓͆̈́̎̆̏̎̐̃̈́̓͒͂̆̀̉͑͆̈̓̾̓̚̚͠͝͠͝ι̫̺͈͎̮͖̯̼͇̞̦̭̺̟̖̗̗̯̠̪̫͈͜k̶̢̗̜̪͇̲̗̼͎̹̜̣̯͙͒̾͊͆̽͂̈́̑̌̒͗̉͌̽̔̉̓͋̔̒̏̋͂̇̅̃̇̈́͠͝e̵̡̓̉̌̿͆̆̋̂̍͐̓̄̓͛̆̑͛̾͊̐̆̏̓͌̈́͌̆̎̿̽͒͊̅̇̉̋̏̓̃͛̆̇͒͋̚͘̕͠͝͝k̴̨̧̛͕̞͔̩͓͍̖̘̘̼͈̩͇̝̠̞͖͙̯̘̫͉̾̎̌̂̐̎͑̊͆́͛̓͜t̷̨̢͔̳̪͔̉̈́̒͒̽̑͊̀̿̄̈̑̐͆̈́͂̑̃̾̋͐͑̈͗̀͘͝͠͝͠o̵̝͒͛̑̏̋͐̉͊̊̂͆̉͒́p̶̧̧̤̗̖͔̺̻̜̫̦̱͚̠̫͇̪̪̲̯̩̠̜̌͑̒̉̋̏͂̐̀̌̈͋̈̀͑͆̕k̵̫̜̟̯̳̞̥͉̮̩̤̮̥̹͇̘̜̮̮͒͆̇̈́̀̐̊͆̇̄́̾̎̓̌̑͌̿̇͆̕͜͜͜ë̶̛̩̗́̓̓̌̅̇̅͒̎͂̇̑́͑̄́̒̆̀́̏̾́̔̇̽̎̐̑̀̑́̋̾̍͑̌́͐̆͋̕͘͘̕͝͝k̴̛̯̯͉̲̬̟̺̰̄́̆͗̈̎̌̉͑͂̓͗́̐͆̔͘͠͠͝͝t̸̨̢̘̟̜͈̣͇̣̞̙̲̰̯̱̗̗̦͔̥̩͍̭̺̞̣͓̙̞͕̬̩̳̮̀̅̅̅̇̓̉̚͝͠ι̲̜̘͜ιó̸̢̯̼̄́̿̀͋͆͒͋̈̾͑̒͆͑̽̑̽͘͝p̵̢̨̨̡̝̰̳̣͍̠̻͖̗̥̦̥͇͔̲̺̲͓̱͈͚̫̬̬̟̲̥̻̳͙͎̝̏̓̋́͂̏̓̆̄͑͐͗̂̎̽́̀̉̐͊̃͐̿̕͝͝ι̙͈̱̬̙͇̦̫͜k̸̢̢̨̛̤͇̬̝̞͙̩̪̭̘̤̯̤̫̬͛̍̋̉͛͐̾̈́̒͌͗́̋͌͊̐̇̋̓̌̀̈̂͐̒̓́̕̚̚̕̚͝͠͝e̷̤̞̠̙̞̣͇̹̿̃̀̓̾͂̍̽͑̍͒̿͜ι͎ι̣k̶̨̡̛̛̹͚̥̤̰̙̦͉̻͚̩̙̥̍͗͒̎̅̌̽̀̏̿͌͂̔͗̃̆͊̑̓͆̃̓̀̔̀̄̇̈́́̓͛̓͌̉̅̈́͗̕͝͝͠͝͝͝͝͝ι̖̺͔̣͓͍̰ι̨̹̥̫ţ̶̡̡̹͕̜̱͉̪̮̲͇͎̰͍̦̱͇̺͉͎̰̞̮̟̼̹̟̫͉̃̃̓́̈́̃͊͊̊̓͗̔̒̂̀̅̑̓̾͐̏͒̀͛̃̒̆̎̓͘̕͘͘͝͝͠ι͚͈̖ö̶̡̨̩̰̼͕̤̭̟̤̘̘̻̮̮̘̩̠͈̱̣̰̹͓̦̤̞̟͎̗̦̱́̀̓́͆̅͗̉́̊̑̌͋̉͗̔͜͝͝ι̧͔̖̮͇͇͕̺̟p̷̛̛̛̺̬͍͎͈̜͖͉̫̣̫͎̪̯̹͖͔̻̯̱̟̖͍̖͖͎͊̉̈́͊̒̓̾̿͊̾̈́͐̌̏̀̐̾́̈́̅̎̑͊̈́̎̅͐̐̾̇̓̓͒͘̕͝͝͝͝͝͠ιk̶̢̗̜̪͇̲̗̼͎̹̜̣̯͙͒̾͊͆̽͂̈́̑̌̒͗̉͌̽̔̉̓͋̔̒̏̋͂̇̅̃̇̈́͠͝e̵̡̓̉̌̿͆̆̋̂̍͐̓̄̓͛̆̑͛̾͊̐̆̏̓͌̈́͌̆̎̿̽͒͊̅̇̉̋̏̓̃͛̆̇͒͋̚͘̕͠͝͝k̴̨̧̛͕̞͔̩͓͍̖̘̘̼͈̩͇̝̠̞͖͙̯̘̫͉̾̎̌̂̐̎͑̊͆́͛̓͜ => disallowed character: "◌̷" {337}
więcejdymu => disallowed character: "ę" {119}
zwierzęta => disallowed character: "ę" {119}
{ found: 11, same: 0, diff: 0, fail: 11 }
djstrong commented 1 year ago

It doesn't matter what have been registered if you want new users and new names being registered. How many users from Poland have bought ENS names? Maybe ENS is not popular yet in other countries, but we expect to be. And I think, disallowing 20% (ąę) of words is not desirable.

What are other reasons to not include characters from such small alphabets and popular languages?

adraffy commented 1 year ago

Okay, I will allow these variants. Did you see anything else that was missing?

I'm kinda against double-CM on Latin: image

And I think both "horn", "tail", and the other rare marks are unnecessary.

I also added:

'ğ', // 11F (ğ) LATIN SMALL LETTER G WITH BREVE (20221202: added for turkish/azer)
'ỳ', // 1EF3 (ỳ) LATIN SMALL LETTER Y WITH GRAVE (20221202: added for welsh/viet)

And swapped A+caron with A+breve. Potentially caron/breve need a mapping although post-normalization, only 1 form would be valid. Unicode suggests these are functionality equivalent.

'ă', // 103 (ă) LATIN SMALL LETTER A WITH BREVE
adraffy commented 1 year ago

First column is X if normalized.

N | Hex         | $ | Name
X | 61          | a | LATIN SMALL LETTER A
X | E1          | á | LATIN SMALL LETTER A WITH ACUTE
X | E0          | à | LATIN SMALL LETTER A WITH GRAVE
X | 103         | ă | LATIN SMALL LETTER A WITH BREVE
  | 1EAF        | ắ | LATIN SMALL LETTER A WITH BREVE AND ACUTE
  | 1EB1        | ằ | LATIN SMALL LETTER A WITH BREVE AND GRAVE
  | 1EB5        | ẵ | LATIN SMALL LETTER A WITH BREVE AND TILDE
  | 1EB3        | ẳ | LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
X | E2          | â | LATIN SMALL LETTER A WITH CIRCUMFLEX
  | 1EA5        | ấ | LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
  | 1EA7        | ầ | LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
  | 1EAB        | ẫ | LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
  | 1EA9        | ẩ | LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
  | 1CE         | ǎ | LATIN SMALL LETTER A WITH CARON
X | E5          | å | LATIN SMALL LETTER A WITH RING ABOVE
X | E4          | ä | LATIN SMALL LETTER A WITH DIAERESIS
X | E3          | ã | LATIN SMALL LETTER A WITH TILDE
  | 61 327      | a̧ | LATIN SMALL LETTER A + COMBINING CEDILLA
X | 105         | ą | LATIN SMALL LETTER A WITH OGONEK
X | 101         | ā | LATIN SMALL LETTER A WITH MACRON
  | 61 1DC6     | a᷆ | LATIN SMALL LETTER A + COMBINING MACRON-GRAVE
  | 61 1DC7     | a᷇ | LATIN SMALL LETTER A + COMBINING ACUTE-MACRON
  | 1EA3        | ả | LATIN SMALL LETTER A WITH HOOK ABOVE
  | 1EA1        | ạ | LATIN SMALL LETTER A WITH DOT BELOW
  | 1EB7        | ặ | LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
  | 1EAD        | ậ | LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
  | 61 331      | a̱ | LATIN SMALL LETTER A + COMBINING MACRON BELOW
X | E6          | æ | LATIN SMALL LETTER AE
X | 62          | b | LATIN SMALL LETTER B
  | 253         | ɓ | LATIN SMALL LETTER B WITH HOOK
X | 63          | c | LATIN SMALL LETTER C
X | 107         | ć | LATIN SMALL LETTER C WITH ACUTE
X | 109         | ĉ | LATIN SMALL LETTER C WITH CIRCUMFLEX
X | 10D         | č | LATIN SMALL LETTER C WITH CARON
  | 10B         | ċ | LATIN SMALL LETTER C WITH DOT ABOVE
X | E7          | ç | LATIN SMALL LETTER C WITH CEDILLA
X | 64          | d | LATIN SMALL LETTER D
  | 10F         | ď | LATIN SMALL LETTER D WITH CARON
  | 111         | đ | LATIN SMALL LETTER D WITH STROKE
  | 1E0D        | ḍ | LATIN SMALL LETTER D WITH DOT BELOW
  | F0          | ð | LATIN SMALL LETTER ETH
  | 256         | ɖ | LATIN SMALL LETTER D WITH TAIL
  | 257         | ɗ | LATIN SMALL LETTER D WITH HOOK
X | 65          | e | LATIN SMALL LETTER E
X | E9          | é | LATIN SMALL LETTER E WITH ACUTE
X | E8          | è | LATIN SMALL LETTER E WITH GRAVE
X | EA          | ê | LATIN SMALL LETTER E WITH CIRCUMFLEX
  | 1EBF        | ế | LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
  | 1EC1        | ề | LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
  | 1EC5        | ễ | LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
  | 1EC3        | ể | LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
X | 11B         | ě | LATIN SMALL LETTER E WITH CARON
X | EB          | ë | LATIN SMALL LETTER E WITH DIAERESIS
X | 1EBD        | ẽ | LATIN SMALL LETTER E WITH TILDE
  | 117         | ė | LATIN SMALL LETTER E WITH DOT ABOVE
X | 119         | ę | LATIN SMALL LETTER E WITH OGONEK
X | 113         | ē | LATIN SMALL LETTER E WITH MACRON
  | 65 1DC6     | e᷆ | LATIN SMALL LETTER E + COMBINING MACRON-GRAVE
  | 65 1DC7     | e᷇ | LATIN SMALL LETTER E + COMBINING ACUTE-MACRON
  | 1EBB        | ẻ | LATIN SMALL LETTER E WITH HOOK ABOVE
  | 1EB9        | ẹ | LATIN SMALL LETTER E WITH DOT BELOW
  | 1EB9 301    | ẹ́ | LATIN SMALL LETTER E WITH DOT BELOW + COMBINING ACUTE ACCENT
  | 1EB9 300    | ẹ̀ | LATIN SMALL LETTER E WITH DOT BELOW + COMBINING GRAVE ACCENT
  | 1EC7        | ệ | LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
  | 65 331      | e̱ | LATIN SMALL LETTER E + COMBINING MACRON BELOW
  | 1DD         | ǝ | LATIN SMALL LETTER TURNED E
  | 1DD 301     | ǝ́ | LATIN SMALL LETTER TURNED E + COMBINING ACUTE ACCENT
  | 1DD 302     | ǝ̂ | LATIN SMALL LETTER TURNED E + COMBINING CIRCUMFLEX ACCENT
  | 1DD 30C     | ǝ̌ | LATIN SMALL LETTER TURNED E + COMBINING CARON
  | 1DD 304     | ǝ̄ | LATIN SMALL LETTER TURNED E + COMBINING MACRON
  | 259         | ə | LATIN SMALL LETTER SCHWA
  | 259 301     | ə́ | LATIN SMALL LETTER SCHWA + COMBINING ACUTE ACCENT
  | 259 300     | ə̀ | LATIN SMALL LETTER SCHWA + COMBINING GRAVE ACCENT
  | 259 302     | ə̂ | LATIN SMALL LETTER SCHWA + COMBINING CIRCUMFLEX ACCENT
  | 259 30C     | ə̌ | LATIN SMALL LETTER SCHWA + COMBINING CARON
  | 25B         | ɛ | LATIN SMALL LETTER OPEN E
  | 25B 301     | ɛ́ | LATIN SMALL LETTER OPEN E + COMBINING ACUTE ACCENT
  | 25B 300     | ɛ̀ | LATIN SMALL LETTER OPEN E + COMBINING GRAVE ACCENT
  | 25B 302     | ɛ̂ | LATIN SMALL LETTER OPEN E + COMBINING CIRCUMFLEX ACCENT
  | 25B 30C     | ɛ̌ | LATIN SMALL LETTER OPEN E + COMBINING CARON
  | 25B 308     | ɛ̈ | LATIN SMALL LETTER OPEN E + COMBINING DIAERESIS
  | 25B 303     | ɛ̃ | LATIN SMALL LETTER OPEN E + COMBINING TILDE
  | 25B 327     | ɛ̧ | LATIN SMALL LETTER OPEN E + COMBINING CEDILLA
  | 25B 304     | ɛ̄ | LATIN SMALL LETTER OPEN E + COMBINING MACRON
  | 25B 1DC6    | ɛ᷆ | LATIN SMALL LETTER OPEN E + COMBINING MACRON-GRAVE
  | 25B 1DC7    | ɛ᷇ | LATIN SMALL LETTER OPEN E + COMBINING ACUTE-MACRON
  | 25B 331     | ɛ̱ | LATIN SMALL LETTER OPEN E + COMBINING MACRON BELOW
  | 25B 331 308 | ɛ̱̈ | LATIN SMALL LETTER OPEN E + COMBINING MACRON BELOW + COMBINING DIAERESIS
X | 66          | f | LATIN SMALL LETTER F
  | 192         | ƒ | LATIN SMALL LETTER F WITH HOOK
X | 67          | g | LATIN SMALL LETTER G
X | 11F         | ğ | LATIN SMALL LETTER G WITH BREVE
  | 11D         | ĝ | LATIN SMALL LETTER G WITH CIRCUMFLEX
  | 1E7         | ǧ | LATIN SMALL LETTER G WITH CARON
  | 121         | ġ | LATIN SMALL LETTER G WITH DOT ABOVE
  | 123         | ģ | LATIN SMALL LETTER G WITH CEDILLA
  | 1E5         | ǥ | LATIN SMALL LETTER G WITH STROKE
  | 263         | ɣ | LATIN SMALL LETTER GAMMA
X | 68          | h | LATIN SMALL LETTER H
  | 125         | ĥ | LATIN SMALL LETTER H WITH CIRCUMFLEX
  | 21F         | ȟ | LATIN SMALL LETTER H WITH CARON
  | 127         | ħ | LATIN SMALL LETTER H WITH STROKE
  | 1E25        | ḥ | LATIN SMALL LETTER H WITH DOT BELOW
X | 69          | i | LATIN SMALL LETTER I
  | 49          | I | LATIN CAPITAL LETTER I
X | ED          | í | LATIN SMALL LETTER I WITH ACUTE
X | EC          | ì | LATIN SMALL LETTER I WITH GRAVE
X | EE          | î | LATIN SMALL LETTER I WITH CIRCUMFLEX
X | 1D0         | ǐ | LATIN SMALL LETTER I WITH CARON
X | EF          | ï | LATIN SMALL LETTER I WITH DIAERESIS
  | 129         | ĩ | LATIN SMALL LETTER I WITH TILDE
  | 130         | İ | LATIN CAPITAL LETTER I WITH DOT ABOVE
  | 69 327      | i̧ | LATIN SMALL LETTER I + COMBINING CEDILLA
  | 12F         | į | LATIN SMALL LETTER I WITH OGONEK
  | 12B         | ī | LATIN SMALL LETTER I WITH MACRON
  | 69 1DC6     | i᷆ | LATIN SMALL LETTER I + COMBINING MACRON-GRAVE
  | 69 1DC7     | i᷇ | LATIN SMALL LETTER I + COMBINING ACUTE-MACRON
  | 1EC9        | ỉ | LATIN SMALL LETTER I WITH HOOK ABOVE
  | 1ECB        | ị | LATIN SMALL LETTER I WITH DOT BELOW
  | 69 331      | i̱ | LATIN SMALL LETTER I + COMBINING MACRON BELOW
  | 131         | ı | LATIN SMALL LETTER DOTLESS I
  | 268         | ɨ | LATIN SMALL LETTER I WITH STROKE
  | 268 300     | ɨ̀ | LATIN SMALL LETTER I WITH STROKE + COMBINING GRAVE ACCENT
  | 268 302     | ɨ̂ | LATIN SMALL LETTER I WITH STROKE + COMBINING CIRCUMFLEX ACCENT
  | 268 30C     | ɨ̌ | LATIN SMALL LETTER I WITH STROKE + COMBINING CARON
  | 268 304     | ɨ̄ | LATIN SMALL LETTER I WITH STROKE + COMBINING MACRON
X | 6A          | j | LATIN SMALL LETTER J
  | 135         | ĵ | LATIN SMALL LETTER J WITH CIRCUMFLEX
X | 6B          | k | LATIN SMALL LETTER K
  | 1E9         | ǩ | LATIN SMALL LETTER K WITH CARON
  | 137         | ķ | LATIN SMALL LETTER K WITH CEDILLA
  | 199         | ƙ | LATIN SMALL LETTER K WITH HOOK
X | 6C          | L | LATIN SMALL LETTER L
  | 13A         | ĺ | LATIN SMALL LETTER L WITH ACUTE
  | 13E         | ľ | LATIN SMALL LETTER L WITH CARON
  | 13C         | ļ | LATIN SMALL LETTER L WITH CEDILLA
X | 142         | ł | LATIN SMALL LETTER L WITH STROKE
  | 1E37        | ḷ | LATIN SMALL LETTER L WITH DOT BELOW
X | 6D          | m | LATIN SMALL LETTER M
  | 1E3F        | ḿ | LATIN SMALL LETTER M WITH ACUTE
  | 6D 300      | m̀ | LATIN SMALL LETTER M + COMBINING GRAVE ACCENT
  | 6D 304      | m̄ | LATIN SMALL LETTER M + COMBINING MACRON
X | 6E          | n | LATIN SMALL LETTER N
X | 144         | ń | LATIN SMALL LETTER N WITH ACUTE
X | 1F9         | ǹ | LATIN SMALL LETTER N WITH GRAVE
  | 148         | ň | LATIN SMALL LETTER N WITH CARON
X | F1          | ñ | LATIN SMALL LETTER N WITH TILDE
  | 1E45        | ṅ | LATIN SMALL LETTER N WITH DOT ABOVE
  | 146         | ņ | LATIN SMALL LETTER N WITH CEDILLA
  | 6E 304      | n̄ | LATIN SMALL LETTER N + COMBINING MACRON
  | 272         | ɲ | LATIN SMALL LETTER N WITH LEFT HOOK
  | 14B         | ŋ | LATIN SMALL LETTER ENG
  | 14B 301     | ŋ́ | LATIN SMALL LETTER ENG + COMBINING ACUTE ACCENT
  | 14B 300     | ŋ̀ | LATIN SMALL LETTER ENG + COMBINING GRAVE ACCENT
  | 14B 304     | ŋ̄ | LATIN SMALL LETTER ENG + COMBINING MACRON
X | 6F          | o | LATIN SMALL LETTER O
X | F3          | ó | LATIN SMALL LETTER O WITH ACUTE
X | F2          | ò | LATIN SMALL LETTER O WITH GRAVE
X | F4          | ô | LATIN SMALL LETTER O WITH CIRCUMFLEX
  | 1ED1        | ố | LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
  | 1ED3        | ồ | LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
  | 1ED7        | ỗ | LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
  | 1ED5        | ổ | LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
X | 1D2         | ǒ | LATIN SMALL LETTER O WITH CARON
X | F6          | ö | LATIN SMALL LETTER O WITH DIAERESIS
  | 151         | ő | LATIN SMALL LETTER O WITH DOUBLE ACUTE
X | F5          | õ | LATIN SMALL LETTER O WITH TILDE
X | F8          | ø | LATIN SMALL LETTER O WITH STROKE
X | 14D         | ō | LATIN SMALL LETTER O WITH MACRON
  | 6F 1DC6     | o᷆ | LATIN SMALL LETTER O + COMBINING MACRON-GRAVE
  | 6F 1DC7     | o᷇ | LATIN SMALL LETTER O + COMBINING ACUTE-MACRON
  | 1ECF        | ỏ | LATIN SMALL LETTER O WITH HOOK ABOVE
  | 1A1         | ơ | LATIN SMALL LETTER O WITH HORN
  | 1EDB        | ớ | LATIN SMALL LETTER O WITH HORN AND ACUTE
  | 1EDD        | ờ | LATIN SMALL LETTER O WITH HORN AND GRAVE
  | 1EE1        | ỡ | LATIN SMALL LETTER O WITH HORN AND TILDE
  | 1EDF        | ở | LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
  | 1EE3        | ợ | LATIN SMALL LETTER O WITH HORN AND DOT BELOW
  | 1ECD        | ọ | LATIN SMALL LETTER O WITH DOT BELOW
  | 1ECD 301    | ọ́ | LATIN SMALL LETTER O WITH DOT BELOW + COMBINING ACUTE ACCENT
  | 1ECD 300    | ọ̀ | LATIN SMALL LETTER O WITH DOT BELOW + COMBINING GRAVE ACCENT
  | 1ED9        | ộ | LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
  | 6F 331      | o̱ | LATIN SMALL LETTER O + COMBINING MACRON BELOW
  | 153         | œ | LATIN SMALL LIGATURE OE
  | 254         | ɔ | LATIN SMALL LETTER OPEN O
  | 254 301     | ɔ́ | LATIN SMALL LETTER OPEN O + COMBINING ACUTE ACCENT
  | 254 300     | ɔ̀ | LATIN SMALL LETTER OPEN O + COMBINING GRAVE ACCENT
  | 254 302     | ɔ̂ | LATIN SMALL LETTER OPEN O + COMBINING CIRCUMFLEX ACCENT
  | 254 30C     | ɔ̌ | LATIN SMALL LETTER OPEN O + COMBINING CARON
  | 254 308     | ɔ̈ | LATIN SMALL LETTER OPEN O + COMBINING DIAERESIS
  | 254 303     | ɔ̃ | LATIN SMALL LETTER OPEN O + COMBINING TILDE
  | 254 327     | ɔ̧ | LATIN SMALL LETTER OPEN O + COMBINING CEDILLA
  | 254 304     | ɔ̄ | LATIN SMALL LETTER OPEN O + COMBINING MACRON
  | 254 1DC6    | ɔ᷆ | LATIN SMALL LETTER OPEN O + COMBINING MACRON-GRAVE
  | 254 1DC7    | ɔ᷇ | LATIN SMALL LETTER OPEN O + COMBINING ACUTE-MACRON
  | 254 331     | ɔ̱ | LATIN SMALL LETTER OPEN O + COMBINING MACRON BELOW
X | 70          | p | LATIN SMALL LETTER P
X | 71          | q | LATIN SMALL LETTER Q
X | 72          | r | LATIN SMALL LETTER R
  | 155         | ŕ | LATIN SMALL LETTER R WITH ACUTE
  | 159         | ř | LATIN SMALL LETTER R WITH CARON
  | 1E5B        | ṛ | LATIN SMALL LETTER R WITH DOT BELOW
X | 73          | s | LATIN SMALL LETTER S
X | 15B         | ś | LATIN SMALL LETTER S WITH ACUTE
  | 15D         | ŝ | LATIN SMALL LETTER S WITH CIRCUMFLEX
X | 161         | š | LATIN SMALL LETTER S WITH CARON
  | 15F         | ş | LATIN SMALL LETTER S WITH CEDILLA
  | 1E63        | ṣ | LATIN SMALL LETTER S WITH DOT BELOW
  | 219         | ș | LATIN SMALL LETTER S WITH COMMA BELOW
X | DF          | ß | LATIN SMALL LETTER SHARP S
X | 74          | t | LATIN SMALL LETTER T
  | 165         | ť | LATIN SMALL LETTER T WITH CARON
  | 1E6D        | ṭ | LATIN SMALL LETTER T WITH DOT BELOW
  | 21B         | ț | LATIN SMALL LETTER T WITH COMMA BELOW
  | 167         | ŧ | LATIN SMALL LETTER T WITH STROKE
X | 75          | u | LATIN SMALL LETTER U
X | FA          | ú | LATIN SMALL LETTER U WITH ACUTE
X | F9          | ù | LATIN SMALL LETTER U WITH GRAVE
  | 16D         | ŭ | LATIN SMALL LETTER U WITH BREVE
X | FB          | û | LATIN SMALL LETTER U WITH CIRCUMFLEX
X | 1D4         | ǔ | LATIN SMALL LETTER U WITH CARON
  | 16F         | ů | LATIN SMALL LETTER U WITH RING ABOVE
X | FC          | ü | LATIN SMALL LETTER U WITH DIAERESIS
  | 171         | ű | LATIN SMALL LETTER U WITH DOUBLE ACUTE
  | 169         | ũ | LATIN SMALL LETTER U WITH TILDE
  | 75 327      | u̧ | LATIN SMALL LETTER U + COMBINING CEDILLA
  | 173         | ų | LATIN SMALL LETTER U WITH OGONEK
X | 16B         | ū | LATIN SMALL LETTER U WITH MACRON
  | 75 1DC6     | u᷆ | LATIN SMALL LETTER U + COMBINING MACRON-GRAVE
  | 75 1DC7     | u᷇ | LATIN SMALL LETTER U + COMBINING ACUTE-MACRON
  | 1EE7        | ủ | LATIN SMALL LETTER U WITH HOOK ABOVE
  | 1B0         | ư | LATIN SMALL LETTER U WITH HORN
  | 1EE9        | ứ | LATIN SMALL LETTER U WITH HORN AND ACUTE
  | 1EEB        | ừ | LATIN SMALL LETTER U WITH HORN AND GRAVE
  | 1EEF        | ữ | LATIN SMALL LETTER U WITH HORN AND TILDE
  | 1EED        | ử | LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
  | 1EF1        | ự | LATIN SMALL LETTER U WITH HORN AND DOT BELOW
  | 1EE5        | ụ | LATIN SMALL LETTER U WITH DOT BELOW
  | 289         | ʉ | LATIN SMALL LETTER U BAR
  | 289 301     | ʉ́ | LATIN SMALL LETTER U BAR + COMBINING ACUTE ACCENT
  | 289 300     | ʉ̀ | LATIN SMALL LETTER U BAR + COMBINING GRAVE ACCENT
  | 289 302     | ʉ̂ | LATIN SMALL LETTER U BAR + COMBINING CIRCUMFLEX ACCENT
  | 289 30C     | ʉ̌ | LATIN SMALL LETTER U BAR + COMBINING CARON
  | 289 308     | ʉ̈ | LATIN SMALL LETTER U BAR + COMBINING DIAERESIS
  | 289 304     | ʉ̄ | LATIN SMALL LETTER U BAR + COMBINING MACRON
X | 76          | v | LATIN SMALL LETTER V
  | 1E7D        | ṽ | LATIN SMALL LETTER V WITH TILDE
  | 28B         | ʋ | LATIN SMALL LETTER V WITH HOOK
X | 77          | w | LATIN SMALL LETTER W
  | 1E83        | ẃ | LATIN SMALL LETTER W WITH ACUTE
  | 1E81        | ẁ | LATIN SMALL LETTER W WITH GRAVE
  | 175         | ŵ | LATIN SMALL LETTER W WITH CIRCUMFLEX
  | 1E85        | ẅ | LATIN SMALL LETTER W WITH DIAERESIS
X | 78          | x | LATIN SMALL LETTER X
X | 79          | y | LATIN SMALL LETTER Y
X | FD          | ý | LATIN SMALL LETTER Y WITH ACUTE
  | 1EF3        | ỳ | LATIN SMALL LETTER Y WITH GRAVE
  | 177         | ŷ | LATIN SMALL LETTER Y WITH CIRCUMFLEX
  | FF          | ÿ | LATIN SMALL LETTER Y WITH DIAERESIS
  | 1EF9        | ỹ | LATIN SMALL LETTER Y WITH TILDE
  | 1EF7        | ỷ | LATIN SMALL LETTER Y WITH HOOK ABOVE
  | 1EF5        | ỵ | LATIN SMALL LETTER Y WITH DOT BELOW
  | 1B4         | ƴ | LATIN SMALL LETTER Y WITH HOOK
X | 7A          | z | LATIN SMALL LETTER Z
X | 17A         | ź | LATIN SMALL LETTER Z WITH ACUTE
X | 17E         | ž | LATIN SMALL LETTER Z WITH CARON
X | 17C         | ż | LATIN SMALL LETTER Z WITH DOT ABOVE
  | 1E93        | ẓ | LATIN SMALL LETTER Z WITH DOT BELOW
  | 292         | ʒ | LATIN SMALL LETTER EZH
  | 1EF         | ǯ | LATIN SMALL LETTER EZH WITH CARON
  | FE          | þ | LATIN SMALL LETTER THORN
  | 294         | ʔ | LATIN LETTER GLOTTAL STOP
adraffy commented 1 year ago

image

djstrong commented 1 year ago

Thank you.

I think that whole alphabets for popular languages should be supported. Popular we can define as used by X people.

Limiting to one CM solves a lot of problems. However, some alphabets have such characters, e.g.: image

About A+caron and A+breve - I see that they are confusable, but they both are used in different languages. I don't know much about it, but I guess people using Vietnamese keyboard layout can write easily one version and people in other country can write the other one. In Polish we just press Alt + letter acelnosxz to obtain ąćęłńóśźż. Normalization process can map them to one version, but I wouldn't be happy - it looks like discrimination: image