LINUX.ORG.RU

Посоветуйте алгоритм поиска паттерна с учетом разметки


0

0

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

Проблема следующая: когда выделяют текст, он в формате HTML. В базе лежит ббкод. Надо найти соответствие (с закрытием тегов сам справлюсь). Хочется именно искать по оригиналу, так как если тупо заново перегнать HTML -> BBCODE, но разметка поедет, да сложные теги так не перегоняются.

На ум приходят только тупой вариант:

- вырезаем в выделенном тексте всю разметку и переводы строк
- в оригинале (из базы) тоже вырезаем всю разметку, но запоминаем, откуда чего вырезали.
- ищем подстроку
- восстанавливаем смещение начала и конца
- выкоцываем текст (уже с ббкодом) по найденным смещениям

Что-то мне такой вариант кажется слишком гиморным. Чую, должны быть проще, или как минимум готовые реализации.

★★★★★

Можно как то так сделать:

при перегоне из ббкода в хтмл сохранять пары (i1, i2), где i1 начало тега в bbcode, i2 начало тега в html. Список этих пар передавать на страницу. Тогда задача найти позицию в bbcod-е по позиции в html становится тривиальной.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

Спасибо.

Ну допустим теоретическую возможность, что я смогу переколбасить парсер, чтобы посчитать для поста указанные пары. По отдельному запросу, или сразу - не важно.

Но встанет другая проблема - жабаскрипт вроде не имеет доступа к исходному HTML. При выделении он отдаст DOM. Причем, вполне может туда напихать чего-нибудь из своих соображений. И даже если сгенерить по DOM HTML, разметка может оказаться не тождественной, и все смещения псу под хвост.

Vit ★★★★★
() автор топика

А если разметку BBCODE сохранять в самом HTML в атрибуте class? Мне бы так писать обратный конвертер было бы проще.

SV0L0CH
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.