Ответы пользователя по тегу BBCode
  • Методы парсинга BBCode?

    @LastDragon
    > Т.е. IPB3 рисует html из bbcode на каждый запрос?
    Да. (плюсы есть, но минусов наверное больше)
    Ответ написан
  • Методы парсинга BBCode?

    @LastDragon
    Напишу еще один вариант*:
    — Перебираем бб-коды в цикле:
    1) находим открывающий тег "[bbcode"
    2) находим "]" (все что между это аттрибуты)
    3) если одиночный разбираем
    4) если нет — ищем первый закрывающий тег "[/bbcode]"
    5) все что между "[bbcode...]" и "[/bbcode]" это тело (оно форматируется в зависимости от bbкода)
    6) continue;

    Основная проблема в том, что невозможно определить к чему относится "]" из-за этого результат зависит от порядка разбора бб-кодов* В IPB для решения этой проблемы используется экранирование "]" в атрибутах…

    * не нужно его использовать… именно так написан парсер бб-кодов в IP.Board… в нем было (да и сейчас есть) очень много ошибок из-за различного порядка вложенности bb-кодов и их атрибутов (в т.ч. XSS и падения Apache… небольшое количество подробностей можно найти на форуме IBR в постах Ritsuka)
    Ответ написан
  • Методы парсинга BBCode?

    @LastDragon
    > Вопрос только в скорости разбора.
    Не очень быстро. Не тестировал. Тоже было бы интересно сравнить в другими вариантами парсеров.

    > А конечные автоматы имхо удобнее таблицами переходов изображать
    Возможно. Но диаграмма по-моему более наглядна.

    > Особенно если тэги вдруг перехлестнулись
    При использовании данного парсера можно как угодно обрабатывать, в данный момент вложенный незакрытый бб-код будет закрыт принудительно ([a][b][/a][/b] => [a][b][/b][/a][/b])
    Ответ написан
  • Методы парсинга BBCode?

    @LastDragon
    Ничего сложного — достаточно создать конечный автомат… на хабре, кстати, не так давно было несколько статей по теме (если не ошибаюсь касались создания компиляторов).

    Для примера:
    1) Существующий парсер xbb.uz/

    2) Собственный велосипед:
    Код:http://pastebin.mozilla-russia.org/106940
    Диаграмма: habrastorage.org/storage/b55a4b42/f4942156/b245ccd6/9426eb87.png
    (оригинал в VP-UML, если кому-то будет нужна — пишите)

    Скорее всего есть ошибки (сейчас как раз отлаживаю).
    Ответ написан
    3 комментария