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

Типографика для 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.
Ссылка на комментарий
Поделиться на других сайтах

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

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

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

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

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

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

Зарузка...

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

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

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