| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: wx/uri.h
- // Purpose: wxURI - Class for parsing URIs
- // Author: Ryan Norton
- // Vadim Zeitlin (UTF-8 URI support, many other changes)
- // Created: 07/01/2004
- // Copyright: (c) 2004 Ryan Norton
- // 2008 Vadim Zeitlin
- // Licence: wxWindows Licence
- /////////////////////////////////////////////////////////////////////////////
- #ifndef _WX_URI_H_
- #define _WX_URI_H_
- #include "wx/defs.h"
- #include "wx/object.h"
- #include "wx/string.h"
- #include "wx/arrstr.h"
- // Host Type that the server component can be
- enum wxURIHostType
- {
- 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)
- wxURI_IPV6ADDRESS, // Host is a version 6 ip address [aa:aa:aa:aa::aa:aa]:5050
- wxURI_IPVFUTURE // Host is a future ip address (wxURI is unsure what kind)
- };
- // Component Flags
- enum wxURIFieldType
- {
- wxURI_SCHEME = 1,
- wxURI_USERINFO = 2,
- wxURI_SERVER = 4,
- wxURI_PORT = 8,
- wxURI_PATH = 16,
- wxURI_QUERY = 32,
- wxURI_FRAGMENT = 64
- };
- // Miscellaneous other flags
- enum wxURIFlags
- {
- wxURI_STRICT = 1
- };
- // Generic class for parsing URIs.
- //
- // See RFC 3986
- class WXDLLIMPEXP_BASE wxURI : public wxObject
- {
- public:
- wxURI();
- wxURI(const wxString& uri);
- // default copy ctor, assignment operator and dtor are ok
- bool Create(const wxString& uri);
- wxURI& operator=(const wxString& string)
- {
- Create(string);
- return *this;
- }
- bool operator==(const wxURI& uri) const;
- // various accessors
- bool HasScheme() const { return (m_fields & wxURI_SCHEME) != 0; }
- bool HasUserInfo() const { return (m_fields & wxURI_USERINFO) != 0; }
- bool HasServer() const { return (m_fields & wxURI_SERVER) != 0; }
- bool HasPort() const { return (m_fields & wxURI_PORT) != 0; }
- bool HasPath() const { return (m_fields & wxURI_PATH) != 0; }
- bool HasQuery() const { return (m_fields & wxURI_QUERY) != 0; }
- bool HasFragment() const { return (m_fields & wxURI_FRAGMENT) != 0; }
- 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; }
- const wxString& GetUserInfo() const { return m_userinfo; }
- const wxString& GetServer() const { return m_server; }
- wxURIHostType GetHostType() const { return m_hostType; }
- // these functions only work if the user information part of the URI is in
- // the usual (but insecure and hence explicitly recommended against by the
- // RFC) "user:password" form
- wxString GetUser() const;
- wxString GetPassword() const;
- // combine all URI components into a single string
- //
- // BuildURI() returns the real URI suitable for use with network libraries,
- // for example, while BuildUnescapedURI() returns a string suitable to be
- // shown to the user.
- wxString BuildURI() const { return DoBuildURI(&wxURI::Nothing); }
- wxString BuildUnescapedURI() const { return DoBuildURI(&wxURI::Unescape); }
- // the escaped URI should contain only ASCII characters, including possible
- // escape sequences
- static wxString Unescape(const wxString& escapedURI);
- void Resolve(const wxURI& base, int flags = wxURI_STRICT);
- bool IsReference() const;
- protected:
- void Clear();
- // common part of BuildURI() and BuildUnescapedURI()
- wxString DoBuildURI(wxString (*funcDecode)(const wxString&)) const;
- // function which returns its argument unmodified, this is used by
- // BuildURI() to tell DoBuildURI() that nothing needs to be done with the
- // URI components
- static wxString Nothing(const wxString& value) { return value; }
- bool Parse(const char* uri);
- const char* ParseAuthority (const char* uri);
- const char* ParseScheme (const char* uri);
- const char* ParseUserInfo (const char* uri);
- const char* ParseServer (const char* uri);
- const char* ParsePort (const char* uri);
- const char* ParsePath (const char* uri);
- const char* ParseQuery (const char* uri);
- const char* ParseFragment (const char* uri);
- static bool ParseH16(const char*& uri);
- static bool ParseIPv4address(const char*& uri);
- static bool ParseIPv6address(const char*& uri);
- static bool ParseIPvFuture(const char*& uri);
- // should be called with i pointing to '%', returns the encoded character
- // following it or -1 if invalid and advances i past it (so that it points
- // to the last character consumed on return)
- static int DecodeEscape(wxString::const_iterator& i);
- // append next character pointer to by p to the string in an escaped form
- // and advance p past it
- //
- // if the next character is '%' and it's followed by 2 hex digits, they are
- // not escaped (again) by this function, this allows to keep (backwards-
- // compatible) ambiguity about the input format to wxURI::Create(): it can
- // be either already escaped or not
- void AppendNextEscaped(wxString& s, const char *& p);
- // convert hexadecimal digit to its value; return -1 if c isn't valid
- static int CharToHex(char c);
- // split an URI path string in its component segments (including empty and
- // "." ones, no post-processing is done)
- static wxArrayString SplitInSegments(const wxString& path);
- // various URI grammar helpers
- static bool IsUnreserved(char c);
- static bool IsReserved(char c);
- static bool IsGenDelim(char c);
- static bool IsSubDelim(char c);
- static bool IsHex(char c);
- static bool IsAlpha(char c);
- static bool IsDigit(char c);
- static bool IsEndPath(char c);
- wxString m_scheme;
- wxString m_path;
- wxString m_query;
- wxString m_fragment;
- wxString m_userinfo;
- wxString m_server;
- wxString m_port;
- wxURIHostType m_hostType;
- size_t m_fields;
- DECLARE_DYNAMIC_CLASS(wxURI)
- };
- #endif // _WX_URI_H_
|