Здравствуйте, господа форумчане.
Усовершенствую простой браузер на основе QTextBrowser.
Взял html страницу полученную из документа расширения .doc с помощью Microssoft Office Word.
Заметил, что QTextBrowser не читает отступы (text-indent), которые были видны в Firefox.
Присмотревшись понял, что конвектор Microssoft Office Word для большинства атрибутов тегов в html
проставил значения в величинах "pt" и "cm". К примеру:
<p class=MsoNormal style='text-indent:35.45pt'><a href="file4.htm">Регулярные выражения</a></p>
Заменив пару значений вручную на величины "px", я увидел что отступы отрабатывают.
Решил, нужно пробежаться по html странницам, и в тегах в атрибутах преобразовать величины значений
"pt" и "cm" в "px".
Сначала решил использовать для этого либо QDomElement или QXmlStreamReader и QXmlStreamWriter.
Но снова не вышло(. В моих html страницах в тегах все значения атрибутов, кроме тех, что в "style"
не были взяты в кавычки (" или ') - как к примеру: class=MsoNormal. Из-за этого документ не читался.
Решил с помощью регулярных выражений взять в кавычки значения атрибутов, и потом уже, с помощью,
QDomElement заменить величины "pt" и "cm" на "px".
Написал для взятия значения в кавычки следующий код:
void change_html(QString page_html)
{
QFile file_html(page_html);
if(!file_html.open(QIODevice::ReadWrite))
{
qDebug() << "File " << page_html << " not open!";
return;
}
QByteArray file_data;
QRegExp reg_find_teg("<=(.*)[ ]>"); // регулярное выражение поиска значений атрибутов,
// которые не в кавычках(не верное, не знаю как написать его)
reg_find_teg.setMinimal(true);
file_data = file_html.readAll(); // считываю весь файл
QString text_file(file_data); // считанный текст с файла
QString find_text; // найденный текст
int pos = 0;
while((pos = reg_find_teg.indexIn(text_file, pos)) != -1)
{
find_text = reg_find_teg.cap(1); // найденный текст
text_file = text_file.replace(find_text, "\"" + find_text + "\""); // добавление кавычек с помощью
// замены в основном тексте
pos += reg_find_teg.matchedLength();
}
file_html.seek(0); // перемежение в начало файла
file_html.write(text_file.toUtf8()); // запись строки в файл
file_html.close();
}
Но не знаю как записать верно эту регулярку QRegExp reg_find_teg("<=(.*)[ ]>");
Может кто-то подскажет? Ну или направит меня на другое более верное решение
проблемы не понимания QTextBrowser величин "pt" и "cm".