Комментарии 15
По поводу первого примера: союз "и" практически никогда не должен "отлепляться" от последующего слова (за очень редким исключением). Предлоги так точно нужно переносить вместе со словом, к которому они относятся. Мне кажется, проблему "висячих" союзов и предлогов проще решать неразрывными пробелами. Особенно с таким зоопарком устройств, когда заранее неизвестно какой ширины будет блок с контентом.
Можно попытаться это дело автоматизировать по словарю предлогов и союзов или, например, договорится с редактором, что двойной пробел будет преобразовываться в неразрывный. Как вариант, банальный фильтр для Wordpress'а:
function my_title_filter($title) {
//замена двойного пробела на неразрывный
$title = str_replace(' ', ' ', $title);
return $title;
}
add_filter('the_title', 'my_title_filter');
Двойной пробел как неразрывный при наборе слов, которые должны быть «вместе» на строке, выглядит ещё хуже. Уж лучше тогда как в Латехе использовать тильду (~) в качестве символа неразрывного пробела. В наборе обычных текстов она практически не используется, при этом гораздо нагляднее, чем двойной пробел.
Я руководствовался в первую очередь "обратной совместимостью". Если скрипт не отработает, то в html ничего критичного не произойдёт, т.к. двойной пробел будет считаться за один.
Да, двойной пробел не очень нагляден, особенно если следующее слово в редакторе переносится на другую строку. Но ничего другого в голову тогда не пришло, а теперь как-то устаканилось.
Знак тильды спорное решение, потому что нужно переключать раскладку, либо пользоваться комбинациями. По трудозатратам получается равносильно вводу неразрывного пробела Alt+255.
А что означает "если скрипт не отработает"? Это же пхп, а не клиентский жс, если он не отработает, то пользователь вообще ничего не увидит. Кроме того, можно было бы организовать подстановку неразрывных пробелов по словарю и/или регуляркам.
В приведённом выше примере с Wordpress подразумевается, что фильтр "зашит" в functions.php темы, а не оформлен отдельным плагином. При смене темы фильтр может потеряться.
То есть вы поленились написать плагин, захардкодили фильтр в тему, а теперь этим оправдываетесь?
Безотносительно, замена по словарю всё равно обратно совместима.
Не оправдываюсь. Я поленился привести код плагина, просто потому что он намного больше кода фильтра и мне не захотелось заниматься удалением из него других фильтров для контента.
Двойной пробел остаётся совместим с кодом для прохода по словарю. Но проход по словарю приставок не решит проблему с другими "висячими", такими, как единицы измерения, указание диапазонов. Также довольно часто требуется, чтобы два слова были неразлучны при любой ширине блока с текстом и нужно какое-то ручное редактирование. Может в этом холиваре всплывёт какая-нибудь умная идея для решения проблемы. Неразрывный пробел нужен, но доступ к нему через комбинации уж очень трудозатратный.
Если нужно что-то делать, но кому-то другому (редактору), то это называется не автоматизация, а перекладывание работы.
Если нужна именно автоматизация, то рабочим решением будет скрипт с подключением к LLM и необходимая предобработка через неё. Ошибки будут, но не больше чем при работе того же редактора.
Подключать LLM ради того, чтобы предлог не отрывался от последующего слова - это уже полный оверкилл. В любом языке количество предлогов будет не больше сотни. Написать функцию замены сможет даже школьник.
Тут да, вы правы, в этой задаче LLM будет лишней.
Видел как нейросеть используют для проставления неразрывных пробелов, и, на самом деле, они должны проставляться не только после предлогов и союзов. Но исходя из текущей постановки задачи это действительно оверхед.
Вообще, для конкретно этой задачи нужен типограф. Это софт, который приводит тексты к определённым стандартам - кавычки-ёлочки, длинные тире (—), убрать двойные пробелы, вставить неразрывные пробелы. И готовых решений для этого просто тьма, начиная от библиотек под любой популярный язык программирования, заканчивая онлайн-сервисами, как у студии Артемия Лебедева.
Нормальные типографы для русского языка, которые убирали висячие строки, заменяли кавычки на лапки и ёлки, дефисы на тире где надо и т.д., появились лет так 20 назад. Без всяких там LLM.
Для неразрывного пробела есть символ U+00A0, который прекрасно вводится с помощью типографской раскладки. Уже много лет пользуюсь, и не представляю себе, как без неё люди-то живут :). Кроме пробела, там ещё много полезных символов.
Но дальше начинается интересное. Например, есть такой «конструктор сайтов» Тильда. Так вот, там программисты специально постарались, чтобы неразрывный пробел автомагически преобразовывался в обычный, а чтобы ввести именно неразрывный пробел, надо набрать #nbsp;
. Что?!11 В каком бреду вообще можно было такое придумать?
И Adobe тоже отличились, вот уж от кого не ожидал. Привычный ⌥+пробел
не работает, надо ⌘+⌥+X
. Зачем так извращаться? Ну ладно, свой шорткат — понимаю, не у всех раскладка есть. Но чужой-то зачем ломать?
Классно, но пока 90% пользователей не обновятся до новейших браузеров мы не сможем использовать это в проде.
CSS в 2025: какие фишки теперь доступны?