Texto bidirecional
Um texto bidirecional contém duas direções de texto, da direita para a esquerda (RTL) e da esquerda para a direita (LTR). Geralmente envolve texto contendo diferentes tipos de alfabetos, mas também pode se referir ao bustrophedon, que está mudando a direção do texto em cada linha.
Muitos programas de computador falham em exibir texto bidirecional corretamente. Por exemplo, esta página é escrita principalmente em inglês LTR, e aqui está o nome hebraico RTL Sarah: שרה, escrito sin (ש) à direita, resh (ר) no meio e heh (ה) à esquerda.
Alguns dos chamados scripts da direita para a esquerda, como o persa (e o árabe), são principalmente, mas não exclusivamente, da direita para a esquerda; expressões matemáticas, datas numéricas e unidades de rolamento de números são incorporadas da esquerda para a direita. Isso também acontece se, por ex. O inglês está embutido neles, ou vice-versa, se árabe, persa ou hebraico estiver embutido em um script da esquerda para a direita.
Suporte de script bidirecional
O suporte de script bidirecional é a capacidade de um sistema de computador exibir corretamente o texto bidirecional. O termo é frequentemente abreviado para "BiDi" ou "bidi".
As primeiras instalações de computador foram projetadas apenas para suportar um único sistema de escrita, normalmente para scripts da esquerda para a direita baseados apenas no alfabeto latino. Adicionar novos conjuntos de caracteres e codificações de caracteres permitia o suporte a vários outros scripts da esquerda para a direita, mas não suportava facilmente scripts da direita para a esquerda, como árabe ou hebraico, e misturar os dois não era prático. Os scripts da direita para a esquerda foram introduzidos por meio de codificações como ISO/IEC 8859-6 e ISO/IEC 8859-8, armazenando as letras (geralmente) na ordem de escrita e leitura. É possível simplesmente inverter a ordem de exibição da esquerda para a direita para uma ordem de exibição da direita para a esquerda, mas isso sacrifica a capacidade de exibir corretamente os scripts da esquerda para a direita. Com suporte a script bidirecional, é possível misturar caracteres de diferentes scripts na mesma página, independentemente da direção da escrita.
Em particular, o padrão Unicode fornece fundamentos para suporte BiDi completo, com regras detalhadas sobre como misturas de scripts da esquerda para a direita e da direita para a esquerda devem ser codificadas e exibidas.
Suporte bidi Unicode
O padrão Unicode exige que os caracteres sejam ordenados 'logicamente', ou seja, na sequência em que devem ser interpretados, em oposição a 'visualmente', a sequência em que aparecem. Esta distinção é relevante para suporte bidi porque em qualquer transição bidi, a apresentação visual deixa de ser a 'lógica' um. Assim, para oferecer suporte bidi, o Unicode prescreve um algoritmo para como converter a sequência lógica de caracteres na apresentação visual correta. Para isso, o padrão de codificação Unicode divide todos os seus caracteres em um dos quatro tipos: 'forte', 'fraco', 'neutro' e ' formatação explícita'.
Personagens fortes
Personagens fortes são aqueles com uma direção definida. Exemplos desse tipo de caractere incluem a maioria dos caracteres alfabéticos, caracteres silábicos, ideogramas Han, dígitos não europeus ou não árabes e caracteres de pontuação que são específicos apenas para esses scripts.
Personagens fracos
Personagens fracos são aqueles com direção vaga. Exemplos desse tipo de caractere incluem dígitos europeus, dígitos árabe-índicos orientais, símbolos aritméticos e símbolos de moeda.
Caracteres neutros
Caracteres neutros têm direção indeterminável sem contexto. Os exemplos incluem separadores de parágrafo, tabulações e a maioria dos outros caracteres de espaço em branco. Os símbolos de pontuação comuns a muitos scripts, como dois pontos, vírgula, ponto final e espaço sem quebra, também se enquadram nessa categoria.
Formatação explícita
Caracteres de formatação explícita, também chamados de "caracteres de formatação direcional", são sequências Unicode especiais que direcionam o algoritmo para modificar seu comportamento padrão. Esses caracteres são subdivididos em "marcas", "incorporações", "isolados" e "substituições". Seus efeitos continuam até a ocorrência de um separador de parágrafo ou um "pop" personagem.
Marcas
Se um "fraco" personagem é seguido por outro "fraco" caractere, o algoritmo examinará o primeiro caractere vizinho "forte" personagem. Às vezes, isso leva a erros de exibição não intencionais. Esses erros são corrigidos ou evitados com "pseudo-forte" personagens. Esses caracteres de controle Unicode são chamados de marcas. A marca (U+200E MARCA DA ESQUERDA PARA A DIREITA (LRM) ou U+200F CERTO -TO-LEFT MARK (RLM)) deve ser inserido em um local para fazer um caractere fraco fechado herdar sua direção de escrita.
Por exemplo, para exibir corretamente a linha U+2122 ™ SINAL DE MARCA REGISTRADA para uma marca inglesa (LTR) em uma passagem árabe (RTL), um LRM marca é inserida após o símbolo de marca registrada se o símbolo não for seguido por texto LTR (por exemplo, "قرأ Wikipedia™ طوال اليوم."). Se a marca LRM não for adicionada, o caractere fraco ™ terá como vizinho um caractere LTR forte e um caractere RTL forte. Portanto, em um contexto RTL, será considerado RTL e exibido em uma ordem incorreta (por exemplo, "قرأ Wikipedia™ طوال اليوم.").
Incorporações
A opção "incorporação" os caracteres de formatação direcional são o método Unicode clássico de formatação explícita e, a partir do Unicode 6.3, estão sendo desencorajados em favor de "isolados". Uma "incorporação" sinaliza que um trecho de texto deve ser tratado como direcionalmente distinto. O texto dentro do escopo dos caracteres de formatação incorporados não é independente do texto ao redor. Além disso, os caracteres dentro de uma incorporação podem afetar a ordem dos caracteres externos. O Unicode 6.3 reconheceu que as incorporações direcionais geralmente têm um efeito muito forte em seus arredores e, portanto, são desnecessariamente difíceis de usar.
Isolados
O "isolar" caracteres de formatação direcional sinalizam que um pedaço de texto deve ser tratado como isolado direcionalmente de seus arredores. A partir do Unicode 6.3, esses são os caracteres de formatação que estão sendo incentivados em novos documentos – uma vez que as plataformas de destino são conhecidas por suportá-los. Esses caracteres de formatação foram introduzidos depois que ficou claro que as incorporações direcionais geralmente têm um efeito muito forte em seus arredores e, portanto, são desnecessariamente difíceis de usar. Ao contrário da 'incorporação' caracteres de formatação direcional, 'isolar' os caracteres não têm efeito na ordem do texto fora de seu escopo. Os isolados podem ser aninhados e colocados dentro de incorporações e substituições.
Substitui
A opção "substituir" os caracteres de formatação direcional permitem casos especiais, como para números de peça (por exemplo, para forçar um número de peça feito de inglês misturado, dígitos e letras hebraicas a serem escritos da direita para a esquerda) e recomenda-se que sejam evitados sempre que possível. Como acontece com os outros caracteres de formatação direcional, "substitui" podem ser aninhados um dentro do outro, e em embeddings e isolados.
Pops
O "pop" os caracteres de formatação direcional encerram o escopo da "incorporação", "substituir" ou "isolar" mais recente.
Executa
No algoritmo, cada sequência de caracteres fortes concatenados é chamada de "executar". Um "fraco" caractere que está localizado entre dois caracteres "fortes" caracteres com a mesma orientação herdarão sua orientação. Um "fraco" caractere que está localizado entre dois caracteres "fortes" caracteres com uma direção de escrita diferente herdarão a direção de escrita do contexto principal (em um documento LTR, o caractere se tornará LTR, em um documento RTL, ele se tornará RTL).
Tabela de possíveis tipos de caracteres BiDi
Tipo | Descrição | Força | Direcção | Aspectos gerais | Característica de Bidi_Control |
---|---|---|---|---|---|
L | Esquerda para direita | Forte | L-to-R | Personagens mais alfabéticos e silábicos, caracteres chineses, dígitos não-europeus ou não-árabes, caráter LRM,... | U+200E LEFT-TO-RIGHT MARK (LRM) |
R | Direita à esquerda | Forte | R-para-L | Adlam, Hebraico, Olímpico, Mende Kikakui, N'Ko, Samaritano, scripts antigos como Kharoshthi e Nabataean, personagem RLM,... | U+200F RIGHT-TO-LEFT MARK (RLM) |
- Sim. | Carta árabe | Forte | R-para-L | Árabe, Hanifi Rohingya, Sogdian, Syriac e Thaana alfabetos, e mais pontuação específica para aqueles scripts, caráter ALM,... | U+061C ARABIC LETTER MARK (ALM) |
PT | Número europeu | Fraca | dígitos europeus, dígitos árabe-indígenas orientais, números epactos coptas,... | ||
ES | Separador Europeu | Fraca | mais sinal, sinal de menos, | ||
ET | Terminator de Número Europeu | Fraca | sinal de grau, símbolos de moeda,... | ||
Um | Número do árabe | Fraca | dígitos árabe-indic, decimal árabe e milhares separadores, dígitos Rumi, dígitos Hanifi Rohingya,... | ||
CS | separador de número comum | Fraca | Coronel., Com licença., parada completa, espaço sem ruptura, | ||
NSM | Marca de Nonspacing | Fraca | Personagens em Geral Categorias Marca, não-espaço e Marcos, enclosing (Mn, Me) | ||
BN | Boundary Neutral | Fraca | Defeito ignorables, não-caracters, caracteres de controle diferentes daqueles explicitamente dados outros tipos | ||
B | Parágrafo separador | Neutral | separador de parágrafo, Funções Newline apropriadas, determinação do parágrafo do protocolo de nível superior | ||
S | Segmento separador | Neutral | Tabs | ||
WS | Espaço branco | Neutral | espaço, espaço de figura, separador de linha, feed de formulário, espaços de bloco de punção geral (smaller set than the Unicode whitespace list) | ||
Vamos. | Outros neutras | Neutral | Todos os outros personagens, incluindo objeto substituto | ||
LRE | Embutimento de esquerda para direita | Explícito | L-to-R | Característica LRE apenas | U+202A LEFT-TO-RIGHT EMBEDDING (LRE) |
LRO | Substituição esquerda para direita | Explícito | L-to-R | Característica LRO apenas | U+202D LEFT-TO-RIGHT OVERRIDE (LRO) |
REM | Incorporação à direita para a esquerda | Explícito | R-para-L | Característica RLE apenas | U+202B RIGHT-TO-LEFT EMBEDDING (RLE) |
RAL | Substituição de direita para esquerda | Explícito | R-para-L | Característica de RLO apenas | OVERRIDE DO TRIBUNAL DE DIREITO-POIS (RLO) |
PDF PDF | Formato de direção pop | Explícito | Somente caracteres PDF | U+202C POP FORMATTING DIRECTIONAL (PDF) | |
LRI | Isolado à direita | Explícito | L-to-R | Característica LRI apenas | U+2066 LEFT-TO-RIGHT ISOLATE (LRI) |
RLI | Isolamento direito à saída | Explícito | R-para-L | Característica de RLI | ISOLATE (RLI) |
FSI | Primeiro isolamento forte | Explícito | Característica FSI apenas | U+2068 FIRST STRONG ISOLATE (FSI) | |
PDI | Isolamento de direção pop | Explícito | Característica PDI apenas | ISOLATE DIRECTIONAL U+2069 POP (PDI) | |
Notas
|
Segurança
Caracteres bidirecionais Unicode são usados na vulnerabilidade Trojan Source.
O Visual Studio Code destaca os caracteres de controle BiDi desde a versão 1.62 lançada em outubro de 2021.
O Visual Studio destaca os caracteres de controle BiDi desde a versão 17.0.3 lançada em 14 de dezembro de 2021.
Scripts que usam texto bidirecional
Hieróglifos egípcios
Os hieróglifos egípcios eram escritos bidirecionalmente, onde os sinais que tinham uma distinta "cabeça" ou "cauda" enfrentou o início da linha.
Caracteres chineses e outros scripts CJK
Os caracteres chineses podem ser escritos em qualquer direção, bem como na vertical (de cima para baixo e da direita para a esquerda), especialmente em sinais (como placas), mas a orientação dos caracteres individuais não muda. Isso pode ser visto com frequência em ônibus de turismo na China, onde o nome da empresa costuma ir da frente do veículo para a parte traseira - ou seja, da direita para a esquerda no lado direito do ônibus e da esquerda para a direita no lado esquerdo. lado do ônibus. Textos em inglês no lado direito do veículo também são comumente escritos na ordem inversa. (Veja as fotos do ônibus de turismo e do veículo do posto abaixo.)
Da mesma forma, outros scripts CJK compostos pelos mesmos caracteres quadrados, como o sistema de escrita japonês e o sistema de escrita coreano, também podem ser escritos em qualquer direção, embora horizontalmente da esquerda para a direita, de cima para baixo e verticalmente de cima para baixo da direita para a esquerda são as duas formas mais comuns.
O lado esquerdo desta aeronave da Hainan Airlines, no entanto, mostra o texto rodando da esquerda para a direita (). 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空 空
Boustrophedon
Boustrophedon é um estilo de escrita encontrado em antigas inscrições gregas e em runas húngaras. Esse método de escrita alterna a direção e geralmente inverte os caracteres individuais em cada linha sucessiva.
Tipo de lua
O tipo de lua é uma adaptação em relevo do alfabeto latino inventado como um alfabeto tátil para cegos. Inicialmente, o texto mudou de direção (mas não a orientação do caractere) no final das linhas. Linhas especiais em relevo conectavam o final de uma linha e o início da seguinte. Por volta de 1990, mudou para uma orientação da esquerda para a direita.
Contenido relacionado
História do esperanto
Active Directory
Diérese