]> git.saurik.com Git - wxWidgets.git/blob - include/wx/uri.h
706e5010cf6abc94380eca4c33e09ab587e7d81d
[wxWidgets.git] / include / wx / uri.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: uri.h
3 // Purpose: wxURI - Class for parsing/validating URIs
4 // Author: Ryan Norton
5 // Modified By:
6 // Created: 07/01/2004
7 // RCS-ID: $Id$
8 // Licence: wxWindows
9 /////////////////////////////////////////////////////////////////////////////
10
11 #ifndef _WX_URIH__
12 #define _WX_URIH__
13
14 #if defined(__GNUG__) && !defined(__APPLE__)
15 #pragma interface "uri.h"
16 #endif
17
18 #include "wx/defs.h"
19 #include "wx/object.h"
20 #include "wx/string.h"
21
22 // Host Type that the server can be
23 typedef enum
24 {
25 wxURI_REGNAME,
26 wxURI_IPV4ADDRESS,
27 wxURI_IPV6ADDRESS,
28 wxURI_IPVFUTURE
29 } wxURIHostType;
30
31 // Component Flags
32 typedef enum
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
41 } wxURIFieldType;
42
43 // Generic class for parsing URIs.
44 //
45 // Originally based off of RFC 2396 - then
46 // extended to meet the newer RFC 2396.bis
47 // specifications.
48 class wxURI : public wxObject
49 {
50 public:
51 wxURI();
52 wxURI(const wxString& uri);
53 wxURI(const wxURI& uri);
54
55 ~wxURI();
56
57 void Create(const wxString& uri);
58
59 bool HasScheme() const;
60 bool HasUser() const;
61 bool HasServer() const;
62 bool HasPort() const;
63 bool HasPath() const;
64 bool HasQuery() const;
65 bool HasFragment() const;
66
67 const wxString& GetScheme() const;
68 const wxString& GetPath() const;
69 const wxString& GetQuery() const;
70 const wxString& GetFragment() const;
71 const wxString& GetPort() const;
72 const wxString& GetUser() const;
73 const wxString& GetServer() const;
74 const wxURIHostType& GetHostType() const;
75
76 wxString Get() const;
77
78 void Resolve(const wxURI& base, const bool& bStrict = true);
79 bool IsReference() const;
80
81 wxURI& operator = (const wxURI& uri);
82 wxURI& operator = (const wxChar* string);
83 bool operator == (const wxURI& uri) const;
84
85 protected:
86
87 void Clear();
88
89 const wxChar* Parse (const wxChar* uri);
90 const wxChar* ParseAuthority (const wxChar* uri);
91 const wxChar* ParseScheme (const wxChar* uri);
92 const wxChar* ParseUser (const wxChar* uri);
93 const wxChar* ParseServer (const wxChar* uri);
94 const wxChar* ParsePort (const wxChar* uri);
95 const wxChar* ParsePath (const wxChar* uri, const bool& bReference = false,
96 const bool& bNormalize = true);
97 const wxChar* ParseQuery (const wxChar* uri);
98 const wxChar* ParseFragment (const wxChar* uri);
99
100
101 static bool ParseH16(const wxChar*& uri);
102 static bool ParseIPv4address(const wxChar*& uri);
103 static bool ParseIPv6address(const wxChar*& uri);
104 static bool ParseIPvFuture(const wxChar*& uri);
105
106
107 static void Normalize(wxChar* uri, const bool& bIgnoreLeads = false);
108 static void UpTree(const wxChar* uristart, const wxChar*& uri);
109
110 static void Unescape(const wxChar*& s, wxChar& c);
111 static void Escape (wxString& s, const wxChar& c);
112 static bool IsEscape(const wxChar*& uri);
113
114 static int CharToHex(const wxChar& c);
115
116
117 static bool IsUnreserved (const wxChar& c);
118 static bool IsReserved (const wxChar& c);
119 static bool IsGenDelim (const wxChar& c);
120 static bool IsSubDelim (const wxChar& c);
121 static bool IsHex(const wxChar& c);
122 static bool IsAlpha(const wxChar& c);
123 static bool IsDigit(const wxChar& c);
124
125 wxString m_scheme;
126 wxString m_path;
127 wxString m_query;
128 wxString m_fragment;
129
130 wxString m_user;
131 wxString m_server;
132 wxString m_port;
133
134 wxURIHostType m_hostType;
135
136 size_t m_fields;
137
138 DECLARE_DYNAMIC_CLASS(wxURI)
139 };//end of wxURI
140
141 #endif //_WX_URIH__