summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGiuseppe D'Angelo <giuseppe.dangelo@kdab.com>2020-01-31 14:30:20 +0100
committerGiuseppe D'Angelo <giuseppe.dangelo@kdab.com>2020-02-03 14:58:00 +0100
commitc29fac453f3eaac73b29eb0a66d130220d073fc6 (patch)
treed1b40d8007012f2f6b9ff72866ec567dfe629680
parent77e8023eaf671b3ce9eae16f9b84f8571f441828 (diff)
Markdown importer: use Unicode decoding
Given we feed UTF-8 data into the importer, it must be able to cope with Unicode. Build md4c with UTF-8 support, advertise it at usage site, and change a couple of broken decodings. Driveby: the textedit example used the wrong codec to decode a Markdown file. While the Markdown spec doesn't deal with encodings, using the default one for HTML is certainly wrong. Port the loading of both markdown and plaintext to UTF-8, as that what _saving_ via QTextDocumentWriter would use by default. Change-Id: I51c6214cfe45ebfc5a67a7366f7866a5328366ec Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
-rw-r--r--examples/widgets/richtext/textedit/textedit.cpp8
-rw-r--r--src/3rdparty/md4c.pri1
-rw-r--r--src/gui/text/qtextmarkdownimporter.cpp4
3 files changed, 7 insertions, 6 deletions
diff --git a/examples/widgets/richtext/textedit/textedit.cpp b/examples/widgets/richtext/textedit/textedit.cpp
index f99fa306df..7708b25a24 100644
--- a/examples/widgets/richtext/textedit/textedit.cpp
+++ b/examples/widgets/richtext/textedit/textedit.cpp
@@ -419,18 +419,18 @@ bool TextEdit::load(const QString &f)
QByteArray data = file.readAll();
QTextCodec *codec = Qt::codecForHtml(data);
QString str = codec->toUnicode(data);
- QUrl baseUrl = (f.front() == QLatin1Char(':') ? QUrl(f) : QUrl::fromLocalFile(f)).adjusted(QUrl::RemoveFilename);
- textEdit->document()->setBaseUrl(baseUrl);
if (Qt::mightBeRichText(str)) {
+ QUrl baseUrl = (f.front() == QLatin1Char(':') ? QUrl(f) : QUrl::fromLocalFile(f)).adjusted(QUrl::RemoveFilename);
+ textEdit->document()->setBaseUrl(baseUrl);
textEdit->setHtml(str);
} else {
#if QT_CONFIG(textmarkdownreader)
QMimeDatabase db;
if (db.mimeTypeForFileNameAndData(f, data).name() == QLatin1String("text/markdown"))
- textEdit->setMarkdown(str);
+ textEdit->setMarkdown(QString::fromUtf8(data));
else
#endif
- textEdit->setPlainText(QString::fromLocal8Bit(data));
+ textEdit->setPlainText(QString::fromUtf8(data));
}
setCurrentFileName(f);
diff --git a/src/3rdparty/md4c.pri b/src/3rdparty/md4c.pri
index e0150dc6ed..8de2991ac2 100644
--- a/src/3rdparty/md4c.pri
+++ b/src/3rdparty/md4c.pri
@@ -1,3 +1,4 @@
INCLUDEPATH += $$PWD/md4c
HEADERS += $$PWD/md4c/md4c.h
SOURCES += $$PWD/md4c/md4c.c
+DEFINES += MD4C_USE_UTF8
diff --git a/src/gui/text/qtextmarkdownimporter.cpp b/src/gui/text/qtextmarkdownimporter.cpp
index 88965046ce..b6a275f59c 100644
--- a/src/gui/text/qtextmarkdownimporter.cpp
+++ b/src/gui/text/qtextmarkdownimporter.cpp
@@ -397,8 +397,8 @@ int QTextMarkdownImporter::cbEnterSpan(int spanType, void *det)
break;
case MD_SPAN_A: {
MD_SPAN_A_DETAIL *detail = static_cast<MD_SPAN_A_DETAIL *>(det);
- QString url = QString::fromLatin1(detail->href.text, int(detail->href.size));
- QString title = QString::fromLatin1(detail->title.text, int(detail->title.size));
+ QString url = QString::fromUtf8(detail->href.text, int(detail->href.size));
+ QString title = QString::fromUtf8(detail->title.text, int(detail->title.size));
charFmt.setAnchorHref(url);
charFmt.setAnchorNames(QStringList(title));
charFmt.setForeground(m_palette.link());