Перейти к контенту

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


Jax

Рекомендуемые сообщения

Стоит понимать разницу между дефисом и тире — первое, разделяет между собой части одного слова, а второе — слова в предложении. По логике вещей, они и писаться должны по-разному. :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
Ссылка на комментарий
Поделиться на других сайтах

  • Ответы 96
  • Создана
  • Последний ответ

Лучшие авторы в этой теме

Лучшие авторы в этой теме

Да так-же всё. Только я бы не сказал что это проблема :D
Ссылка на комментарий
Поделиться на других сайтах

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

 

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

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

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

Далее, экранировать амперсенд совсем не надо.

С этой ренуляркой закончили -)

 

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

 

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

 

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

Изменено пользователем Destruction
Ссылка на комментарий
Поделиться на других сайтах

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

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

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

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

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

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

Изменено пользователем Jax
Ссылка на комментарий
Поделиться на других сайтах

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

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

 

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

 

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

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

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

 

Я слепой ?

Изменено пользователем Destruction
Ссылка на комментарий
Поделиться на других сайтах

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

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

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

Ссылка на комментарий
Поделиться на других сайтах

Ну да, так наверное лучше будет:

$txt = preg_replace( "#\"(.+)\"#", "«\\1»", $txt );

Изменено пользователем Jax
Ссылка на комментарий
Поделиться на других сайтах

Так ведь и так можно:

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

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

 

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

 

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

Изменено пользователем Destruction
Ссылка на комментарий
Поделиться на других сайтах

Нет, если делать так

$txt = preg_replace( "#\"(.+)\"#", "«\\1»", $txt );

то действительно, текст в несколько строк не обрамляется елочками :D

Ссылка на комментарий
Поделиться на других сайтах

Нет, если делать так

$txt = preg_replace( "#\"(.+)\"#", "«\\1»", $txt );

то действительно, текст в несколько строк не обрамляется елочками :D

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

 

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

Ссылка на комментарий
Поделиться на других сайтах

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

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

 

Пушкин писал:

"Строка раз

Переход два

Строка три"

 

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

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

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

Изменено пользователем Jax
Ссылка на комментарий
Поделиться на других сайтах

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

 

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

 

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

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

Пушкин писал:

"Строка раз

Переход два

Строка три"

:D

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

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

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

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

 

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

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

 

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

 

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

Изменено пользователем Destruction
Ссылка на комментарий
Поделиться на других сайтах

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

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

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

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

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

При использовании

$txt = preg_replace( "#\"(.+)\"#", "«\\1»", $txt );

Выйдет нормально кстати :D

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

 

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

Ссылка на комментарий
Поделиться на других сайтах

HTML-код кавычки верстается форумом всегда в нижнем регистре.

жжошь :D

Ссылка на комментарий
Поделиться на других сайтах

Спасибо! Я достаточно долго искал такой мод - да вот не было))

 

Только вот я заменил

 

$txt = preg_replace( "#\"(.+)\"#", "«\\1»", $txt );

 

на

 

$txt = preg_replace( "#\"(.+)\"#", "«\\1»", $txt );

 

так как FAR не сохранял «, получалось < . Да и html entity всегда будет работать и сохранятся правильно.. хм....

Ссылка на комментарий
Поделиться на других сайтах

Это, это правильно, в принципе. Я бы тоже выложил с спец. символами, только форум парсит их. По этому более, так сказать, правильным, будет писать с &laquo.
Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.