ms palavra localizar / substituir texto realçado, não funciona nessa mistura de hebraico e inglês no modo da direita para a esquerda

1

Eu tenho este documento do Word

pode ser produzido manualmente ou baixado do link com o firefox (o chrome bloqueia esse site sem boa razão). Ou você pode baixá-lo de aqui

Vocêvêquatroconjuntosdecaracteresdestacados.

Oprimeiroéhebraicoedepoisinglês,nomododaesquerdaparaadireita.(ModoLTR)

Osegundoterceiroequarto,sãoingleses,emseguida,hebraico,nomododadireitaparaaesquerda.(ModoRTL)

EuestouusandoctrlcomleftshiftparairparaomodoLTRectrlcomoshiftdireitoparaalternarparaomodoRTL.

Asletrashebraicassão,porexemplo,unicode\u05D0אmasqualquerfará.

Aquiestáalocalizaçãoesubstituição

Então,naseção"encontrar", coloquei o texto em destaque. (essa opção existe se alguém clicar em format..highlight, no canto inferior esquerdo dessa caixa de diálogo)

Na seção de substituição eu escrevi XXX^&XXX em ms palavra ^& é a maneira como a palavra de MS diz o que a maioria chamaria de אאאabc , ou seja, é o texto que foi encontrado. Por isso, minha localização e substituição devem encontrar texto destacado e mantê-lo, mas colocar um XXX antes e depois dele.

Aqui está o resultado desse achado / substituição

Como você pode ver, o primeiro funcionou. Esse é o único com hebraico e inglês e modo LTR.

O segundo terceiro e o quarto falharam. Esses são os ingleses que entram em hebraico no modo da direita para a esquerda.

Eu gostaria que o find / replace funcionasse nos últimos três, ou seja, aqueles segundo terceiro e quarto, aqueles com inglês, em seguida, hebraico no modo da direita para a esquerda.

adicionado

Parecia um pouco que estava envolvendo o XXX em torno do hebraico, mas não ficou claro o porquê. Embora isso não seja o que está acontecendo / como / porque está fazendo isso.

Scott sugere o uso de uma string de substituição de FOO ^ & BAR para tentar determinar mais o que está acontecendo com a finalidade de solucionar problemas, e isso esclarece o que está acontecendo. Se você tiver FOO^&BAR no modo LTR e substituí-lo por FOOאאאabcBAR ms, a palavra verá isso e mostrará como FOOabcאאאBAR , tudo bem. Se você colocar isso no modo RTL, não fará BARabcאאאFOO ou abcBARאאאFOO . Faz abcאאא (isto é, misturou a FOO BAR nela). O que está fazendo, e eu acho que não se pode culpar a palavra ms por fazer isso, ele vê o abcBAR como um pedaço. Da mesma forma (E mais claramente), se você tiver FOO^&BAR em RTL e substituí-lo por abcBARאאאFOO , então ele substitui por %code% porque o final se onde o abc é e o final do abc é após o 'c ', então ele fura o BAR lá. Vou considerar o que fazer com isso, mas é o que está acontecendo. Talvez haja algum tipo de caractere hebreu nulo ou da direita para a esquerda que eu possa colocar depois de 'c' que irá 'consertar' isso para que eu possa envolver FOO..BAR ao redor dele.

    
por barlop 22.08.2016 / 01:32

1 resposta

0

O comportamento descrito acima está correto por design e consistente com a implementação do suporte de texto bidirecional.

Primeiro, uma solução para a sua exigência como eu a entendo.

Se você quiser incluir esses exemplos de RTL com algum prefixo e sufixo e exibi-los visualmente à direita e à esquerda do texto destacado original, você poderá colocar um caractere de controle RLM após o prefixo e ele se comportará da maneira você quer.

Você pode adicionar um RLM clicando no botão "Especial" na caixa de diálogo Localizar / Substituir e escolhendo RTL Mark , ou pode simplesmente digitar ^r manualmente. Vou usar os textos PRE e POST (em vez de XXX em seus exemplos):

Sevocêusaressetexto"Substituir por" com um dos seus exemplos de RTL:

Entãovocêobtémesseresultado,queeuachoqueéoresultadoquevocêestavaprocurando:

Então,oqueestáacontecendo?

NosseusexemplosdeRTL,vocêtemumtextoqueconsisteemduaspartesouduas"execuções direcionais". A primeira é uma execução de LTR (a parte "abcd") e a segunda é uma execução de RTL (a parte "אאא" em hebraico), tudo dentro de um parágrafo que tenha uma direção básica de RTL.

Quando você adiciona um prefixo LTR (o primeiro "XXX" no seu exemplo de substituição) à execução LTR, você está apenas fazendo isso funcionar um pouco mais, como adicionar mais algumas letras à primeira palavra. Como as execuções de LTR são desenhadas da esquerda para a direita, esses novos caracteres aparecem onde deveriam. Se, em vez de "abcd", você usou a palavra "stand" e, em seguida, adicionou o prefixo "UNDER", a palavra resultante teria sido "UNDERstand" (não "standUNDER").

Para ajudar a lidar com situações como essa e resolver manualmente algumas ambiguidades, o Unicode fornece "caracteres de controle", que são marcadores invisíveis, cada um com seu próprio papel ou efeito.

A marca da direita para a esquerda (RLM) se comporta como um caractere RTL (imagine uma letra com largura zero "א"). Se colocarmos esse caractere logo após o nosso prefixo, nós efetivamente quebramos a execução da LTR que descrevi acima com um caractere hebraico. Agora o texto renderiza visualmente como você requer, com o prefixo aparecendo primeiro, na borda direita, então nosso caractere hebraico invisível, e então o original "abcd".

    
por 07.09.2016 / 21:31