молодцы. У меня довольно извращенный вопрос. Пожалуйста, прости меня:)
Существует официальный алгоритм, который описывает, как должен быть представлен двунаправленный текст Unicode.
http://www.unicode.org/reports/tr9/tr9-15.html
Я получаю строку (из какого-либо стороннего источника), которая содержит символы латинского и иврита, а также цифры, пробелы, знаки пунктуации и т. Д.
Проблема в том, что полученная мной строка уже в форме представления. То есть - последовательность символов, которые я получаю, должна быть представлена слева направо.
Теперь моя цель - найти строку в юникоде, представление которой точно такое же. Значит - мне нужно передать эту строку другому объекту; Затем он будет отображать эту строку в соответствии с официальным алгоритмом, и результат должен быть таким же.
Предполагая следующее:
- Направление текста по умолчанию (объекта рендеринга) - RTL.
- Я не хочу вставлять «специальные символы Юникода», которые явно переопределяют направление текста (например, RLO, RLE и т. Д.)
- Я подозреваю, что может существовать несколько решений. Если так - я бы хотел сохранить RTL-вид строки в максимально возможной степени. Строка обычно состоит из еврейских слов в основном. Я хотел бы сохранить правильный порядок этих слов и символов внутри этих слов. Принимая во внимание, что другие последовательности символов могут (и должны) быть транспонированы.
Один наивный способ решить эту проблему - просто поменять всю строку (это заботится о еврейских словах), а затем обменять внутри нее последовательности не-ивритских символов. Это, однако, не всегда дает правильные результаты, потому что фактические правила представления довольно сложны.
Единственный комплексный алгоритм, который я пока вижу, - это проверка методом перебора. Строка может быть разделена на последовательности символов одного класса. Эти последовательности могут быть объединены в случайном порядке, плюс любая из них может быть обращена вспять. Я могу проверить все эти комбинации, чтобы получить правильный результат.
Плюс эта техника может быть оптимизирована. Например, порядок слов на иврите известен, поэтому нам нужно только проверить различные комбинации их «соединяющих» последовательностей.
Есть идеи получше? Если у вас есть идея, не обязательно все решение - это нормально. Я ценю любую идею.
Заранее спасибо.