Каковы разделенные символы в TextWrapping в Silverlight? - PullRequest
5 голосов
/ 21 февраля 2010

Функция TextWrapping в Silverlight описана здесь . Тем не менее, я пытаюсь выяснить детали их алгоритма разрыва строки.

Очевидно, что пробел приведет к разрыву (или разбиению) текста, побуждая текст переноситься на следующую строку. И методом проб и ошибок я обнаружил, что эти символы также вызывают разделение:

  • \ t (вкладка)
  • -
  • !

Но я сомневаюсь, что это полный список. Кто-нибудь нашел полный список разделенных символов (включая Юникод)? Или у вас есть какие-нибудь умные предложения для выяснения этого, о которых я еще не думал? Метод проб и ошибок может быть медленным.

Ответы [ 3 ]

4 голосов
/ 21 февраля 2010

TextWrapping = Wrap будет пытаться соответствовать стандартному Приложению № 14 к стандарту Unicode, которое Йоханнес уже связал.

Однако, если при таком подходе текст по-прежнему не соответствует ширине (из-за очень ограниченной ширины или длинных слов), он разбивает слово на две строки, не переносит или делает что-то умное. Как только размещение буквы превысит ширину, и если в строке не найдется что-то, что позволит использовать стандартный алгоритм, оно продолжит слово на следующей строке.

2 голосов
/ 21 февраля 2010

Я бы предположил, что каждый символ, который квалифицируется как пробел или пунктуация, исключая явно неразрывные символы.

Однако существует определенный алгоритм для разрыва строки: Стандарт Unicode Приложение # 14: Алгоритм разрыва строки Unicode .

1 голос
/ 22 февраля 2010

Я написал небольшое тестовое приложение, чтобы помочь мне определить, какой из этих символов вызывает разделение. Это все еще ручной процесс, но, по крайней мере, теперь на него легче смотреть. Сценарий начался с кода ASCII 1, а я поднялся до 3000.

Это вызывает разделение после символа:

Private arrSplitAfter() As Char = {CChar(" "), CChar("-"), ChrW(9), CChar("!"), CChar("?"), CChar("%"), CChar(")"), CChar("/"), CChar("]"), CChar("|"), CChar("}"), ChrW(133), ChrW(162), ChrW(176), ChrW(1418), ChrW(1478), ChrW(1547), ChrW(1548), ChrW(1563), ChrW(1566), ChrW(1567), ChrW(1642), ChrW(1748), ChrW(2404), ChrW(2405)}

И это вызывает разделение перед символом:

Private arrSplitBefore() As Char = {CChar("$"), CChar("("), CChar("+"), CChar("["), CChar("\"), CChar("{"), ChrW(163), ChrW(164), ChrW(165), ChrW(177), ChrW(180), ChrW(712), ChrW(716), ChrW(2546), ChrW(2547), ChrW(2801)}

Очевидно, что осталось еще много персонажей. К сожалению, я столкнулся с ошибкой. Я пытался написать какой-то очень эффективный код подсветки, который бы работал на тексте, завернутом в слова Пока я не смогу найти решение для своих проблем с освещением, я не буду продолжать.

...