Интернет, компьютеры, софт и прочий Hi-Tech

Подписаться через RSS2Email.ru

PHP-библиотека xBB 0.29 для работы с BBCode

Общие сведения

xBB - написанная на PHP библиотека для работы с BBCode, которая является развитием библиотеки, описанной здесь.
 
SVN-репозиторий библиотеки находится по адресу svn://svn.prolib.ru:3692.
Активное обсуждение вопросов, связанных с xBB можно найти на форумах PHP Club.
 
xBB может быть использован в гостевых книгах, форумах, на досках объявлений и т.п. На сайте http://www.pc.uz поддержка BBCode в пользовательских комментариях реализована с помощью xBB. Данная документация целиком сверстана в BBCode и конвертирована в XHTML с помощью xBB.
 
Парсер реализован несколько отлично от аналогов. Обычно такие парсеры реализуются с помощью регулярных выражений. Этот же использует метод конечных автоматов. Имеет следующий плюс: как бы ни была богата и продвинута коллекция тегов, поддерживаемая в данной реализации, скорость обработки текстов будет постоянной, так как осуществляется за фиксированное число проходов. Коллекцию поддерживаемых тегов можно увеличивать до бесконечности, а скрипт будет выполняться одинаково быстро. Скорость его работы зависит только от величины текста и от числа тегов, используемых в конкретном тексте, но не от числа всех возможных тегов и вариантов их написания. Скрипт не парсит текст многократно для каждого тега или варианта написания тега.
 
xBB версии 0.29 поддерживает 134 тега, "автоматические ссылки", 100 смайлов. Коллекция тегов и смайлов легко расширяема.
 
Теги имеют следующие особенности:
  1. Названия тегов и атрибутов не зависят от регистра. Например, [font=Arial size=+1], [FONT=Arial SIZE=+1] и [FoNt=Arial SiZe=+1] - равнозначно.
     
  2. Значения атрибутов могут быть закавычены "так" и 'так', либо никак не закавычены. Следующие конструкции равнозначны: [google="BBCode"], [google='BBCode'], [google=BBCode]. Следующие конструкции НЕ равнозначны: [google="Поддержка BBCode"], [google=Поддержка BBCode]. Последний вариант будет интерпретирован скриптом как [google="Поддержка" bbcode=""].
     
  3. Теги могут быть вложенными. Но те из них, которые создают элементы блочного типа (такие как [h1] или [table]), не могут быть вложены в строчные теги (такие как [i] или [color]). Строчные элементы закрываются, если начинается блочный. Эти ограничения обусловлены требованиями W3C.
     
  4. Теги должны быть правильно вложены. Неправильный код "[b][i]текст[/b][/i]" будет интерпретирован скриптом как "[b][i]текст[/i][/b][/i]". Это ограничение также обусловлено требованием W3C.
     
  5. В данной реализации BBCode поддерживаются закрывающие теги вида [/]. Такой тег закрывает последний незакрытый тег. Например, [b]текст[/b] равнозначно [b]текст[/]. Тем не менее рекомендую пользоваться именно первой формой написания. Attention Тогда, в случае нагромождения вложенных тегов, вам будет легче ориентроваться в коде. Кроме того, первая форма написания позволяет скрипту более корректно обрабатывать пользовательские ошибки.
     
  6. Поддерживается закрытие тега способом [тег /]. Например, конструкции [url name=top][/url] и [url name=top /] равнозначны.
     
  7. В некоторых случаях можно не писать закрывающий тег. Например, тег [tr] (строка таблицы), будет автоматически закрыт, как только встретится очередной [tr] или закрывающий тег [/table]. Тег [hr] вообще не имеет закрывающего, интерпретируется скриптом как [hr/]. О поведении конкретных тегов смотрите их описания.
     
  8. При конвертации ББКода в HTML сохраняется форматирование пробелами. Т.е. все двойные пробелы переводятся в '&nbsp;&nbsp;', все переводы строк заменяются на '<br />'. Однако вокруг некоторых элементов (таких как [h1]) игнорируются 1-2 перевода строк, так как эти элементы сами по себе создают дополнительные отступы. Это сделано для того, чтобы по возможности приблизить визуальное представление HTML к исходному ББкоду.

xBB поддерживает мнемонизацию специальных символов. Например, чтобы вывести на печать [b] без преобразования в HTML, можно ввести @l;b@r;. Поддерживаются мнемоники следующих спецсимволов:
  1. Открывающая квадратная скобка '[' может быть мнемонизирована как '@l;'.
     
  2. Закрывающая квадратная скобка ']' может быть мнемонизирована как '@r;'.
     
  3. Двойная кавычка '"' может быть мнемонизирована как '@q;'.
     
  4. Одинарная кавычка "'" (апостроф) может быть мнемонизирована как '@a;'.
     
  5. Знак собачки '@' может быть мнемонизирован как '@at;'.

Поддержка "автоматических ссылок" означает, что строки вида "http://какойто_uri", "https://какойто_uri", "ftp://какойто_uri", "svn://какойто_uri" и т.п., а также "www.какойто_uri" и "ящик@домен" автоматически конвертируются в соответствующие гиперссылки. Этого не происходит для содержимого таких тегов как [code], [nobb] и аналогичных. Автоматические ссылки могут быть отключены. Как это делается - смотрите раздел API.
 
О задании собственных наборов смайликов - смотрите разделы "Быстрый старт" и "API".
 
Теги, поддержка которых реализована в xBB по умолчанию, перечислены в разделе "Список тегов".
 
О том, как создать свой тег или переопределить существующий, читайте на странице "Как создать тег".

