Каковы символы разделения в TextWrapping Silverlight?

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

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

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

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

5
задан Steve Wortham 21 February 2010 в 16:24
поделиться

3 ответа

Я не могу проверить это, но я думаю, что это сработает. Он использует объединение с двумя подзапросами для выбора скорости по правилу A или правилу B.

Select t.Date, t.Amount, 
  ConvertedAmount = t.Amount/coalesce(    
    (Select Top 1 ex.Rate 
        From ExchangeRates ex 
        Where t.Date > ex.Date 
        Order by ex.Date desc )
     ,
     (select top 1 ex.Rate 
        From ExchangeRates  
        Order by ex.Date asc)
    ) 
From Transactions t
-121--2157686-

то, что я пытался здесь...

дата эхо («D», $ x). «< br >»;

дата ожидает значение временной метки (int) в качестве второго параметра. $ x - этот ряд, содержащий неоднозначный формат даты. Сначала преобразуйте эту дату в метку времени, используя strptime или strtotime , и используйте функцию date для правильного получения значения дня.

Что касается вашей второй части, вам не нужно (и не следует) проверять название дня, чтобы рассчитать правильный понедельник, вторник и т.д. Более эффективным подходом является , например, использование strtotime для получения в прошлый понедельник и т.д.

-121--2758804-

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

Однако существует определенный алгоритм разрыва строки: Unicode Standard Annex # 14: Unicode Line Breaking Algorithm .

2
ответ дан 14 December 2019 в 08:49
поделиться

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

-121--1228972-

Стандартный C++ . Вы не можете получить больше, чем это.

Аналогично для C должна быть книга по стандарту C99, возможно, эта страница поможет: http://careferencemanual.com/

-121--3208633-

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

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

4
ответ дан 14 December 2019 в 08:49
поделиться

Я написал небольшое тестовое приложение, чтобы помочь мне определить, какой из этих символов вызывает расколоть. Это все еще ручной процесс, но, по крайней мере, сейчас на него легче смотреть. Скрипт начался с кода 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)}

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

1
ответ дан 14 December 2019 в 08:49
поделиться
Другие вопросы по тегам:

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