2004-10-27 18:47:26 -04:00
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// Name: uri.h
|
2005-03-09 11:37:36 -05:00
|
|
|
// Purpose: wxURI - Class for parsing URIs
|
2004-10-27 18:47:26 -04:00
|
|
|
// Author: Ryan Norton
|
2005-03-09 11:37:36 -05:00
|
|
|
// Modified By:
|
2004-10-27 18:47:26 -04:00
|
|
|
// Created: 07/01/2004
|
|
|
|
// RCS-ID: $Id$
|
2005-05-04 14:57:50 -04:00
|
|
|
// Copyright: (c) Ryan Norton
|
|
|
|
// Licence: wxWindows Licence
|
2004-10-27 18:47:26 -04:00
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
2004-10-27 21:03:38 -04:00
|
|
|
#ifndef _WX_URI_H_
|
|
|
|
#define _WX_URI_H_
|
2004-10-27 18:47:26 -04:00
|
|
|
|
|
|
|
#include "wx/defs.h"
|
|
|
|
#include "wx/object.h"
|
|
|
|
#include "wx/string.h"
|
|
|
|
|
2004-10-28 18:22:40 -04:00
|
|
|
// Host Type that the server component can be
|
2004-10-27 21:03:38 -04:00
|
|
|
enum wxURIHostType
|
2004-10-27 18:47:26 -04:00
|
|
|
{
|
2005-03-09 11:37:36 -05:00
|
|
|
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)
|
2004-10-28 18:22:40 -04:00
|
|
|
wxURI_IPV6ADDRESS, // Host is a version 6 ip address [aa:aa:aa:aa::aa:aa]:5050
|
2005-03-09 11:37:36 -05:00
|
|
|
wxURI_IPVFUTURE // Host is a future ip address (wxURI is unsure what kind)
|
2004-10-27 21:03:38 -04:00
|
|
|
};
|
2004-10-27 18:47:26 -04:00
|
|
|
|
|
|
|
// Component Flags
|
2004-10-27 21:03:38 -04:00
|
|
|
enum wxURIFieldType
|
2004-10-27 18:47:26 -04:00
|
|
|
{
|
|
|
|
wxURI_SCHEME = 1,
|
2005-02-28 15:01:44 -05:00
|
|
|
wxURI_USERINFO = 2,
|
2004-10-27 18:47:26 -04:00
|
|
|
wxURI_SERVER = 4,
|
|
|
|
wxURI_PORT = 8,
|
|
|
|
wxURI_PATH = 16,
|
|
|
|
wxURI_QUERY = 32,
|
|
|
|
wxURI_FRAGMENT = 64
|
2004-10-27 21:03:38 -04:00
|
|
|
};
|
|
|
|
|
|
|
|
// Miscellaneous other flags
|
|
|
|
enum wxURIFlags
|
|
|
|
{
|
|
|
|
wxURI_STRICT = 1
|
|
|
|
};
|
|
|
|
|
2004-10-27 18:47:26 -04:00
|
|
|
|
|
|
|
// Generic class for parsing URIs.
|
|
|
|
//
|
2005-04-02 22:48:08 -05:00
|
|
|
// See RFC 3986
|
2004-11-03 21:58:13 -05:00
|
|
|
class WXDLLIMPEXP_BASE wxURI : public wxObject
|
2004-10-27 18:47:26 -04:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
wxURI();
|
|
|
|
wxURI(const wxString& uri);
|
|
|
|
wxURI(const wxURI& uri);
|
|
|
|
|
2004-10-27 21:03:38 -04:00
|
|
|
virtual ~wxURI();
|
2004-10-27 18:47:26 -04:00
|
|
|
|
2004-10-28 05:57:43 -04:00
|
|
|
const wxChar* Create(const wxString& uri);
|
2004-10-27 18:47:26 -04:00
|
|
|
|
2004-10-28 02:49:46 -04:00
|
|
|
bool HasScheme() const { return (m_fields & wxURI_SCHEME) == wxURI_SCHEME; }
|
2005-02-28 15:01:44 -05:00
|
|
|
bool HasUserInfo() const { return (m_fields & wxURI_USERINFO) == wxURI_USERINFO; }
|
2004-10-28 02:49:46 -04:00
|
|
|
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; }
|
2005-03-09 11:37:36 -05:00
|
|
|
|
2004-10-28 02:49:46 -04:00
|
|
|
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; }
|
2005-02-28 15:01:44 -05:00
|
|
|
const wxString& GetUserInfo() const { return m_userinfo; }
|
2004-10-28 02:49:46 -04:00
|
|
|
const wxString& GetServer() const { return m_server; }
|
|
|
|
const wxURIHostType& GetHostType() const { return m_hostType; }
|
2004-10-27 18:47:26 -04:00
|
|
|
|
2005-02-28 15:01:44 -05:00
|
|
|
//Note that the following two get functions are explicitly depreciated by RFC 2396
|
|
|
|
wxString GetUser() const;
|
|
|
|
wxString GetPassword() const;
|
2005-03-09 11:37:36 -05:00
|
|
|
|
2004-10-28 05:57:43 -04:00
|
|
|
wxString BuildURI() const;
|
|
|
|
wxString BuildUnescapedURI() const;
|
2004-10-27 18:47:26 -04:00
|
|
|
|
2004-10-27 21:03:38 -04:00
|
|
|
void Resolve(const wxURI& base, int flags = wxURI_STRICT);
|
2004-10-27 18:47:26 -04:00
|
|
|
bool IsReference() const;
|
|
|
|
|
|
|
|
wxURI& operator = (const wxURI& uri);
|
2004-10-28 02:49:46 -04:00
|
|
|
wxURI& operator = (const wxString& string);
|
2004-10-27 18:47:26 -04:00
|
|
|
bool operator == (const wxURI& uri) const;
|
2004-10-28 05:57:43 -04:00
|
|
|
|
|
|
|
static wxString Unescape (const wxString& szEscapedURI);
|
2005-03-09 11:37:36 -05:00
|
|
|
|
2004-10-27 18:47:26 -04:00
|
|
|
protected:
|
2004-10-28 02:49:46 -04:00
|
|
|
wxURI& Assign(const wxURI& uri);
|
2004-10-27 18:47:26 -04:00
|
|
|
|
|
|
|
void Clear();
|
|
|
|
|
|
|
|
const wxChar* Parse (const wxChar* uri);
|
|
|
|
const wxChar* ParseAuthority (const wxChar* uri);
|
|
|
|
const wxChar* ParseScheme (const wxChar* uri);
|
2005-02-28 15:01:44 -05:00
|
|
|
const wxChar* ParseUserInfo (const wxChar* uri);
|
2004-10-27 18:47:26 -04:00
|
|
|
const wxChar* ParseServer (const wxChar* uri);
|
|
|
|
const wxChar* ParsePort (const wxChar* uri);
|
2004-10-27 21:03:38 -04:00
|
|
|
const wxChar* ParsePath (const wxChar* uri,
|
|
|
|
bool bReference = false,
|
|
|
|
bool bNormalize = true);
|
2004-10-27 18:47:26 -04:00
|
|
|
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);
|
|
|
|
|
2004-10-27 21:03:38 -04:00
|
|
|
static void Normalize(wxChar* uri, bool bIgnoreLeads = false);
|
2004-10-27 18:47:26 -04:00
|
|
|
static void UpTree(const wxChar* uristart, const wxChar*& uri);
|
|
|
|
|
2004-10-28 05:57:43 -04:00
|
|
|
static wxChar TranslateEscape(const wxChar* s);
|
2004-10-27 18:47:26 -04:00
|
|
|
static void Escape (wxString& s, const wxChar& c);
|
|
|
|
static bool IsEscape(const wxChar*& uri);
|
|
|
|
|
2004-11-04 14:07:12 -05:00
|
|
|
static wxChar CharToHex(const wxChar& c);
|
2004-10-27 18:47:26 -04:00
|
|
|
|
|
|
|
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;
|
|
|
|
|
2005-02-28 15:01:44 -05:00
|
|
|
wxString m_userinfo;
|
2004-10-27 18:47:26 -04:00
|
|
|
wxString m_server;
|
|
|
|
wxString m_port;
|
|
|
|
|
|
|
|
wxURIHostType m_hostType;
|
|
|
|
|
|
|
|
size_t m_fields;
|
|
|
|
|
|
|
|
DECLARE_DYNAMIC_CLASS(wxURI)
|
2004-10-27 21:03:38 -04:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif // _WX_URI_H_
|
2004-10-27 18:47:26 -04:00
|
|
|
|