Emit autolinks in QTextMarkdownWriter

When a markdown document contains a "naked" URL, or an angle-bracketed
<URL>, md4c recognizes it, and we set the AnchorHref charfmt property.
There's no need to expand it into the [text](url) form if the text is
the same as the url, there is no tooltip, and the url is valid.
QTextMarkdownWriter now writes a CommonMark "autolink" in that case:
https://spec.commonmark.org/0.30/#autolinks

[ChangeLog][QtGui][Text] QTextMarkdownWriter now writes an autolink
whenever a hyperlink has no custom text and no tooltip, including
when the document was parsed from Markdown containing a naked URL.

Pick-to: 6.4
Fixes: QTBUG-94713
Change-Id: I432db8499c62e1e0b1e913bfd8ef2147e3c2bb2a
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
This commit is contained in:
Shawn Rutledge 2022-06-20 22:19:34 +02:00
parent 56f0ebfe86
commit 846b314aaf
3 changed files with 16 additions and 8 deletions

View File

@ -484,13 +484,19 @@ int QTextMarkdownWriter::writeBlock(const QTextBlock &block, bool wrap, bool ign
m_stream << s;
col += s.length();
} else if (fmt.hasProperty(QTextFormat::AnchorHref)) {
QString s = u'[' + fragmentText + "]("_L1 +
fmt.property(QTextFormat::AnchorHref).toString();
if (fmt.hasProperty(QTextFormat::TextToolTip)) {
const auto href = fmt.property(QTextFormat::AnchorHref).toString();
const bool hasToolTip = fmt.hasProperty(QTextFormat::TextToolTip);
QString s;
if (!hasToolTip && href == fragmentText && !QUrl(href, QUrl::StrictMode).scheme().isEmpty()) {
s = u'<' + href + u'>';
} else {
s = u'[' + fragmentText + "]("_L1 + href;
if (hasToolTip) {
s += Space;
s += createLinkTitle(fmt.property(QTextFormat::TextToolTip).toString());
}
s += u')';
}
if (wrap && col + s.length() > ColumnLimit) {
m_stream << Newline << wrapIndentString;
col = m_wrappedLineIndent;

View File

@ -13,8 +13,7 @@ MacFarlane writes:
> > as readable as possible. The idea is that a Markdown-formatted document should
> > be publishable as-is, as plain text, without looking like it's been marked up
> > with tags or formatting instructions. (
> > [http://daringfireball.net/projects/markdown/](http://daringfireball.net/projects/markdown/)
> > )
> > <http://daringfireball.net/projects/markdown/> )
> The point can be illustrated by comparing a sample of AsciiDoc with an
> equivalent sample of Markdown. Here is a sample of AsciiDoc from the AsciiDoc

View File

@ -23,3 +23,6 @@ title")
* [link](/url "title
title title")
* nonlink
Qt has the <https://qt.io> site