Парсер BBCode на PHP

boombick

boombick.org
Прошу пардонов, за то, что торможу... Временные семейные трудности :)
 

tashkentchi

Новичок
Семья превыше всего. Привет бумбику-младшему :)
А жабускрипт ждем.
 

ZigFreeD

Новичок
Очень ждем!!!

-~{}~ 08.04.07 23:38:

Вот короче сам написал клиентскую часть... знаю что коряво написано... не было времени оптимизировать код... но самое главное работает... потом может доделаю... а может и забью на него :) если boombick допишет свой :)
тут пока не работают смайлы... но работают остальные функции...

скачать тут

P.S.: сделан на основе xBB версии 0.27 с использованием документации от версии 0.25
 

tashkentchi

Новичок
ZigFreeD, видимо клиентская часть никому покоя не дает :) Я тоже написал :) Пора объединять усилия. Щас твой скачаю и объединим :)

Мой online-редактор ББКода можно посмотреть здесь: http://www.xbb.uz/xbb-js.php.

При написании пользовал FF-2 и IE-6. В других браузерах еще не смотрел. Прошу помочь тестировать.

Сразу скажу, что браузеры с неработающим document.designMode пока не поддерживаются. Об этом можно не сообщать.
 

boombick

boombick.org
ааа.. вы решили пойти путем визуального редактирования :) Не, я делал проще, типа как на форумах :)
 

ZigFreeD

Новичок
tashkentchi
А у тебя прикольно сделано :) Сам делал или стыбзил дизайн?
Сообщаю сразу... проверял на Opera v9.20 Build 8732... все отображается нормлаьно!

Мне кажется не плохо было бы добавить кнопочку "все коды" как у меня сделано...
Заметил парочку недочетов... если ничего не выделено у меня ничего не ставится при нажатии кнопок... т.е. даже чтобы поставить линию
Код:
[hr]
нужно сначала выделить какой то участок текста!
Аналогично со всем остальным... в том числе и с ссылками...
Но в ссылках не дабавляется еще и сам URL... появляется
Код:
[url]траляля[/url]
-~{}~ 09.04.07 10:19:

Блин а как на этом форуме написать bbcode чтобы его все видели???

-~{}~ 09.04.07 10:20:

корчое напишу по русски... там получается вот такого вида:
[УРЛ]тря-ля-ля[/УРЛ]

-~{}~ 09.04.07 10:24:

Кстати а ты не хочешь сделать чтобы нажав у тебя на сайте http://www.xbb.uz/ сслыку "Показать BBCode" чтобы код открывался так как щас... а в клиентской части? чтобы юзвери сами могли потестить.... и убидитсься что все меняется... тока еще добавь ссылку "восстановить исходный текст" чтобы если они чтото стерли моглим запросто вернуться...
 

tashkentchi

Новичок
Автор оригинала: boombick
ааа.. вы решили пойти путем визуального редактирования :) Не, я делал проще, типа как на форумах :)
Пригодится. Подсветка - вещь экспериментальная, тяжелая и глючная. Нельзя заставлять юзеров ею пользоваться. Должен быть выбор - просто, как блокноте, или непросто но красиво :)

Автор оригинала: ZigFreeD
А у тебя прикольно сделано :) Сам делал или стыбзил дизайн?
Сообщаю сразу... проверял на Opera v9.20 Build 8732... все отображается нормлаьно!
Идеи - из гугла. Код полностью мой. Тулбар заимствовал у одного визивига (укажу в благодарностях).

Рад за 9-ю оперу :) Смотрел в FF-1.5 - тоже работает. С багами буду разбираться.

Автор оригинала: ZigFreeD
Кстати а ты не хочешь сделать чтобы нажав у тебя на сайте http://www.xbb.uz/ сслыку "Показать BBCode" чтобы код открывался так как щас... а в клиентской части? чтобы юзвери сами могли потестить.... и убидитсься что все меняется... тока еще добавь ссылку "восстановить исходный текст" чтобы если они чтото стерли моглим запросто вернуться...
Не хочу предлагать бажную версию. Еще поработаю, как стану доволен - предложу всем.
 

ZigFreeD

