|
|
|
| Здравствуйте. В аттаче приведен небольшой фрагмент кода типографа, в котором после слов, длина которых не больше 3 букв ставится неразрывный пробел Все бы хорошо, но вот почему не ставится пробел после предлога "в" в предложении:
Он сел в мое такси на "бульваре Осман : "очень" старый господин с красивыми седыми усами и седой бородой, которую, впрочем, он потом, когда мы ближе познакомились, сбрил.
|
Заранее спасибо. | |
|
|
|
|
|
|
|
для: antf
(14.03.2007 в 00:30)
| | Тестируете на локальной машине, на сервере? | |
|
|
|
|
|
|
|
для: cheops
(14.03.2007 в 13:29)
| | На локальной машине. | |
|
|
|
|
|
|
|
для: antf
(14.03.2007 в 13:34)
| | Никто не догадывается с чем связан такой глюк? | |
|
|
|
|
|
|
|
для: antf
(21.03.2007 в 11:21)
| | Можно предположить - потому, что следующее слово тоже короткое. | |
|
|
|
|
|
|
|
для: antf
(14.03.2007 в 00:30)
| | Я не полез в дебри, но могу сказать, что добился почти верного результата, когда исправил две строчки:
//короткие слова 1-3 символа
$str = preg_replace("/( | )?\b([а-я]{1,3})\b/i", " $2 ", $str);
// $str = preg_replace("/^([а-яa-z]{1,3})\s/i", " $1 ", $str);
|
Прошу обратить внимание, что вторая строка при таком подходе вообще не нужна. Для справки: \b обозначает конец слова - невидимое и эвфемерное междусимвольное пространство на границе слова и неслова. | |
|
|
|
|
|
|
|
для: SHAman
(22.03.2007 в 13:15)
| | У меня не подходит :) Сейчас, наверное, все будут смеятся, но нужно повторить пять раз одну и ту же строку кода:
//ставим неразрывный пробел после коротких слов 1-3 символа
$str = preg_replace("/( |\s)([а-я]{1,3})\s/im", " $2 ", $str);
$str = preg_replace("/( |\s)([а-я]{1,3})\s/im", " $2 ", $str);
$str = preg_replace("/( |\s)([а-я]{1,3})\s/im", " $2 ", $str);
$str = preg_replace("/( |\s)([а-я]{1,3})\s/im", " $2 ", $str);
$str = preg_replace("/( |\s)([а-я]{1,3})\s/im", " $2 ", $str);
|
| |
|
|
|
|
|
|
|
для: antf
(26.03.2007 в 00:31)
| | Правда при таком тексте все равно выдает ошибки, не ставит пробелы:
на на на на на на на на на на на на на на на на на на на на на на на на на на на
на на на на на на на на на на на на на на на на на на на на на на на на на на на
на на на на на на на на на на на на на на на на на на на на на на на на на на на
|
Типограф Лебедева тоже не справляется :) Видно причина кроется в свойствах самих регулярных выражений.
http://web.artlebedev.ru/tools/typograf/ | |
|
|
|
|
|
|
|
для: antf
(26.03.2007 в 00:38)
| | Не может быть, чтобы регулярки работали не правильно! Им уже много лет и их активно пользуют. И разрабатывал их далеко не дурак. Так что этот вариант отпадает.
Просто нужно ставить цикл while (есть такое дело) {изменять} Почти наверняка поможет. | |
|
|
|
|
|
|
|
для: SHAman
(26.03.2007 в 13:49)
| | Я не говорю, что они работают неправильн. Я говорю, что тут какое-то свойство, о котором надо знать. См. типограф Лебедева там такие же глюки. | |
|
|
|
|
|
|
|
для: antf
(26.03.2007 в 14:40)
| | Если я не ошибаюсь, то вот эта регулярка, лови ; )
$str = preg_replace("/\b([а-я]{1,3})\b\s/im", "$1 ", $str);
|
Хотя я бы заменил [а-я] на \w, или расширил бы до [a-zа-я]
Кстати, я знаю один неплохой типограф, доступный для скачивания. Можешь глянуть. | |
|
|
|
|
|
|
|
для: antf
(14.03.2007 в 00:30)
| | будет интересно почитать о шаблонах для типографики. | |
|
|
|