summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/serialization/qtextstream.cpp265
-rw-r--r--src/corelib/serialization/qtextstream.h5
-rw-r--r--src/corelib/serialization/qtextstream_p.h17
-rw-r--r--src/xml/dom/qdom.cpp37
-rw-r--r--tests/auto/corelib/global/qglobal/tst_qglobal.cpp59
-rw-r--r--tests/auto/corelib/serialization/qtextstream/tst_qtextstream.cpp11
-rw-r--r--tests/auto/xml/dom/qdom/testdata/toString_01/doc_euc-jp.xml78
-rw-r--r--tests/auto/xml/dom/qdom/testdata/toString_01/doc_iso-2022-jp.xml78
-rw-r--r--tests/auto/xml/dom/qdom/tst_qdom.cpp65
9 files changed, 110 insertions, 505 deletions
diff --git a/src/corelib/serialization/qtextstream.cpp b/src/corelib/serialization/qtextstream.cpp
index df683d74da..32ec1ca7e3 100644
--- a/src/corelib/serialization/qtextstream.cpp
+++ b/src/corelib/serialization/qtextstream.cpp
@@ -62,7 +62,7 @@ static const int QTEXTSTREAM_BUFFERSIZE = 16384;
It's also common to use QTextStream to read console input and write
console output. QTextStream is locale aware, and will automatically decode
- standard input using the correct codec. Example:
+ standard input using the correct encoding. Example:
\snippet code/src_corelib_io_qtextstream.cpp 1
@@ -74,16 +74,16 @@ static const int QTEXTSTREAM_BUFFERSIZE = 16384;
buffer into the device and call flush() on the device.
Internally, QTextStream uses a Unicode based buffer, and
- QTextCodec is used by QTextStream to automatically support
- different character sets. By default, QTextCodec::codecForLocale()
- is used for reading and writing, but you can also set the codec by
- calling setCodec(). Automatic Unicode detection is also
+ QStringConverter is used by QTextStream to automatically support
+ different encodings. By default, UTF-8
+ is used for reading and writing, but you can also set the encoding by
+ calling setEncoding(). Automatic Unicode detection is also
supported. When this feature is enabled (the default behavior),
- QTextStream will detect the UTF-16 or the UTF-32 BOM (Byte Order Mark) and
- switch to the appropriate UTF codec when reading. QTextStream
+ QTextStream will detect the UTF-8, UTF-16 or the UTF-32 BOM (Byte Order Mark) and
+ switch to the appropriate UTF encoding when reading. QTextStream
does not write a BOM by default, but you can enable this by calling
setGenerateByteOrderMark(true). When QTextStream operates on a QString
- directly, the codec is disabled.
+ directly, the encoding is disabled.
There are three general ways to use QTextStream when reading text
files:
@@ -233,6 +233,7 @@ static const int QTEXTSTREAM_BUFFERSIZE = 16384;
#include <locale.h>
#include "private/qlocale_p.h"
+#include "private/qstringconverter_p.h"
#include <stdlib.h>
#include <limits.h>
@@ -325,12 +326,8 @@ QT_BEGIN_NAMESPACE
\internal
*/
QTextStreamPrivate::QTextStreamPrivate(QTextStream *q_ptr)
- :
-#if QT_CONFIG(textcodec)
- readConverterSavedState(nullptr),
-#endif
- readConverterSavedStateOffset(0),
- locale(QLocale::c())
+ : readConverterSavedStateOffset(0),
+ locale(QLocale::c())
{
this->q_ptr = q_ptr;
reset();
@@ -347,34 +344,8 @@ QTextStreamPrivate::~QTextStreamPrivate()
#endif
delete device;
}
-#if QT_CONFIG(textcodec)
- delete readConverterSavedState;
-#endif
-}
-
-#if QT_CONFIG(textcodec)
-static void resetCodecConverterStateHelper(QTextCodec::ConverterState *state)
-{
- state->~State();
- new (state) QTextCodec::ConverterState;
}
-static void copyConverterStateHelper(QTextCodec::ConverterState *dest,
- const QTextCodec::ConverterState *src)
-{
- // ### QTextCodec::ConverterState's copy constructors and assignments are
- // private. This function copies the structure manually.
- Q_ASSERT(!src->clearFn);
- dest->flags = src->flags;
- dest->remainingChars = src->remainingChars;
- dest->invalidChars = src->invalidChars;
- dest->state_data[0] = src->state_data[0];
- dest->state_data[1] = src->state_data[1];
- dest->state_data[2] = src->state_data[2];
- dest->state_data[3] = src->state_data[3];
-}
-#endif
-
void QTextStreamPrivate::Params::reset()
{
realNumberPrecision = 6;
@@ -403,15 +374,12 @@ void QTextStreamPrivate::reset()
readBufferStartDevicePos = 0;
lastTokenSize = 0;
-#if QT_CONFIG(textcodec)
- codec = QTextCodec::codecForLocale();
- resetCodecConverterStateHelper(&readConverterState);
- resetCodecConverterStateHelper(&writeConverterState);
- delete readConverterSavedState;
- readConverterSavedState = nullptr;
- writeConverterState.flags |= QTextCodec::IgnoreHeader;
+ hasWrittenData = false;
+ generateBOM = false;
+ encoding = QStringConverter::Utf8;
+ toUtf16 = QStringDecoder(encoding);
+ fromUtf16 = QStringEncoder(encoding);
autoDetectUnicode = true;
-#endif
}
/*!
@@ -463,22 +431,19 @@ bool QTextStreamPrivate::fillReadBuffer(qint64 maxBytes)
if (bytesRead <= 0)
return false;
-#if QT_CONFIG(textcodec)
- // codec auto detection, explicitly defaults to locale encoding if the
- // codec has been set to 0.
- if (!codec || autoDetectUnicode) {
+ if (autoDetectUnicode) {
autoDetectUnicode = false;
- codec = QTextCodec::codecForUtfText(QByteArray::fromRawData(buf, bytesRead), codec);
- if (!codec) {
- codec = QTextCodec::codecForLocale();
- writeConverterState.flags |= QTextCodec::IgnoreHeader;
+ auto e = QStringConverter::encodingForData(buf, bytesRead);
+ // QStringConverter::Locale implies unknown, so keep the current encoding
+ if (e) {
+ encoding = *e;
+ toUtf16 = QStringDecoder(encoding);
+ fromUtf16 = QStringEncoder(encoding);
}
}
#if defined (QTEXTSTREAM_DEBUG)
- qDebug("QTextStreamPrivate::fillReadBuffer(), using %s codec",
- codec ? codec->name().constData() : "no");
-#endif
+ qDebug("QTextStreamPrivate::fillReadBuffer(), using %s encoding", QStringConverter::nameForEncoding(encoding));
#endif
#if defined (QTEXTSTREAM_DEBUG)
@@ -487,13 +452,7 @@ bool QTextStreamPrivate::fillReadBuffer(qint64 maxBytes)
#endif
int oldReadBufferSize = readBuffer.size();
-#if QT_CONFIG(textcodec)
- // convert to unicode
- readBuffer += Q_LIKELY(codec) ? codec->toUnicode(buf, bytesRead, &readConverterState)
- : QString::fromLatin1(buf, bytesRead);
-#else
- readBuffer += QString::fromLatin1(buf, bytesRead);
-#endif
+ readBuffer += toUtf16(buf, bytesRead);
// remove all '\r\n' in the string.
if (readBuffer.size() > oldReadBufferSize && textModeEnabled) {
@@ -569,23 +528,9 @@ void QTextStreamPrivate::flushWriteBuffer()
}
#endif
-#if QT_CONFIG(textcodec)
- if (!codec)
- codec = QTextCodec::codecForLocale();
-#if defined (QTEXTSTREAM_DEBUG)
- qDebug("QTextStreamPrivate::flushWriteBuffer(), using %s codec (%s generating BOM)",
- codec ? codec->name().constData() : "no",
- !codec || (writeConverterState.flags & QTextCodec::IgnoreHeader) ? "not" : "");
-#endif
-
- // convert from unicode to raw data
- // codec might be null if we're already inside global destructors (QTestCodec::codecForLocale returned null)
- QByteArray data = Q_LIKELY(codec) ? codec->fromUnicode(writeBuffer.data(), writeBuffer.size(), &writeConverterState)
- : writeBuffer.toLatin1();
-#else
- QByteArray data = writeBuffer.toLatin1();
-#endif
+ QByteArray data = fromUtf16(writeBuffer);
writeBuffer.clear();
+ hasWrittenData = true;
// write raw data to the device
qint64 bytesWritten = device->write(data);
@@ -788,18 +733,8 @@ inline void QTextStreamPrivate::consume(int size)
*/
inline void QTextStreamPrivate::saveConverterState(qint64 newPos)
{
-#if QT_CONFIG(textcodec)
- if (readConverterState.clearFn) {
- // converter cannot be copied, so don't save anything
- // don't update readBufferStartDevicePos either
- return;
- }
-
- if (!readConverterSavedState)
- readConverterSavedState = new QTextCodec::ConverterState;
- copyConverterStateHelper(readConverterSavedState, &readConverterState);
-#endif
-
+ // ### Hack, FIXME
+ memcpy((void *)&savedToUtf16, (void *)&toUtf16, sizeof(QStringDecoder));
readBufferStartDevicePos = newPos;
readConverterSavedStateOffset = 0;
}
@@ -809,17 +744,11 @@ inline void QTextStreamPrivate::saveConverterState(qint64 newPos)
*/
inline void QTextStreamPrivate::restoreToSavedConverterState()
{
-#if QT_CONFIG(textcodec)
- if (readConverterSavedState) {
- // we have a saved state
- // that means the converter can be copied
- copyConverterStateHelper(&readConverterState, readConverterSavedState);
- } else {
- // the only state we could save was the initial
- // so reset to that
- resetCodecConverterStateHelper(&readConverterState);
- }
-#endif
+ if (savedToUtf16.isValid())
+ memcpy((void *)&toUtf16, (void *)&savedToUtf16, sizeof(QStringDecoder));
+ else
+ toUtf16.resetState();
+ savedToUtf16 = QStringDecoder();
}
/*!
@@ -1204,14 +1133,8 @@ bool QTextStream::seek(qint64 pos)
return false;
d->resetReadBuffer();
-#if QT_CONFIG(textcodec)
- // Reset the codec converter states.
- resetCodecConverterStateHelper(&d->readConverterState);
- resetCodecConverterStateHelper(&d->writeConverterState);
- delete d->readConverterSavedState;
- d->readConverterSavedState = nullptr;
- d->writeConverterState.flags |= QTextCodec::IgnoreHeader;
-#endif
+ d->toUtf16.resetState();
+ d->fromUtf16.resetState();
return true;
}
@@ -1255,11 +1178,9 @@ qint64 QTextStream::pos() const
QTextStreamPrivate *thatd = const_cast<QTextStreamPrivate *>(d);
thatd->readBuffer.clear();
-#if QT_CONFIG(textcodec)
thatd->restoreToSavedConverterState();
if (d->readBufferStartDevicePos == 0)
thatd->autoDetectUnicode = true;
-#endif
// Rewind the device to get to the current position Ensure that
// readBufferOffset is unaffected by fillReadBuffer()
@@ -1307,7 +1228,7 @@ void QTextStream::skipWhiteSpace()
replaced.
\note This function resets locale to the default locale ('C')
- and codec to the default codec, QTextCodec::codecForLocale().
+ and encoding to the default encoding, UTF-8.
\sa device(), setString()
*/
@@ -2579,10 +2500,9 @@ QTextStream &QTextStream::operator<<(double f)
/*!
Writes the string \a string to the stream, and returns a reference
to the QTextStream. The string is first encoded using the assigned
- codec (the default codec is QTextCodec::codecForLocale()) before
- it is written to the stream.
+ encoding (the default is UTF-8) before it is written to the stream.
- \sa setFieldWidth(), setCodec()
+ \sa setFieldWidth(), setEncoding()
*/
QTextStream &QTextStream::operator<<(const QString &string)
{
@@ -3134,7 +3054,6 @@ QTextStream &ws(QTextStream &stream)
Equivalent to QTextStream::setRealNumberPrecision(\a precision).
*/
-#if QT_CONFIG(textcodec)
namespace Qt {
/*!
@@ -3145,7 +3064,7 @@ namespace Qt {
/*!
Toggles insertion of the Byte Order Mark on \a stream when QTextStream is
- used with a UTF codec.
+ used with a UTF encoding.
\sa QTextStream::setGenerateByteOrderMark(), {QTextStream manipulators}
*/
@@ -3176,95 +3095,47 @@ QTextStream &bom(QTextStream &stream)
void QTextStream::setEncoding(QStringConverter::Encoding encoding)
{
Q_D(QTextStream);
- d->encoding = encoding;
-#if QT_CONFIG(textcodec)
- // FIXME: This is temporary until QTextStream is converted to use QStringConverter
- const char *name = QStringConverter::nameForEncoding(encoding);
- auto codec = QTextCodec::codecForName(name);
- setCodec(codec);
-#endif
-}
-
-/*!
- Returns the encoding that is current assigned to the stream.
-
- \sa setEncoding(), setAutoDetectUnicode(), locale()
-*/
-QStringConverter::Encoding QTextStream::encoding() const
-{
- Q_D(const QTextStream);
- return d->encoding;
-}
-
-/*!
- Sets the codec for this stream to \a codec. The codec is used for
- decoding any data that is read from the assigned device, and for
- encoding any data that is written. By default,
- QTextCodec::codecForLocale() is used, and automatic unicode
- detection is enabled.
-
- If QTextStream operates on a string, this function does nothing.
-
- \warning If you call this function while the text stream is reading
- from an open sequential socket, the internal buffer may still contain
- text decoded using the old codec.
+ if (d->encoding == encoding)
+ return;
- \sa codec(), setAutoDetectUnicode(), setLocale()
-*/
-void QTextStream::setCodec(QTextCodec *codec)
-{
- Q_D(QTextStream);
qint64 seekPos = -1;
if (!d->readBuffer.isEmpty()) {
if (!d->device->isSequential()) {
seekPos = pos();
}
}
- d->codec = codec;
- if (seekPos >=0 && !d->readBuffer.isEmpty())
- seek(seekPos);
-}
-/*!
- Sets the codec for this stream to the QTextCodec for the encoding
- specified by \a codecName. Common values for \c codecName include
- "ISO 8859-1", "UTF-8", and "UTF-16". If the encoding isn't
- recognized, nothing happens.
-
- Example:
-
- \snippet code/src_corelib_io_qtextstream.cpp 10
+ d->encoding = encoding;
+ d->toUtf16 = QStringDecoder(d->encoding);
+ bool generateBOM = d->hasWrittenData && d->generateBOM;
+ d->fromUtf16 = QStringEncoder(d->encoding,
+ generateBOM ? QStringEncoder::Flag::WriteBom : QStringEncoder::Flag::Default);
- \sa QTextCodec::codecForName(), setLocale()
-*/
-void QTextStream::setCodec(const char *codecName)
-{
- QTextCodec *codec = QTextCodec::codecForName(codecName);
- if (codec)
- setCodec(codec);
+ if (seekPos >=0 && !d->readBuffer.isEmpty())
+ seek(seekPos);
}
/*!
- Returns the codec that is current assigned to the stream.
+ Returns the encoding that is current assigned to the stream.
- \sa setCodec(), setAutoDetectUnicode(), locale()
+ \sa setEncoding(), setAutoDetectUnicode(), locale()
*/
-QTextCodec *QTextStream::codec() const
+QStringConverter::Encoding QTextStream::encoding() const
{
Q_D(const QTextStream);
- return d->codec;
+ return d->encoding;
}
/*!
If \a enabled is true, QTextStream will attempt to detect Unicode encoding
by peeking into the stream data to see if it can find the UTF-8, UTF-16, or
UTF-32 Byte Order Mark (BOM). If this mark is found, QTextStream will
- replace the current codec with the UTF codec.
+ replace the current encoding with the UTF encoding.
- This function can be used together with setCodec(). It is common
- to set the codec to UTF-8, and then enable UTF-16 detection.
+ This function can be used together with setEncoding(). It is common
+ to set the encoding to UTF-8, and then enable UTF-16 detection.
- \sa autoDetectUnicode(), setCodec(), QTextCodec::codecForUtfText()
+ \sa autoDetectUnicode(), setEncoding()
*/
void QTextStream::setAutoDetectUnicode(bool enabled)
{
@@ -3276,7 +3147,7 @@ void QTextStream::setAutoDetectUnicode(bool enabled)
Returns \c true if automatic Unicode detection is enabled, otherwise
returns \c false. Automatic Unicode detection is enabled by default.
- \sa setAutoDetectUnicode(), setCodec(), QTextCodec::codecForUtfText()
+ \sa setAutoDetectUnicode(), setEncoding()
*/
bool QTextStream::autoDetectUnicode() const
{
@@ -3285,7 +3156,7 @@ bool QTextStream::autoDetectUnicode() const
}
/*!
- If \a generate is true and a UTF codec is used, QTextStream will insert
+ If \a generate is true and a UTF encoding is used, QTextStream will insert
the BOM (Byte Order Mark) before any data has been written to the
device. If \a generate is false, no BOM will be inserted. This function
must be called before any data is written. Otherwise, it does nothing.
@@ -3295,14 +3166,16 @@ bool QTextStream::autoDetectUnicode() const
void QTextStream::setGenerateByteOrderMark(bool generate)
{
Q_D(QTextStream);
- if (d->writeBuffer.isEmpty()) {
- d->writeConverterState.flags.setFlag(QStringConverter::Flag::WriteBom, generate);
- }
+ if (d->hasWrittenData || d->generateBOM == generate)
+ return;
+
+ d->generateBOM = generate;
+ d->fromUtf16 = QStringEncoder(d->encoding, generate ? QStringConverter::Flag::WriteBom : QStringConverter::Flag::Default);
}
/*!
Returns \c true if QTextStream is set to generate the UTF BOM (Byte Order
- Mark) when using a UTF codec; otherwise returns \c false. UTF BOM generation is
+ Mark) when using a UTF encoding; otherwise returns \c false. UTF BOM generation is
set to false by default.
\sa setGenerateByteOrderMark()
@@ -3310,11 +3183,9 @@ void QTextStream::setGenerateByteOrderMark(bool generate)
bool QTextStream::generateByteOrderMark() const
{
Q_D(const QTextStream);
- return (d->writeConverterState.flags & QStringConverter::Flag::WriteBom);
+ return d->generateBOM;
}
-#endif
-
/*!
\since 4.5
@@ -3378,9 +3249,7 @@ QTextStream &reset(QTextStream &s) { return Qt::reset(s); }
QTextStream &ws(QTextStream &s) { return Qt::ws(s); }
-#if QT_CONFIG(textcodec)
QTextStream &bom(QTextStream &s) { return Qt::bom(s); }
-#endif
} // namespace QTextStreamFunctions
#endif
@@ -3416,10 +3285,8 @@ Q_CORE_EXPORT QTextStream &reset(QTextStream &s) { return Qt::reset(s); }
Q_CORE_EXPORT QTextStream &ws(QTextStream &s) { return Qt::ws(s); }
-#if QT_CONFIG(textcodec)
Q_CORE_EXPORT QTextStream &bom(QTextStream &s) { return Qt::bom(s); }
#endif
-#endif
QT_END_NAMESPACE
diff --git a/src/corelib/serialization/qtextstream.h b/src/corelib/serialization/qtextstream.h
index 9daa87947c..7b8c6f35b3 100644
--- a/src/corelib/serialization/qtextstream.h
+++ b/src/corelib/serialization/qtextstream.h
@@ -101,15 +101,10 @@ public:
void setEncoding(QStringConverter::Encoding encoding);
QStringConverter::Encoding encoding() const;
-#if QT_CONFIG(textcodec)
- void setCodec(QTextCodec *codec);
- void setCodec(const char *codecName);
- QTextCodec *codec() const;
void setAutoDetectUnicode(bool enabled);
bool autoDetectUnicode() const;
void setGenerateByteOrderMark(bool generate);
bool generateByteOrderMark() const;
-#endif
void setLocale(const QLocale &locale);
QLocale locale() const;
diff --git a/src/corelib/serialization/qtextstream_p.h b/src/corelib/serialization/qtextstream_p.h
index 2cf548bca6..cee79a7ecf 100644
--- a/src/corelib/serialization/qtextstream_p.h
+++ b/src/corelib/serialization/qtextstream_p.h
@@ -54,9 +54,6 @@
#include <QtCore/private/qglobal_p.h>
#include "qtextstream.h"
-#if QT_CONFIG(textcodec)
-#include "qtextcodec.h"
-#endif
QT_BEGIN_NAMESPACE
@@ -119,13 +116,9 @@ public:
QIODevice::OpenMode stringOpenMode;
QStringConverter::Encoding encoding = QStringConverter::Utf8;
-#if QT_CONFIG(textcodec)
- // codec
- QTextCodec *codec;
- QTextCodec::ConverterState readConverterState;
- QTextCodec::ConverterState writeConverterState;
- QTextCodec::ConverterState *readConverterSavedState;
-#endif
+ QStringEncoder fromUtf16;
+ QStringDecoder toUtf16;
+ QStringDecoder savedToUtf16;
QString writeBuffer;
QString readBuffer;
@@ -142,9 +135,9 @@ public:
int lastTokenSize;
bool deleteDevice;
-#if QT_CONFIG(textcodec)
bool autoDetectUnicode;
-#endif
+ bool hasWrittenData = false;
+ bool generateBOM = false;
// i/o
enum TokenDelimiter {
diff --git a/src/xml/dom/qdom.cpp b/src/xml/dom/qdom.cpp
index 5224c8b31c..c09770db82 100644
--- a/src/xml/dom/qdom.cpp
+++ b/src/xml/dom/qdom.cpp
@@ -3648,17 +3648,10 @@ bool QDomAttrPrivate::specified() const
If \a encodeEOLs is true, characters will be escaped to survive End-of-Line Handling.
*/
static QString encodeText(const QString &str,
- QTextStream &s,
const bool encodeQuotes = true,
const bool performAVN = false,
const bool encodeEOLs = false)
{
-#if !QT_CONFIG(textcodec)
- Q_UNUSED(s);
-#else
- const QTextCodec *const codec = s.codec();
- Q_ASSERT(codec);
-#endif
QString retval(str);
int len = retval.length();
int i = 0;
@@ -3695,19 +3688,7 @@ static QString encodeText(const QString &str,
len += 4;
i += 5;
} else {
-#if QT_CONFIG(textcodec)
- if(codec->canEncode(ati))
- ++i;
- else
-#endif
- {
- // We have to use a character reference to get it through.
- const ushort codepoint(ati.unicode());
- const QString replacement(QLatin1String("&#x") + QString::number(codepoint, 16) + QLatin1Char(';'));
- retval.replace(i, 1, replacement);
- i += replacement.length();
- len += replacement.length() - 1;
- }
+ ++i;
}
}
@@ -3717,9 +3698,9 @@ static QString encodeText(const QString &str,
void QDomAttrPrivate::save(QTextStream& s, int, int) const
{
if (namespaceURI.isNull()) {
- s << name << "=\"" << encodeText(value, s, true, true) << '\"';
+ s << name << "=\"" << encodeText(value, true, true) << '\"';
} else {
- s << prefix << ':' << name << "=\"" << encodeText(value, s, true, true) << '\"';
+ s << prefix << ':' << name << "=\"" << encodeText(value, true, true) << '\"';
/* This is a fix for 138243, as good as it gets.
*
* QDomElementPrivate::save() output a namespace declaration if
@@ -3733,7 +3714,7 @@ void QDomAttrPrivate::save(QTextStream& s, int, int) const
* arrive in those situations. */
if(!ownerNode ||
ownerNode->prefix != prefix) {
- s << " xmlns:" << prefix << "=\"" << encodeText(namespaceURI, s, true, true) << '\"';
+ s << " xmlns:" << prefix << "=\"" << encodeText(namespaceURI, true, true) << '\"';
}
}
}
@@ -4082,7 +4063,7 @@ void QDomElementPrivate::save(QTextStream& s, int depth, int indent) const
qName = prefix + QLatin1Char(':') + name;
nsDecl = QLatin1String(" xmlns:") + prefix;
}
- nsDecl += QLatin1String("=\"") + encodeText(namespaceURI, s) + QLatin1Char('\"');
+ nsDecl += QLatin1String("=\"") + encodeText(namespaceURI) + QLatin1Char('\"');
}
s << '<' << qName << nsDecl;
@@ -4094,9 +4075,9 @@ void QDomElementPrivate::save(QTextStream& s, int depth, int indent) const
for (; it != m_attr->map.constEnd(); ++it) {
s << ' ';
if (it.value()->namespaceURI.isNull()) {
- s << it.value()->name << "=\"" << encodeText(it.value()->value, s, true, true) << '\"';
+ s << it.value()->name << "=\"" << encodeText(it.value()->value, true, true) << '\"';
} else {
- s << it.value()->prefix << ':' << it.value()->name << "=\"" << encodeText(it.value()->value, s, true, true) << '\"';
+ s << it.value()->prefix << ':' << it.value()->name << "=\"" << encodeText(it.value()->value, true, true) << '\"';
/* This is a fix for 138243, as good as it gets.
*
* QDomElementPrivate::save() output a namespace declaration if
@@ -4111,7 +4092,7 @@ void QDomElementPrivate::save(QTextStream& s, int depth, int indent) const
if((!it.value()->ownerNode ||
it.value()->ownerNode->prefix != it.value()->prefix) &&
!outputtedPrefixes.hasSeen(it.value()->prefix)) {
- s << " xmlns:" << it.value()->prefix << "=\"" << encodeText(it.value()->namespaceURI, s, true, true) << '\"';
+ s << " xmlns:" << it.value()->prefix << "=\"" << encodeText(it.value()->namespaceURI, true, true) << '\"';
}
}
}
@@ -4692,7 +4673,7 @@ QDomTextPrivate* QDomTextPrivate::splitText(int offset)
void QDomTextPrivate::save(QTextStream& s, int, int) const
{
QDomTextPrivate *that = const_cast<QDomTextPrivate*>(this);
- s << encodeText(value, s, !(that->parent() && that->parent()->isElement()), false, true);
+ s << encodeText(value, !(that->parent() && that->parent()->isElement()), false, true);
}
/**************************************************************
diff --git a/tests/auto/corelib/global/qglobal/tst_qglobal.cpp b/tests/auto/corelib/global/qglobal/tst_qglobal.cpp
index 047130d5ea..cde4ea9633 100644
--- a/tests/auto/corelib/global/qglobal/tst_qglobal.cpp
+++ b/tests/auto/corelib/global/qglobal/tst_qglobal.cpp
@@ -30,7 +30,6 @@
#include <QtTest/QtTest>
#include <QPair>
-#include <QTextCodec>
#include <QSysInfo>
#include <QLatin1String>
@@ -50,8 +49,6 @@ private slots:
void qCoreAppStartupFunction();
void qCoreAppStartupFunctionRestart();
void integerForSize();
- void qprintable();
- void qprintable_data();
void buildAbiEndianness();
void testqOverload();
};
@@ -450,62 +447,6 @@ void tst_QGlobal::integerForSize()
typedef QPair<const char *, const char *> stringpair;
Q_DECLARE_METATYPE(stringpair)
-void tst_QGlobal::qprintable()
-{
- QFETCH(QVector<stringpair>, localestrings);
- QFETCH(int, utf8index);
-
- QVERIFY(utf8index >= 0 && utf8index < localestrings.count());
- if (utf8index < 0 || utf8index >= localestrings.count())
- return;
-
- const char *const utf8string = localestrings.at(utf8index).second;
-
- QString string = QString::fromUtf8(utf8string);
-
- for (const stringpair &pair : qAsConst(localestrings)) {
- QTextCodec *codec = QTextCodec::codecForName(pair.first);
- if (!codec)
- continue;
- QTextCodec::setCodecForLocale(codec);
- // test qPrintable()
- QVERIFY(qstrcmp(qPrintable(string), pair.second) == 0);
- for (const stringpair &pair2 : qAsConst(localestrings)) {
- if (pair2.second == pair.second)
- continue;
- QVERIFY(qstrcmp(qPrintable(string), pair2.second) != 0);
- }
- // test qUtf8Printable()
- QVERIFY(qstrcmp(qUtf8Printable(string), utf8string) == 0);
- for (const stringpair &pair2 : qAsConst(localestrings)) {
- if (qstrcmp(pair2.second, utf8string) == 0)
- continue;
- QVERIFY(qstrcmp(qUtf8Printable(string), pair2.second) != 0);
- }
- }
-
- QTextCodec::setCodecForLocale(0);
-}
-
-void tst_QGlobal::qprintable_data()
-{
- QTest::addColumn<QVector<stringpair> >("localestrings");
- QTest::addColumn<int>("utf8index"); // index of utf8 string
-
- // Unicode: HIRAGANA LETTER A, I, U, E, O (U+3442, U+3444, U+3446, U+3448, U+344a)
- static const char *const utf8string = "\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a";
- static const char *const eucjpstring = "\xa4\xa2\xa4\xa4\xa4\xa6\xa4\xa8\xa4\xaa";
- static const char *const sjisstring = "\x82\xa0\x82\xa2\x82\xa4\x82\xa6\x82\xa8";
-
- QVector<stringpair> japanesestrings;
- japanesestrings << stringpair("UTF-8", utf8string)
- << stringpair("EUC-JP", eucjpstring)
- << stringpair("Shift_JIS", sjisstring);
-
- QTest::newRow("Japanese") << japanesestrings << 0;
-
-}
-
void tst_QGlobal::buildAbiEndianness()
{
#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
diff --git a/tests/auto/corelib/serialization/qtextstream/tst_qtextstream.cpp b/tests/auto/corelib/serialization/qtextstream/tst_qtextstream.cpp
index 07960f1348..a79d1af314 100644
--- a/tests/auto/corelib/serialization/qtextstream/tst_qtextstream.cpp
+++ b/tests/auto/corelib/serialization/qtextstream/tst_qtextstream.cpp
@@ -37,10 +37,10 @@
#include <QDebug>
#include <QElapsedTimer>
#include <QFile>
+#include <QStringConverter>
#include <QTcpSocket>
#include <QTemporaryDir>
#include <QTextStream>
-#include <QTextCodec>
#if QT_CONFIG(process)
# include <QProcess>
#endif
@@ -245,7 +245,7 @@ private:
void runOnExit()
{
QByteArray buffer;
- QTextStream(&buffer) << "This will try to use QTextCodec::codecForLocale" << Qt::endl;
+ QTextStream(&buffer) << "This will try to use QStringConverter::Utf8" << Qt::endl;
}
Q_DESTRUCTOR_FUNCTION(runOnExit)
@@ -277,8 +277,8 @@ void tst_QTextStream::getSetCheck()
{
// Initialize codecs
QTextStream obj1;
- // QTextCodec * QTextStream::encoding()
- // void QTextStream::setEncoding()
+ // QTextStream::encoding()
+ // QTextStream::setEncoding()
obj1.setEncoding(QStringConverter::Utf32BE);
QCOMPARE(QStringConverter::Utf32BE, obj1.encoding());
obj1.setEncoding(QStringConverter::Utf8);
@@ -402,7 +402,7 @@ void tst_QTextStream::cleanupTestCase()
void tst_QTextStream::construction()
{
QTextStream stream;
- QCOMPARE(stream.codec(), QTextCodec::codecForLocale());
+ QCOMPARE(stream.encoding(), QStringConverter::Utf8);
QCOMPARE(stream.device(), static_cast<QIODevice *>(0));
QCOMPARE(stream.string(), static_cast<QString *>(0));
@@ -1766,7 +1766,6 @@ void tst_QTextStream::utf8IncompleteAtBufferBoundary()
QFile::remove(testFileName);
QFile data(testFileName);
- QTextCodec *utf8Codec = QTextCodec::codecForMib(106);
QString lineContents = QString::fromUtf8("\342\200\223" // U+2013 EN DASH
"\342\200\223"
"\342\200\223"
diff --git a/tests/auto/xml/dom/qdom/testdata/toString_01/doc_euc-jp.xml b/tests/auto/xml/dom/qdom/testdata/toString_01/doc_euc-jp.xml
deleted file mode 100644
index 887ab5ec30..0000000000
--- a/tests/auto/xml/dom/qdom/testdata/toString_01/doc_euc-jp.xml
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0" encoding="euc-jp"?>
-<!DOCTYPE 週報 SYSTEM "weekly-euc-jp.dtd">
-<!-- 週報サンプル -->
-<週報>
- <年月週>
- <年度>1997</年度>
- <月度>1</月度>
- <週>1</週>
- </年月週>
-
- <氏名>
- <氏>山田</氏>
- <名>太郎</名>
- </氏名>
-
- <業務報告リスト>
- <業務報告>
- <業務名>XMLエディターの作成</業務名>
- <業務コード>X3355-23</業務コード>
- <工数管理>
- <見積もり工数>1600</見積もり工数>
- <実績工数>320</実績工数>
- <当月見積もり工数>160</当月見積もり工数>
- <当月実績工数>24</当月実績工数>
- </工数管理>
- <予定項目リスト>
- <予定項目>
- <P>XMLエディターの基本仕様の作成</P>
- </予定項目>
- </予定項目リスト>
- <実施事項リスト>
- <実施事項>
- <P>XMLエディターの基本仕様の作成</P>
- </実施事項>
- <実施事項>
- <P>競合他社製品の機能調査</P>
- </実施事項>
- </実施事項リスト>
- <上長への要請事項リスト>
- <上長への要請事項>
- <P>特になし</P>
- </上長への要請事項>
- </上長への要請事項リスト>
- <問題点対策>
- <P>XMLとは何かわからない。</P>
- </問題点対策>
- </業務報告>
-
- <業務報告>
- <業務名>検索エンジンの開発</業務名>
- <業務コード>S8821-76</業務コード>
- <工数管理>
- <見積もり工数>120</見積もり工数>
- <実績工数>6</実績工数>
- <当月見積もり工数>32</当月見積もり工数>
- <当月実績工数>2</当月実績工数>
- </工数管理>
- <予定項目リスト>
- <予定項目>
- <P><A href="http://www.goo.ne.jp">goo</A>の機能を調べてみる</P>
- </予定項目>
- </予定項目リスト>
- <実施事項リスト>
- <実施事項>
- <P>更に、どういう検索エンジンがあるか調査する</P>
- </実施事項>
- </実施事項リスト>
- <上長への要請事項リスト>
- <上長への要請事項>
- <P>開発をするのはめんどうなので、Yahoo!を買収して下さい。</P>
- </上長への要請事項>
- </上長への要請事項リスト>
- <問題点対策>
- <P>検索エンジンで車を走らせることができない。(要調査)</P>
- </問題点対策>
- </業務報告>
- </業務報告リスト>
-</週報>
diff --git a/tests/auto/xml/dom/qdom/testdata/toString_01/doc_iso-2022-jp.xml b/tests/auto/xml/dom/qdom/testdata/toString_01/doc_iso-2022-jp.xml
deleted file mode 100644
index 9a8e8545ac..0000000000
--- a/tests/auto/xml/dom/qdom/testdata/toString_01/doc_iso-2022-jp.xml
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0" encoding="iso-2022-jp"?>
-<!DOCTYPE $B=5Js(B SYSTEM "weekly-iso-2022-jp.dtd">
-<!-- $B=5Js%5%s%W%k(B -->
-<$B=5Js(B>
- <$BG/7n=5(B>
- <$BG/EY(B>1997</$BG/EY(B>
- <$B7nEY(B>1</$B7nEY(B>
- <$B=5(B>1</$B=5(B>
- </$BG/7n=5(B>
-
- <$B;aL>(B>
- <$B;a(B>$B;3ED(B</$B;a(B>
- <$BL>(B>$BB@O:(B</$BL>(B>
- </$B;aL>(B>
-
- <$B6HL3Js9p%j%9%H(B>
- <$B6HL3Js9p(B>
- <$B6HL3L>(B>XML$B%(%G%#%?!<$N:n@.(B</$B6HL3L>(B>
- <$B6HL3%3!<%I(B>X3355-23</$B6HL3%3!<%I(B>
- <$B9)?t4IM}(B>
- <$B8+@Q$b$j9)?t(B>1600</$B8+@Q$b$j9)?t(B>
- <$B<B@S9)?t(B>320</$B<B@S9)?t(B>
- <$BEv7n8+@Q$b$j9)?t(B>160</$BEv7n8+@Q$b$j9)?t(B>
- <$BEv7n<B@S9)?t(B>24</$BEv7n<B@S9)?t(B>
- </$B9)?t4IM}(B>
- <$BM=Dj9`L\%j%9%H(B>
- <$BM=Dj9`L\(B>
- <P>XML$B%(%G%#%?!<$N4pK\;EMM$N:n@.(B</P>
- </$BM=Dj9`L\(B>
- </$BM=Dj9`L\%j%9%H(B>
- <$B<B;\;v9`%j%9%H(B>
- <$B<B;\;v9`(B>
- <P>XML$B%(%G%#%?!<$N4pK\;EMM$N:n@.(B</P>
- </$B<B;\;v9`(B>
- <$B<B;\;v9`(B>
- <P>$B6%9gB><R@=IJ$N5!G=D4::(B</P>
- </$B<B;\;v9`(B>
- </$B<B;\;v9`%j%9%H(B>
- <$B>eD9$X$NMW@A;v9`%j%9%H(B>
- <$B>eD9$X$NMW@A;v9`(B>
- <P>$BFC$K$J$7(B</P>
- </$B>eD9$X$NMW@A;v9`(B>
- </$B>eD9$X$NMW@A;v9`%j%9%H(B>
- <$BLdBjE@BP:v(B>
- <P>XML$B$H$O2?$+$o$+$i$J$$!#(B</P>
- </$BLdBjE@BP:v(B>
- </$B6HL3Js9p(B>
-
- <$B6HL3Js9p(B>
- <$B6HL3L>(B>$B8!:w%(%s%8%s$N3+H/(B</$B6HL3L>(B>
- <$B6HL3%3!<%I(B>S8821-76</$B6HL3%3!<%I(B>
- <$B9)?t4IM}(B>
- <$B8+@Q$b$j9)?t(B>120</$B8+@Q$b$j9)?t(B>
- <$B<B@S9)?t(B>6</$B<B@S9)?t(B>
- <$BEv7n8+@Q$b$j9)?t(B>32</$BEv7n8+@Q$b$j9)?t(B>
- <$BEv7n<B@S9)?t(B>2</$BEv7n<B@S9)?t(B>
- </$B9)?t4IM}(B>
- <$BM=Dj9`L\%j%9%H(B>
- <$BM=Dj9`L\(B>
- <P><A href="http://www.goo.ne.jp">goo</A>$B$N5!G=$rD4$Y$F$_$k(B</P>
- </$BM=Dj9`L\(B>
- </$BM=Dj9`L\%j%9%H(B>
- <$B<B;\;v9`%j%9%H(B>
- <$B<B;\;v9`(B>
- <P>$B99$K!"$I$&$$$&8!:w%(%s%8%s$,$"$k$+D4::$9$k(B</P>
- </$B<B;\;v9`(B>
- </$B<B;\;v9`%j%9%H(B>
- <$B>eD9$X$NMW@A;v9`%j%9%H(B>
- <$B>eD9$X$NMW@A;v9`(B>
- <P>$B3+H/$r$9$k$N$O$a$s$I$&$J$N$G!"(BYahoo!$B$rGc<}$7$F2<$5$$!#(B</P>
- </$B>eD9$X$NMW@A;v9`(B>
- </$B>eD9$X$NMW@A;v9`%j%9%H(B>
- <$BLdBjE@BP:v(B>
- <P>$B8!:w%(%s%8%s$G<V$rAv$i$;$k$3$H$,$G$-$J$$!#!JMWD4::!K(B</P>
- </$BLdBjE@BP:v(B>
- </$B6HL3Js9p(B>
- </$B6HL3Js9p%j%9%H(B>
-</$B=5Js(B>
diff --git a/tests/auto/xml/dom/qdom/tst_qdom.cpp b/tests/auto/xml/dom/qdom/tst_qdom.cpp
index 7cb110eab7..65cdaeb3c6 100644
--- a/tests/auto/xml/dom/qdom/tst_qdom.cpp
+++ b/tests/auto/xml/dom/qdom/tst_qdom.cpp
@@ -299,8 +299,6 @@ void tst_QDom::toString_01_data()
QTest::newRow( "04" ) << QString(prefix + "/doc04.xml");
QTest::newRow( "05" ) << QString(prefix + "/doc05.xml");
- QTest::newRow( "euc-jp" ) << QString(prefix + "/doc_euc-jp.xml");
- QTest::newRow( "iso-2022-jp" ) << QString(prefix + "/doc_iso-2022-jp.xml");
QTest::newRow( "little-endian" ) << QString(prefix + "/doc_little-endian.xml");
QTest::newRow( "utf-16" ) << QString(prefix + "/doc_utf-16.xml");
QTest::newRow( "utf-8" ) << QString(prefix + "/doc_utf-8.xml");
@@ -576,48 +574,39 @@ void tst_QDom::saveWithSerialization() const
// Read the document
QVERIFY(doc.setContent(&f));
- QByteArray codecName;
-
- foreach (codecName, m_testCodecs) {
- /* Write out doc in the specified codec. */
- QByteArray storage;
- QBuffer writeDevice(&storage);
- QVERIFY(writeDevice.open(QIODevice::WriteOnly));
+ QByteArray storage;
+ QBuffer writeDevice(&storage);
+ QVERIFY(writeDevice.open(QIODevice::WriteOnly));
- QTextStream s(&writeDevice);
- QTextCodec *codec = QTextCodec::codecForName(codecName);
- QVERIFY2(codec, qPrintable(QString::fromLatin1("Failed to load codec %1").arg(QString::fromLatin1(codecName.constData()))));
- s.setCodec(codec);
+ QTextStream s(&writeDevice);
- doc.save(s, 0, QDomNode::EncodingFromTextStream);
- s.flush();
- writeDevice.close();
+ doc.save(s, 0, QDomNode::EncodingFromTextStream);
+ s.flush();
+ writeDevice.close();
- QBuffer readDevice(&storage);
- QVERIFY(readDevice.open(QIODevice::ReadOnly));
+ QBuffer readDevice(&storage);
+ QVERIFY(readDevice.open(QIODevice::ReadOnly));
- QDomDocument result;
+ QDomDocument result;
- QString msg;
- int line = 0;
- int column = 0;
+ QString msg;
+ int line = 0;
+ int column = 0;
- QVERIFY2(result.setContent(&readDevice, &msg, &line, &column),
- qPrintable(QString::fromLatin1("Failed for codec %1: line %2, column %3: %4, content: %5")
- .arg(QString::fromLatin1(codecName.constData()),
- QString::number(line),
- QString::number(column),
- msg,
- codec->toUnicode(storage))));
- if(!compareDocuments(doc, result))
- {
- QCOMPARE(doc.toString(), result.toString());
+ QVERIFY2(result.setContent(&readDevice, &msg, &line, &column),
+ qPrintable(QString::fromLatin1("Failed: line %2, column %3: %4, content: %5")
+ .arg(QString::number(line),
+ QString::number(column),
+ msg,
+ QString::fromUtf8(storage))));
+ if (!compareDocuments(doc, result))
+ {
+ QCOMPARE(doc.toString(), result.toString());
- /* We put this one here as well, in case the QCOMPARE above for some strange reason
- * nevertheless succeeds. */
- QVERIFY2(false, qPrintable(QString::fromLatin1("Failed for codec %1").arg(QString::fromLatin1(codecName.constData()))));
- }
+ /* We put this one here as well, in case the QCOMPARE above for some strange reason
+ * nevertheless succeeds. */
+ QVERIFY2(false, qPrintable(QString::fromLatin1("Failed to serialize test data")));
}
}
@@ -633,8 +622,6 @@ void tst_QDom::saveWithSerialization_data() const
QTest::newRow("doc04.xml") << QString(prefix + "/doc04.xml");
QTest::newRow("doc05.xml") << QString(prefix + "/doc05.xml");
- QTest::newRow("doc_euc-jp.xml") << QString(prefix + "/doc_euc-jp.xml");
- QTest::newRow("doc_iso-2022-jp.xml") << QString(prefix + "/doc_iso-2022-jp.xml");
QTest::newRow("doc_little-endian.xml") << QString(prefix + "/doc_little-endian.xml");
QTest::newRow("doc_utf-16.xml") << QString(prefix + "/doc_utf-16.xml");
QTest::newRow("doc_utf-8.xml") << QString(prefix + "/doc_utf-8.xml");
@@ -1800,7 +1787,6 @@ void tst_QDom::germanUmlautToByteArray() const
QBuffer buffer(&data);
QVERIFY(buffer.open(QIODevice::WriteOnly));
QTextStream ts(&buffer);
- ts.setCodec("UTF-8");
ts << d.toString();
buffer.close();
@@ -1832,7 +1818,6 @@ void tst_QDom::germanUmlautToFile() const
QTemporaryFile file;
QVERIFY(file.open());
QTextStream ts(&file);
- ts.setCodec("UTF-8");
ts << d.toString();
file.close();