Emoji sob o capĂŽ

imagem




Nas Ășltimas semanas, Nikita Prokopov implementou suporte a emoji para Skija . Ele decidiu compartilhar alguns pequenos detalhes de como essa "maior inovação na comunicação humana desde a invenção da carta imagem" funciona nos bastidores.



Nota do tradutor: Habr nĂŁo suporta emoji, entĂŁo eu tive que sair e substituir o emoji por imagens.



Unicode



Cada personagem em um computador Ă© codificado com um nĂșmero. A codificação mais popular Ă© Unicode e as duas subvariantes mais comuns sĂŁo UTF-8 e UTF-16.



O Unicode aloca 2 21 (2 milhĂ”es) de caracteres chamados "pontos de cĂłdigo". Destes dois milhĂ”es, apenas ~ 150k caracteres estĂŁo atualmente definidos. Todas as lĂ­nguas, mortas e vivas, e outras decoraçÔes foram amontoadas nesses 150.000 sĂ­mbolos. VocĂȘ pode usar fontes diferentes para trĂĄs escrever e de cabeça para baixo: imagemassim como a exibição de «GHz» como um Ășnico glifo: imagem.



Dirigida para a seta de duas pontas direita com penas e duas linhas verticais: imagemou Semiglazov Monstro: imagem. E o pato:



imagem




Preste atenção ao bloco com hieróglifos egípcios (U + 13000 - U + 1342F), hå muitas coisas interessantes:



imagem




Emoji bĂĄsico



Emoji sĂŁo apenas caracteres Unicode, que estĂŁo localizados aqui U + 1F300-1F6FF e aqui U + 1F900-1FAFF:



imagem




Emoji se comportam como letras comuns, vocĂȘ pode fazer todas as operaçÔes com eles, como com letras ( aproximadamente traduzido: mas nĂŁo em HabrĂ©! ). Quando vocĂȘ digita “A”, o computador vĂȘ U + 0041. Quando vocĂȘ digita, o imagemcomputador vĂȘ U + 1F335.



Emoji sĂŁo fontes



Por que eles sĂŁo exibidos como imagens? Fontes de bitmap. VocĂȘ pode criar um PNG engraçado para glifos em vez de vetores chatos em preto e branco.



imagem



Cada sistema operacional vem com uma fonte emoji pré-instalada. No macOS / iOS, este é o Apple Color Emoji. Windows - Segoe UI Emoji, Android - Noto Color Emoji.



Emojis, como fontes, tĂȘm uma aparĂȘncia diferente em dispositivos diferentes. Alguns aplicativos tĂȘm seus prĂłprios emojis: WhatsApp, Twitter, Facebook.



imagem



Fontes alternativas



VocĂȘ escreve o texto em alguma fonte, como o emoji se encaixa aĂ­? E por que o texto em russo parece pobre no Clubhouse ou no Medium?



imagem




Aqui vocĂȘ estĂĄ digitando o caractere U + 1F419 e sua fonte Ă©, por exemplo, San Francisco. Mas a fonte San Francisco nĂŁo tem um glifo para U + 1F419, entĂŁo seu sistema operacional começa a procurar por outra fonte que tenha esse glifo.



U + 1F419 estĂĄ disponĂ­vel apenas em Apple Color Emoji. EntĂŁo vocĂȘ vĂȘ o seguinte: imagem.

Qualquer que seja a fonte usada, os emojis tĂȘm a mesma aparĂȘncia.



imagem




Seletor de variação-16



Alguns emojis se originaram na forma de ícones em 1993, nas seçÔes Miscellaneous Symbols U + 2600-26FF ou Dingbats U + 2700-27FF:



imagem




Esses glifos sĂŁo como letras, preto e branco. Muitas fontes tĂȘm suas prĂłprias imagem(U + 2702 TESOURA PRETA):



imagem




Apple Color Emoji tem sua prĂłpria versĂŁo:



imagem




Como o sistema operacional sabe o que exibir imagemou imagemse eles tĂȘm o mesmo cĂłdigo U + 2702?



Conheça U + FE0F, tambĂ©m conhecido como SELETOR DE VARIAÇÃO-16. Esta Ă© uma dica para o renderizador de texto alternar para emoji.



imagem




Simples, elegante e sem necessidade de destacar novos pontos de cĂłdigo. imagemtĂȘm o mesmo significado , mas um estilo de imagem ligeiramente diferente.



Aglomerados de grafemas



