[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: kdepim/libkdepim
From: Ingo Klöcker <kloecker () kde ! org>
Date: 2005-03-26 12:45:47
Message-ID: 20050326124547.E44B6627 () office ! kde ! org
[Download RAW message or body]
CVS commit by kloecker:
- Implement the changes proposed by Dirk with regard to domain names in email addresses, i.e. a domain \
names can only contain letters, numbers, hyphen and dot and has to contain at least one \
dot.
- Short-circuit the "@ in local part" case.
- Short-circuit the "local part is empty" case.
- Short-circuit the "@ in domain name" case.
- Short-circuit the "domain part is empty" case.
- The above makes the isEmptyAddress method superfluous, so remove it.
- Coding style changes.
M +32 -27 linklocator.cpp 1.7
M +0 -1 linklocator.h 1.5
--- kdepim/libkdepim/linklocator.h #1.4:1.5
@@ -152,5 +152,4 @@ private:
bool atUrl() const;
bool isEmptyUrl(const QString& url);
- bool isEmptyAddress(const QString& address);
/**
--- kdepim/libkdepim/linklocator.cpp #1.6:1.7
@@ -32,4 +32,6 @@
#include <qfile.h>
+#include <limits.h>
+
QMap<QString, QString> *LinkLocator::s_smileyEmoticonNameMap = 0;
QMap<QString, QString> *LinkLocator::s_smileyEmoticonHTMLCache = 0;
@@ -162,6 +164,5 @@ QString LinkLocator::getEmailAddress()
QString address;
- if(mText[mPos] == '@')
- {
+ if ( mText[mPos] == '@' ) {
// the following characters are allowed in a dot-atom (RFC 2822):
// a-z A-Z 0-9 . ! # $ % & ' * + - / = ? ^ _ ` { | } ~
@@ -170,34 +171,45 @@ QString LinkLocator::getEmailAddress()
// determine the local part of the email address
int start = mPos - 1;
- while (start >= 0 && mText[start].unicode() < 128 &&
- (mText[start].isLetterOrNumber() ||
+ while ( start >= 0 && mText[start].unicode() < 128 &&
+ ( mText[start].isLetterOrNumber() ||
mText[start] == '@' || // allow @ to find invalid email addresses
- allowedSpecialChars.find(mText[start]) != -1))
- {
+ allowedSpecialChars.find( mText[start] ) != -1 ) ) {
+ if ( mText[start] == '@' )
+ return QString(); // local part contains '@' -> no email address
--start;
}
++start;
// we assume that an email address starts with a letter or a digit
- while (allowedSpecialChars.find(mText[start]) != -1)
+ while ( ( start < mPos ) && !mText[start].isLetterOrNumber() )
++start;
+ if ( start == mPos )
+ return QString(); // local part is empty -> no email address
// determine the domain part of the email address
+ int dotPos = INT_MAX;
int end = mPos + 1;
- while (end < (int)mText.length() &&
- (mText[end].isLetterOrNumber() ||
+ while ( end < (int)mText.length() &&
+ ( mText[end].isLetterOrNumber() ||
mText[end] == '@' || // allow @ to find invalid email addresses
- allowedSpecialChars.find(mText[end]) != -1))
- {
+ mText[end] == '.' ||
+ mText[end] == '-' ) ) {
+ if ( mText[end] == '@' )
+ return QString(); // domain part contains '@' -> no email address
+ if ( mText[end] == '.' )
+ dotPos = QMIN( dotPos, end ); // remember index of first dot in domain
++end;
}
// we assume that an email address ends with a letter or a digit
- while (allowedSpecialChars.find(mText[end - 1]) != -1)
+ while ( ( end > mPos ) && !mText[end - 1].isLetterOrNumber() )
--end;
+ if ( end == mPos )
+ return QString(); // domain part is empty -> no email address
+ if ( dotPos >= end )
+ return QString(); // domain part doesn't contain a dot
- address = mText.mid(start, end - start);
- if(isEmptyAddress(address) || end - start > maxAddressLen() || address.contains('@') != 1)
- address = "";
+ if ( end - start > maxAddressLen() )
+ return QString(); // too long -> most likely no email address
+ address = mText.mid( start, end - start );
- if(!address.isEmpty())
mPos = end - 1;
}
@@ -205,11 +217,4 @@ QString LinkLocator::getEmailAddress()
}
-bool LinkLocator::isEmptyAddress(const QString& address)
-{
- return address.isEmpty() ||
- address[0] == '@' ||
- address[address.length() - 1] == '@';
-}
-
QString LinkLocator::convertToHtml(const QString& plainText, int flags,
int maxUrlLen, int maxAddressLen)
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic