ms word найти / заменить выделенный текст, не работает с этим сочетанием иврита и английского в режиме справа налево

643
barlop

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

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

enter image description here

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

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

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

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

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

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

enter image description here

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

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

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

enter image description here

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

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

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

добавленной

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

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

1
Возможно, вам удастся отладить это лучше, если вы попробуете более интеллектуальную строку замены, такую ​​как `FOO ^ & BAR`. Я думаю, что вы получите «RAB אאא FOOabcd», но я не знаю - это может быть «BAR אאא FOOabcd». В любом случае, это что-то вроде того, что вы просили - поставить «FOO» перед «abcd» и «BAR» после «אאא». Видя, что это может быть образовательным. PS Что вы ожидаете получить? Что-то похожее на «FOO אאא abcdBAR»? Какую последовательность символов вы надеетесь получить, что будет выглядеть так? Scott 7 лет назад 0
Вы говорите (среди ваших возможностей для замены строки `FOO ^ & BAR`), что это может быть" BAR אאא FOOabcd "` Это так. Но я не вижу, как это помогает в устранении неполадок - если что-то, это немного усложняет. Я не против, какую строку он кладет слева, а какую - справа. И, как вы видите, это не меняет порядок букв, поэтому FOO остается FOO, אבג остается אבג, а BAR остается BAR, и я бы не хотел, чтобы он изменил порядок букв. barlop 7 лет назад 0
@ Скотт, вы делаете интересное замечание, повторно устраняете неполадки ... он прояснил, что происходит, я добавил правку для этого. barlop 7 лет назад 0
может быть связано - http://stackoverflow.com/questions/9613613/why-words-are-shuffled-when-i-insert-english-words-in-any-arabic-urdu-persian-te barlop 7 лет назад 0
может сохранить как XML и выяснить что-то об этом, в том числе понимание структуры и использования анализатора XML barlop 7 лет назад 0
Может быть, использовать VBA. Или, может быть, можно сохранить как HTML, а затем увидеть " выделенный текст .. (возможно, вложенный диапазон) ... ... более выделенный текст", а затем прочитать / изменить HTML в C # с помощью некоторого DOM-парсера. barlop 7 лет назад 0

1 ответ на вопрос

0
Atzmon

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

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

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

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

enter image description here

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

enter image description here

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

enter image description here

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

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

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

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

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

Я заметил несколько вещей: A) При копировании / вставке 200E или 200F из charmap, тогда ms word вставляет новую строку, чтобы легче было экспериментировать с некоторыми вещами в блокноте, чем со словом. B) мои эксперименты, чтобы понять это, упрощены знанием того, что когда базовое направление - LTR, то при написании языка LTR никакой маркер не может иметь значения, а при написании языка RTL в режиме LTR - только маркер LTR. может иметь значение. Таким образом, маркер LTR является единственным маркером, который может иметь значение в режиме LTR, и он применяется только к языкам RTL. barlop 7 лет назад 0
Точно так же, когда в режиме RTL, единственным маркером, который имеет значение, является маркер LTR, и при написании языка RTL. Эти правила и, например (те, которые следуют за буквой «B», делают эксперименты намного проще. Я также обнаружил, что это можно понять помогает (в блокноте) ввести строку поиска, а затем в разделе замены ввести строку замены даже без ^ & или ^ r или ^ s, поэтому введите ее вручную и скопируйте / вставьте маркер RTL или LTR. вы можете сделать ctrl-вправо или ctrl-влево в блокноте find-replace. После этого я смог понять, что происходит в слове, или, по крайней мере, сделать это в слове barlop 7 лет назад 0
Вы бы согласились с тем, что я написал, в частности, о том, когда маркеры RTL и LTR применяются (оказывают влияние) и не применяются (не имеют эффекта)? barlop 7 лет назад 0

Похожие вопросы