Aqui nos deparamos com outro problema - nossos emojis agora nĂŁo sĂŁo um ponto de cĂłdigo, mas dois. Isso significa que precisamos definir os limites do sĂ­mbolo.



Um aglomerado de grafemas nos ajudarĂĄ. Um cluster de grafema Ă© uma sequĂȘncia de pontos de cĂłdigo que Ă© vista como um Ășnico glifo legĂ­vel por humanos.



Os clusters de grafemas foram inventados nĂŁo apenas para emojis, mas tambĂ©m aplicĂĄveis ​​a alfabetos regulares. imagemÉ um Ășnico agrupamento de grafemas, mesmo que consista em dois pontos de cĂłdigo: U + 0055 MAIÚSCULAS U ​​seguido por U + 0308 DIAERESE COMBINADA.



Os clusters Grapheme apresentam muita complexidade para os programadores. VocĂȘ nĂŁo pode simplesmente fazer substring(0, 10)



para pegar os primeiros 10 caracteres - vocĂȘ pode dividir o emoji ao meio.



O reverso da linha deve ser feito de forma inteligente. U + 263A U + FE0F faz sentido, mas U + FE0F U + 263A nĂŁo.



imagem




Finalmente, vocĂȘ nĂŁo pode simplesmente invocar .length



string. Bem, vocĂȘ pode, mas o resultado vai te surpreender. Se vocĂȘ for um desenvolvedor, tente executar imagemno console do seu navegador.



Dica para o programador: se vocĂȘ estiver trabalhando com texto, obtenha uma biblioteca focada em clusters de grafemas. Para C, C ++ e JVM pode ser ICU , Swift faz tudo certo por padrĂŁo, para os outros - faça vocĂȘ mesmo.



imagem




Essa coisa tem 65 de comprimento e nĂŁo pode ser dividida. Viva com isso agora.



Modificador de tom de pele



A maioria dos emojis humanos representa uma pessoa amarela abstrata. Quando o tom de pele foi adicionado em 2015, em vez de adicionar um novo ponto de código para cada combinação de emoji e tom de pele, apenas cinco novos pontos de código foram adicionados: U + 1F3FB..U + 1F3FF



Eles não devem ser usados ​​sozinhos, mas devem ser adicionados a emoji existente ... Juntos, eles formam uma ligadura: se imprimirmos imagem(U + 1F44B WAVING HAND SIGN) e depois (U + 1F3FD MODIFICADOR DE TOM DE PELE MÉDIO), veremos que imagem



imagemnĂŁo tem seu prĂłprio ponto de cĂłdigo (esta Ă© uma sequĂȘncia de dois: U + 1F44B U + 1F3FD), mas tem sua prĂłpria aparĂȘncia e comportamento Ășnicos. No total, com a ajuda de cinco modificadores, ~ 280 emojis humanos foram transformados em 1680 variaçÔes. Aqui estĂŁo alguns dançarinos:



imagem




Joiner de largura zero



Digamos que seu amigo acabou de enviar a vocĂȘ a foto de uma maçã que ela estĂĄ cultivando em seu jardim. VocĂȘ precisa responder - como? VocĂȘ pode enviar imagemWOMAN EMOJI (U + 1F469) com a imagemalmofada de arroz SHEAF OF RICE (U + 1F33E) anexada . No final, vai funcionar imagem, mas se vocĂȘ bater U + 200D entre eles, vocĂȘ terĂĄ um fazendeiro: imagem



U + 200D Ă© chamado de Marceneiro de Largura Zero, ou ZWJ para abreviar. Funciona de forma semelhante ao que vimos com o tom de pele, mas desta vez vocĂȘ pode combinar dois emojis independentes em um. Nem todas as combinaçÔes funcionam, mas muitas funcionam, Ă s vezes de maneiras surpreendentes!



Alguns exemplos:



imagem




Uma inconsistĂȘncia estranha que notei Ă© que a cor do cabelo Ă© feita por meio do ZWJ, enquanto o tom da pele Ă© apenas um modificador de emoji sem ZWJ. Por quĂȘ? Eu nĂŁo faço ideia.



imagem




Infelizmente, alguns emojis não são implementados como combinaçÔes com ZWJ. Eu considero esta uma oportunidade perdida:



imagem




