]> git.saurik.com Git - wxWidgets.git/blob - include/wx/uri.h
minor cleanup: don't use bool parameters, don't typedef the enums, don't abuse references
[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_URI_H_
12 #define _WX_URI_H_
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 enum wxURIHostType
24 {
25 wxURI_REGNAME,
26 wxURI_IPV4ADDRESS,
27 wxURI_IPV6ADDRESS,
28 wxURI_IPVFUTURE
29 };
30
31 // Component Flags
32 enum wxURIFieldType
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 };
42
43 // Miscellaneous other flags
44 enum wxURIFlags
45 {
46 wxURI_STRICT = 1
47 };
48
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.
55 class wxURI : public wxObject
56 {
57 public:
58 wxURI();
59 wxURI(const wxString& uri);
60 wxURI(const wxURI& uri);
61
62 virtual ~wxURI();
63
64 void Create(const wxString& uri);
65
66 bool HasScheme() const;
67 bool HasUser() const;
68 bool HasServer() const;
69 bool HasPort() const;
70 bool HasPath() const;
71 bool HasQuery() const;
72 bool HasFragment() const;
73
74 const wxString& GetScheme() const;
75 const wxString& GetPath() const;
76 const wxString& GetQuery() const;
77 const wxString& GetFragment() const;
78 const wxString& GetPort() const;
79 const wxString& GetUser() const;
80 const wxString& GetServer() const;
81 const wxURIHostType& GetHostType() const;
82
83 wxString Get() const;
84
85 void Resolve(const wxURI& base, int flags = wxURI_STRICT);
86 bool IsReference() const;
87
88 wxURI& operator = (const wxURI& uri);
89 wxURI& operator = (const wxChar* string);
90 bool operator == (const wxURI& uri) const;
91
92 protected:
93
94 void Clear();
95
96 const wxChar* Parse (const wxChar* uri);
97 const wxChar* ParseAuthority (const wxChar* uri);
98 const wxChar* ParseScheme (const wxChar* uri);
99 const wxChar* ParseUser (const wxChar* uri);
100 const wxChar* ParseServer (const wxChar* uri);
101 const wxChar* ParsePort (const wxChar* uri);
102 const wxChar* ParsePath (const wxChar* uri,
103 bool bReference = false,
104 bool bNormalize = true);
105 const wxChar* ParseQuery (const wxChar* uri);
106 const wxChar* ParseFragment (const wxChar* uri);
107
108
109 static bool ParseH16(const wxChar*& uri);
110 static bool ParseIPv4address(const wxChar*& uri);
111 static bool ParseIPv6address(const wxChar*& uri);
112 static bool ParseIPvFuture(const wxChar*& uri);
113
114
115 static void Normalize(wxChar* uri, bool bIgnoreLeads = false);
116 static void UpTree(const wxChar* uristart, const wxChar*& uri);
117
118 static wxChar Unescape(const wxChar* s);
119 static void Escape (wxString& s, const wxChar& c);
120 static bool IsEscape(const wxChar*& uri);
121
122 static int CharToHex(const wxChar& c);
123
124
125 static bool IsUnreserved (const wxChar& c);
126 static bool IsReserved (const wxChar& c);
127 static bool IsGenDelim (const wxChar& c);
128 static bool IsSubDelim (const wxChar& c);
129 static bool IsHex(const wxChar& c);
130 static bool IsAlpha(const wxChar& c);
131 static bool IsDigit(const wxChar& c);
132
133 wxString m_scheme;
134 wxString m_path;
135 wxString m_query;
136 wxString m_fragment;
137
138 wxString m_user;
139 wxString m_server;
140 wxString m_port;
141
142 wxURIHostType m_hostType;
143
144 size_t m_fields;
145
146 DECLARE_DYNAMIC_CLASS(wxURI)
147 };
148
149 #endif // _WX_URI_H_
150