Im Arabischen gibt es wie in einigen anderen Sprachen sogenannte Diakritika, um die Aussprache zu verbessern. Es gibt keine Konvention darüber, wie viele Diakritika für ein einzelnes Wort geschrieben werden sollen. Einige verwenden das Minimum (das ich bevorzuge) gerade genug, um die Aussprache zu disambiguieren, während andere sie überflüssig oder nur für ästhetische kalligraphische Zwecke verwenden. Daher gibt es große Unterschiede, was und wie viele Diakritika mit einem Wort verbunden sind. Wenn ich isearch-forward/backward
drücke C-s/r
, tritt ein Problem auf, wenn ich es in den Such-Minipuffer ohne diakritische Zeichen eintippe. Wenn es diakritische Zeichen enthält, stimmt es nicht mit demselben Wort im Text überein, sodass die Suche nach diesem Wort mit seinen potenziellen diakritischen Zeichen immer unbefriedigend wird.
Gibt es eine Möglichkeit, die Suche / Regexp-Suche von Diakritika unbewusst zu machen? Ich hoffe, es gibt eine Antwort, die erweitert werden kann, um sie einzuschließen regexp C-M-s/r
und zu grep
suchen, die ich ziemlich oft in Steuerprojektilen verwende, um in Latexprojekten mit mehreren Dateien nach einem Wort zu suchen.
Aktualisieren
Es wäre schön zu sehen, dass Emacs in all seinen Suchfunktionen den Abziehschritt für den Text ausführt (von Akzenten / diakritischen Zeichen / Sie nennen ihn), bevor der Schritt als Standardverhalten abgeglichen wird, das bei Bedarf möglicherweise durch ein Präfix deaktiviert wird egal welche Sprache zur Hand ist. Wenn ich nach etwas suche, erwarte ich normalerweise nicht, dass der beste Editor (Emacs) bei diesem Auftrag versagt, nur aufgrund einiger diakritischer Zeichen oder Akzente, die selten oder nie benötigt werden, um alltägliche Textaufgaben zu erledigen.
quelle
ucs-normalize-*
Funktionen in anlisp/international/ucs-normalize.el
. Es gibt keine vordefinierte Suchfaltung für diese, wie dies bei der Fallfaltung der Fall ist, aber Sie können zumindest eine Region normalisieren, bevor Sie sie durchsuchen. Eine gute Implementierung ist wahrscheinlich eine ziemlich komplexe Aufgabe.php
implementiert: stackoverflow.com/a/25563250/1288722 - auch implementiert inJavascript
: stackoverflow.com/a/7193622/1288722helm-swoop
?Antworten:
Hier ist ein grober Anfang, basierend auf der Liste der kombinierten Zeichen in dieser Antwort (und dann erweitert). (Als Community-Wiki markieren - bitte bearbeiten und verbessern!)
Wenn also ein Puffer "الْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ" enthält und ich bewerte
(arabic-search-without-diacritics "الحمد لله رب العالمين")
, findet er den Text. Es funktioniert auch interaktiv, wieM-x arabic-search-without-diacritics
.Alternativer Ansatz:
Hier ist ein vollständiges Codebeispiel, das zeigt, wie diakritische und andere nicht räumliche Markierungen (
Mn
Eigenschaften) in Regexp-Übereinstimmungen aus normalisierten Zeichenfolgen entfernt werden können. Es funktioniert mit den angegebenen Beispielen und IMO ist der richtige Ansatz.quelle
1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1648
- kostenlos zu aktualisieren.arabic-search-without-diacritics
funktioniert gut, bricht aber mit einigen Worten ab. Ich weiß nicht, warum ich diese magالأَ
. Andere Einschränkung: Ich muss die Eingabemethode immer auf Arabisch setzen, wenn ich meinen String in einen Minipuffer eingebe, während er in derisearch-forward/backward
Funktion dort bleibt.kill-marks
ist der bessere Ansatz, um problemlosen Text für alle Arten der Suche bereitzustellen. Was mir unklar ist, ist, wie man das auf einem ganzen Puffer und dann auf mehreren Dateien implementiert?isearch-forward/backward
alle Vorkommen und das aktuelle Ereignis anders hervorzuheben und durch Aufrufens
vorwärts undr
rückwärts zu bewegen?