Como imprimir ZWJ? Sem chance. Mas vocĂȘ pode copiĂĄ-lo aqui: “”. Nota: este Ă© um caractere especial, portanto, espere que ele se comporte de maneira estranha. VocĂȘ nĂŁo o vĂȘ, mas ele Ă©. ( nota por: no artigo original existe, mas Habr nĂŁo permite )



Outra grande årea onde ZWJ estå a cavalo é a configuração de famílias e relacionamentos. Aqui estå uma pequena história para ilustrar:



imagem




Bandeiras



Sinalizadores de paĂ­s sĂŁo parte do padrĂŁo Unicode, mas por algum motivo nĂŁo sĂŁo implementados no Windows. Se vocĂȘ estĂĄ lendo isso em um navegador Windows - desculpe!



Sinalizadores nĂŁo tĂȘm pontos de cĂłdigo dedicados. Em vez disso, sĂŁo ligaduras de duas letras.



imagem




Esquerda - Windows, direita - Mac



Verdade, eles nĂŁo usam letras reais. Em vez disso, o alfabeto de “letra de sĂ­mbolo indicador regional” (U + 1F1E6..1F1FF) Ă© usado. Essas letras nĂŁo sĂŁo usadas para nada alĂ©m de bandeiras de composição.



O que acontece se vocĂȘ colocar duas letras aleatĂłrias juntas? NĂŁo muito: imagem(exceto que a edição de texto começa a se comportar de maneira estranha).



Se vocĂȘ quiser experimentar, fique Ă  vontade para copiar e combinar este alfabeto: imagem



Existem 258 combinaçÔes vĂĄlidas de duas letras. VocĂȘ pode encontrar todos eles?



Um efeito colateral divertido da ligadura de duas letras: imagem



SequĂȘncias de tags



Ligaduras de duas letras sĂŁo legais, mas vocĂȘ nĂŁo quer ser mais legal? Que tal ligaduras de 32 letras? Aqui estĂŁo as sequĂȘncias de tags.



Uma sequĂȘncia de tag Ă© uma sequĂȘncia de emoji regular, seguida por outro tipo de letras latinas (U + E0020..E007E), terminando com U + E007F CANCELAR TAG.



Atualmente, elas sĂŁo usadas apenas para estas trĂȘs bandeiras: Inglaterra, EscĂłcia e PaĂ­s de Gales:



imagem




Keycaps



NĂŁo Ă© superexcitante, mas Ă© necessĂĄrio para ser completo: as sequĂȘncias de teclas usam outra convenção.



Ele se parece com isto: pegue um nĂșmero * ou #, transforme-o em um emoji com U + FE0F, embrulhe-o em um quadrado com U + 20E3 COMBINANDO O KEYCAP DE ENCERRAMENTO



imagem




Existem 12 deles:



imagem




AtualizaçÔes Unicode



O Unicode é atualizado todos os anos e os emoji são uma parte essencial de cada lançamento. Por exemplo, em Unicode 13 (março de 2020) 55 novos emojis foram adicionados.



No momento em que este artigo foi escrito, nem o Mac OS (11.2.3) nem o iOS (14.4.1) suportavam emoji do tipo Unicode 13: imagem



Aqui estå o que vejo em março de 2021: imagem



Mas graças à magia do ZWJ, ainda posso entender o que acontece não é da maneira mais ideal.



ConclusĂŁo



Para resumir, existem sete maneiras de codificar emoji:



  1. Ponto de cĂłdigo Ășnico imagem
  2. Ponto de cĂłdigo Ășnico + seletor de variação-16 imagem
  3. Modificador de tom de pele imagem
  4. Sequenciamento com junta de largura zero imagem
  5. Bandeiras imagem
  6. SequĂȘncia de tags imagem
  7. SequĂȘncia de tecla imagem


Métodos de 1 a 4 podem ser combinados para construir uma postagem bastante complexa:



imagem




Se vocĂȘ for um programador, lembre-se de sempre usar a biblioteca ICU para:



  • extração de substring
  • medidas de comprimento de linha
  • corda reversa


A palavra-chave googling Ă© "Grapheme Cluster". Isso se aplica a emojis, diacrĂ­ticos ocidentais, fontes induzidas e coreanas, portanto, tome cuidado.



imagem








imagem



Vagas
, , , - .



, , , .



, , . , , , , , .



, , .







Sobre ITELMA
- automotive . 2500 , 650 .



, , . ( 30, ), -, -, - (DSP-) .



, . , , , . , automotive. , , .


Lista de publicaçÔes Ășteis sobre HabrĂ©



All Articles