extract title
This commit is contained in:
parent
e80f17d724
commit
6a9f8d7181
2 changed files with 13 additions and 4 deletions
|
@ -20,6 +20,7 @@ QString GeminiParser::geminiToHtml(const QByteArray& gemini_data) {
|
||||||
static QRegularExpression exp_text(R"()");
|
static QRegularExpression exp_text(R"()");
|
||||||
|
|
||||||
QRegularExpressionMatch mtch;
|
QRegularExpressionMatch mtch;
|
||||||
|
QString title;
|
||||||
|
|
||||||
for (const QString& line : lines) {
|
for (const QString& line : lines) {
|
||||||
if ((mtch = exp_pre.match(line)).hasMatch()) {
|
if ((mtch = exp_pre.match(line)).hasMatch()) {
|
||||||
|
@ -32,7 +33,7 @@ QString GeminiParser::geminiToHtml(const QByteArray& gemini_data) {
|
||||||
html += parseLink(mtch);
|
html += parseLink(mtch);
|
||||||
}
|
}
|
||||||
else if ((mtch = exp_heading.match(line)).hasMatch()) {
|
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()) {
|
else if ((mtch = exp_list.match(line)).hasMatch()) {
|
||||||
html += parseList(mtch);
|
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 {
|
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);
|
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();
|
int level = mtch.captured(1).size();
|
||||||
QString header = mtch.captured(2);
|
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);
|
return QSL("<h%1>%2</h%1>\n").arg(QString::number(level), header);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ class GeminiParser {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString parseLink(const QRegularExpressionMatch& mtch) const;
|
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 parseQuote(const QRegularExpressionMatch& mtch) const;
|
||||||
QString parseList(const QRegularExpressionMatch& mtch) const;
|
QString parseList(const QRegularExpressionMatch& mtch) const;
|
||||||
QString parseTextInNormalMode(const QString& line) const;
|
QString parseTextInNormalMode(const QString& line) const;
|
||||||
|
|
Loading…
Add table
Reference in a new issue