Благодарности

Должен выразить глубокую признательность людям, помогавшим мне в работе над библиотекой, и людям, чьим трудом я воспользовался при создании библиотеки:
  • Большое спасибо разработчикам редактора TinyMCE из Moxiecode Systems AB. Я использовал их идеи для переделки тулбара в xBBEditor-е для xBB версии 0.29. А также заимствовал несколько кнопок.
     
  • Дмитрий Котеров (http://dklab.ru) - разработчик библиотеки JsHttpRequest, которую я использовал в xBBEditor-е для xBB версии 0.28.
     
  • Александр Пальчиков (ZigFreeD) - специально для xBB написал код JavaScript для редактирования BBCode в textarea. Этот код был использован в xBBEditor-е. Отдельное спасибо за активное тестирование и исправление найденных багов.
     
  • Nigel McNie (http://qbnz.com/highlighter) - разработчик библиотеки GeSHi, которую я использовал для создания тегов подсветки синтаксиса. Кроме того, я использовал дизайн документации GeSHi для оформления документации xBB. Благо Nigel McNie разрешает это делать.
     
  • Дмитрий Золотарев (Whirlwind - http://www.prolib.ru) - спасибо за идеи, помощь в продвижении и SVN-репозитарий.
     
  • Виталий Фиоктистов (VITUS - http://www.pc.uz) - придумал название "xBB" и нарисовал соответствующий логотип. Также спасибо за идеи и помощь в продвижении.
     
  • Алесандр Михайлов - подготовил коллекцию смайликов для phpBB (2005), которой я воспользовался включив в пакет xBB.

Также огромное спасибо всему коллективу и посетителям сайта http://www.pc.uz, участникам форума http://phpclub.ru, другим людям, оказавшим помощь своими замечаниями, предложениями, моральной поддержкой.
Биржа долевых инвестиций SIMEX.

Последнее редактирование: 2011-02-20 03:26:51

Метки материала: xbb, bbcode, теги, php, html, парсер, xhtml, bb-code


80 комментариев

Последние десять комментариев:

06.10.2016 15:26:20 #
Mozilla Firefox Гость admhome
Можно как-то Ваш кот отсюда https://github.com/Gemorroj/xBBCode импортировать в своё пространство имён?
26.07.2016 11:57:54 #
Google Chrome Гость MirDj
Здравствуйте. А могу ли я передавать как-то свои переменные в ваш парсер?
Допустим для тега img мне надо на нужной странице задавать переменную $small=true;
А уже в парсере при обработке img делать так:
if($small){$maxwidth = "250px";}else{$maxwidth = "800px";}
        return '<img src="' . $src . '" ' . $attr . ' style="max-width:'.$maxwidth.' width:auto;"/>';
12.03.2013 08:14:29 #
Mozilla Firefox dima
Вот здесь: http://xbb.uz/docs/add_tag.bb описывается, как создавать теги и дается несколько примеров. Попробуйте сделать по образцу.
11.03.2013 21:01:44 #
Opera Гость Александр
Здравствуйте. не могу никак разобраться как добавить свой тег. Ткните пожалуйста пальцем, если не сложно, что и куда надо дописать, чтобы обрабатывался тег [block] [/block]
 
Принцип его работы такой:
 
[block] нужно заменить на: <div class="rounded_corners_top"><div class="left"></div></div><div class="forabg"><div class="inner"><ul class="topiclist"><li class="header"><dl class="icon"><dt></dt></dl></li></ul><ul class="topiclist forums"><li class="row">
 

А [/block] на: </li></ul></div></div><div class="rounded_corners_bottom"> </div><br />
12.12.2012 21:08:17 #
Mozilla Firefox dima
Пожалуйста Well
12.12.2012 19:45:07 #
Opera Гость алекс
Огромное спасибо, всё работает! =)
12.12.2012 19:40:07 #
Mozilla Firefox dima
Пример. Было:
 
HTML
<td><a href="#" onclick="xbb_insertSimpleTags('b');return false;"
 class="toolbarButton">
<img alt="[b]" src="./images/buttons/bold.gif"
 id="img_b" />
</a></td>

Стало:
 
HTML
<td title="Жирный текст"><a href="#" onclick="xbb_insertSimpleTags('b');return false;"
 class="toolbarButton">
<img alt="[b]" src="./images/buttons/bold.gif"
 id="img_b" />
</a></td>
12.12.2012 19:35:05 #
Opera Гость алекс
Откройте файл bbcode/xbb.php, найдите в нем HTML-коды кнопок и вставьте в них соответствующие title-ы.
Не могли бы для наглядности привести пример, скажем, на теге "жирный". А то вставляю title="жирный", а не работает...
12.12.2012 19:23:08 #
Mozilla Firefox dima
Откройте файл bbcode/xbb.php, найдите в нем HTML-коды кнопок и вставьте в них соответствующие title-ы.
12.12.2012 19:19:52 #
Opera Гость алекс
Народ, как в редакторе сделать всплывающие подсказки на кнопки (цитата, жирный, ссылка и т.п.)?

Оставьте, пожалуйста, свой комментарий к публикации

Представиться как     Антибот:
   

Просьба не постить мусор. Если вы хотите потестить xBB, воспользуйтесь кнопкой предварительного просмотра на панели инструментов xBBEditor-а.


© 2007-2017, Дмитрий Скоробогатов.
Разрешается воспроизводить, распространять и/или изменять материалы сайта
в соответствии с условиями GNU Free Documentation License,
версии 1.2 или любой более поздней версии, опубликованной FSF,
если только иное не указано в самих материалах.