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