Новичок
Автор оригинала: tashkentchi
Должен быть выбор - просто, как блокноте, или непросто но красиво
Ты имеешь ввиду под словом просто... без использования document.designMode? идея хорошая...
а как ты хочешь сделать выбор между двуми видами?

-~{}~ 09.04.07 14:25:

а чего ты не сделаешь форум у себяна сайте? чтоыб сразу там можно было обсуждать скрипт?
 

tashkentchi

Новичок
Автор оригинала: ZigFreeD
Ты имеешь ввиду под словом просто... без использования document.designMode? идея хорошая...
а как ты хочешь сделать выбор между двуми видами?

-~{}~ 09.04.07 14:25:

а чего ты не сделаешь форум у себяна сайте? чтоыб сразу там можно было обсуждать скрипт?
Да, хочу без designMode. В браузерах, где он не поддерживается, по умолчанию будет грузиться вариант с обычной текстарией. В браузерах, где designMode поддерживается, будет стоять переключалка на вариант с текстарией.

Форум не хочу ставить по следующим причинам:

1. ПХПКлуб меня полностью устраивает. Здесь много профессиональных ПХП-истов. А на новом форуме будем только я, ты и бумбик. В итоге форум будет практически неживой и скоро умрет.

2. Ставить чужой форумный движок было бы не к месту (чо за сайт про хББ, если форум там не на хББ?) А писать свой или перелопачивать чужой - времени нет. У меня же еще и работа есть, а хББ - всего-лишь хобби, много времени не могу на него уделять.
 

dark-demon

d(^-^)b
tashkentchi, раз уж делаешь через дизайнмод, то почему бы не сделать по дефолту визивиг из которого можно было бы переключаться на bb-коды или на плейн-текст?

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

-~{}~ 09.04.07 17:04:

