За последние 24 часа нас посетил 23041 программист и 1235 роботов. Сейчас ищут 612 программистов ...

BBcode`s - Патерны (рег. выр.), функции, теория.

Тема в разделе "Решения, алгоритмы", создана пользователем Hight, 29 июн 2007.

  1. Rederick Asher

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

    С нами с:
    31 янв 2009
    Сообщения:
    10
    Симпатии:
    0
    Предлагаю на рассмотрение мой bb-code парсер http://ra.cm-soft.ru/demo

    База тэгов bb-code'ов хранится в mysql.
    Часть кодов, содержащих достаточно сложные конструкции прописывается дополнительной функцией в php.
    (Пока в этом нуждалась только подсветка php-кода)

    Поддержка стилей и атрибутов: align, color, background-color, padding и др.
     
  2. kostyl

    kostyl Guest

    Так к чему пришли же? Конечными автоматами валить их, и если фанарёвая функциональность то можно и реплайсами, а чё посложнее - калашами валим да?
    (PS: Все забыли еще один очень нехороший, очень карявый и малонадежный вариант - JavaScript)
     
  3. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    kostyl
    Можно вариантом, когда идёт простые теги путём str_replace, сложные регулярками. Я обычно так делаю. Но самое правильное - конечный автомат, т.к. если нужны сложные вложенности и.т.д., подругому особо и не обработаешь.
    А ещё лучше обрабатывать и HTML и BBcode в одном парсере - универсально и полезно :)
     
  4. Rederick Asher

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

    С нами с:
    31 янв 2009
    Сообщения:
    10
    Симпатии:
    0
    а чем мой вариант не устраивает?
     
  5. kostyl

    kostyl Guest

    Rederick Asher
    лично мне, проще написать свой чем разбираться в чужом...
     
  6. Rederick Asher

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

    С нами с:
    31 янв 2009
    Сообщения:
    10
    Симпатии:
    0
    kostyl
    именно так я и поступил, когда начал писать этот скрипт :)
     
  7. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
  8. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Rederick Asher
    Скорость работы, универсальность. Не все проекты работаю с базами данных, и уж точно MySQL не единственная.
     
  9. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    ну нафиг эти bb коды. я за html или wiki разметку.
     
  10. kostyl

    kostyl Guest

    а можно вкратце основные идеи?
     
  11. Rederick Asher

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

    С нами с:
    31 янв 2009
    Сообщения:
    10
    Симпатии:
    0
    Psih
    никто не мешает сохранить базу mysql в заранее подготовленный array
     
  12. обычно мешает здравый смысл.
     
  13. Rederick Asher

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

    С нами с:
    31 янв 2009
    Сообщения:
    10
    Симпатии:
    0
    флоппик
    По-твоему это не разумно?
    В любом случае, скрипт берёт базу тэгов из mysql и переводит её в array. Что бы не пользоваться mysql, можно этот путь устранить, а всю базу хранить изначально в array'ях.
     
  14. kostyl

    kostyl Guest

    Rederick Asher
    нафига их вообще в базе хранить?
     
  15. Rederick Asher

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

    С нами с:
    31 янв 2009
    Сообщения:
    10
    Симпатии:
    0
    kostyl
    Если сделать корректную админку, то можно через неё редактировать базу тэгов и возможности бб-парсера.
     
  16. kostyl

    kostyl Guest

    Rederick Asher
    А зачем это делать? Я могу это и так дописать если надо будет.
     
  17. Rederick Asher

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

    С нами с:
    31 янв 2009
    Сообщения:
    10
    Симпатии:
    0
    kostyl
    Ну делал-то я скрипт для себя, а у меня в планах было написать сайт полностью управляемый через админку без всяких заходов через фтп.
    Что касается других, то всегда можно отказаться от хранения базы тэгов в mysql
     
  18. akrinel

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

    С нами с:
    26 янв 2009
    Сообщения:
    955
    Симпатии:
    1
    Адрес:
    Spb
    Rederick Asher, а array записанный в файле /conf/bbcodes.php нельзя что ли редактировать через админку? :)
     
  19. Rederick Asher

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

    С нами с:
    31 янв 2009
    Сообщения:
    10
    Симпатии:
    0
    akrinel
    В принципе можно, но мне такой подход не сильно нравится. В любом случае, это дело каждого.
     
  20. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    Rederick Asher
    можно сделать веб-морду. Забить побольше тегов изначально, потом их только включать-выключать через одминку.
     
  21. Rederick Asher

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

    С нами с:
    31 янв 2009
    Сообщения:
    10
    Симпатии:
    0
    Koc
    можно, но у меня идея была иная.
     
  22. Rederick Asher

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

    С нами с:
    31 янв 2009
    Сообщения:
    10
    Симпатии:
    0
    В любом случае. здесь основное - движок, который может работая с баззой тегов корректно их заменят в тексте.
    Поддерживаются классы, стили, и пр. При этом стили поддерживаются не все подрят, а только те, что указаны в базе (см ссылку: http://ra.cm-soft.ru/demo ).
     
  23. kostyl

    kostyl Guest

    ' выводит почемуто... вместо одинарной
     
  24. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    kostyl
    Ты про подсветку синтаксиса?! Это древний код, всё давно изменилось.
     
  25. kostyl

    kostyl Guest

    Посоветуйте плиз, как сделать подсветку синтаксиса если я встречаю bb код [c#] [/c#], если допустим есть класс BBCoder и в нем есть метод, типа:
    PHP:
    1.  
    2. <?php
    3.     public function GetHTML($sIn)
    4.     {
    5.         $this->_sOut = '';
    6.         $this->_sIn = $sIn;
    7.         $iCount = strlen($this->_sIn);
    8.         for ($i = 0; $i < $iCount; $i++) {
    9.             $this->_FSM->GoStep(substr($this->_sIn, $i, 1));
    10.         }
    11.         $this->_CheckCloseBB();
    12.         return $this->_sOut;
    13.     }
    14.  
    Тоесть выходной поток наращивается по символьно, а если встречается bb код, через списки автозамены он заменяется на код html, только вот не пойму, как сделать подсветку синтаксиса, надо типа начинать накапливать, да?, если встретился открывающийся bb код [c#] а когда встретиться закрывающийся через какуюнить preg_* функцию(кстате какую, если у меня есть база лексем в массиве) обрамить как то, и все это прибавить к выходному потоку?