За последние 24 часа нас посетили 22694 программиста и 1221 робот. Сейчас ищут 748 программистов ...

Парсер BBCODE - пишем правильно

Тема в разделе "Прочие вопросы по PHP", создана пользователем artoodetoo, 25 дек 2012.

  1. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    вот только не надо детсадовской подмены понятий, ага ;)
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    ( кажется от имени igrodata пишет его шкодливый сынок )
    взрослые дяди так себя не ведут. надеюсь когда твой папа выйдет из запоя, он тебе задаст люлей!

    Добавлено спустя 8 минут 48 секунд:
    Возвращаясь к нашим баранам,
    • я не понимаю почему форумные парсеры экранируют HTML-коды типа © » и т.п. Они не могут навредить, а для оформления могут быть полезны;
    • про парность кодов. в принципе есть регулярка, которая сразу дает ответ соблюдена ли парность [ код ] [ /код ] во всём тексте. было бы удобно проверить раз универсальным регекспом, а потом при успехе обрабатывать отдельные теги уже не думая про вложенность.
      но хочется иметь исключения: например считаю полезным НЕ оформлять закрытие пунктов списка [ * ]. регулярки исключения не любят! тут я заткнулся.
     
  3. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    В PHP.

    Да нечего там показывать, - писан 3 года назад и он примитивный (относительно), класс в 200 строк на основе preg_replace().
    В ближайших планах (когда будет свободное время) планирую переписать полностью, предварительно как раз с использованием встроенного в ПХП модуля. В основном поэтому и спросил - чем он Вам не нравится.
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Chushkin, ссылку в студию! куда чего встроено.
     
  5. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Ну ёлки зелёные, уже лень help открыть?!
    http://www.php.ru/manual/book.bbcode.html
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Тебе лень в этой теме сообщения прочитать, а ещё автора поучаешь. Еще до твоего появления я протестировал т.н. "встроенный" парсер, написал об этом статью и в этой теме дал ссылку. Чудак ты этакий!
     
  7. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Вы хотите сказать, что "PEAR BBCode", который Вы тестировали, и встроенный "Bulletin Board Code" это одно и то же?
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Таки зачем ви переспгашиваете?
     
  9. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Для того, для чего все переспрашивают, - чтобы подтвердить свою догадку, что я Вас правильно понял. ;)
    Вдруг ошибаюсь и мы говорим "о разных материях".
    Хотя ... если Вы считаете, что pear и встроенный одно и тоже - спорить не буду. По сути меня интересует только одно - чем плох встроенный.
     
  10. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Извини, я был неправ отчасти ))) Да, ты давал ссылку на pecl bbcode, а я на pear bbcode. Они оба такие же "встроенные в PHP", как я встроен в этот форум. Чтобы их использовать надо сначала поставить.

    Если ты не хозяин сервера, то расширение PEAR можно хотябы скачать в виде php и подключить через include. А PECL требует компиляции, т.е. возможно только на собственном VPS, как минимум.

    [ тут была куча букв, но я её удалил. сделаю паузу ]

    pecl bbcode также не обработал переводы строк, я не знаю как с таким жить
     
  11. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Я был неправ, а Вы правы - модуль "Bulletin Board Code" тоже надо доустанавливать.
    Абидна... :(

    Добавлено спустя 4 минуты 18 секунд:
    Я так думаю, что переводы строк должны обрабатываться при выводе в шаблоне только данных типа "text". Т.е. к BBCode это не имеет отношения.
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    ужас. как сложно жить.
     
  13. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    igordata, что-то ты сегодня в ударе! а вчера обещал жениться сам говорил «не используют его ибо не везде есть» или это был не ты?

    Chushkin, про text не понял. демонстрирую проблему:
    Код (Text):
    1. первая строка
    2. [b]вторая и
    3. третья строка[/b]
    4.  
    5. [list]
    6.  
    7. [*]пункт а
    8.  
    9. [*] пункт б
    10. [/list]
    этот форум преобразует в HTML:
    Код (Text):
    1. первая строка<br />
    2. <span style="font-weight: bold">вторая и <br />
    3. третья строка</span><br />
    4. <br />
    5. <ul>
    6. <br />
    7. <li>пункт а<br /></li>
    8. <li> пункт б<br /></li>
    9. </ul>
    каждому переводу строки соответствует тег <br />, всё идет нормально пока не встретился список:
    между <ul> и <li> нельзя ставить <br /> ! форум породил невалидную разметку.

    Добавлено спустя 100500 световых лет:
    А если закрывать пункт списка явно ([*]пункт а), то здешний парсер будет вставлять <br /> еще и между </li> и <li>.
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    я тут противоречия не вижу. взял да поставил модуль.

    Добавлено спустя 52 секунды:
    пока это единственный минус.
     
  15. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    а плюсы какие? )))
     
  16. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    всё само пашет
     
  17. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    вот я и говорю: каждому своё. лично мне стабильность или наоборот прогресс данного форума глубоко до пизды. я получаю удовольствие от творческого поиска.
     
  18. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    тогда лучше обработчик формул человеческий замутить
     
  19. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    я даже не понимаю о чём ты. мути, в своей теме.

    кстати, runcore, сейчас добрался до Debian Lenny с PHP 5.2.6, проверил регулярки (не из этой темы). так вот, оно понимает и именованные сохранения и рекурсию. всё там ништяк, парсер сгодится, когда будет готов ;)
     
  20. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Коды подсвечивать нужно на JS. Думаю, парсер bbcode - тоже можно сделать на JS - на сервер ляжет меньше нагрузки. Кроме того, моя практика показывает, что JS работает с текстом быстрее, чем PHP. Примерно в 4-5 раз. Даже в IE. Потом, тут все говорят о регулярках - предлагаю подумать ещё о посимвольном переборе текста и переходах из одного режима в другой. На счёт подсветки кода - существует много готовых реализаций. Пользуясь случаем, напомню о своей:
    viewtopic.php?f=27&t=40078
    :)
    Потестить:
    http://works.my-web-dev.16mb.com/js/codeparser/
    Знает html, css, js, php, sql. Умеет переходить от одного к другому. То есть когда в исходнике есть, например, и html и css и js и php - разберёт что есть что и всё подсветит. Стили - без проблем настраиваются - шрифты, цвета, жирность и пр.

    Добавлено спустя 5 минут 3 секунды:
    Конечно, есть и недостатки. Например, на данный момент основное - не реализована нумерация строк...
     
  21. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    Я тоже за клиентскую сторону.
    Кстати пхп нативно парсит код пхп =)
     
  22. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Посимвольный подход хорош для быстрых языков типа C или Pascal. В PHP это будет ад кромешный. Тут лучше или регулярки или какой-нибудь конечный автомат на поиcке фрагментов покрупнее.

    Подсветку синтаксиса я бы тоже на JS делал. Но чтобы весь парсинг на клиенте, … вы кажется чуство меры уже потеряли. )) Ну давайте тогда вообще форум на JS писать, а на сервер только SQL слать. Фантазеры блин.
     
  23. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Почему ты так уверен? Делал я как-то парсер, там текстовые файлы в несколько сотен Кб довольно шустро разбирались по косточкам. Сообщения на форумах редко и одной сотни Кб кода набирают.
     
  24. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    Это легко проверить.
    подсказка. регекспы работают на нативном уровне(написаны на Си) - уровень пхп медленнее по определению.
    конечно можно придумать какието единичные примеры где регекспы будут сливать - если их применять не по назначению.

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

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Что значит "на нативном"? Юникод символ уже стал равен байту? В Си нет нативных функций для работы со строками, это отдельные библиотеки. Те же библиотеки использует и PHP. Так что умничать не надо.
    Для объемов в несколько килобайт особо нет разницы, посимвольно перебирать или регулярками. Можно даже часть разбить регулярками, часть обработать посимвольно.