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

Улучшаем удобочитаемость текста (Navigator)
Author Message
Navigator
Участник форума



Joined: 27 Nov 2004
Posts: 223
Карма: -13
   поощрить/наказать

Location: Павловский Посад

PostPosted: Sun Mar 20, 2005 8:45 pm (написано за 1 минуту 55 секунд)
   Post subject: Улучшаем удобочитаемость текста
Reply with quote

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

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

Код функции:
Code (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;
}


Last edited by Navigator on Mon Mar 21, 2005 8:31 am; edited 1 time in total
Back to top
View user's profile Send private message ICQ Number
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8636
Карма: 223
   поощрить/наказать

Location: 007 495

PostPosted: Sun Mar 20, 2005 9:36 pm (спустя 51 минуту; написано за 37 секунд)
   Post subject:
Reply with quote

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

Лучше бы сделали, чтобы Ваш скрипт отправлял текст туда и выдирал соответствующий результат - пользы было бы намного больше
Back to top
View user's profile Send private message Send e-mail Visit poster's website ICQ Number
striimii
Участник форума



Joined: 14 Mar 2005
Posts: 50
Карма: 11
   поощрить/наказать

Location: Москва, Россия

PostPosted: Sun Mar 20, 2005 10:31 pm (спустя 54 минуты; написано за 1 минуту 45 секунд)
   Post subject:
Reply with quote

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

Лучше экспериментально пробить несколько текстовиков у лебедева, и посмотреть что он выправляет. Тоже и также сделать потом у себя.
Back to top
View user's profile Send private message ICQ Number
Maus
Модератор



Joined: 29 Jun 2003
Posts: 7920
Карма: 261
   поощрить/наказать

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

PostPosted: Sun Mar 20, 2005 11:12 pm (спустя 40 минут; написано за 46 секунд)
   Post subject:
Reply with quote

yUAC
Я, конечно, извиняюсь, но почему эта тема до сих пор в "Готовых решениях"? Раз обсуждение приняло такой оборот?
Back to top
View user's profile Send private message
Константин Жинько [tIT]
Сотрудник «Лаборатории»



Joined: 12 Jun 2004
Posts: 2265
Карма: 108
   поощрить/наказать

Location: Москва

PostPosted: Mon Mar 21, 2005 12:22 am (спустя 1 час 9 минут; написано за 2 минуты 6 секунд)
   Post subject:
Reply with quote

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

Maus
Да уж сабж сыроват -- но направление верное! =)
Back to top
View user's profile Send private message ICQ Number
Navigator
Участник форума



Joined: 27 Nov 2004
Posts: 223
Карма: -13
   поощрить/наказать

Location: Павловский Посад

PostPosted: Mon Mar 21, 2005 8:33 am (спустя 8 часов 11 минут; написано за 1 минуту 5 секунд)
   Post subject:
Reply with quote

Немного исправил функцию -- были небольше косяки, вроде этого:
Navigator wrote:
(«( слово )« становится в »(слово)»)
Я в функции, правда, заменяю на сами символы, а не на их эквиваленты... но впрочем и так сойдёт =)
Back to top
View user's profile Send private message ICQ Number
Дмитрий Кóтеров
Администратор



Joined: 10 Mar 2003
Posts: 13556
Карма: 403
   поощрить/наказать


PostPosted: Mon Mar 21, 2005 12:12 pm (спустя 3 часа 39 минут)
   Post subject:
Reply with quote


М

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

Перенесено из форума: Склад готовых решений :: PHP.
Перенесено в форум: Разное :: PHP.
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Maus
Модератор



Joined: 29 Jun 2003
Posts: 7920
Карма: 261
   поощрить/наказать

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

PostPosted: Mon Mar 21, 2005 1:35 pm (спустя 1 час 22 минуты; написано за 2 минуты 20 секунд)
   Post subject:
Reply with quote

Code (php): скопировать код в буфер обмена
function tipografika($str) {
// ...
        $str = preg_replace("/(.+?)\s-+?\s(.+?)/","\\1 & mdash; \\2",$str); // Заменяем «минусы» между словами на тире
// ...
}
Back to top
View user's profile Send private message
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4060
Карма: 260
   поощрить/наказать

Location: Питер

PostPosted: Mon Mar 21, 2005 2:01 pm (спустя 25 минут; написано за 3 минуты 35 секунд)
   Post subject:
Reply with quote

Есть замечательная штука в регах "Граница слова" называется.
Code (php): скопировать код в буфер обмена
preg_replace("/\b(\s+)-{1,3}(\s+)\b/","\\1—\\2",$str);
И ещё
Code (php): скопировать код в буфер обмена
preg_replace(array("/\b\"/","/\"\b/"),array("»","«"),$str);
А удалять пробелы между кавычками и словами - плохая практика.
Back to top
View user's profile Send private message Visit poster's website ICQ Number
Navigator
Участник форума



Joined: 27 Nov 2004
Posts: 223
Карма: -13
   поощрить/наказать

Location: Павловский Посад

PostPosted: Mon Mar 21, 2005 3:20 pm (спустя 1 час 19 минут; написано за 1 минуту 12 секунд)
   Post subject:
Reply with quote

