Change {DECLARE,IMPLEMENT}_*CLASS and {DECLARE,BEGIN,END}_EVENT_TABLE
occurrences to use the wx-prefixed version of the macros.
		
	
		
			
				
	
	
		
			188 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			188 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/////////////////////////////////////////////////////////////////////////////
 | 
						|
// Name:        wx/uri.h
 | 
						|
// Purpose:     wxURI - Class for parsing URIs
 | 
						|
// Author:      Ryan Norton
 | 
						|
//              Vadim Zeitlin (UTF-8 URI support, many other changes)
 | 
						|
// Created:     07/01/2004
 | 
						|
// Copyright:   (c) 2004 Ryan Norton
 | 
						|
//                  2008 Vadim Zeitlin
 | 
						|
// Licence:     wxWindows Licence
 | 
						|
/////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
#ifndef _WX_URI_H_
 | 
						|
#define _WX_URI_H_
 | 
						|
 | 
						|
#include "wx/defs.h"
 | 
						|
#include "wx/object.h"
 | 
						|
#include "wx/string.h"
 | 
						|
#include "wx/arrstr.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);
 | 
						|
 | 
						|
    // default copy ctor, assignment operator and dtor are ok
 | 
						|
 | 
						|
    bool Create(const wxString& uri);
 | 
						|
 | 
						|
    wxURI& operator=(const wxString& string)
 | 
						|
    {
 | 
						|
        Create(string);
 | 
						|
        return *this;
 | 
						|
    }
 | 
						|
 | 
						|
    bool operator==(const wxURI& uri) const;
 | 
						|
 | 
						|
    // various accessors
 | 
						|
 | 
						|
    bool HasScheme() const      { return (m_fields & wxURI_SCHEME) != 0;   }
 | 
						|
    bool HasUserInfo() const    { return (m_fields & wxURI_USERINFO) != 0; }
 | 
						|
    bool HasServer() const      { return (m_fields & wxURI_SERVER) != 0;   }
 | 
						|
    bool HasPort() const        { return (m_fields & wxURI_PORT) != 0;     }
 | 
						|
    bool HasPath() const        { return (m_fields & wxURI_PATH) != 0;     }
 | 
						|
    bool HasQuery() const       { return (m_fields & wxURI_QUERY) != 0;    }
 | 
						|
    bool HasFragment() const    { return (m_fields & wxURI_FRAGMENT) != 0; }
 | 
						|
 | 
						|
    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;   }
 | 
						|
    wxURIHostType GetHostType() const    { return m_hostType; }
 | 
						|
 | 
						|
    // these functions only work if the user information part of the URI is in
 | 
						|
    // the usual (but insecure and hence explicitly recommended against by the
 | 
						|
    // RFC) "user:password" form
 | 
						|
    wxString GetUser() const;
 | 
						|
    wxString GetPassword() const;
 | 
						|
 | 
						|
 | 
						|
    // combine all URI components into a single string
 | 
						|
    //
 | 
						|
    // BuildURI() returns the real URI suitable for use with network libraries,
 | 
						|
    // for example, while BuildUnescapedURI() returns a string suitable to be
 | 
						|
    // shown to the user.
 | 
						|
    wxString BuildURI() const { return DoBuildURI(&wxURI::Nothing); }
 | 
						|
    wxString BuildUnescapedURI() const { return DoBuildURI(&wxURI::Unescape); }
 | 
						|
 | 
						|
    // the escaped URI should contain only ASCII characters, including possible
 | 
						|
    // escape sequences
 | 
						|
    static wxString Unescape(const wxString& escapedURI);
 | 
						|
 | 
						|
 | 
						|
    void Resolve(const wxURI& base, int flags = wxURI_STRICT);
 | 
						|
    bool IsReference() const;
 | 
						|
 | 
						|
protected:
 | 
						|
    void Clear();
 | 
						|
 | 
						|
    // common part of BuildURI() and BuildUnescapedURI()
 | 
						|
    wxString DoBuildURI(wxString (*funcDecode)(const wxString&)) const;
 | 
						|
 | 
						|
    // function which returns its argument unmodified, this is used by
 | 
						|
    // BuildURI() to tell DoBuildURI() that nothing needs to be done with the
 | 
						|
    // URI components
 | 
						|
    static wxString Nothing(const wxString& value) { return value; }
 | 
						|
 | 
						|
    bool Parse(const char* uri);
 | 
						|
 | 
						|
    const char* ParseAuthority (const char* uri);
 | 
						|
    const char* ParseScheme    (const char* uri);
 | 
						|
    const char* ParseUserInfo  (const char* uri);
 | 
						|
    const char* ParseServer    (const char* uri);
 | 
						|
    const char* ParsePort      (const char* uri);
 | 
						|
    const char* ParsePath      (const char* uri);
 | 
						|
    const char* ParseQuery     (const char* uri);
 | 
						|
    const char* ParseFragment  (const char* uri);
 | 
						|
 | 
						|
 | 
						|
    static bool ParseH16(const char*& uri);
 | 
						|
    static bool ParseIPv4address(const char*& uri);
 | 
						|
    static bool ParseIPv6address(const char*& uri);
 | 
						|
    static bool ParseIPvFuture(const char*& uri);
 | 
						|
 | 
						|
    // should be called with i pointing to '%', returns the encoded character
 | 
						|
    // following it or -1 if invalid and advances i past it (so that it points
 | 
						|
    // to the last character consumed on return)
 | 
						|
    static int DecodeEscape(wxString::const_iterator& i);
 | 
						|
 | 
						|
    // append next character pointer to by p to the string in an escaped form
 | 
						|
    // and advance p past it
 | 
						|
    //
 | 
						|
    // if the next character is '%' and it's followed by 2 hex digits, they are
 | 
						|
    // not escaped (again) by this function, this allows to keep (backwards-
 | 
						|
    // compatible) ambiguity about the input format to wxURI::Create(): it can
 | 
						|
    // be either already escaped or not
 | 
						|
    void AppendNextEscaped(wxString& s, const char *& p);
 | 
						|
 | 
						|
    // convert hexadecimal digit to its value; return -1 if c isn't valid
 | 
						|
    static int CharToHex(char c);
 | 
						|
 | 
						|
    // split an URI path string in its component segments (including empty and
 | 
						|
    // "." ones, no post-processing is done)
 | 
						|
    static wxArrayString SplitInSegments(const wxString& path);
 | 
						|
 | 
						|
    // various URI grammar helpers
 | 
						|
    static bool IsUnreserved(char c);
 | 
						|
    static bool IsReserved(char c);
 | 
						|
    static bool IsGenDelim(char c);
 | 
						|
    static bool IsSubDelim(char c);
 | 
						|
    static bool IsHex(char c);
 | 
						|
    static bool IsAlpha(char c);
 | 
						|
    static bool IsDigit(char c);
 | 
						|
    static bool IsEndPath(char 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;
 | 
						|
 | 
						|
    wxDECLARE_DYNAMIC_CLASS(wxURI);
 | 
						|
};
 | 
						|
 | 
						|
#endif // _WX_URI_H_
 | 
						|
 |