You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

151 lines
4.9 KiB

/**
* linklocator.h
*
* Copyright (c) 2002 Dave Corrie <kde@davecorrie.com>
*
* This file is part of KMail.
*
* KMail is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef LINKLOCATOR_H_INCLUDED
#define LINKLOCATOR_H_INCLUDED
#include <qstring.h>
/**
* LinkLocator assists in identifying sections of text that can
* usefully be converted in hyperlinks in html. It is intended
* to be used in two ways: either by calling @ref convertToHtml()
* to convert a plaintext string into html, or to be derived from
* where more control is needed.
*
* @short Identifies URLs and email addresses embedded in plaintext.
* @version $Id$
* @author Dave Corrie <kde@davecorrie.com>
*/
class LinkLocator
{
public:
/**
* Constructs a LinkLocator that will search a plaintext string
* from a given starting point.
*
* @param text The string in which to search.
* @param pos An index into 'text' from where the search
* should begin.
*/
LinkLocator(const QString& text, int pos = 0);
/**
* Sets the maximum length of URLs that will be matched by
* @ref getUrl(). By default, this is set to 4096
* characters. The reason for this limit is that there may
* be possible security implications in handling URLs of
* unlimited length.
*
* @param length The new maximum length of URLs that will be
* matched by @ref getUrl().
*/
void setMaxUrlLen(int length);
/**
* @return The current limit on the maximum length of a URL.
*
* @see setMaxUrlLen().
*/
int maxUrlLen() const;
/**
* Sets the maximum length of email addresses that will be
* matched by @ref getEmailAddress(). By default, this is
* set to 255 characters. The reason for this limit is that
* there may be possible security implications in handling
* addresses of unlimited length.
*
* @param length The new maximum length of email addresses
* that will be matched by @ref getEmailAddress().
*/
void setMaxAddressLen(int length);
/**
* @return The current limit on the maximum length of an email
* address.
*
* @see setMaxAddressLen().
*/
int maxAddressLen() const;
/**
* Attempts to grab a URL starting at the current scan position.
* If there is no URL at the current scan position, then an empty
* string is returned. If a URL is found, the current scan position
* is set to the index of the last character in the URL.
*
* @return The URL at the current scan position, or an empty string.
*/
QString getUrl();
/**
* Attempts to grab an email address. If there is an @ symbol at the
* current scan position, then the text will be searched both backwards
* and forwards to find the email address. If there is no @ symbol at
* the current scan position, an empty string is returned. If an address
* is found, then the current scan position is set to the index of the
* last character in the address.
*
* @return The email address at the current scan position, or an empty
* string.
*/
QString getEmailAddress();
/**
* Converts plaintext into html. The following characters are converted to HTML
* entities: & " < >. Newlines are also preserved.
*
* @param plainText The text to be converted into HTML.
* @param preserveBlanks Whether to preserve the appearance of sequences of space
* characters and tab characters in the resulting HTML.
* @param maxUrlLen The maximum length of permitted URLs. (See
* @ref maxUrlLen().)
* @param maxAddressLen The maximum length of permitted email addresses.
* (See @ref maxAddressLen().)
* @return An HTML version of the text supplied in the 'plainText' parameter, suitable
* for inclusion in the BODY of an HTML document.
*/
static QString convertToHtml(const QString& plainText, bool preserveBlanks = false,
int maxUrlLen = 4096, int maxAddressLen = 255);
protected:
/**
* The plaintext string being scanned for URLs and email addresses.
*/
QString mText;
/**
* The current scan position.
*/
int mPos;
private:
int mMaxUrlLen;
int mMaxAddressLen;
bool atUrl() const;
bool isEmptyUrl(const QString& url);
bool isEmptyAddress(const QString& address);
};
#endif // LINKLOCATOR_H_INCLUDED