WingedFox, спасибо.
WingedFox wrote:
А удалять пробелы между кавычками и словами - плохая практика.
Вот, например, « слово ». А вот другое «слово». Что приятнее читается?
Back to top
View user's profile Send private message ICQ Number
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4060
Карма: 260
   поощрить/наказать

Location: Питер

PostPosted: Mon Mar 21, 2005 3:48 pm (спустя 27 минут; написано за 2 минуты 47 секунд)
   Post subject:
Reply with quote

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

Правильнее читать так, как решил автор.
А учитывая что в качестве кавычек используется знак дюйма, определить автоматически направление "ёлочек" и "лапок" - нетривиальная задача. Решать её регулярными выражениями - совсем плохая идея.
Back to top
View user's profile Send private message Visit poster's website ICQ Number
Maus
Модератор



Joined: 29 Jun 2003
Posts: 7920
Карма: 261
   поощрить/наказать

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

PostPosted: Mon Mar 21, 2005 4:16 pm (спустя 27 минут; написано за 14 секунд)
   Post subject:
Reply with quote

WingedFox wrote:
Решать её регулярными выражениями - совсем плохая идея.
А как же иначе её решать?
Back to top
View user's profile Send private message
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4060
Карма: 260
   поощрить/наказать

Location: Питер

PostPosted: Mon Mar 21, 2005 4:20 pm (спустя 4 минуты; написано за 59 секунд)
   Post subject:
Reply with quote

Maus
Либо руками, либо посимвольным анализом текста, допуская что первая кавычка является открывающей.
Back to top
View user's profile Send private message Visit poster's website ICQ Number
Navigator
Участник форума



Joined: 27 Nov 2004
Posts: 223
Карма: -13
   поощрить/наказать

Location: Павловский Посад

PostPosted: Mon Mar 21, 2005 5:23 pm (спустя 1 час 2 минуты; написано за 41 секунду)
   Post subject:
Reply with quote

WingedFox wrote:
руками
функция и есть для того, чтобы ничего не делать «руками» =)
WingedFox wrote:
либо посимвольным анализом текста
эээ... это как?
Back to top
View user's profile Send private message ICQ Number
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4060
Карма: 260
   поощрить/наказать

Location: Питер

PostPosted: Mon Mar 21, 2005 5:30 pm (спустя 7 минут; написано за 4 минуты 9 секунд)
   Post subject:
Reply with quote

Navigator wrote:
функция и есть для того, чтобы ничего не делать «руками» =)
Если функция не умеет давать полностью адекватный результат, то лучше её не применять.
Иначе будут появляться комментарии типа:
Navigator wrote:
// Устраняем косяки, которые могут возникнуть благодаря предыдущему выражению
// Опять устраняем косяки =)
И всё равно адекватный результат будет получаться далеко не всегда.
А правила оформления текста внедрить в производственный процесс совсем не трудно.
Navigator wrote:
эээ... это как?
Посимвольное чтение файла, анализ появляющихся кавычек, определение направленя кавычки в зависимости от контекста... =)
Back to top
View user's profile Send private message Visit poster's website ICQ Number
Navigator
Участник форума



Joined: 27 Nov 2004
Posts: 223
Карма: -13
   поощрить/наказать

Location: Павловский Посад

PostPosted: Mon Mar 21, 2005 9:43 pm (спустя 4 часа 12 минут; написано за 48 секунд)
   Post subject:
Reply with quote

WingedFox wrote:
А правила оформления текста внедрить в производственный процесс совсем не трудно.
я вообще-то эту ф-ю для форума планировал...
WingedFox wrote:
Посимвольное чтение файла, анализ появляющихся кавычек, определение направленя кавычки в зависимости от контекста... =)
давайте, напишите, выложите, а потом вместе замерим Script execution time =)
Back to top
View user's profile Send private message ICQ Number
Maus
Модератор



Joined: 29 Jun 2003
Posts: 7920
Карма: 261
   поощрить/наказать

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

PostPosted: Mon Mar 21, 2005 10:02 pm (спустя 19 минут; написано за 42 секунды)
   Post subject:
Reply with quote

Navigator
А время тут уже роли играть не будет: если одна функция работает неверно - она автоматически аутсайдер.
Back to top
View user's profile Send private message
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4060
Карма: 260
   поощрить/наказать

Location: Питер

PostPosted: Tue Mar 22, 2005 10:17 am (спустя 12 часов 15 минут; написано за 5 минут 26 секунд)
   Post subject:
Reply with quote

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

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

Maus
Это Вы правильно заметили =)
Back to top
View user's profile Send private message Visit poster's website ICQ Number
Navigator
Участник форума



Joined: 27 Nov 2004
Posts: 223
Карма: -13
   поощрить/наказать

Location: Павловский Посад

PostPosted: Tue Mar 22, 2005 6:23 pm (спустя 8 часов 6 минут; написано за 1 минуту 47 секунд)
   Post subject:
Reply with quote

WingedFox wrote:
Так никто и не мешает написать «правила оформления сообщений».
«такие» кавычки (а конкретнее клавиши Alt+0) в Internet Explorer'е+Windows XP вызывают такой же эффект, что и кнопка «Назад» =)
Back to top
View user's profile Send private message ICQ Number
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1   
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
  XML