Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Улучшаем удобочитаемость текста (Navigator)
Автор Сообщение
Navigator
Участник форума



Зарегистрирован: 27.11.2004
Сообщ.: 223
Карма: -13
   поощрить/наказать

Откуда: Павловский Посад

СообщениеДобавлено: Вс Мар 20, 2005 8:45 pm (написано за 1 минуту 55 секунд)
   Заголовок сообщения: Улучшаем удобочитаемость текста
Ответить с цитатой

// Если не так назвал тему, не пинайте

Эта функция заменяет:
  1. Простые кавычки на «ёлочки»
  2. «Минус» между словами на тире (—)
  3. Также заменяет два или три минуса между словами на тире
  4. Убирает пробелы между скобками и словами («( слово )« становится в »(слово)»)
  5. То же самое, но для кавычек
например,
Цитата:
Я ""кажется" "что-то"" -- ( забыл )
становится в
Цитата:
Я ««кажется» «что-то»» — (забыл)
К сожалению, в регулярных выражениях я не очень сйлён, поэтому могут быть глюки... подскажите, если что.

Код функции:
Код (php): скопировать код в буфер обмена
function tipografika($str) {
        $str = preg_replace("/\"(|(.+?))\"/",\\2»",$str); // Делаем «правильные» кавычки
        $str = preg_replace("/»(|(.+?))«/",\\2»",$str); // Устраняем косяки, которые могут возникнуть благодаря предыдущему выражению
        $str = preg_replace("/«(.+?)«(.+?)»(.+?)»/",\\\\\\3»",$str); // Опять устраняем косяки =)
        $str = preg_replace("/(.+?)\s-\s(.+?)/","\\1 — \2",$str); // Заменяем «минус» между словами на тире
        $str = preg_replace("/(.+?)\s--\s(.+?)/","\\1 — \\2",$str); // Заменяем два минуса между словами на тире
        $str = preg_replace("/(.+?)\s---\s(.+?)/","\\1 — \\2",$str); // Заменяем три минуса между словами на тире
        $str = preg_replace("/\(\s(.+?)(|\s)\)/","(\\1)",$str); // Убираем пробелы между словами и скобками
        $str = preg_replace("/«\s(.+?)(|\s)»/",\\1»",$str); // Убираем пробелы между словами и кавычками
        return $str;
}


Последний раз редактировалось: Navigator (Пн Мар 21, 2005 8:31 am), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
Юрий Насретдинов
Модератор



Зарегистрирован: 13.03.2003
Сообщ.: 8584
Карма: 237
   поощрить/наказать

Откуда: 007 495

СообщениеДобавлено: Вс Мар 20, 2005 9:36 pm (спустя 51 минуту; написано за 37 секунд)
   Заголовок сообщения:
Ответить с цитатой

Navigator
http://www.artlebedev.ru/tools/typograf/

Лучше бы сделали, чтобы Ваш скрипт отправлял текст туда и выдирал соответствующий результат - пользы было бы намного больше
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора ICQ Number
striimii
Участник форума



Зарегистрирован: 14.03.2005
Сообщ.: 50
Карма: 11
   поощрить/наказать

Откуда: Москва, Россия

СообщениеДобавлено: Вс Мар 20, 2005 10:31 pm (спустя 54 минуты; написано за 1 минуту 45 секунд)
   Заголовок сообщения:
Ответить с цитатой

Ходить куда-то из скрипта не есть лучшее решение. Времени это займет в разы дольше самой кривонаписанной процедуры. Да и надежность соединения еще сыграет немаловажную роль.

Лучше экспериментально пробить несколько текстовиков у лебедева, и посмотреть что он выправляет. Тоже и также сделать потом у себя.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
Maus
Модератор



Зарегистрирован: 29.06.2003
Сообщ.: 7410
Карма: 242
   поощрить/наказать

Откуда: пос. Омсукчан Магаданской области

СообщениеДобавлено: Вс Мар 20, 2005 11:12 pm (спустя 40 минут; написано за 46 секунд)
   Заголовок сообщения:
Ответить с цитатой

yUAC
Я, конечно, извиняюсь, но почему эта тема до сих пор в "Готовых решениях"? Раз обсуждение приняло такой оборот?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Константин Жинько [tIT]
Сотрудник «Лаборатории»



Зарегистрирован: 12.06.2004
Сообщ.: 2265
Карма: 111
   поощрить/наказать

Откуда: Москва

СообщениеДобавлено: Пн Мар 21, 2005 12:22 am (спустя 1 час 9 минут; написано за 2 минуты 6 секунд)
   Заголовок сообщения:
Ответить с цитатой

yUAC
Кстати этот тупограф заменяет минус на знак #151;, на что ругается валидатор XHTML с w3c.org. А вот на mdash; он не ругается, поэтому я предпочитаю именно его.

Maus
Да уж сабж сыроват -- но направление верное! =)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
Navigator
Участник форума



Зарегистрирован: 27.11.2004
Сообщ.: 223
Карма: -13
   поощрить/наказать

Откуда: Павловский Посад

СообщениеДобавлено: Пн Мар 21, 2005 8:33 am (спустя 8 часов 11 минут; написано за 1 минуту 5 секунд)
   Заголовок сообщения:
Ответить с цитатой

Немного исправил функцию -- были небольше косяки, вроде этого:
Navigator писал(а):
(«( слово )« становится в »(слово)»)
Я в функции, правда, заменяю на сами символы, а не на их эквиваленты... но впрочем и так сойдёт =)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
Дмитрий Кóтеров
Администратор



Зарегистрирован: 10.03.2003
Сообщ.: 13553
Карма: 405
   поощрить/наказать


СообщениеДобавлено: Пн Мар 21, 2005 12:12 pm (спустя 3 часа 39 минут)
   Заголовок сообщения:
Ответить с цитатой


М

Navigator писал(а):
 в регулярных выражениях я не очень сйлён, поэтому могут быть глюки...
Вообще говоря, с такой постановкой вопроса - в Готовых решениях этому топику не место. Так что извините... Давайте так сделаем. Вы эту функцию поиспользуете некоторое время (скажем, пару месяцев). За это время наверняка найдутся баги, Вы их исправите в своих проектах. А уж затем - в Готовые решения положим.

Перенесено из форума: Склад готовых решений :: PHP.
Перенесено в форум: Разное :: PHP.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Maus
Модератор



Зарегистрирован: 29.06.2003
Сообщ.: 7410
Карма: 242
   поощрить/наказать

Откуда: пос. Омсукчан Магаданской области

СообщениеДобавлено: Пн Мар 21, 2005 1:35 pm (спустя 1 час 22 минуты; написано за 2 минуты 20 секунд)
   Заголовок сообщения:
Ответить с цитатой

Код (php): скопировать код в буфер обмена
function tipografika($str) {
// ...
        $str = preg_replace("/(.+?)\s-+?\s(.+?)/","\\1 & mdash; \\2",$str); // Заменяем «минусы» между словами на тире
// ...
}
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
WingedFox
Профессионал



Зарегистрирован: 29.04.2003
Сообщ.: 4035
Карма: 253
   поощрить/наказать

Откуда: Питер

СообщениеДобавлено: Пн Мар 21, 2005 2:01 pm (спустя 25 минут; написано за 3 минуты 35 секунд)
   Заголовок сообщения:
Ответить с цитатой

Есть замечательная штука в регах "Граница слова" называется.
Код (php): скопировать код в буфер обмена
preg_replace("/\b(\s+)-{1,3}(\s+)\b/","\\1—\\2",$str);
И ещё
Код (php): скопировать код в буфер обмена
preg_replace(array("/\b\"/","/\"\b/"),array("»","«"),$str);
А удалять пробелы между кавычками и словами - плохая практика.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
Navigator
Участник форума



Зарегистрирован: 27.11.2004
Сообщ.: 223
Карма: -13
   поощрить/наказать

Откуда: Павловский Посад

СообщениеДобавлено: Пн Мар 21, 2005 3:20 pm (спустя 1 час 19 минут; написано за 1 минуту 12 секунд)
   Заголовок сообщения:
Ответить с цитатой

WingedFox, спасибо.
WingedFox писал(а):
А удалять пробелы между кавычками и словами - плохая практика.
Вот, например, « слово ». А вот другое «слово». Что приятнее читается?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
WingedFox
Профессионал



Зарегистрирован: 29.04.2003
Сообщ.: 4035
Карма: 253
   поощрить/наказать

Откуда: Питер

СообщениеДобавлено: Пн Мар 21, 2005 3:48 pm (спустя 27 минут; написано за 2 минуты 47 секунд)
   Заголовок сообщения:
Ответить с цитатой

Navigator
Пожалуйста.

Правильнее читать так, как решил автор.
А учитывая что в качестве кавычек используется знак дюйма, определить автоматически направление "ёлочек" и "лапок" - нетривиальная задача. Решать её регулярными выражениями - совсем плохая идея.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
Maus
Модератор



Зарегистрирован: 29.06.2003
Сообщ.: 7410
Карма: 242
   поощрить/наказать

Откуда: пос. Омсукчан Магаданской области

СообщениеДобавлено: Пн Мар 21, 2005 4:16 pm (спустя 27 минут; написано за 14 секунд)
   Заголовок сообщения:
Ответить с цитатой

WingedFox писал(а):
Решать её регулярными выражениями - совсем плохая идея.
А как же иначе её решать?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
WingedFox
Профессионал



Зарегистрирован: 29.04.2003
Сообщ.: 4035
Карма: 253
   поощрить/наказать

Откуда: Питер

СообщениеДобавлено: Пн Мар 21, 2005 4:20 pm (спустя 4 минуты; написано за 59 секунд)
   Заголовок сообщения:
Ответить с цитатой

Maus
Либо руками, либо посимвольным анализом текста, допуская что первая кавычка является открывающей.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
Navigator
Участник форума



Зарегистрирован: 27.11.2004
Сообщ.: 223
Карма: -13
   поощрить/наказать

Откуда: Павловский Посад

СообщениеДобавлено: Пн Мар 21, 2005 5:23 pm (спустя 1 час 2 минуты; написано за 41 секунду)
   Заголовок сообщения:
Ответить с цитатой

WingedFox писал(а):
руками
функция и есть для того, чтобы ничего не делать «руками» =)
WingedFox писал(а):
либо посимвольным анализом текста
эээ... это как?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
WingedFox
Профессионал



Зарегистрирован: 29.04.2003
Сообщ.: 4035
Карма: 253
   поощрить/наказать

Откуда: Питер

СообщениеДобавлено: Пн Мар 21, 2005 5:30 pm (спустя 7 минут; написано за 4 минуты 9 секунд)
   Заголовок сообщения:
Ответить с цитатой

Navigator писал(а):
функция и есть для того, чтобы ничего не делать «руками» =)
Если функция не умеет давать полностью адекватный результат, то лучше её не применять.
Иначе будут появляться комментарии типа:
Navigator писал(а):
// Устраняем косяки, которые могут возникнуть благодаря предыдущему выражению
// Опять устраняем косяки =)
И всё равно адекватный результат будет получаться далеко не всегда.
А правила оформления текста внедрить в производственный процесс совсем не трудно.
Navigator писал(а):
эээ... это как?
Посимвольное чтение файла, анализ появляющихся кавычек, определение направленя кавычки в зависимости от контекста... =)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
Navigator
Участник форума



