1. changed c_str() to return wxCStrData (implicitly convertible to wxChar*) 2. added template type-safe wrappers for vararg functions 3. added wxUniChar class representing single Unicode character 4. changed wxString::operator[] and wxString::iterator to return wxUniChar git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44865 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			154 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			154 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/////////////////////////////////////////////////////////////////////////////
 | 
						|
// Name:        uri.h
 | 
						|
// Purpose:     wxURI - Class for parsing URIs
 | 
						|
// Author:      Ryan Norton
 | 
						|
// Modified By:
 | 
						|
// Created:     07/01/2004
 | 
						|
// RCS-ID:      $Id$
 | 
						|
// Copyright:   (c) Ryan Norton
 | 
						|
// Licence:     wxWindows Licence
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
#ifndef _WX_URI_H_
 | 
						|
#define _WX_URI_H_
 | 
						|
 | 
						|
#include "wx/defs.h"
 | 
						|
#include "wx/object.h"
 | 
						|
#include "wx/string.h"
 | 
						|
 | 
						|
// Host Type that the server component can be
 | 
						|
enum wxURIHostType
 | 
						|
{
 | 
						|
    wxURI_REGNAME,      // Host is a normal register name (www.mysite.com etc.)
 | 
						|
    wxURI_IPV4ADDRESS,  // Host is a version 4 ip address (192.168.1.100)
 | 
						|
    wxURI_IPV6ADDRESS,  // Host is a version 6 ip address [aa:aa:aa:aa::aa:aa]:5050
 | 
						|
    wxURI_IPVFUTURE     // Host is a future ip address (wxURI is unsure what kind)
 | 
						|
};
 | 
						|
 | 
						|
// Component Flags
 | 
						|
enum wxURIFieldType
 | 
						|
{
 | 
						|
    wxURI_SCHEME = 1,
 | 
						|
    wxURI_USERINFO = 2,
 | 
						|
    wxURI_SERVER = 4,
 | 
						|
    wxURI_PORT = 8,
 | 
						|
    wxURI_PATH = 16,
 | 
						|
    wxURI_QUERY = 32,
 | 
						|
    wxURI_FRAGMENT = 64
 | 
						|
};
 | 
						|
 | 
						|
// Miscellaneous other flags
 | 
						|
