]> git.saurik.com Git - wxWidgets.git/blame - include/wx/uri.h
Make list consistent with tree in terms of Vetoed changes closing the inline edit...
[wxWidgets.git] / include / wx / uri.h
CommitLineData
dd65d8c8
RN
1/////////////////////////////////////////////////////////////////////////////
2// Name: uri.h
b60b2ec8 3// Purpose: wxURI - Class for parsing URIs
dd65d8c8
RN
4// Author: Ryan Norton
5// Modified By:
6// Created: 07/01/2004
7// RCS-ID: $Id$
8// Licence: wxWindows
9/////////////////////////////////////////////////////////////////////////////
10
8404931e
VZ
11#ifndef _WX_URI_H_
12#define _WX_URI_H_
dd65d8c8 13
eebaafb5 14#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
dd65d8c8
RN
15#pragma interface "uri.h"
16#endif
17
18#include "wx/defs.h"
19#include "wx/object.h"
20#include "wx/string.h"
21
ce321570 22// Host Type that the server component can be
8404931e 23enum wxURIHostType
dd65d8c8 24{
ce321570
RN
25 wxURI_REGNAME, // Host is a normal register name (www.mysite.com etc.)
26 wxURI_IPV4ADDRESS, // Host is a version 4 ip address (192.168.1.100)
27 wxURI_IPV6ADDRESS, // Host is a version 6 ip address [aa:aa:aa:aa::aa:aa]:5050
28 wxURI_IPVFUTURE // Host is a future ip address (wxURI is unsure what kind)
8404931e 29};
dd65d8c8
RN
30
31// Component Flags
8404931e 32enum wxURIFieldType
dd65d8c8
RN
33{
34 wxURI_SCHEME = 1,
35 wxURI_USER = 2,
36 wxURI_SERVER = 4,
37 wxURI_PORT = 8,
38 wxURI_PATH = 16,
39 wxURI_QUERY = 32,
40 wxURI_FRAGMENT = 64
8404931e
VZ
41};
42
43// Miscellaneous other flags
44enum wxURIFlags
45{
46 wxURI_STRICT = 1
47};
48
dd65d8c8
RN
49
50// Generic class for parsing URIs.
51//
52// Originally based off of RFC 2396 - then
53// extended to meet the newer RFC 2396.bis
54// specifications.
fd1017cd 55class WXDLLIMPEXP_BASE wxURI : public wxObject
dd65d8c8
RN
56{
57public:
58 wxURI();
59 wxURI(const wxString& uri);
60 wxURI(const wxURI& uri);
61
8404931e 62 virtual ~wxURI();
dd65d8c8 63
86470d43 64 const wxChar* Create(const wxString& uri);
dd65d8c8 65
b60b2ec8
RN
66 bool HasScheme() const { return (m_fields & wxURI_SCHEME) == wxURI_SCHEME; }
67 bool HasUser() const { return (m_fields & wxURI_USER) == wxURI_USER; }
68 bool HasServer() const { return (m_fields & wxURI_SERVER) == wxURI_SERVER; }
69 bool HasPort() const { return (m_fields & wxURI_PORT) == wxURI_PORT; }
70 bool HasPath() const { return (m_fields & wxURI_PATH) == wxURI_PATH; }
71 bool HasQuery() const { return (m_fields & wxURI_QUERY) == wxURI_QUERY; }
72 bool HasFragment() const { return (m_fields & wxURI_FRAGMENT) == wxURI_FRAGMENT; }
ce321570 73
b60b2ec8
RN
74 const wxString& GetScheme() const { return m_scheme; }
75 const wxString& GetPath() const { return m_path; }
76 const wxString& GetQuery() const { return m_query; }
77 const wxString& GetFragment() const { return m_fragment; }
78 const wxString& GetPort() const { return m_port; }
79 const wxString& GetUser() const { return m_user; }
80 const wxString& GetServer() const { return m_server; }
81 const wxURIHostType& GetHostType() const { return m_hostType; }
dd65d8c8 82
86470d43
RN
83 wxString BuildURI() const;
84 wxString BuildUnescapedURI() const;
dd65d8c8 85
8404931e 86 void Resolve(const wxURI& base, int flags = wxURI_STRICT);
dd65d8c8
RN
87 bool IsReference() const;
88
89 wxURI& operator = (const wxURI& uri);
b60b2ec8 90 wxURI& operator = (const wxString& string);
dd65d8c8 91 bool operator == (const wxURI& uri) const;
86470d43
RN
92
93 static wxString Unescape (const wxString& szEscapedURI);
dd65d8c8
RN
94
95protected:
b60b2ec8 96 wxURI& Assign(const wxURI& uri);
dd65d8c8
RN
97
98 void Clear();
99
100 const wxChar* Parse (const wxChar* uri);
101 const wxChar* ParseAuthority (const wxChar* uri);
102 const wxChar* ParseScheme (const wxChar* uri);
103 const wxChar* ParseUser (const wxChar* uri);
104 const wxChar* ParseServer (const wxChar* uri);
105 const wxChar* ParsePort (const wxChar* uri);
8404931e
VZ
106 const wxChar* ParsePath (const wxChar* uri,
107 bool bReference = false,
108 bool bNormalize = true);
dd65d8c8
RN
109 const wxChar* ParseQuery (const wxChar* uri);
110 const wxChar* ParseFragment (const wxChar* uri);
111
112
113 static bool ParseH16(const wxChar*& uri);
114 static bool ParseIPv4address(const wxChar*& uri);
115 static bool ParseIPv6address(const wxChar*& uri);
116 static bool ParseIPvFuture(const wxChar*& uri);
117
8404931e 118 static void Normalize(wxChar* uri, bool bIgnoreLeads = false);
dd65d8c8
RN
119 static void UpTree(const wxChar* uristart, const wxChar*& uri);
120
86470d43 121 static wxChar TranslateEscape(const wxChar* s);
dd65d8c8
RN
122 static void Escape (wxString& s, const wxChar& c);
123 static bool IsEscape(const wxChar*& uri);
124
409a7ba7 125 static wxChar CharToHex(const wxChar& c);
dd65d8c8
RN
126
127 static bool IsUnreserved (const wxChar& c);
128 static bool IsReserved (const wxChar& c);
129 static bool IsGenDelim (const wxChar& c);
130 static bool IsSubDelim (const wxChar& c);
131 static bool IsHex(const wxChar& c);
132 static bool IsAlpha(const wxChar& c);
133 static bool IsDigit(const wxChar& c);
134
135 wxString m_scheme;
136 wxString m_path;
137 wxString m_query;
138 wxString m_fragment;
139
140 wxString m_user;
141 wxString m_server;
142 wxString m_port;
143
144 wxURIHostType m_hostType;
145
146 size_t m_fields;
147
148 DECLARE_DYNAMIC_CLASS(wxURI)
8404931e
VZ
149};
150
151#endif // _WX_URI_H_
dd65d8c8 152