Функция TextWrapping в Silverlight описана здесь. Однако я пытаюсь узнать детали их повреждающего строку алгоритма.
Очевидно, пространство заставит текст повреждать (или разделять), поощряя текст перенестись к следующей строке. И методом проб и ошибок я нашел, что эти символы также вызывают разделение:
Но я сомневаюсь, что это - полный список. Кто-либо нашел полный список символов разделения (включая Unicode)? Или у Вас есть какие-либо умные предложения для расчета этого, что я еще не думал? Метод проб и ошибок может быть медленным.
Я не могу проверить это, но я думаю, что это сработает. Он использует объединение с двумя подзапросами для выбора скорости по правилу 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
для получения в прошлый понедельник
и т.д.
Я бы предположил каждый символ, который квалифицируется как космос или пунктуация, исключая явно неразрывные символы.
Однако существует определенный алгоритм разрыва строки: Unicode Standard Annex # 14: Unicode Line Breaking Algorithm .
Я написал статью о методах, которые сокращают время компиляции. Среди этих методов можно найти сообщение о предварительно скомпилированном заголовке и его применении здесь . В нем также есть раздел о лучших практиках, которые вы можете найти интересными. Включены сценарии CMake, которые обрабатывают их прозрачно.
-121--1228972-Стандартный C++ . Вы не можете получить больше, чем это.
Аналогично для C должна быть книга по стандарту C99, возможно, эта страница поможет: http://careferencemanual.com/
-121--3208633- TextWrapping = Wrap
попытается соответствовать стандартному стандартному приложению Unicode Standard Annex # 14, которое уже связал Йоханнес.
Однако если с помощью этого подхода текст по-прежнему не подходит к ширине (из-за очень ограниченной ширины или длинных слов), то он будет ломать слово через две строки, он не будет переносить или делать что-то умное. Как только размещение буквы превысит ширину, и если она не может найти что-то в строке, что позволит ей использовать стандартный алгоритм, она продолжит слово в следующей строке.
Я написал небольшое тестовое приложение, чтобы помочь мне определить, какой из этих символов вызывает расколоть. Это все еще ручной процесс, но, по крайней мере, сейчас на него легче смотреть. Скрипт начался с кода 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)}
Очевидно, есть еще много персонажей. К сожалению, я столкнулся с икотой. Я пытался написать суперэффективный код выделения, который работал бы с текстом с переносом слов. Пока я не найду решение проблемы с выделением, я не буду утруждать себя продолжением.