#ifndef KURL_H_
#define KURL_H_
#include "KWQString.h"
#include "KWQValueList.h"
#include "KWQRefPtr.h"
class QTextCodec;
#ifdef __OBJC__
@class NSData;
@class NSURL;
#else
class NSData;
class NSURL;
#endif
class KURL {
public:
KURL();
KURL(const char *);
KURL(const KURL &, const QString &, const QTextCodec * = 0);
KURL(const QString &);
KURL(NSURL *);
bool isEmpty() const { return urlString.isEmpty(); }
bool isMalformed() const { return !m_isValid; }
bool isValid() const { return m_isValid; }
bool hasPath() const;
QString canonicalURL() const;
QString url() const { return urlString; }
QString protocol() const;
QString host() const;
unsigned short int port() const;
QString user() const;
QString pass() const;
QString path() const;
QString query() const;
QString ref() const;
bool hasRef() const;
QString htmlRef() const;
QString encodedHtmlRef() const;
void setProtocol(const QString &);
void setHost(const QString &);
void setPort(unsigned short int);
void setUser(const QString &);
void setPass(const QString &);
void setPath(const QString &);
void setQuery(const QString &, int encoding_hint=0);
void setRef(const QString &);
QString prettyURL() const;
NSURL *getNSURL() const;
NSData *getNSData() const;
static QString decode_string(const QString &);
static QString encode_string(const QString &);
friend bool operator==(const KURL &, const KURL &);
private:
void parse(const char *url, const QString *originalString);
#ifdef CONSTRUCT_CANONICAL_STRING
QString _path() const;
QString _user() const;
QString _pass() const;
QString _host() const;
#endif
QString urlString;
bool m_isValid;
int schemeEndPos;
int userStartPos;
int userEndPos;
int passwordEndPos;
int hostEndPos;
int portEndPos;
int pathEndPos;
int queryEndPos;
int fragmentEndPos;
friend bool urlcmp(const QString &URLA, const QString &URLB, bool ignoreTrailingSlash, bool ignoreRef);
};
#endif