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__ "$Id: kurl.h,v 1.130 2003/12/10 13:55:53 waba Exp $"
00022
00023 #include <qstring.h>
00024 #include <qvaluelist.h>
00025 #include "kdemacros.h"
00026
00027 class QUrl;
00028 class QStringList;
00029 template <typename K, typename V> class QMap;
00030
00031 class KURLPrivate;
00118 class KURL
00119 {
00120 public:
00121 enum AdjustementFlags
00122 {
00123 NoAdjustements = 0,
00124 StripFileProtocol = 1
00125 };
00126
00130 enum URIMode
00131 {
00136 Auto,
00141 Invalid,
00146 RawURI,
00150 URL,
00156 Mailto
00157 };
00158
00165 class List : public QValueList<KURL>
00166 {
00167 public:
00171 List() { }
00177 List(const KURL &url);
00183 List(const QStringList &list);
00188 QStringList toStringList() const;
00189 };
00193 KURL();
00194
00198 ~KURL();
00199
00216 KURL( const QString& url, int encoding_hint = 0 );
00226 KURL( const char * url, int encoding_hint = 0 );
00236 KURL( const QCString& url, int encoding_hint = 0 );
00237
00242 KURL( const KURL& u );
00247 KURL( const QUrl &u );
00260 KURL( const KURL& _baseurl, const QString& _rel_url, int encoding_hint=0 );
00261
00267 QString protocol() const { return m_bIsMalformed ? QString::null : m_strProtocol; }
00272 void setProtocol( const QString& _txt );
00273
00279 int uriMode() const;
00280
00285 QString user() const { return m_strUser; }
00292 void setUser( const QString& _txt );
00297 bool hasUser() const { return !m_strUser.isEmpty(); }
00298
00303 QString pass() const { return m_strPass; }
00314 void setPass( const QString& _txt );
00319 bool hasPass() const { return !m_strPass.isEmpty(); }
00320
00325 QString host() const { return m_strHost; }
00326
00333 void setHost( const QString& _txt );
00338 bool hasHost() const { return !m_strHost.isEmpty(); }
00339
00345 unsigned short int port() const { return m_iPort; }
00350 void setPort( unsigned short int _p );
00351
00357 QString path() const { return m_strPath; }
00358
00372 QString path( int _trailing ) const;
00373
00382 void setPath( const QString& path );
00383
00388 bool hasPath() const { return !m_strPath.isEmpty(); }
00389
00398 void cleanPath(bool cleanDirSeparator = true);
00399
00411 void adjustPath(int _trailing);
00412
00420 void setEncodedPathAndQuery( const QString& _txt, int encoding_hint = 0 );
00421
00428 void setEncodedPath(const QString& _txt, int encoding_hint = 0 );
00429
00447 QString encodedPathAndQuery( int _trailing = 0, bool _no_empty_path = false, int encoding_hint = 0) const;
00448
00457 void setQuery( const QString& _txt, int encoding_hint = 0);
00458
00467 QString query() const;
00468
00473 QString ref() const { return m_strRef_encoded; }
00474
00479 void setRef( const QString& _txt ) { m_strRef_encoded = _txt; }
00480
00487 bool hasRef() const { return !m_strRef_encoded.isNull(); }
00488
00496 QString htmlRef() const;
00497
00503 QString encodedHtmlRef() const;
00504
00512 void setHTMLRef( const QString& _ref );
00513
00519 bool hasHTMLRef() const;
00520
00526 bool isValid() const { return !m_bIsMalformed; }
00530 KDE_DEPRECATED bool isMalformed() const { return !isValid(); }
00531
00537 bool isLocalFile() const;
00538
00545 void setFileEncoding(const QString &encoding);
00546
00553 QString fileEncoding() const;
00554
00561 bool hasSubURL() const;
00562
00573 void addPath( const QString& txt );
00574
00579 QString queryItem( const QString& item ) const;
00580
00590 QString queryItem( const QString& item, int encoding_hint ) const;
00591
00600 enum QueryItemsOptions { CaseInsensitiveKeys = 1 };
00601
00605 QMap< QString, QString > queryItems( int options=0 ) const;
00606
00618 QMap< QString, QString > queryItems( int options, int encoding_hint ) const;
00619
00630 void addQueryItem( const QString& _item, const QString& _value, int encoding_hint = 0 );
00631
00637 void removeQueryItem( const QString& _item );
00638
00652 void setFileName( const QString&_txt );
00653
00664 QString fileName( bool _ignore_trailing_slash_in_path = true ) const;
00665
00677 QString directory( bool _strip_trailing_slash_from_result = true,
00678 bool _ignore_trailing_slash_in_path = true ) const;
00679
00683 void setDirectory(const QString &dir);
00684
00698 bool cd( const QString& _dir );
00699
00718 QString url( int _trailing = 0, int encoding_hint = 0) const;
00719
00733 QString prettyURL( int _trailing = 0) const;
00734
00744 QString prettyURL( int _trailing, AdjustementFlags _flags) const;
00745
00746
00753 QString htmlURL() const;
00754
00755
00760 bool isEmpty() const;
00761
00770 KURL upURL( ) const;
00771
00772 bool operator<(const KURL& _u) const;
00773
00774 KURL& operator=( const KURL& _u );
00775 KURL& operator=( const QString& _url );
00776 KURL& operator=( const char * _url );
00777 KURL& operator=( const QUrl & u );
00778
00779 bool operator==( const KURL& _u ) const;
00780 bool operator==( const QString& _u ) const;
00781 bool operator!=( const KURL& _u ) const { return !( *this == _u ); }
00782 bool operator!=( const QString& _u ) const { return !( *this == _u ); }
00783
00794 bool cmp( const KURL &u, bool ignore_trailing = false ) const KDE_DEPRECATED;
00795
00805 bool equals( const KURL &u, bool ignore_trailing = false ) const;
00806
00812 bool isParentOf( const KURL& u ) const;
00813
00829 static List split( const QString& _url );
00830
00846 static List split( const KURL& _url );
00847
00855 static KURL join( const List& _list );
00856
00870 static KURL fromPathOrURL( const QString& text );
00871
00882 static QString encode_string(const QString &str, int encoding_hint = 0);
00883
00894 static QString encode_string_no_slash(const QString &str, int encoding_hint = 0);
00895
00906 static QString decode_string(const QString &str, int encoding_hint = 0);
00907
00916 static bool isRelativeURL(const QString &_url);
00917
00934 static QString relativeURL(const KURL &base_url, const KURL &url, int encoding_hint = 0);
00935
00945 static QString relativePath(const QString &base_dir, const QString &path, bool *isParent=0);
00946
00952 static URIMode uriModeForProtocol(const QString& protocol);
00953
00954 #ifdef KDE_NO_COMPAT
00955 private:
00956 #endif
00957 QString filename( bool _ignore_trailing_slash_in_path = true ) const
00958 {
00959 return fileName(_ignore_trailing_slash_in_path);
00960 }
00961
00962 protected:
00963 void reset();
00964 void parseURL( const QString& _url, int encoding_hint = 0 );
00965 void parseRawURI( const QString& _url, int encoding_hint = 0 );
00966 void parseMailto( const QString& _url, int encoding_hint = 0 );
00967 void parse( const QString& _url, int encoding_hint = 0 );
00968
00969 private:
00970 void _setQuery( const QString& _txt, int encoding_hint = 0);
00971
00972 QString m_strProtocol;
00973 QString m_strUser;
00974 QString m_strPass;
00975 QString m_strHost;
00976 QString m_strPath;
00977 QString m_strRef_encoded;
00978 QString m_strQuery_encoded;
00979 bool m_bIsMalformed : 1;
00980 enum URIMode m_iUriMode : 3;
00981 uint freeForUse : 4;
00982 unsigned short int m_iPort;
00983 QString m_strPath_encoded;
00984
00985 friend QDataStream & operator<< (QDataStream & s, const KURL & a);
00986 friend QDataStream & operator>> (QDataStream & s, KURL & a);
00987 private:
00988 KURLPrivate* d;
00989 };
00990
00998 bool urlcmp( const QString& _url1, const QString& _url2 );
00999
01012 bool urlcmp( const QString& _url1, const QString& _url2, bool _ignore_trailing, bool _ignore_ref );
01013
01014 QDataStream & operator<< (QDataStream & s, const KURL & a);
01015 QDataStream & operator>> (QDataStream & s, KURL & a);
01016
01017 #endif