Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Парсинг BBcode (https://javascript.ru/forum/misc/24939-parsing-bbcode.html)

laimas 07.01.2016 03:57

Цитата:

Сообщение от Яростный Меч
У меня тоже решена, правда, на скорую руку примитивным способом, но тут можно допилить работу со стеком, и сделать по нормальному, не меняя общий подход. Не получится только игнорировать открывающий тег, для которого нет закрывашки, т.к. нет заглядывания вперед.

Нужно описать правила, без них не получится, это непарные теги, например IMG, это вложения для таблиц и списков, если таковые теги разрешены, и т.п.

Deff 07.01.2016 04:06

laimas,
Однотеговых BB-кодов мало <br> <img> [you] (часто есть - имя юзера)
Они парсятся первыми, замечание справедливое, но я описал, что выходная функция HTML тегов должна быть в итоге привязана к объекту выходных функций по тегам, ибо часто теги преобразуются в многотеговые конструкции HTML
Опять же и атрибуты меняют итоговый код HTML

laimas 07.01.2016 04:21

Цитата:

Сообщение от Deff
Однотеговых BB-кодов мало <br> <img> [you] (часто есть - имя юзера)

Ну так они есть :) Использование принципа работы стека, это старая и удобная идея для таковых разборов, и без правил не получится, ну если только разрешено использование простейших html-тегов.

Deff 07.01.2016 04:26

laimas,
Вообще тема интересная, рыл тут четыре дня, вот лучший пост был этот от devote (Были пару интересных импортных постов, но там код для анализа ошибок на страницу
Думаю в принципе, задача поиска без ошибок без движения челноком по строке (ищем закрывашку и идём от нёё вверх к открывашке) решается весьма трудоёмко. Пока реальных кодов с учётом всех ошибок мизер..

laimas 07.01.2016 04:36

Да, были темы на форуме по использованию принципа стека, правда не в контексте ВВ, но суть та же.

Цитата:

Сообщение от Deff
Думаю в принципе, задача поиска без ошибок без движения челноком по строке

Ну как сказать, ведь и браузеру нужно переварить строку содержащую html-код, и он тоже поступит так же, но и обязательно по правилам. При этом есть "любезые" браузеры закрывающие тег, если допущена ошибка, а есть и не делающие такой медвежей услуги. Например, под FF видно, что-то не то, а причины не понять, а оплеванный ослик в своем отладчике сразу показал ошибку, ибо он не закрыл тег за нерадивым исполнителем. )

Если подумать, то думаю можно использовать стек и как источник "места" ошибок, делать откат и удалять некорректное.

Deff 07.01.2016 04:40

laimas,
Ну в итоге, совместно с куском от dеvote мой скрипт парсит быстее - проверил на мегабайте BB-кодов (Правдо мало вставлял лишних квадратных скобок, спецом ошибок в BB-кодах 20% (если интересно завтра выложу тест

laimas 07.01.2016 04:44

Выкладывайте, правда ВВ код можно обработать и на сервере, и для этого есть готовое на Cи. Я не сторонник взваливать все на клиента. )

Deff 07.01.2016 04:48

laimas,
Тут идея скрытого текста небольших сообщений обмена между "маффами", поскольку после кодирования(при отправке) и скрытия сообщения уже не прочесть(ессенно и серв не парсит кодированное) (а общение через личку - сильно много телодвижений, а тут видит конкретный чел) Обычно играют в чате - но уменя все чаты сторонние, и там тож личка - долгая песня, и не видно всех сообщений, а в форуме сразу вся страница и скрытое-невидимое остальным, меж общим кругом общения

Яростный Меч 07.01.2016 05:10

Вопрос: вот такая строка во что должна превращаться?
1[b]2[u]3[/b]4[/u]5


в идеале, как мне кажется, "1<b>2<u>3</u></b><u>4</u>5"

по крайней мере на этом форуме именно так работает

laimas 07.01.2016 05:13

Цитата:

Сообщение от Яростный Меч
Вопрос: вот такая строка во что должна превращаться?
12345

Здесь ошибка вложения, и по хорошему нужно игнорировать такое, а не догадываться чего хотят и исправлять.


Часовой пояс GMT +3, время: 04:54.