extract title

This commit is contained in:
Martin Rotter 2024-12-18 12:48:45 +01:00
parent e80f17d724
commit 6a9f8d7181
2 changed files with 13 additions and 4 deletions

View file

@ -20,6 +20,7 @@ QString GeminiParser::geminiToHtml(const QByteArray& gemini_data) {
static QRegularExpression exp_text(R"()");
QRegularExpressionMatch mtch;
QString title;
for (const QString& line : lines) {
if ((mtch = exp_pre.match(line)).hasMatch()) {
@ -32,7 +33,7 @@ QString GeminiParser::geminiToHtml(const QByteArray& gemini_data) {
html += parseLink(mtch);
}
else if ((mtch = exp_heading.match(line)).hasMatch()) {
html += parseHeading(mtch);
html += parseHeading(mtch, title.isEmpty() ? &title : nullptr);
}
else if ((mtch = exp_list.match(line)).hasMatch()) {
html += parseList(mtch);
@ -49,7 +50,10 @@ QString GeminiParser::geminiToHtml(const QByteArray& gemini_data) {
}
}
return html;
return QSL("<html>"
"<head><title>%1</title></head>"
"<body>%2</body>"
"</html>").arg(title, html);
}
QString GeminiParser::parseLink(const QRegularExpressionMatch& mtch) const {
@ -59,10 +63,15 @@ QString GeminiParser::parseLink(const QRegularExpressionMatch& mtch) const {
return QSL("<p>🔗 <a href=\"%1\">%2</a></p>\n").arg(link, name.isEmpty() ? link : name);
}
QString GeminiParser::parseHeading(const QRegularExpressionMatch& mtch) const {
QString GeminiParser::parseHeading(const QRegularExpressionMatch& mtch, QString* clean_header) const {
int level = mtch.captured(1).size();
QString header = mtch.captured(2);
if (!header.isEmpty() && clean_header != nullptr) {
clean_header->clear();
clean_header->append(header);
}
return QSL("<h%1>%2</h%1>\n").arg(QString::number(level), header);
}

View file

@ -12,7 +12,7 @@ class GeminiParser {
private:
QString parseLink(const QRegularExpressionMatch& mtch) const;
QString parseHeading(const QRegularExpressionMatch& mtch) const;
QString parseHeading(const QRegularExpressionMatch& mtch, QString *clean_header = nullptr) const;
QString parseQuote(const QRegularExpressionMatch& mtch) const;
QString parseList(const QRegularExpressionMatch& mtch) const;
QString parseTextInNormalMode(const QString& line) const;