Онлайн-справочник по самым часто задаваемым вопросам из темы "Как сделать?" на форуме QSP.su

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 < ></td>
    </tr>
</table>
</qhtml>}

@delPref($html)