Зарегистрирован: 27.11.2004
Сообщ.: 223
Карма: -13
   поощрить/наказать

Откуда: Павловский Посад

СообщениеДобавлено: Пн Мар 21, 2005 9:43 pm (спустя 4 часа 12 минут; написано за 48 секунд)
   Заголовок сообщения:
Ответить с цитатой

WingedFox писал(а):
А правила оформления текста внедрить в производственный процесс совсем не трудно.
я вообще-то эту ф-ю для форума планировал...
WingedFox писал(а):
Посимвольное чтение файла, анализ появляющихся кавычек, определение направленя кавычки в зависимости от контекста... =)
давайте, напишите, выложите, а потом вместе замерим Script execution time =)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
Maus
Модератор



Зарегистрирован: 29.06.2003
Сообщ.: 7410
Карма: 242
   поощрить/наказать

Откуда: пос. Омсукчан Магаданской области

СообщениеДобавлено: Пн Мар 21, 2005 10:02 pm (спустя 19 минут; написано за 42 секунды)
   Заголовок сообщения:
Ответить с цитатой

Navigator
А время тут уже роли играть не будет: если одна функция работает неверно - она автоматически аутсайдер.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
WingedFox
Профессионал



Зарегистрирован: 29.04.2003
Сообщ.: 4035
Карма: 253
   поощрить/наказать

