1

У меня есть это слово документ

Вы можете создать его вручную или загрузить с http://ge.tt/8zgZScd2 с помощью Firefox (хром блокирует этот сайт без веской причины). Или вы можете скачать его здесь

Вы видите четыре выделенных набора символов.

Первый - иврит, затем английский, в режиме слева направо. (Режим LTR)

Второй третий и четвертый, английский, а затем иврит, в режиме справа налево. (Режим RTL)

Я использую Ctrl с левым смещением, чтобы перейти в режим LTR, и Ctrl с правым смещением, чтобы перейти в режим RTL.

Буквы на иврите, например, Юникод \u05D0 א но подойдут любые.

Вот найди и замени

Таким образом, в разделе «найти», я вставил, чтобы найти выделенный текст. (эта опция существует, если щелкнуть по кнопке format..highlight в левом нижнем углу этого диалогового окна)

В разделе замены я написал XXX^&XXX в виде слова MS ^& - это способ сказать, что большинство из них назвали бы \0 то есть текст, который был найден. Поэтому мой поиск и замена должны найти выделенный текст и сохранить его, но поставить XXX до и после него.

Вот результат того, что найти / заменить

Как видите, первый сработал. Это иврит, затем английский и режим LTR.

Второй третий и четвертый провалились. Это те, которые с английским, а затем ивритом в режиме справа налево.

Я хотел бы, чтобы поиск / замена работали для последних трех, то есть для тех, кто второй третий и четвертый, с английским языком, а затем ивритом в режиме справа налево.

добавленной

Это выглядело так, словно он оборачивал XXX вокруг иврита, но не было понятно, почему. Хотя это не то, что происходит / как / почему это происходит.

Скотт предлагает использовать замещающую строку FOO ^ & BAR, чтобы попытаться определить больше того, что происходит в целях устранения неполадок, и это действительно проясняет, что происходит. Если у вас есть אאאabc в режиме LTR, и вы заменили его на FOO^&BAR ms ms увидит это и покажет как FOOאאאabcBAR что все в порядке. Если вы переведете это в режим RTL, это не сделает FOOabcאאאBAR или BARabcאאאFOO . Это делает abcBARאאאFOO(то есть он смешал в нем FOO BAR). Что он делает, и я полагаю, что никто не может упустить слово за это, он видит abcBAR как кусок. Точно так же (и более ясно), если у вас есть abcאאא в RTL и вы заменяете его на FOO^&BAR то он заменяет его на abcBARאאאFOO потому что конец, если где abc находится, и конец abc следует после 'c', поэтому вставляет БАР там. Я подумаю, что делать с этим, но это то, что происходит. Может быть, есть какой-нибудь символ с нулевым ивритом или справа налево, который я могу поставить после 'c', чтобы это "исправить", чтобы я мог обернуть FOO ..Бар вокруг него.

1 ответ1

0

Поведение, описанное выше, является правильным по дизайну и согласуется с реализацией поддержки двунаправленного текста.

Во-первых, решение вашего требования, насколько я понимаю.

Если вы хотите обернуть эти примеры RTL некоторым префиксом и суффиксом и визуально отобразить их справа и слева от исходного выделенного текста, вы можете поместить управляющий символ RLM после префикса, и он будет вести себя так, как вы хотите.

Вы можете добавить RLM, нажав кнопку "Special" в диалоговом окне поиска / замены и выбрав « RTL Mark , или вы можете просто ввести « ^r вручную. Я собираюсь использовать тексты PRE и POST (вместо XXX в ваших примерах):

Если вы используете этот текст "Заменить на" одним из ваших примеров RTL:

Тогда вы получите этот результат, который, я думаю, является результатом, который вы искали:

Так что же происходит?

В ваших примерах RTL у вас есть текст, который состоит из двух частей или двух "направленных прогонов". Первый - это запуск LTR (часть "abcd"), а второй - запуск RTL (часть "אאא" на иврите), все в абзаце с базовым направлением RTL.

Когда вы добавляете префикс LTR (первый "XXX" в вашем примере замены) к запуску LTR, вы просто делаете этот запуск немного длиннее, как добавление еще нескольких букв к первому слову. Поскольку прогоны LTR отрисовываются слева направо, эти новые символы появляются там, где и должны. Если бы вместо "abcd" вы использовали слово "stand", а затем добавили префикс "UNDER", полученное слово было бы "UNDERstand" (не "standUNDER").

Чтобы помочь справиться с подобными ситуациями и вручную устранить некоторые неоднозначности, Unicode предоставляет "управляющие символы", которые являются невидимыми маркерами, каждый со своей ролью или эффектом.

Знак справа налево (RLM) ведет себя как символ RTL (представьте букву нулевой ширины "א"). Если мы поместим этот символ сразу после нашего префикса, мы фактически сломаем тот запуск LTR, который я описал выше, с ивритским символом. Теперь текст отображается визуально так, как вам нужно, с префиксом, появляющимся сначала у самого правого края, затем с нашим невидимым ивритским символом, а затем с оригинальным "abcd".

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .