summaryrefslogtreecommitdiffstats
path: root/src/corelib/io/qurl.cpp
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2012-03-30 17:48:42 -0300
committerQt by Nokia <qt-info@nokia.com>2012-04-11 23:32:26 +0200
commit1b7e9dba75f18342911bc6954be3e754322f091f (patch)
tree1dfb775910294ff8d02e60cfa9c2bf178baa6221 /src/corelib/io/qurl.cpp
parent997ac954abe8e4f7d9323f13a79989f277de8301 (diff)
Change the component formatting enum values so the default is zero
By having the default value equal to zero, we follow the principle of least surprise. For example, if we had url.path() and we refactored to url.path(QUrl::DecodeSpaces) Then instead of ensuring spaces are decoded, we make spaces the only thing encoded (unicode, delimiters and reserved characters are encoded). Besides, modifying the default can only be used to encode something that wasn't encoded previously, so having the enums as Encode makes more sense. As a side-effect, toEncoded() does not support any extra encoding options. Change-Id: I2624ec446e65c2d979e9ca2f81bd3db22b00bb13 Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
Diffstat (limited to 'src/corelib/io/qurl.cpp')
-rw-r--r--src/corelib/io/qurl.cpp58
1 files changed, 33 insertions, 25 deletions
diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp
index cbe39e9fdf..44d5533364 100644
--- a/src/corelib/io/qurl.cpp
+++ b/src/corelib/io/qurl.cpp
@@ -467,16 +467,16 @@ static inline void appendToUser(QString &appendTo, const QString &value, QUrl::F
}
const ushort *actions = 0;
- if (options & QUrl::DecodeDelimiters)
- actions = decodedActions;
- else
+ if (options & QUrl::EncodeDelimiters)
actions = encodedActions;
+ else
+ actions = decodedActions;
if (!qt_urlRecode(appendTo, value.constData(), value.constEnd(), options, actions))
appendTo += value;
}
-void QUrlPrivate::appendAuthority(QString &appendTo, QUrl::FormattingOptions options, Section appendingTo) const
+inline void QUrlPrivate::appendAuthority(QString &appendTo, QUrl::FormattingOptions options, Section appendingTo) const
{
if ((options & QUrl::RemoveUserInfo) != QUrl::RemoveUserInfo) {
appendUserInfo(appendTo, options, appendingTo);
@@ -488,14 +488,17 @@ void QUrlPrivate::appendAuthority(QString &appendTo, QUrl::FormattingOptions opt
appendTo += QLatin1Char(':') + QString::number(port);
}
-void QUrlPrivate::appendUserInfo(QString &appendTo, QUrl::FormattingOptions options, Section appendingTo) const
+inline void QUrlPrivate::appendUserInfo(QString &appendTo, QUrl::FormattingOptions options, Section appendingTo) const
{
if (Q_LIKELY(userName.isEmpty() && password.isEmpty()))
return;
const ushort *userNameActions;
const ushort *passwordActions;
- if (options & QUrl::DecodeDelimiters) {
+ if (options & QUrl::EncodeDelimiters) {
+ userNameActions = encodedUserNameActions;
+ passwordActions = encodedPasswordActions;
+ } else {
switch (appendingTo) {
case UserInfo:
userNameActions = decodedUserNameInUserInfoActions;
@@ -513,11 +516,11 @@ void QUrlPrivate::appendUserInfo(QString &appendTo, QUrl::FormattingOptions opti
passwordActions = decodedPasswordInUrlActions;
break;
}
- } else {
- userNameActions = encodedUserNameActions;
- passwordActions = encodedPasswordActions;
}
+ if ((options & QUrl::EncodeReserved) == 0)
+ options |= QUrl::DecodeReserved;
+
if (!qt_urlRecode(appendTo, userName.constData(), userName.constEnd(), options, userNameActions))
appendTo += userName;
if (options & QUrl::RemovePassword || !hasPassword()) {
@@ -541,7 +544,7 @@ inline void QUrlPrivate::appendPassword(QString &appendTo, QUrl::FormattingOptio
inline void QUrlPrivate::appendPath(QString &appendTo, QUrl::FormattingOptions options, Section appendingTo) const
{
- if (appendingTo != Path && options & QUrl::DecodeDelimiters) {
+ if (appendingTo != Path && !(options & QUrl::EncodeDelimiters)) {
if (!qt_urlRecode(appendTo, path.constData(), path.constEnd(), options, decodedPathInUrlActions))
appendTo += path;
@@ -565,12 +568,12 @@ inline void QUrlPrivate::appendQuery(QString &appendTo, QUrl::FormattingOptions
}
const ushort *actions = 0;
- if (options & QUrl::DecodeDelimiters) {
+ if (options & QUrl::EncodeDelimiters) {
+ actions = encodedQueryActions;
+ } else {
// reset to default qt_urlRecode behaviour (leave delimiters alone)
- options &= ~QUrl::DecodeDelimiters;
+ options |= QUrl::EncodeDelimiters;
actions = appendingTo == Query ? decodedQueryInIsolationActions : decodedQueryInUrlActions;
- } else if ((options & QUrl::DecodeDelimiters) == 0) {
- actions = encodedQueryActions;
}
if (!qt_urlRecode(appendTo, query.constData(), query.constData() + query.length(),
@@ -764,7 +767,9 @@ inline void QUrlPrivate::setQuery(const QString &value, int from, int iend)
QString output;
const QChar *begin = value.constData() + from;
const QChar *end = value.constData() + iend;
- if (qt_urlRecode(output, begin, end, QUrl::DecodeUnicode | QUrl::DecodeSpaces,
+
+ // leave delimiters alone but decode the rest
+ if (qt_urlRecode(output, begin, end, QUrl::EncodeDelimiters,
decodedQueryInIsolationActions))
query = output;
else
@@ -804,7 +809,7 @@ inline void QUrlPrivate::setQuery(const QString &value, int from, int iend)
inline void QUrlPrivate::appendHost(QString &appendTo, QUrl::FormattingOptions options) const
{
// this is the only flag that matters
- options &= QUrl::DecodeUnicode;
+ options &= QUrl::EncodeUnicode;
if (host.isEmpty())
return;
if (host.at(0).unicode() == '[') {
@@ -813,10 +818,10 @@ inline void QUrlPrivate::appendHost(QString &appendTo, QUrl::FormattingOptions o
} else {
// this is either an IPv4Address or a reg-name
// if it is a reg-name, it is already stored in Unicode form
- if (options == QUrl::DecodeUnicode)
- appendTo += host;
- else
+ if (options == QUrl::EncodeUnicode)
appendTo += qt_ACE_do(host, ToAceOnly);
+ else
+ appendTo += host;
}
}
@@ -1915,7 +1920,7 @@ bool QUrl::hasFragment() const
QString QUrl::topLevelDomain(ComponentFormattingOptions options) const
{
QString tld = qTopLevelDomain(host());
- if ((options & DecodeUnicode) == 0) {
+ if (options & EncodeUnicode) {
return qt_ACE_do(tld, ToAceOnly);
}
return tld;
@@ -2055,8 +2060,12 @@ QString QUrl::toString(FormattingOptions options) const
}
QString url;
- if (!options.testFlag(DecodeReserved))
- options &= ~DecodeReserved;
+
+ // for the full URL, we consider that the reserved characters are prettier if encoded
+ if (options & DecodeReserved)
+ options &= ~EncodeReserved;
+ else
+ options |= EncodeReserved;
if (!(options & QUrl::RemoveScheme) && d->hasScheme())
url += d->scheme + QLatin1Char(':');
@@ -2123,9 +2132,8 @@ QString QUrl::toDisplayString(FormattingOptions options) const
*/
QByteArray QUrl::toEncoded(FormattingOptions options) const
{
- QString stringForm = toString(options);
- if (options & DecodeUnicode)
- return stringForm.toUtf8();
+ options &= ~DecodeReserved;
+ QString stringForm = toString(options | FullyEncoded);
return stringForm.toLatin1();
}