Index
Project Maintenance Service
*О сервисе *Новости *Проекты *Пользователи *Справочная
pms
О проекте
НовостиRSS
СтатьиRSS
Каталог статей
Команда
Багтреккер
Найти сообщение
Секции
Контрольные точки

Обработчик bb-кодов

Опубликовал: shade
Дата публикации: 23.09.2007
Дата правки: 23.09.2007
Промотров: 3504

Абстракт

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

Введение

В системе PMS для форматирования текста сообщений и публикаций используется обработчик bb-кодов. Обработчик bb-кодов не простой — поддерживает он два режима обработки: Classic и BBML. Режим Classic — простой привычный режим, который используется на большинстве форумов. Есть только одно ограничение, как уже писалось ранее в новостях требуется корректность (над смягчением этого ограничения ещё предстоит немного поработать):

  • порядок открывающих и закрывающих квадратных скобок желательно соблюдать;
  • все теги являются парными, и должны закрываться в правильном порядке.

Второй режим (BBML) использует иную схему форматирования. Если в режиме Classic идет разбиение на строки с помощью одного перевода строки, то в режиме BBML текст разбивается на абзацы с помощью двух переводов строк, как в TeX и Wiki. Большинство тегов (в том числе [b][/b], [i][/i], [p][/p]) задают лишь атрибуты символов (курсив, полужирный и т.п.) и абзаца (выравнивание, отступ первой строки и т.п.), а реальное разбиение на абзацы происходит двумя переводами строк.

В целом оба режима на одних и тех же данных производят похожие результаты. Классический режим более привычный и хорошо подходит для небольших комментариев не требующих сложного форматирования (списков, таблиц и т.п.), он был реализован для совместимости с другими форумами. Режим BBML более удобный для больших публикаций, и по задумке должен производить лучший результат. В пределах одного сообщения можно переключаться с одного режима на другой с помощью тега [mode][/mode], которому передается один аргумент указывающий на режим classic или bbml (регистр не имеет значения), а режим по умолчанию задается в профиле пользователя. Для вновь зарегистрировавшихся пользователей устанавливается классический режим.

Базовые теги

