parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

OFFT: Получить превью текста (отрезать первый кусок - типа анонс)

kechinoff 20.03.2007 16:48

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

Имеем:
1. Текст в HTML. Большой такой текст. Например, статью. В тексте есть теги. Всякие полезные теги, типа P, A, IMG, TABLE, TR, TD, BR. Условие одно - HTML валиден, т.е. каждому открытому тегу соответствует свой закрытый. Кроме BR. Ну, и, нет шапки. Т.е. нет <HTML>, <HEAD>, <BODY>, т.е. только то, что обычно находится между <BODY> и </BODY>

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

Что нужно?

Нужно взять этот текст, вырезать от него начало. Полученный кусок должен не превышать 10% от веса исходного текста, но при этом быть не больше 20КБ. Т.е. если 10% оказалось больше 20КБ, то отрезок равен 20КБ.

Далее. Нужно закрыть все обрезанные теги. Т.е. если конец пришелся на середину текста внутри <P></P>, то закончить слово, которое обрезано, и поставить там </P>.

Аналогично с H1, H2, H3.

Аналогично <IMG> - если обгрыз текста пришелся на тег IMG, то нужно:
1. Закончить тег IMG
2. Посмотреть размер текста. Если размер текста стал больше 50% от размера первоначального текста, то IMG нафиг удалить.

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

Одним словом - УЖС.

Если кто-то уже когда-то делал подобное - направьте на путь истинный.