enum wxURIFlags
 | 
						|
{
 | 
						|
    wxURI_STRICT = 1
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
// Generic class for parsing URIs.
 | 
						|
//
 | 
						|
// See RFC 3986
 | 
						|
class WXDLLIMPEXP_BASE wxURI : public wxObject
 | 
						|
{
 | 
						|
public:
 | 
						|
    wxURI();
 | 
						|
    wxURI(const wxString& uri);
 | 
						|
    wxURI(const wxURI& uri);
 | 
						|
 | 
						|
    virtual ~wxURI();
 | 
						|
 | 
						|
    const wxChar* Create(const wxString& uri);
 | 
						|
 | 
						|
    bool HasScheme() const      {   return (m_fields & wxURI_SCHEME) == wxURI_SCHEME;       }
 | 
						|
    bool HasUserInfo() const    {   return (m_fields & wxURI_USERINFO) == wxURI_USERINFO;   }
 | 
						|
    bool HasServer() const      {   return (m_fields & wxURI_SERVER) == wxURI_SERVER;       }
 | 
						|
    bool HasPort() const        {   return (m_fields & wxURI_PORT) == wxURI_PORT;           }
 | 
						|
    bool HasPath() const        {   return (m_fields & wxURI_PATH) == wxURI_PATH;           }
 | 
						|
    bool HasQuery() const       {   return (m_fields & wxURI_QUERY) == wxURI_QUERY;         }
 | 
						|
    bool HasFragment() const    {   return (m_fields & wxURI_FRAGMENT) == wxURI_FRAGMENT;   }
 | 
						|
 | 
						|
    const wxString& GetScheme() const           {   return m_scheme;    }
 | 
						|
    const wxString& GetPath() const             {   return m_path;      }
 | 
						|
    const wxString& GetQuery() const            {   return m_query;     }
 | 
						|
    const wxString& GetFragment() const         {   return m_fragment;  }
 | 
						|
    const wxString& GetPort() const             {   return m_port;      }
 | 
						|
    const wxString& GetUserInfo() const         {   return m_userinfo;  }
 | 
						|
    const wxString& GetServer() const           {   return m_server;    }
 | 
						|
    const wxURIHostType& GetHostType() const    {   return m_hostType;  }
 | 
						|
 | 
						|
    //Note that the following two get functions are explicitly depreciated by RFC 2396
 | 
						|
    wxString GetUser() const;
 | 
						|
    wxString GetPassword() const;
 | 
						|
 | 
						|
    wxString BuildURI() const;
 | 
						|
    wxString BuildUnescapedURI() const;
 | 
						|
 | 
						|
    void Resolve(const wxURI& base, int flags = wxURI_STRICT);
 | 
						|
    bool IsReference() const;
 | 
						|
 | 
						|
    wxURI& operator = (const wxURI& uri);
 | 
						|
    wxURI& operator = (const wxString& string);
 | 
						|
    bool operator == (const wxURI& uri) const;
 | 
						|
 | 
						|
    static wxString Unescape (const wxString& szEscapedURI);
 | 
						|
 | 
						|
protected:
 | 
						|
    wxURI& Assign(const wxURI& uri);
 | 
						|
 | 
						|
    void Clear();
 | 
						|
 | 
						|
    const wxChar* Parse          (const wxChar* uri);
 | 
						|
    const wxChar* ParseAuthority (const wxChar* uri);
 | 
						|
    const wxChar* ParseScheme    (const wxChar* uri);
 | 
						|
    const wxChar* ParseUserInfo  (const wxChar* uri);
 | 
						|
    const wxChar* ParseServer    (const wxChar* uri);
 | 
						|
    const wxChar* ParsePort      (const wxChar* uri);
 | 
						|
    const wxChar* ParsePath      (const wxChar* uri,
 | 
						|
                                  bool bReference = false,
 | 
						|
                                  bool bNormalize = true);
 | 
						|
    const wxChar* ParseQuery     (const wxChar* uri);
 | 
						|
    const wxChar* ParseFragment  (const wxChar* uri);
 | 
						|
 | 
						|
 | 
						|
    static bool ParseH16(const wxChar*& uri);
 | 
						|
    static bool ParseIPv4address(const wxChar*& uri);
 | 
						|
    static bool ParseIPv6address(const wxChar*& uri);
 | 
						|
    static bool ParseIPvFuture(const wxChar*& uri);
 | 
						|
 | 
						|
    static void Normalize(wxChar* uri, bool bIgnoreLeads = false);
 | 
						|
    static void UpTree(const wxChar* uristart, const wxChar*& uri);
 | 
						|
    static void UpTree(wxString::const_iterator uristart,
 | 
						|
                       wxString::const_iterator& uri);
 | 
						|
 | 
						|
    static wxUniChar TranslateEscape(const wxString::const_iterator& s);
 | 
						|
    static void Escape(wxString& s, const wxChar& c);
 | 
						|
    static bool IsEscape(const wxChar*& uri);
 | 
						|
 | 
						|
    static wxChar CharToHex(const wxChar& c);
 | 
						|
 | 
						|
    static bool IsUnreserved (const wxChar& c);
 | 
						|
    static bool IsReserved (const wxChar& c);
 | 
						|
    static bool IsGenDelim (const wxChar& c);
 | 
						|
    static bool IsSubDelim (const wxChar& c);
 | 
						|
    static bool IsHex(const wxChar& c);
 | 
						|
    static bool IsAlpha(const wxChar& c);
 | 
						|
    static bool IsDigit(const wxChar& c);
 | 
						|
 | 
						|
    wxString m_scheme;
 | 
						|
    wxString m_path;
 | 
						|
    wxString m_query;
 | 
						|
    wxString m_fragment;
 | 
						|
 | 
						|
    wxString m_userinfo;
 | 
						|
    wxString m_server;
 | 
						|
    wxString m_port;
 | 
						|
 | 
						|
    wxURIHostType m_hostType;
 | 
						|
 | 
						|
    size_t m_fields;
 | 
						|
 | 
						|
    DECLARE_DYNAMIC_CLASS(wxURI)
 | 
						|
};
 | 
						|
 | 
						|
#endif // _WX_URI_H_
 | 
						|
 |