Подписаться через RSS2Email.ru
|
Показать HTML | Показать 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 смайлов. Коллекция тегов и смайлов легко расширяема.
Теги имеют следующие особенности:
- Названия тегов и атрибутов не зависят от регистра. Например,
[font=Arial size=+1], [FONT=Arial SIZE=+1] и [FoNt=Arial SiZe=+1] - равнозначно.
- Значения атрибутов могут быть закавычены "так" и 'так', либо никак не закавычены. Следующие конструкции равнозначны:
[google="BBCode"], [google='BBCode'], [google=BBCode]. Следующие конструкции НЕ равнозначны: [google="Поддержка BBCode"], [google=Поддержка BBCode]. Последний вариант будет интерпретирован скриптом как [google="Поддержка" bbcode=""].
- Теги могут быть вложенными. Но те из них, которые создают элементы блочного типа (такие как
[h1] или [table]), не могут быть вложены в строчные теги (такие как [i] или [color]). Строчные элементы закрываются, если начинается блочный. Эти ограничения обусловлены требованиями W3C.
- Теги должны быть правильно вложены. Неправильный код "
[b][i]текст[/b][/i]" будет интерпретирован скриптом как "[b][i]текст[/i][/b][/i]". Это ограничение также обусловлено требованием W3C.
- В данной реализации BBCode поддерживаются закрывающие теги вида
[/]. Такой тег закрывает последний незакрытый тег. Например, [b]текст[/b] равнозначно [b]текст[/]. Тем не менее рекомендую пользоваться именно первой формой написания. Тогда, в случае нагромождения вложенных тегов, вам будет легче ориентроваться в коде. Кроме того, первая форма написания позволяет скрипту более корректно обрабатывать пользовательские ошибки.
- Поддерживается закрытие тега способом [тег /]. Например, конструкции
[url name=top][/url] и [url name=top /] равнозначны.
- В некоторых случаях можно не писать закрывающий тег. Например, тег
[tr] (строка таблицы), будет автоматически закрыт, как только встретится очередной [tr] или закрывающий тег [/table]. Тег [hr] вообще не имеет закрывающего, интерпретируется скриптом как [hr/]. О поведении конкретных тегов смотрите их описания.
- При конвертации ББКода в HTML сохраняется форматирование пробелами. Т.е. все двойные пробелы переводятся в ' ', все переводы строк заменяются на '<br />'. Однако вокруг некоторых элементов (таких как
[h1]) игнорируются 1-2 перевода строк, так как эти элементы сами по себе создают дополнительные отступы. Это сделано для того, чтобы по возможности приблизить визуальное представление HTML к исходному ББкоду.
xBB поддерживает мнемонизацию специальных символов. Например, чтобы вывести на печать [b] без преобразования в HTML, можно ввести @l;b@r;. Поддерживаются мнемоники следующих спецсимволов:
- Открывающая квадратная скобка '[' может быть мнемонизирована как
'@l;'.
- Закрывающая квадратная скобка ']' может быть мнемонизирована как
'@r;'.
- Двойная кавычка '"' может быть мнемонизирована как
'@q;'.
- Одинарная кавычка "'" (апостроф) может быть мнемонизирована как
'@a;'.
- Знак собачки '@' может быть мнемонизирован как
'@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, другим людям, оказавшим помощь своими замечаниями, предложениями, моральной поддержкой.
Последнее редактирование: 2007-08-23 17:21:00
Метки материала:
xBB, BBCode, теги, PHP, HTML, парсер, XHTML
39 комментариев
Гость Dmi3x
Блин, всё отлично работает... но эта красиваф форма на JS рабоает только в IE 
В опере эта форма вообще даже нормально не отображается 
Видать придётся кнопки самому делать
dima
У меня в Опере 9.20 все нормально отбражается и кнопки работают.  Какая у вас версия? В 8-ой однозначно не будет работать.
Гость Dmi3x
Г, ну у меня как раз 8.5 )
Я конечно не силён в JS, но брал вот отсюда: ( http://forum.vingrad.ru/forum/topic-35775.html) - скрипт для вставки текста в textarea и он у меня работал и в 8й Опере... хотя и не полностью, но работал 
Блин, жалко что такая фигня с этими браузерами...
А вобщем, огромное спасибо за либу! абалденная штука!
dima
Спасибо на добром слове.
xBB может работать с любым редактором. Если у вас есть свой, лучше использовать именно его.
xBBEditor - вещь экспериментальная. Я попытался реализовать в нем подсветку синтаксиса BBCode. А это требует
document.designMode = 'on';
который поддерживается в Опере только с 9-й версии.
Гость Сергей
Отличная библиотека, спасибо! ))) Один вопрос: можно ли сделать так, чтобы автоматически заключать в тэг параграфа все "пустые" строки, т.е. строки, не имеющие bb-кода?
dima
Тоже думал об этом. Причем в более универсальном ключе. Так, чтобы в <p> заключались все куски текста, которые должны заключаться в него по смыслу.
Но это оказалось несколько сложнее, чем сначало представлялось. Проблема в том, что нельзя просто взять в <p> куски текста, разделенные пустыми строками, это может привести к невалидному (с точки зрения W3C) коду. Например, в таком случае:
text 1
[center]text 2[/center]
text 3
Можно, конечно, пытаться учесть все такие случаи. Но это требует громоздкого кода. Хотелось бы чего покрасивше  Идеи уже есть. Думаю, что в следующей версии это будет сделано.
Гость Smile
Доброго времени суток. Библиотека конечно не плохо реализована. Но выполняется очень уж долго. У меня на форуме к примеру при 30 вызовах (30 постов на страницу), скрипт выполнился за 11 секунд. А это совсем не гуд. Причём ббкоды были даже не во всех постах. Интересно, а как подобное выполняется в том же Vbulletin за 1 секунду? ;)
dima
1 секунда - тоже чересчур много. На xBB.uz большие и сложные тексты BBCode отдаются посетителю практически мгновенно  (уж незнаю, как принимаются  )
Все дело - в кэшировании. Нет смысла генерировать один и тот же текст каждый раз, как его запросят.
Но даже и без кэширования 12 сек. - это чересчур. Приведите, пожалуйста, характеристики вашего сервера и код, который выводит посты.
Гость Sukhov
Угу. У меня тоже на форуме стоит. гогда на странице 30-50 постов, то и без кеширования уходят десятки милисекунд, но не как не секунды.
Гость Jon
А подскажите плиз как в текст можно вставить исходный текс, т.е. в текст добавить скажем свой <div class="aaaa"><h3>лялля</h3></div>
Оставьте свой комментарий:
|