В разных режимах может поддерживаться различный набор тегов. Но в обоих режимах есть общий набор базовых тегов.

  • Теги управления атрибутами символов: [b]полужирный[/b], [i]курсивный[/i].
  • Тег [nobb] — заключайте текст в котором не нужно обрабатывать bb-коды.
  • Тег [quote="Автор"]Текст[/quote] — цитаты.
  • Тег [code][/code] — выделение листингов, внутри этого тега также нет обработки bb-кодов. Кроме этого тег [code] имеет параметр, который указывает стиль подсветки. Сейчас поддерживается «pascal» — для языка Pascal, «cpp» — для языков C/C++ и «php» — для языка PHP.
  • Тег [div="Заголовок"]текст[/div] — выделение текстового блока — используйте его по своему усмотрению, например для выделения примечаний.
  • Теги [h1], [h2], [h3] — выделение заголовков трех уровней.
  • Тег [prj="project"]Текст ссылки[/prj] — сокращение для вставки ссылок на проект. В параметре нужно указать название проекта (не заголовок), существование проекта не проверяется.
  • Тег [url=http://www.example.com]тест ссылки[/url] — вставка ссылок. Требуется указывать полный URL, желательно с указанием протокола.
  • Теги [img] и [pic] — вставка изображений, подробное описание смотрите ниже.

Автоматические замены

Наш обработчик bb-кодов поддерживает автоматические замены некоторых специальных последовательностей:

  • три точки '...' заменяются на многоточие '…';
  • два минуса '--' заменяются на короткое тире '–';
  • три минуса '---' заменяются на длинное тире '—';
  • если перед коротким или длинным тире стоит пробел, то он заменяется на неразрывный пробел;
  • строчная латиская буква 'c' в круглых скобках '(c)' заменяется символ авторского права '©';
  • две открывающие угловые скобки '<<' и две закрывающие угловые скобки '>>'; заменяются соответственно на открывающуюся '«' и закрывающуюся '»' кавычки типа ёлочка.

Вставка изображений

Для вставки изображений используется два тега [img] и [pic]. Тег [img] вставляет изображение в текст как отдельный символ. Кроме этого тег [img] принимает один аргумент, который задает альтернативный текст, который будет отображаться вместо картинки, если её невозможно отобразить. Тег [pic] вставляет картинку отдельным блоком с описанием картинки. Тег [img] подходит для вставки небольших картинок, а тег [pic] для вставки иллюстраций требующих комментария-подписи.

Пример тега img

Тег [img="Здесь картинка"]http://the1st.adygnet.ru/~pms/img/pms.png[/img] вставляет так:

Пример текста Здесь картинка пример текста

Пример тега pic

Тег [pic="http://the1st.adygnet.ru/~pms/img/pms.png"]Это [i]пример[/i] картинки[/pic] вставляет так:

Пример текста

image

Это пример картинки

Пример текста

Оформление списков

Примечание

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

Для оформления списков используются теги [ul], [ol] и [li]. Теги [ul] и [ol] выделяет список соответственно маркированный и нумерованный, а тег [li] используется для выделения элементов списка.

Пример маркированного списка
code:
[ul]
[li]Элемент 1[/li]
[li]Элемент 2[/li]
[li]Элемент 3[/li]
[/ul]
Результат
  • Элемент 1
  • Элемент 2
  • Элемент 3
Пример нумерованного списка
code:
[ol]
[li]Элемент 1[/li]
[li]Элемент 2[/li]
[li]Элемент 3[/li]
[/ol]
Результат
  1. Элемент А
  2. Элемент Б
  3. Элемент В
Пример многоуровневого списка
code:
[ul]
  [li]Элемент 1[/li]
  [li]Элемент 2[/li]
  [ol]
    [li]Элемент А[/li]
    [li]Элемент Б[/li]
    [li]Элемент В[/li]
  [/ol]
  [li]Элемент 3[/li]
[/ul]
Результат
  • Элемент 1
  • Элемент 2
    1. Элемент А
    2. Элемент Б
    3. Элемент В
  • Элемент 3

Выделение текстовых блоков

Для выделения текстовых блоков (примечаний, замечаний, предупреждений и т.п.) можно использовать тег [div="Заголовок"]текст[/div].

Вставка таблиц

Примечание

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

Для вставки таблиц используются теги [table], [tr], [td] и [th]. Тег [table] выделяет таблицу и принимает один аргумент, который задает ширину таблицы в процентах, например [table=100%] растянет таблицу на всю ширину вмещающего блока. Тег [tr] выделяет строку таблицы. Теги [th] и [td] выделяют ячейки таблицы и принимают один аргумент, который задает выравнивание текста внутри ячейки. Тег [th] предназначен для выделения ячеек-заголовков. Для тега [th] по умолчанию устанавливается выравнивание текста по центру, а текст становиться полужирным. Тег [td] предназначен для выделения простых ячеек и для него по умолчанию устанавливается выравнивание по левому краю. В режиме BBML ячейки могут наследовать выравнивание текста — для этого нужно указать в качестве параметра значение parent.

Пример вставки таблицы
code:
[table=75%]
[tr][th]Один заголовок[/th][th="right"]Другой заголовок[/th][/tr]
[tr][td]1[/td][td="center"]2[/td][/tr]
[tr][td="left"]Раз[/td][td="right"]Два[/td][/tr]
[/table]
Результат
Один заголовок
Другой заголовок
1
2
Раз
Два

Теги и атрибуты специфичные для режима BBML

Режим BBML поддерживает некоторые специфичные теги и атрибуты:

  • Тег [p] — выделяет абзац и задает выравнивание текста.
  • Тег [align] — выделяет абзац и задает выравнивание текста (фактически синоним тега [p]).
  • Тег [indent] — выделяет абзац и задает отступ первой строки. Принимает один параметр: 'on' — включает отступ, 'off' — выключает отступ. Если параметр не указан, то отступ включается.
  • Теги [i] и [b] принимают один аргумент: 'on' — включает несоответствующий стиль, 'off' — отключает.
  • Теги [th] и [td] в качестве аргумента задающего выравнивание могут принимать дополнительное значение 'parent' которое указывает, что стиль выравнивания в ячейке должен наследоваться от вмещающего блока.

Комментарии пользователей

Илья (the1st) Добавлено: 09.03.2008 17:57
the1st
Гы, а я этого и не видел. Спасибо, сейчас буду изучать :)
attid Добавлено: 25.05.2009 19:29
attid
а тут кто нибуть о коментах оповещается ? =) если да то их стоит удалить, за неинформативность =))

а можно код перечеркивания букавок ?

Добавить комментарий

Bold Картинка Картинка с подписью Цитата Код Отключение BB-кодов
Меню системы
О сервисе
НовостиRSS
Справочная
Проекты
Пользователи
Вход
Регистрация
Переход к багу