Em árabe, como em alguns outros idiomas, existe o que é chamado de diacríticos para aprimorar a pronúncia. Não há convenção sobre quantos diacríticos devem ser escritos para uma única palavra. Alguns usam o mínimo (que eu prefiro) apenas o suficiente para desambiguar a pronúncia, enquanto outros os usam de forma supérflua ou apenas para fins caligráficos estéticos. Assim, há uma grande variação sobre o que e quantos diacríticos estão associados a uma palavra. Quando isearch-forward/backward
pressiono C-s/r
, surge um problema quando o digito no mini-buffer de pesquisa sem diacríticos. Ele não corresponderá à mesma palavra no texto se tiver diacríticos, tornando a tarefa de procurar essa palavra com seus potenciais diacríticos sempre insatisfatórios.
Existe uma maneira de fazer a pesquisa / regexp desconhecer os diacríticos? Espero que haja uma resposta que possa ser estendida para incluir regexp C-M-s/r
e grep
pesquisar que eu uso com frequência no helm-projectile para procurar uma palavra em projetos de látex com vários arquivos.
Atualização
Seria bom ver que o Emacs, em todas as suas funções de pesquisa, executa a etapa de remoção do texto (de acentos / diacríticos / o nome dele) antes de corresponder a etapa como um comportamento padrão que pode ser desativado por um prefixo sob demanda não importa qual idioma esteja disponível. Normalmente, quando procuro algo que não espero do melhor editor (Emacs) falhar nessa tarefa, apenas por causa de alguns sinais diacríticos ou sotaques que raramente são necessários para realizar tarefas de texto mundanas.
fonte
ucs-normalize-*
funções emlisp/international/ucs-normalize.el
. Não há dobramento de pesquisa predefinido para eles, como ocorre com o dobramento de maiúsculas e minúsculas, mas você pode pelo menos normalizar uma região antes de pesquisá-la. Uma boa implementação é provavelmente uma tarefa bastante complexa.php
implementado: stackoverflow.com/a/25563250/1288722 - também implementado emJavascript
: stackoverflow.com/a/7193622/1288722helm-swoop
?Respostas:
Aqui está um começo difícil, com base na lista de caracteres combinados nesta resposta (e depois estendida). (Marcando isso como wiki da comunidade - edite e melhore isso!)
Portanto, se um buffer contiver "الْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ", e eu avalio
(arabic-search-without-diacritics "الحمد لله رب العالمين")
, ele encontra o texto. Também funciona de forma interativa, comoM-x arabic-search-without-diacritics
.Abordagem alternativa:
Aqui está um exemplo de código completo que demonstra como marcas diacríticas e outras marcas não espaçadoras (
Mn
propriedade) podem ser removidas de seqüências normalizadas em correspondências regexp. Ele trabalha com os exemplos dados e a IMO é a abordagem correta.fonte
1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1648
- taxa gratuita para atualização.arabic-search-without-diacritics
funciona bem, mas quebra com algumas palavras, não sei por que, como estaالأَ
. Outra ressalva: eu sempre tenho que definir o método de entrada como árabe quando insiro minha string no mini-buffer, enquanto naisearch-forward/backward
função ela permanece lá.kill-marks
é a melhor abordagem para fornecer texto sem complicações pronto para todos os tipos de pesquisa. O que não está claro para mim é como implementar isso em um buffer inteiro e depois em vários arquivos?isearch-forward/backward
realçar todas as ocorrências e a atual de maneira diferente e, invocandos
, avançará er
retrocederá?