Перейти к основному содержимому

20.23. Как убрать преформатирование из разметки HTML?

В: При работе с HTML-разметкой приходится выводить теги отдельными командами *p, чтобы разметка выводилась в одну строку, но это очень неудобно. Нет ли способа упростить работу с HTML-кодом?

О:

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

Удобнее всего было бы писать HTML-код в том виде, в каком мы его обычно пишем для браузера, т.е. преформатируя, а выводить на экран все HTML-теги в одну строку, чтобы HTML-рендер плеера QSP правильно этот HTML-код интерпретировал.

Решение тут весьма и весьма простое: нужно написать функцию, которая будет обрабатывать наш текст с HTML-разметкой и убирать оттуда символы преформатирования. Наша функция будет называться delPref, и мы оформим её на отдельной локации:

!@ delPref

local $html=$args[0] & ! помещаем переданный в функцию текст в локальную переменную

local $prevtag, $aftertag & ! задаём дополнительные локальные переменные для удобства

loop local run=1 while run:
! цикл будет выполняться, пока переменной run присвоена единица

$prevtag=$strfind($html,'[\s\r\n]+<') & ! получаем символы преформатирования до начала тега и левую угловую скобку

$aftertag=$strfind($html,'>[\s\r\n]+') & ! получаем правую угловую скобку и символы преформатирования после тега

if $prevtag<>'':
! если символы до тега получены

$html=$replace($html,$prevtag,'<')
elseif $aftertag<>'':
! если получены символы после тега

$html=$replace($html,$aftertag,'>')
else
! если символы преформатирования около тега не найдены

run=0
end
end
$result=$trim($html)

Теперь, когда нам нужно вывести на экран HTML, мы просто прогоняем его через функцию:

$html = '<qhtml>
<table border=1>
<tr>
<td width=25% bgcolor=#ffffee>
Некий текст
</td>
<td>Ещё текст</td>
</tr>
<tr>
<td width=25% bgcolor=#ffffee>
Вторая строка
</td>
<td>12345677 &lt; &gt;</td>
</tr>
</table>
</qhtml>'

@delPref($html)