- const wxChar* Parse (const wxChar* uri);
- const wxChar* ParseAuthority (const wxChar* uri);
- const wxChar* ParseScheme (const wxChar* uri);
- const wxChar* ParseUser (const wxChar* uri);
- const wxChar* ParseServer (const wxChar* uri);
- const wxChar* ParsePort (const wxChar* uri);
- const wxChar* ParsePath (const wxChar* uri,
- bool bReference = false,
- bool bNormalize = true);
- const wxChar* ParseQuery (const wxChar* uri);
- const wxChar* ParseFragment (const wxChar* uri);
-
-
- static bool ParseH16(const wxChar*& uri);
- static bool ParseIPv4address(const wxChar*& uri);
- static bool ParseIPv6address(const wxChar*& uri);
- static bool ParseIPvFuture(const wxChar*& uri);
-
- static void Normalize(wxChar* uri, bool bIgnoreLeads = false);
- static void UpTree(const wxChar* uristart, const wxChar*& uri);
-
- static wxChar TranslateEscape(const wxChar* s);
- static void Escape (wxString& s, const wxChar& c);
- static bool IsEscape(const wxChar*& uri);
-
- static wxInt32 CharToHex(const wxChar& c);
-
- static bool IsUnreserved (const wxChar& c);
- static bool IsReserved (const wxChar& c);
- static bool IsGenDelim (const wxChar& c);
- static bool IsSubDelim (const wxChar& c);
- static bool IsHex(const wxChar& c);
- static bool IsAlpha(const wxChar& c);
- static bool IsDigit(const wxChar& c);
+ // 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);