Перейти к содержимому


Фотография

Типографика для IPB

Форумы IBResource

Сообщений в теме: 96
Jax
  • Участники
  • Cообщений: 2 682
  • http://emuravjev.ru

Отправлено

Стоит понимать разницу между дефисом и тире — первое, разделяет между собой части одного слова, а второе — слова в предложении. По логике вещей, они и писаться должны по-разному. :D

Но так же хочется сказать и про кавычки. В России, общепринятыми кавычками являются не "...", а ёлочки — «...».

Вот я и решил, исправить этот недочет, в форумах IPB.

Решение для 1.1.x, 1.2.x, 1.3.х и 2.0.х
Открыть ./sources/lib/post_parser.php и найти:
// Start off with the easy stuff

Ниже добавить:
// idea (c) http://emuravjev.ru
$txt = preg_replace( "#\"(.+?)\"#", "«\\1»", $txt );
$txt = preg_replace( "#\ - #"	 , " — " , $txt );
$txt = preg_replace( "#\ -#"	 , " —" , $txt ); 
$txt = preg_replace( "#\- #"	 , "— " , $txt );


Решение для 2.1.x
Аналогично, только файл для редактирования должен быть ./sources/classes/bbcode/class_bbcode.php


Здесь будет учитываться дефис, а также пробел после тире, перед ним и с обеих сторон.

Я считаю, что такое необходимо для всех русскоязычных форумов.

Сообщение отредактировал Jax: 19 Февраль 2009 - 19:56


Song
  • Участники
  • Cообщений: 9 552
  • http://www.sysman.ru
  • Город:Кострома
  • Интересы:Программирование, плаванье

Отправлено

А зачем модификатор i ?

Jax
  • Участники
  • Cообщений: 2 682
  • http://emuravjev.ru

Отправлено

Ну, можно и без него :D

ZiDaNe
  • Участники
  • Cообщений: 412
  • http://www.pfpl.ru
  • Город:РФ, Санкт-Петербург
  • Интересы:Футбол

Отправлено

А в 2.1.х эта проблема есть? Если да, то как лечить:D

PALADIN+
  • Участники
  • Cообщений: 1 182
  • http://rpg-zone.ru/
  • Город:Таганрог
  • Интересы:Литература (fantasy), музыка (русский рок), ролевые игры (фрпг)

Отправлено

Да так-же всё. Только я бы не сказал что это проблема :D

Scream89
  • Участники
  • Cообщений: 147
  • http://
  • Город:Deep
  • Интересы:web-дизайн

Отправлено

В 2.1.6. не работает :D

Jax
  • Участники
  • Cообщений: 2 682
  • http://emuravjev.ru

Отправлено

В 2.1.х не также, там не через post_parser.php :D

Это не проблема, это просто должная правильность ;)

ZiDaNe
  • Участники
  • Cообщений: 412
  • http://www.pfpl.ru
  • Город:РФ, Санкт-Петербург
  • Интересы:Футбол

Отправлено

В 2.1.х не также, там не через post_parser.php :D

А через что?

Jax
  • Участники
  • Cообщений: 2 682
  • http://emuravjev.ru

Отправлено

Я обновил первый пост и написал реализацию для 2.1.х.

Destruction
  • Участники
  • Cообщений: 2 665
  • http://forum.ultimasoft.ru/
  • Город:ipbr51.exploithohohoeval()

Отправлено

$txt = preg_replace( "#\"(\S+?)\"#is", "«\\1»", $txt );

Во-первых, даже не подумает править кусок текста я прямой речью, хотя это не суть принципиально.
Во-вторых, модификатор /s модифицирует метасимвол "точка", что она становится любым символом, я у тебя точки не вижу - зачем модификатор ? Меньше модификатор - меньше нагрузка.
В-третьих, модификатор /i - указывает на то, что символы в шаблоне в любом регистре соответсвуют символам как верхнего, так и нижнего регистра. Т.е. например /A/i == /[aA]/, и ничего другого. У тебя в шаблоне нет символов, которые могут быть не в том регистре, HTML-код кавычки верстается форумом всегда в нижнем регистре.
Далее, экранировать амперсенд совсем не надо.
С этой ренуляркой закончили -)

Следущие - вообще не должны быть регулярками, хватит и обычного str_replace, а он работает быстрее и кушает поменьше ресурсиков.

PS: То, что я пишу - конечно придирки, но вот так, по чуть-чуть, а производительность-то падает на доли секунд.

PPS: Совсем забыл, интерсное сочетание - +?, * ставить ИМХО - проще, и регулярке обработать ещё проще. Другое дело, что в данном случае - это нафиг не надо, иначе он будет заменять пустые кавычки, что не есть гут.

Сообщение отредактировал Destruction: 26 Октябрь 2006 - 12:09


Jax
  • Участники
  • Cообщений: 2 682
  • http://emuravjev.ru

Отправлено

Во-первых, даже не подумает править кусок текста я прямой речью, хотя это не суть принципиально.

Да, правильно. Исправил.

В-третьих, модификатор /i - указывает на то, что символы в шаблоне в любом регистре соответсвуют символам как верхнего, так и нижнего регистра.

Да его нет уже давно...

Другое дело, что в данном случае - это нафиг не надо, иначе он будет заменять пустые кавычки, что не есть гут.

Это я заметил. Как тогда можно по другому сделать?

Сообщение отредактировал Jax: 26 Октябрь 2006 - 12:17


Destruction
  • Участники
  • Cообщений: 2 665
  • http://forum.ultimasoft.ru/
  • Город:ipbr51.exploithohohoeval()

Отправлено

Окей, тогда если будет два фрагмента в кавычках, то он решит, что это одна например прямая речь, а в ней имя нарицательное, что - неверно.
Смотри модификатор /U, но если его поставить - будет обратный эффект.

