00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __kurl_h__
00021 #define __kurl_h__
00022
00023 #include <qstring.h>
00024 #include <qvaluelist.h>
00025 #include "kdelibs_export.h"
00026
00027 class QUrl;
00028 class QStringList;
00029 template <typename K, typename V> class QMap;
00030
00031 class KURLPrivate;
00032
00033
00034 #define KURL_TRIPLE_SLASH_FILE_PROT
00035
00122 class KDECORE_EXPORT KURL
00123 {
00124 public:
00125 enum AdjustementFlags
00126 {
00127 NoAdjustements = 0,
00128 StripFileProtocol = 1
00129 };
00130
00134 enum URIMode
00135 {
00140 Auto,
00145 Invalid,
00150 RawURI,
00154 URL,
00160 Mailto
00161 };
00162
00169 class KDECORE_EXPORT List : public QValueList<KURL>
00170 {
00171 public:
00175 List() { }
00181 List(const KURL &url);
00187 List(const QStringList &list);
00192 QStringList toStringList() const;
00193 };
00197 KURL();
00198
00202 ~KURL();
00203
00220 KURL( const QString& url, int encoding_hint = 0 );
00230 KURL( const char * url, int encoding_hint = 0 );
00240 KURL( const QCString& url, int encoding_hint = 0 );
00241
00246 KURL( const KURL& u );
00251 KURL( const QUrl &u );
00264 KURL( const KURL& _baseurl, const QString& _rel_url, int encoding_hint=0 );
00265
00271 QString protocol() const { return m_bIsMalformed ? QString::null : m_strProtocol; }
00276 void setProtocol( const QString& _txt );
00277
00283 int uriMode() const;
00284
00289 QString user() const { return m_strUser; }
00296 void setUser( const QString& _txt );
00301 bool hasUser() const { return !m_strUser.isEmpty(); }
00302
00307 QString pass() const { return m_strPass; }
00318 void setPass( const QString& _txt );
00323 bool hasPass() const { return !m_strPass.isEmpty(); }
00324
00329 QString host() const { return m_strHost; }
00330
00337 void setHost( const QString& _txt );
00342 bool hasHost() const { return !m_strHost.isEmpty(); }
00343
00349 unsigned short int port() const { return m_iPort; }
00354 void setPort( unsigned short int _p );
00355
00361 QString path() const { return m_strPath; }
00362
00376 QString path( int _trailing ) const;
00377
00386 void setPath( const QString& path );
00387
00392 bool hasPath() const { return !m_strPath.isEmpty(); }
00393
00402 void cleanPath(bool cleanDirSeparator = true);
00403
00415 void adjustPath(int _trailing);
00416
00424 void setEncodedPathAndQuery( const QString& _txt, int encoding_hint = 0 );
00425
00432 void setEncodedPath(const QString& _txt, int encoding_hint = 0 );
00433
00451 QString encodedPathAndQuery( int _trailing = 0, bool _no_empty_path = false, int encoding_hint = 0) const;
00452
00461 void setQuery( const QString& _txt, int encoding_hint = 0);
00462
00471 QString query() const;
00472
00477 QString ref() const { return m_strRef_encoded; }
00478
00483 void setRef( const QString& _txt ) { m_strRef_encoded = _txt; }
00484
00491 bool hasRef() const { return !m_strRef_encoded.isNull(); }
00492
00500 QString htmlRef() const;
00501
00507 QString encodedHtmlRef() const;
00508
00516 void setHTMLRef( const QString& _ref );
00517
00523 bool hasHTMLRef() const;
00524
00530 bool isValid() const { return !m_bIsMalformed; }
00534 KDE_DEPRECATED bool isMalformed() const { return !isValid(); }
00535
00541 bool isLocalFile() const;
00542
00549 void setFileEncoding(const QString &encoding);
00550
00557 QString fileEncoding() const;
00558
00565 bool hasSubURL() const;
00566
00577 void addPath( const QString& txt );
00578
00583 QString queryItem( const QString& item ) const;
00584
00594 QString queryItem( const QString& item, int encoding_hint ) const;
00595
00604 enum QueryItemsOptions { CaseInsensitiveKeys = 1 };
00605
00609 QMap< QString, QString > queryItems( int options=0 ) const;
00610
00622 QMap< QString, QString > queryItems( int options, int encoding_hint ) const;
00623
00634 void addQueryItem( const QString& _item, const QString& _value, int encoding_hint = 0 );
00635
00641 void removeQueryItem( const QString& _item );
00642
00656 void setFileName( const QString&_txt );
00657
00668 QString fileName( bool _ignore_trailing_slash_in_path = true ) const;
00669
00681 QString directory( bool _strip_trailing_slash_from_result = true,
00682 bool _ignore_trailing_slash_in_path = true ) const;
00683
00687 void setDirectory(const QString &dir);
00688
00702 bool cd( const QString& _dir );
00703
00722 QString url( int _trailing = 0, int encoding_hint = 0) const;
00723
00737 QString prettyURL( int _trailing = 0) const;
00738
00753 QString prettyURL( int _trailing, AdjustementFlags _flags) const;
00754
00755
00756
00767 QString pathOrURL() const;
00768
00775 QString htmlURL() const;
00776
00777
00782 bool isEmpty() const;
00783
00792 KURL upURL( ) const;
00793
00794 bool operator<(const KURL& _u) const;
00795
00796 KURL& operator=( const KURL& _u );
00797 KURL& operator=( const QString& _url );
00798 KURL& operator=( const char * _url );
00799 KURL& operator=( const QUrl & u );
00800
00801 bool operator==( const KURL& _u ) const;
00802 bool operator==( const QString& _u ) const;
00803 bool operator!=( const KURL& _u ) const { return !( *this == _u ); }
00804 bool operator!=( const QString& _u ) const { return !( *this == _u ); }
00805
00816 bool cmp( const KURL &u, bool ignore_trailing = false ) const KDE_DEPRECATED;
00817
00827 bool equals( const KURL &u, bool ignore_trailing = false ) const;
00828
00834 bool isParentOf( const KURL& u ) const;
00835
00851 static List split( const QString& _url );
00852
00868 static List split( const KURL& _url );
00869
00877 static KURL join( const List& _list );
00878
00892 static KURL fromPathOrURL( const QString& text );
00893
00904 static QString encode_string(const QString &str, int encoding_hint = 0);
00905
00916 static QString encode_string_no_slash(const QString &str, int encoding_hint = 0);
00917
00928 static QString decode_string(const QString &str, int encoding_hint = 0);
00929
00938 static bool isRelativeURL(const QString &_url);
00939
00956 static QString relativeURL(const KURL &base_url, const KURL &url, int encoding_hint = 0);
00957
00967 static QString relativePath(const QString &base_dir, const QString &path, bool *isParent=0);
00968
00974 static URIMode uriModeForProtocol(const QString& protocol);
00975
00976 #ifdef KDE_NO_COMPAT
00977 private:
00978 #endif
00979
00982 QString filename( bool _ignore_trailing_slash_in_path = true ) const
00983 {
00984 return fileName(_ignore_trailing_slash_in_path);
00985 }
00986
00987 protected:
00988 void reset();
00989 void parseURL( const QString& _url, int encoding_hint = 0 );
00990 void parseRawURI( const QString& _url, int encoding_hint = 0 );
00991 void parseMailto( const QString& _url, int encoding_hint = 0 );
00992 void parse( const QString& _url, int encoding_hint = 0 );
00993
00994 private:
00995 void _setQuery( const QString& _txt, int encoding_hint = 0);
00996
00997 QString m_strProtocol;
00998 QString m_strUser;
00999 QString m_strPass;
01000 QString m_strHost;
01001 QString m_strPath;
01002 QString m_strRef_encoded;
01003 QString m_strQuery_encoded;
01004 bool m_bIsMalformed : 1;
01005 enum URIMode m_iUriMode : 3;
01006 uint freeForUse : 4;
01007 unsigned short int m_iPort;
01008 QString m_strPath_encoded;
01009
01010 friend KDECORE_EXPORT QDataStream & operator<< (QDataStream & s, const KURL & a);
01011 friend KDECORE_EXPORT QDataStream & operator>> (QDataStream & s, KURL & a);
01012 private:
01013 KURLPrivate* d;
01014 };
01015
01023 KDECORE_EXPORT bool urlcmp( const QString& _url1, const QString& _url2 );
01024
01037 KDECORE_EXPORT bool urlcmp( const QString& _url1, const QString& _url2, bool _ignore_trailing, bool _ignore_ref );
01038
01039 KDECORE_EXPORT QDataStream & operator<< (QDataStream & s, const KURL & a);
01040 KDECORE_EXPORT QDataStream & operator>> (QDataStream & s, KURL & a);
01041
01042 #endif