а нельзя ли вместо @l; писать что-нибудь, типа [[] или [{] ?
 

tashkentchi

Новичок
Автор оригинала: dark-demon
tashkentchi, раз уж делаешь через дизайнмод, то почему бы не сделать по дефолту визивиг из которого можно было бы переключаться на bb-коды или на плейн-текст?
Собираюсь поставить переключалку на ббкод (с подсветкой), ббкод (без подсветки), предпросмотр. + Кнопка "починить подсветку" (на случай, если поехала). Визивиг может быть реализую, но не скоро. Зато хочу прикрутить поддержку плагинов. Так что, кому надо - пусть дерзает.

Автор оригинала: dark-demon
после обрамления бб-кодом выделение пропадает, что очень неудобно.
Постараюсь исправить.

Автор оригинала: dark-demon
а нельзя ли вместо @l; писать что-нибудь, типа [[] или [{] ?
@l; более похож на < - стандартная хтмльная мнемоника. Если очень нужно изменить, то в очередной версии либы предусмотрю соответствующую настройку.

-~{}~ 09.04.07 20:22:

Еще немного подумал, - несложно реализовать визивиг с ограниченным набором возможностей. Т.е. предусмотреть только те, которые без труда конвертируются в ббкод: <b>, <i>, <img> и т.п. Но не реализовывать такие, как цитирование и теги подсветки синтаксиса.

Хотя можно и их реализовать. Только тогда парсинг осложнится. Вобщем это кажется мне нетривиальной задачей. Вряд ли скоро возьмусь за нее.

-~{}~ 09.04.07 20:43:

Еще немного подумал, - можно средствами DOM и (или) XSLT приводить XHTML к BBCode. Для облегчения задачи прописывать елементам XHTML нужные классы, на которые можно ориентироваться при конвертации в ббкод. Может быть даже в комменты облегчающие жизнь обозначения писать.

Вобщем, задача вполне решабельная. Но, все равно, на потом оставлю.
 

dark-demon

d(^-^)b
tashkentchi а редактировать как? там же в этих собаках чёрт ногу сломит...
 

ZigFreeD

Новичок
От них и не требуется. Пусть на кнопки жмут. Кнопки сделаю
А если я например хочу сделать таблицу? у тебя же нету кнопок на таблицы... да и я не думаю что будут все 40 кнопок... я тоже согласен с dark-demon что нужнол сделать стандартно... как на всех форумах и гостевухах... чтобы bb код обрамлялся стандартной квадратной скобкой... а не кодом...
 

tashkentchi

Новичок
Автор оригинала: dark-demon
tashkentchi а редактировать как? там же в этих собаках чёрт ногу сломит...
Это мой тестовый пример сложен, а обычно эти мнемоники не нужны. Впрочем, вот этот код позволит вам добиться желаемого:
PHP:
$bb -> mnemonics['[[]'] = '[';
или этот:
PHP:
$bb -> mnemonics['[{]'] = '[';
Автор оригинала: ZigFreeD
А если я например хочу сделать таблицу? у тебя же нету кнопок на таблицы... да и я не думаю что будут все 40 кнопок...
Конкретные теги (таблицы, списки и т.п.) - это частности. Их несложно реализовывать. Но сначало нужно создать безглючное ядро и удобное апи. Этим сейчас и занимаюсь.

-~{}~ 13.04.07 03:38:

ZigFreeD, заюзал твой js-код. Теперь xBBEditor поддерживает два режима - простой (с текстарией и твоим кодом) и подсветку синтаксиса (ифрейм с designMode). Браузеры без designMode работают только с простым вариантом.

А с ифреймом запарился. Визивиг написать - как 2 пальца..., а с подсветчиком синтаксиса - гемор. А может просто я - ламер. Никак не могу добиться, чтобы выделение сохранялось или чтобы курсор куда нужно поставить. Может на форуме кто нибудь знает, как в body ифрейма заюзать что-нибудь вроде selectionStart, selectionEnd и т.п.?
 

tashkentchi

Новичок
Автор оригинала: dark-demon
ищи по слову createRange
Да нашел я его давно. Не помог он мне. :( К тому же под ИЕ. А мне бы сперва с ФФ разобраться.
Проблема вот в чем: Выделение у меня есть. Но после вставки тегов - пропадает. Кой-какими экспериментами добился чтобы не пропадало, но становится до того "оригинальным", что убил-бы собственноручно (чо и сделал). Теперь мне нужна возможность УСТАНОВИТЬ выделение "от и до". А TextRange - это уже выделенный текст (насколько я понял).

-~{}~ 13.04.07 06:06:

Попытаюсь описать проблему:

1. Есть хтмл-код:
<span> text1 </span> text2 <span> text3 </span>

2. Допустим, юзер выделяет вот так:
<span> te|xt1 </span> text2 <span> te|xt3 </span>

3. С помощью execCommand('ForeColor') я заменяю это дело вот на такое:
<span> te|<font>xt1 </font></span><font> text2 </font><span><font> te</font>|xt3 </span>

4. Удаляю все узлы <font>, у которых родитель - <span>. Получается (обрати внимание на выделение):
<span> text1 </span>|<font> text2 </font>|<span> text3 </span>

5. Вставляю теги (выделение исчезает):
<span> text1 </span><font><span>тег</span> text2 <span>тег</span></font><span> text3 </span>

6. Удаляю оставшиеся фонты:
<span> text1 </span><span>тег</span> text2 <span>тег</span><span> text3 </span>
 

whirlwind

TDD infected, paranoid
tashkentchi исправь плз. в первом посте что где лежит и какая версия, а то скоро трудно будет найти.
 

tashkentchi

Новичок
Попытался. Получил "системное сообщение":
Администратор установил, что отредактировать сообщение можно только в течении 1440 минут после его публикации. Этот лимит времени прошел. Если Вы все же хотите отредактировать сообщение - свяжитесь с администратором.
Отправил письмо. Вернулось, т.к. указанного ящика не существует. Поэтому помещу текст сюда:
Добрый день, я - участник PHPClub-а под ником tashkentchi. Хочу отредактировать свой первый пост в теме "Парсер BBCode на PHP", чтобы не вводить людей в заблуждение устаревшей нформацией. Разрешите пожалуста. Или отредактируйте сами, добавив следующий текст:

Информация на этой странице устарела. Информацию о текущем состоянии проекта можно получить по адресу http://xbb.uz
 
Сверху