Откуда: Питер

СообщениеДобавлено: Вт Мар 22, 2005 10:17 am (спустя 12 часов 15 минут; написано за 5 минут 26 секунд)
   Заголовок сообщения:
Ответить с цитатой

Navigator писал(а):
я вообще-то эту ф-ю для форума планировал...
Так никто и не мешает написать «правила оформления сообщений».
Заодно и предупредить, что включена функция для обработки текста.

Вообще, на мой взгляд, автоматически (без спроса) менять что-либо из вводимого мной - очень плохая идея.
Вот например, я выкладываю текст, в котором используется знак дюйма для обозначения размеров, а в результате получаю какие-либо кавычки. Несколько неприятная ситуация, не находите?
Navigator писал(а):
давайте, напишите, выложите, а потом вместе замерим Script execution time =)
А оно надо?

Maus
Это Вы правильно заметили =)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
Navigator
Участник форума



Зарегистрирован: 27.11.2004
Сообщ.: 223
Карма: -13
   поощрить/наказать

Откуда: Павловский Посад

СообщениеДобавлено: Вт Мар 22, 2005 6:23 pm (спустя 8 часов 6 минут; написано за 1 минуту 47 секунд)
   Заголовок сообщения:
Ответить с цитатой

WingedFox писал(а):
Так никто и не мешает написать «правила оформления сообщений».
«такие» кавычки (а конкретнее клавиши Alt+0) в Internet Explorer'е+Windows XP вызывают такой же эффект, что и кнопка «Назад» =)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение ICQ Number
Показать сообщения:   
Начaть нoвую тeму   Ответить на тему Часовой пояс: GMT + 3 (Москва)
Страница 1 из 1   
Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете голосовать в опросах. Вы не можете прилагать файлы к сообщениям. Вы можете скачивать файлы.
  XML