Задача не тривиальная -)

В-третьих, модификатор /i - указывает на то, что символы в шаблоне в любом регистре соответсвуют символам как верхнего, так и нижнего регистра.

Да его нет уже давно...

"#\"(.+?)\"#is

Я слепой ?

Сообщение отредактировал Destruction: 26 Октябрь 2006 - 12:16


Destruction
  • Участники
  • Cообщений: 2 665
  • http://forum.ultimasoft.ru/
  • Город:ipbr51.exploithohohoeval()

Отправлено

Другое дело, что в данном случае - это нафиг не надо, иначе он будет заменять пустые кавычки, что не есть гут.

Это я заметил. Как тогда можно по другому сделать?

Оставь просто плюсик. Он соответсувует одному и более вхождениям.

Jax
  • Участники
  • Cообщений: 2 682
  • http://emuravjev.ru

Отправлено

Ну да, так наверное лучше будет:
$txt = preg_replace( "#\"(.+)\"#", "«\\1»", $txt );

Сообщение отредактировал Jax: 26 Октябрь 2006 - 12:20


Destruction
  • Участники
  • Cообщений: 2 665
  • http://forum.ultimasoft.ru/
  • Город:ipbr51.exploithohohoeval()

Отправлено

Так ведь и так можно:
$txt = preg_replace( "#\"(.+?)\"#", "«\\1»", $txt );

Заменив на точку, тебе понадобился модификатор /s, а ты его убрал -)

Или текст в кавычках не бывает разбит на несколько строк? Хмм, пойду русский учить, в любом случае - решай сам, может ли текст быть разбит на несколько строк. И убери знак вопроса из выражения, смысл говорить парсеру, что у нас может быть 0 или 1 вхождение выражения имеющего 1 и более вхождений? -)

PS: Я тебе про регулярку сейчас на десяток страниц разведу :-D

Сообщение отредактировал Destruction: 26 Октябрь 2006 - 12:22


Jax
  • Участники
  • Cообщений: 2 682
  • http://emuravjev.ru

Отправлено

Нет, если делать так
$txt = preg_replace( "#\"(.+)\"#", "«\\1»", $txt );
то действительно, текст в несколько строк не обрамляется елочками :D

Destruction
  • Участники
  • Cообщений: 2 665
  • http://forum.ultimasoft.ru/
  • Город:ipbr51.exploithohohoeval()

Отправлено

Нет, если делать так
$txt = preg_replace( "#\"(.+)\"#", "«\\1»", $txt );
то действительно, текст в несколько строк не обрамляется елочками :D

Я об этом и говорю, другой вопрос - насколько это правильно. У меня с русским не ахти -)

Давай по другим пунктам попробуй против моей критики -)

Jax
  • Участники
  • Cообщений: 2 682
  • http://emuravjev.ru

Отправлено

Я об этом и говорю, другой вопрос - насколько это правильно. У меня с русским не ахти -)

Ну а если идет цитата стихов?

Пушкин писал:
"Строка раз
Переход два
Строка три"

На самом деле такое он написал :D

Давай по другим пунктам попробуй против моей критики -)

С этим бы пока разобраться ;)

Сообщение отредактировал Jax: 26 Октябрь 2006 - 12:26


Destruction
  • Участники
  • Cообщений: 2 665
  • http://forum.ultimasoft.ru/
  • Город:ipbr51.exploithohohoeval()

Отправлено

А ещё можно, для форумов на нескольких языках, сделать выбор языка сообщения или ещё лучше - создать отдельные бб-коды, внутри которых будет производится этам замена.

Надо бы это в качественный мод развернуть -)

Я об этом и говорю, другой вопрос - насколько это правильно. У меня с русским не ахти -)

Ну а если идет цитата стихов?
Пушкин писал:
"Строка раз
Переход два
Строка три"
:D

Давай по другим пунктам попробуй против моей критики -)

С этим бы пока разобраться ;)

1. Вот, и я о том же подумал - нужен модификатор /s, чтобы стихи в нормуль кавычки ставил -)
2. Ну разбирайся -)

Так же посмотри на такие фразы (мб не совмем верно пишу, но суть - что несколько кавычек в разных ситуациях) + глянь описание модификатора /U.

- "Здарова Васька, а ты уже посетил "ЗАО Электроника", или пойдёшь завтра?", сказал его друг.

"Цитата первая" ... текст ... "Цитата вторая"


Я тут подумал - может не парится и создать новый бб-код, который будет менятся на обычную кавычку, ну в дополнение ко всему этому, чтобы пользователи могли сами корректировать сложные участки текста.

Хотя можно попробывать определять 1-3 слов, как нарицательное, а больше - как цитату, тогда точность будет несколько выше в приведённых примерах.

Сообщение отредактировал Destruction: 26 Октябрь 2006 - 12:30


Jax
  • Участники
  • Cообщений: 2 682
  • http://emuravjev.ru

Отправлено

Хотя можно попробывать определять 1-3 слов, как нарицательное, а больше - как цитату, тогда точность будет несколько выше в приведённых примерах.

Это самый лучший вариант, из всего вышеперечисленного гемора =) Как я думаю.

2. Ну разбирайся -)

Ну вечерком сяду, подумаю.

- "Здарова Васька, а ты уже посетил "ЗАО Электроника", или пойдёшь завтра?", сказал его друг.

При использовании
$txt = preg_replace( "#\"(.+)\"#", "«\\1»", $txt );
Выйдет нормально кстати :D

— «Здарова Васька, а ты уже посетил «ЗАО Электроника», или пойдёшь завтра?», сказал его друг.


В общем надо в любом случае доводить до ума =)




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных