wxURL - doc cleanups, depreciated more methods, more source comments. wxURI - enclosed literal characters with wxT, more source comments, doc cleanups, changed StartsWith(x) to [ou] == x
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@30153 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
5bb05e6dc6
commit
ce321570b0
@ -22,6 +22,9 @@ In short, a URL \em{is} a URI. In other
|
||||
words, URL is a subset of a URI - all
|
||||
acceptable URLs are also acceptable URIs.
|
||||
|
||||
wxURI automatically escapes invalid characters in a string,
|
||||
so there is no chance of wxURI "failing" on construction/creation.
|
||||
|
||||
wxURI supports copy construction and standard assignment
|
||||
operators. wxURI can also be inherited from to provide
|
||||
furthur functionality.
|
||||
@ -39,7 +42,7 @@ furthur functionality.
|
||||
\membersection{Obtaining individual components}\label{obtainingwxuricomponents}
|
||||
|
||||
To obtain individual components you can use
|
||||
one of the following methods:
|
||||
one of the following methods
|
||||
|
||||
\helpref{GetScheme}{wxurigetscheme}\\
|
||||
\helpref{GetUser}{wxurigetuser}\\
|
||||
@ -50,8 +53,12 @@ one of the following methods:
|
||||
\helpref{GetFragment}{wxurigetfragment}
|
||||
|
||||
However, you should check HasXXX before
|
||||
calling a get method:\\
|
||||
|
||||
calling a get method, which determines whether or not the component referred
|
||||
to by the method is defined according to RFC 2396.
|
||||
|
||||
Consider an undefined component equivilent to a
|
||||
NULL C string.\\
|
||||
\\
|
||||
\helpref{HasScheme}{wxurihasscheme}\\
|
||||
\helpref{HasUser}{wxurihasuser}\\
|
||||
\helpref{HasServer}{wxurihasserver}\\
|
||||
@ -112,10 +119,13 @@ BuildUnescapedURI performs some optimizations over the plain method.
|
||||
|
||||
\membersection{wxURI::Create}\label{wxuricreate}
|
||||
|
||||
\func{void}{Create}{\param{const wxChar* }{uri}}
|
||||
\func{const wxChar*}{Create}{\param{const wxChar* }{uri}}
|
||||
|
||||
Creates this URI from the string \arg{uri}.
|
||||
|
||||
Returns the position at which parsing stopped (there
|
||||
is no such thing as an "invalid" wxURI).
|
||||
|
||||
\docparam{uri}{string to initialize from}
|
||||
|
||||
|
||||
|
@ -17,16 +17,6 @@ and comparison operators.
|
||||
|
||||
\helpref{wxSocketBase}{wxsocketbase}, \helpref{wxProtocol}{wxprotocol}
|
||||
|
||||
\wxheading{Example}
|
||||
|
||||
\begin{verbatim}
|
||||
wxURL url("http://a.host/a.dir/a.file");
|
||||
wxInputStream *in_stream;
|
||||
|
||||
in_stream = url.GetInputStream();
|
||||
// Then, you can use all IO calls of in_stream (See wxStream)
|
||||
\end{verbatim}
|
||||
|
||||
% ----------------------------------------------------------------------------
|
||||
% Members
|
||||
% ----------------------------------------------------------------------------
|
||||
@ -53,15 +43,6 @@ contain three consecutive slashes.
|
||||
|
||||
Destroys the URL object.
|
||||
|
||||
%
|
||||
% GetProtocolName
|
||||
%
|
||||
\membersection{wxURL::GetProtocolName}\label{wxurlgetprotocolname}
|
||||
|
||||
\constfunc{wxString}{GetProtocolName}{\void}
|
||||
|
||||
Returns the name of the protocol which will be used to get the URL.
|
||||
|
||||
%
|
||||
% GetProtocol
|
||||
%
|
||||
@ -71,15 +52,6 @@ Returns the name of the protocol which will be used to get the URL.
|
||||
|
||||
Returns a reference to the protocol which will be used to get the URL.
|
||||
|
||||
%
|
||||
% GetPath
|
||||
%
|
||||
\membersection{wxURL::GetPath}\label{wxurlgetpath}
|
||||
|
||||
\func{wxString}{GetPath}{\void}
|
||||
|
||||
Returns the path of the file to fetch. This path was encoded in the URL.
|
||||
|
||||
%
|
||||
% GetError
|
||||
%
|
||||
@ -112,6 +84,22 @@ Creates a new input stream on the the specified URL. You can use all but seek
|
||||
functionality of wxStream. Seek isn't available on all stream. For example,
|
||||
http or ftp streams doesn't deal with it.
|
||||
|
||||
Note that this method is somewhat depreciated, all future wxWidgets applications
|
||||
should really use \helpref{wxFileSystem}{wxfilesystem} instead.
|
||||
|
||||
Example:
|
||||
|
||||
\begin{verbatim}
|
||||
wxURL url("http://a.host/a.dir/a.file");
|
||||
if (url.GetError() == wxURL_NOERR)
|
||||
{
|
||||
wxInputStream *in_stream;
|
||||
|
||||
in_stream = url.GetInputStream();
|
||||
// Then, you can use all IO calls of in_stream (See wxStream)
|
||||
}
|
||||
\end{verbatim}
|
||||
|
||||
\wxheading{Return value}
|
||||
|
||||
Returns the initialized stream. You will have to delete it yourself.
|
||||
|
@ -19,13 +19,13 @@
|
||||
#include "wx/object.h"
|
||||
#include "wx/string.h"
|
||||
|
||||
// Host Type that the server can be
|
||||
// Host Type that the server component can be
|
||||
enum wxURIHostType
|
||||
{
|
||||
wxURI_REGNAME,
|
||||
wxURI_IPV4ADDRESS,
|
||||
wxURI_IPV6ADDRESS,
|
||||
wxURI_IPVFUTURE
|
||||
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
|
||||
@ -70,7 +70,7 @@ public:
|
||||
bool HasPath() const { return (m_fields & wxURI_PATH) == wxURI_PATH; }
|
||||
bool HasQuery() const { return (m_fields & wxURI_QUERY) == wxURI_QUERY; }
|
||||
bool HasFragment() const { return (m_fields & wxURI_FRAGMENT) == wxURI_FRAGMENT; }
|
||||
|
||||
|
||||
const wxString& GetScheme() const { return m_scheme; }
|
||||
const wxString& GetPath() const { return m_path; }
|
||||
const wxString& GetQuery() const { return m_query; }
|
||||
|
@ -58,12 +58,9 @@ public:
|
||||
wxURL& operator = (const wxString& url);
|
||||
wxURL& operator = (const wxURI& url);
|
||||
|
||||
wxString GetProtocolName() const { return m_scheme; }
|
||||
wxString GetHostName() const { return m_server; }
|
||||
wxString GetURL() const { return m_url; }
|
||||
wxProtocol& GetProtocol() { return *m_protocol; }
|
||||
wxURLError GetError() const { return m_error; }
|
||||
wxString GetPath() const { return m_path; }
|
||||
wxString GetURL() const { return m_url; }
|
||||
|
||||
wxInputStream *GetInputStream();
|
||||
|
||||
@ -73,6 +70,11 @@ public:
|
||||
#endif // wxUSE_SOCKETS
|
||||
|
||||
#if WXWIN_COMPATIBILITY_2_4
|
||||
//Use the proper wxURI accessors instead
|
||||
wxString GetProtocolName() const { return m_scheme; }
|
||||
wxString GetHostName() const { return m_server; }
|
||||
wxString GetPath() const { return m_path; }
|
||||
|
||||
//Use wxURI instead - delims is ignored
|
||||
static wxString ConvertToValidURI(
|
||||
const wxString& uri,
|
||||
|
@ -8,11 +8,6 @@
|
||||
// Licence: wxWindows
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//
|
||||
//TODO: RN: I had some massive doxygen docs, I need to move these
|
||||
//in a presentable form in these sources
|
||||
//
|
||||
|
||||
// ===========================================================================
|
||||
// declarations
|
||||
// ===========================================================================
|
||||
@ -106,12 +101,16 @@ const wxChar* wxURI::Create(const wxString& uri)
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Escape/TranslateEscape/IsEscape
|
||||
// Escape Methods
|
||||
//
|
||||
// TranslateEscape unencodes a 3 character URL escape sequence
|
||||
//
|
||||
// Escape encodes an invalid URI character into a 3 character sequence
|
||||
//
|
||||
// IsEscape determines if the input string contains an escape sequence,
|
||||
// if it does, then it moves the input string past the escape sequence
|
||||
//
|
||||
// Unescape unencodes all 3 character URL escape sequences in a wxString
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
wxChar wxURI::TranslateEscape(const wxChar* s)
|
||||
@ -140,14 +139,15 @@ wxString wxURI::Unescape(const wxString& uri)
|
||||
void wxURI::Escape(wxString& s, const wxChar& c)
|
||||
{
|
||||
const wxChar* hdig = wxT("0123456789abcdef");
|
||||
s += '%';
|
||||
s += wxT('%');
|
||||
s += hdig[(c >> 4) & 15];
|
||||
s += hdig[c & 15];
|
||||
}
|
||||
|
||||
bool wxURI::IsEscape(const wxChar*& uri)
|
||||
{
|
||||
if(*uri == '%' && IsHex(*(uri+1)) && IsHex(*(uri+2)))
|
||||
// pct-encoded = "%" HEXDIG HEXDIG
|
||||
if(*uri == wxT('%') && IsHex(*(uri+1)) && IsHex(*(uri+2)))
|
||||
{
|
||||
uri += 3;
|
||||
return true;
|
||||
@ -161,6 +161,9 @@ bool wxURI::IsEscape(const wxChar*& uri)
|
||||
//
|
||||
// BuildURI() builds the entire URI into a useable
|
||||
// representation, including proper identification characters such as slashes
|
||||
//
|
||||
// BuildUnescapedURI() does the same thing as BuildURI(), only it unescapes
|
||||
// the components that accept escape sequences
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
wxString wxURI::BuildURI() const
|
||||
@ -229,14 +232,9 @@ wxString wxURI::BuildUnescapedURI() const
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// operator = and ==
|
||||
// Assignment
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
wxURI& wxURI::operator = (const wxURI& uri)
|
||||
{
|
||||
return Assign(uri);
|
||||
}
|
||||
|
||||
wxURI& wxURI::Assign(const wxURI& uri)
|
||||
{
|
||||
//assign fields
|
||||
@ -255,12 +253,21 @@ wxURI& wxURI::Assign(const wxURI& uri)
|
||||
return *this;
|
||||
}
|
||||
|
||||
wxURI& wxURI::operator = (const wxURI& uri)
|
||||
{
|
||||
return Assign(uri);
|
||||
}
|
||||
|
||||
wxURI& wxURI::operator = (const wxString& string)
|
||||
{
|
||||
Create(string);
|
||||
return *this;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Comparison
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
bool wxURI::operator == (const wxURI& uri) const
|
||||
{
|
||||
if (HasScheme())
|
||||
@ -372,17 +379,16 @@ const wxChar* wxURI::ParseScheme(const wxChar* uri)
|
||||
m_scheme += *uri++;
|
||||
|
||||
//scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
|
||||
//RN: Scheme can not be escaped
|
||||
while (IsAlpha(*uri) || IsDigit(*uri) ||
|
||||
*uri == '+' ||
|
||||
*uri == '-' ||
|
||||
*uri == '.')
|
||||
*uri == wxT('+') ||
|
||||
*uri == wxT('-') ||
|
||||
*uri == wxT('.'))
|
||||
{
|
||||
m_scheme += *uri++;
|
||||
}
|
||||
|
||||
//valid scheme?
|
||||
if (*uri == ':')
|
||||
if (*uri == wxT(':'))
|
||||
{
|
||||
//mark the scheme as valid
|
||||
m_fields |= wxURI_SCHEME;
|
||||
@ -403,7 +409,7 @@ const wxChar* wxURI::ParseScheme(const wxChar* uri)
|
||||
const wxChar* wxURI::ParseAuthority(const wxChar* uri)
|
||||
{
|
||||
// authority = [ userinfo "@" ] host [ ":" port ]
|
||||
if (*uri == '/' && *(uri+1) == '/')
|
||||
if (*uri == wxT('/') && *(uri+1) == wxT('/'))
|
||||
{
|
||||
uri += 2;
|
||||
|
||||
@ -424,16 +430,16 @@ const wxChar* wxURI::ParseUser(const wxChar* uri)
|
||||
const wxChar* uricopy = uri;
|
||||
|
||||
// userinfo = *( unreserved / pct-encoded / sub-delims / ":" )
|
||||
while(*uri && *uri != '@' && *uri != '/' && *uri != '#' && *uri != '?')
|
||||
while(*uri && *uri != wxT('@') && *uri != wxT('/') && *uri != wxT('#') && *uri != wxT('?'))
|
||||
{
|
||||
if(IsUnreserved(*uri) || IsEscape(uri) ||
|
||||
IsSubDelim(*uri) || *uri == ':')
|
||||
IsSubDelim(*uri) || *uri == wxT(':'))
|
||||
m_user += *uri++;
|
||||
else
|
||||
Escape(m_user, *uri++);
|
||||
}
|
||||
|
||||
if(*uri == '@')
|
||||
if(*uri == wxT('@'))
|
||||
{
|
||||
//valid userinfo
|
||||
m_fields |= wxURI_USER;
|
||||
@ -456,9 +462,9 @@ const wxChar* wxURI::ParseServer(const wxChar* uri)
|
||||
|
||||
// host = IP-literal / IPv4address / reg-name
|
||||
// IP-literal = "[" ( IPv6address / IPvFuture ) "]"
|
||||
if (*uri == '[')
|
||||
if (*uri == wxT('['))
|
||||
{
|
||||
if (ParseIPv6address(++uri) && *uri == ']')
|
||||
if (ParseIPv6address(++uri) && *uri == wxT(']'))
|
||||
{
|
||||
++uri;
|
||||
m_hostType = wxURI_IPV6ADDRESS;
|
||||
@ -471,7 +477,7 @@ const wxChar* wxURI::ParseServer(const wxChar* uri)
|
||||
{
|
||||
uri = uricopy;
|
||||
|
||||
if (ParseIPvFuture(++uri) && *uri == ']')
|
||||
if (ParseIPvFuture(++uri) && *uri == wxT(']'))
|
||||
{
|
||||
++uri;
|
||||
m_hostType = wxURI_IPVFUTURE;
|
||||
@ -502,7 +508,7 @@ const wxChar* wxURI::ParseServer(const wxChar* uri)
|
||||
{
|
||||
uri = uricopy;
|
||||
// reg-name = *( unreserved / pct-encoded / sub-delims )
|
||||
while(*uri && *uri != '/' && *uri != ':' && *uri != '#' && *uri != '?')
|
||||
while(*uri && *uri != wxT('/') && *uri != wxT(':') && *uri != wxT('#') && *uri != wxT('?'))
|
||||
{
|
||||
if(IsUnreserved(*uri) || IsEscape(uri) || IsSubDelim(*uri))
|
||||
m_server += *uri++;
|
||||
@ -523,7 +529,7 @@ const wxChar* wxURI::ParsePort(const wxChar* uri)
|
||||
wxASSERT(uri != NULL);
|
||||
|
||||
// port = *DIGIT
|
||||
if(*uri == ':')
|
||||
if(*uri == wxT(':'))
|
||||
{
|
||||
++uri;
|
||||
while(IsDigit(*uri))
|
||||
@ -568,14 +574,14 @@ const wxChar* wxURI::ParsePath(const wxChar* uri, bool bReference, bool bNormali
|
||||
/// ; non-zero-length segment without any colon ":"
|
||||
///
|
||||
/// pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
|
||||
if (*uri == '/')
|
||||
if (*uri == wxT('/'))
|
||||
{
|
||||
m_path += *uri++;
|
||||
|
||||
while(*uri && *uri != '#' && *uri != '?')
|
||||
while(*uri && *uri != wxT('#') && *uri != wxT('?'))
|
||||
{
|
||||
if( IsUnreserved(*uri) || IsSubDelim(*uri) || IsEscape(uri) ||
|
||||
*uri == ':' || *uri == '@' || *uri == '/')
|
||||
*uri == wxT(':') || *uri == wxT('@') || *uri == wxT('/'))
|
||||
m_path += *uri++;
|
||||
else
|
||||
Escape(m_path, *uri++);
|
||||
@ -595,10 +601,10 @@ const wxChar* wxURI::ParsePath(const wxChar* uri, bool bReference, bool bNormali
|
||||
if (bReference)
|
||||
{
|
||||
//no colon allowed
|
||||
while(*uri && *uri != '#' && *uri != '?')
|
||||
while(*uri && *uri != wxT('#') && *uri != wxT('?'))
|
||||
{
|
||||
if(IsUnreserved(*uri) || IsSubDelim(*uri) || IsEscape(uri) ||
|
||||
*uri == '@' || *uri == '/')
|
||||
*uri == wxT('@') || *uri == wxT('/'))
|
||||
m_path += *uri++;
|
||||
else
|
||||
Escape(m_path, *uri++);
|
||||
@ -606,10 +612,10 @@ const wxChar* wxURI::ParsePath(const wxChar* uri, bool bReference, bool bNormali
|
||||
}
|
||||
else
|
||||
{
|
||||
while(*uri && *uri != '#' && *uri != '?')
|
||||
while(*uri && *uri != wxT('#') && *uri != wxT('?'))
|
||||
{
|
||||
if(IsUnreserved(*uri) || IsSubDelim(*uri) || IsEscape(uri) ||
|
||||
*uri == ':' || *uri == '@' || *uri == '/')
|
||||
*uri == wxT(':') || *uri == wxT('@') || *uri == wxT('/'))
|
||||
m_path += *uri++;
|
||||
else
|
||||
Escape(m_path, *uri++);
|
||||
@ -639,13 +645,13 @@ const wxChar* wxURI::ParseQuery(const wxChar* uri)
|
||||
wxASSERT(uri != NULL);
|
||||
|
||||
// query = *( pchar / "/" / "?" )
|
||||
if (*uri == '?')
|
||||
if (*uri == wxT('?'))
|
||||
{
|
||||
++uri;
|
||||
while(*uri && *uri != '#')
|
||||
while(*uri && *uri != wxT('#'))
|
||||
{
|
||||
if (IsUnreserved(*uri) || IsSubDelim(*uri) || IsEscape(uri) ||
|
||||
*uri == ':' || *uri == '@' || *uri == '/' || *uri == '?')
|
||||
*uri == wxT(':') || *uri == wxT('@') || *uri == wxT('/') || *uri == wxT('?'))
|
||||
m_query += *uri++;
|
||||
else
|
||||
Escape(m_query, *uri++);
|
||||
@ -664,13 +670,13 @@ const wxChar* wxURI::ParseFragment(const wxChar* uri)
|
||||
wxASSERT(uri != NULL);
|
||||
|
||||
// fragment = *( pchar / "/" / "?" )
|
||||
if (*uri == '#')
|
||||
if (*uri == wxT('#'))
|
||||
{
|
||||
++uri;
|
||||
while(*uri)
|
||||
{
|
||||
if (IsUnreserved(*uri) || IsSubDelim(*uri) || IsEscape(uri) ||
|
||||
*uri == ':' || *uri == '@' || *uri == '/' || *uri == '?')
|
||||
*uri == wxT(':') || *uri == wxT('@') || *uri == wxT('/') || *uri == wxT('?'))
|
||||
m_fragment += *uri++;
|
||||
else
|
||||
Escape(m_fragment, *uri++);
|
||||
@ -684,12 +690,14 @@ const wxChar* wxURI::ParseFragment(const wxChar* uri)
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Resolve URI
|
||||
// Resolve
|
||||
//
|
||||
// Builds missing components of this uri from a base uri
|
||||
// Builds missing components of this uri from a base uri
|
||||
//
|
||||
// A version of the algorithm outlined in the RFC is used here
|
||||
// (it is shown in comments)
|
||||
// A version of the algorithm outlined in the RFC is used here
|
||||
// (it is shown in comments)
|
||||
//
|
||||
// Note that an empty URI inherits all components
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
void wxURI::Resolve(const wxURI& base, int flags)
|
||||
@ -697,7 +705,7 @@ void wxURI::Resolve(const wxURI& base, int flags)
|
||||
wxASSERT_MSG(!base.IsReference(),
|
||||
wxT("wxURI to inherit from must not be a reference!"));
|
||||
|
||||
// If we arn't being strict, enable the older
|
||||
// If we arn't being strict, enable the older (pre-RFC2396)
|
||||
// loophole that allows this uri to inherit other
|
||||
// properties from the base uri - even if the scheme
|
||||
// is defined
|
||||
@ -781,19 +789,19 @@ void wxURI::Resolve(const wxURI& base, int flags)
|
||||
// T.path = remove_dot_segments(T.path);
|
||||
// endif;
|
||||
// T.query = R.query;
|
||||
if (!m_path.StartsWith(wxT("/")))
|
||||
if (m_path[0u] != wxT('/'))
|
||||
{
|
||||
//Marge paths
|
||||
const wxChar* op = m_path.c_str();
|
||||
const wxChar* bp = base.m_path.c_str() + base.m_path.Length();
|
||||
|
||||
//not a ending directory? move up
|
||||
if (base.m_path[0] && *(bp-1) != '/')
|
||||
if (base.m_path[0] && *(bp-1) != wxT('/'))
|
||||
UpTree(base.m_path, bp);
|
||||
|
||||
//normalize directories
|
||||
while(*op == '.' && *(op+1) == '.' &&
|
||||
(*(op+2) == '\0' || *(op+2) == '/') )
|
||||
while(*op == wxT('.') && *(op+1) == wxT('.') &&
|
||||
(*(op+2) == '\0' || *(op+2) == wxT('/')) )
|
||||
{
|
||||
UpTree(base.m_path, bp);
|
||||
|
||||
@ -807,27 +815,27 @@ void wxURI::Resolve(const wxURI& base, int flags)
|
||||
m_path.Mid((op - m_path.c_str()), m_path.Length());
|
||||
}
|
||||
}
|
||||
|
||||
//T.fragment = R.fragment;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Directory Normalization (static)
|
||||
// UpTree
|
||||
//
|
||||
// UpTree goes up a directory in a string and moves the pointer as such,
|
||||
// while Normalize gets rid of duplicate/erronues directories in a URI
|
||||
// according to RFC 2396 and modified quite a bit to meet the unit tests
|
||||
// in it.
|
||||
// Moves a URI path up a directory
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
//static
|
||||
void wxURI::UpTree(const wxChar* uristart, const wxChar*& uri)
|
||||
{
|
||||
if (uri != uristart && *(uri-1) == '/')
|
||||
if (uri != uristart && *(uri-1) == wxT('/'))
|
||||
{
|
||||
uri -= 2;
|
||||
}
|
||||
|
||||
for(;uri != uristart; --uri)
|
||||
{
|
||||
if (*uri == '/')
|
||||
if (*uri == wxT('/'))
|
||||
{
|
||||
++uri;
|
||||
break;
|
||||
@ -835,23 +843,35 @@ void wxURI::UpTree(const wxChar* uristart, const wxChar*& uri)
|
||||
}
|
||||
|
||||
//!!!TODO:HACK!!!//
|
||||
if (uri == uristart && *uri == '/')
|
||||
if (uri == uristart && *uri == wxT('/'))
|
||||
++uri;
|
||||
//!!!//
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Normalize
|
||||
//
|
||||
// Normalizes directories in-place
|
||||
//
|
||||
// I.E. ./ and . are ignored
|
||||
//
|
||||
// ../ and .. are removed if a directory is before it, along
|
||||
// with that directory (leading .. and ../ are kept)
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
//static
|
||||
void wxURI::Normalize(wxChar* s, bool bIgnoreLeads)
|
||||
{
|
||||
wxChar* cp = s;
|
||||
wxChar* bp = s;
|
||||
|
||||
if(s[0] == '/')
|
||||
if(s[0] == wxT('/'))
|
||||
++bp;
|
||||
|
||||
while(*cp)
|
||||
{
|
||||
if (*cp == '.' && (*(cp+1) == '/' || *(cp+1) == '\0')
|
||||
&& (bp == cp || *(cp-1) == '/'))
|
||||
if (*cp == wxT('.') && (*(cp+1) == wxT('/') || *(cp+1) == '\0')
|
||||
&& (bp == cp || *(cp-1) == wxT('/')))
|
||||
{
|
||||
//. _or_ ./ - ignore
|
||||
if (*(cp+1) == '\0')
|
||||
@ -859,9 +879,9 @@ void wxURI::Normalize(wxChar* s, bool bIgnoreLeads)
|
||||
else
|
||||
cp += 2;
|
||||
}
|
||||
else if (*cp == '.' && *(cp+1) == '.' &&
|
||||
(*(cp+2) == '/' || *(cp+2) == '\0')
|
||||
&& (bp == cp || *(cp-1) == '/'))
|
||||
else if (*cp == wxT('.') && *(cp+1) == wxT('.') &&
|
||||
(*(cp+2) == wxT('/') || *(cp+2) == '\0')
|
||||
&& (bp == cp || *(cp-1) == wxT('/')))
|
||||
{
|
||||
//.. _or_ ../ - go up the tree
|
||||
if (s != bp)
|
||||
@ -899,7 +919,32 @@ void wxURI::Normalize(wxChar* s, bool bIgnoreLeads)
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Misc. Parsing Methods
|
||||
// ParseH16
|
||||
//
|
||||
// Parses 1 to 4 hex values. Returns true if the first character of the input
|
||||
// string is a valid hex character. It is the caller's responsability to move
|
||||
// the input string back to its original position on failure.
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
bool wxURI::ParseH16(const wxChar*& uri)
|
||||
{
|
||||
// h16 = 1*4HEXDIG
|
||||
if(!IsHex(*++uri))
|
||||
return false;
|
||||
|
||||
if(IsHex(*++uri) && IsHex(*++uri) && IsHex(*++uri))
|
||||
++uri;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// ParseIPXXX
|
||||
//
|
||||
// Parses a certain version of an IP address and moves the input string past
|
||||
// it. Returns true if the input string contains the proper version of an ip
|
||||
// address. It is the caller's responsability to move the input string back
|
||||
// to its original position on failure.
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
bool wxURI::ParseIPv4address(const wxChar*& uri)
|
||||
@ -920,10 +965,10 @@ bool wxURI::ParseIPv4address(const wxChar*& uri)
|
||||
//each ip part must be between 0-255 (dupe of version in for loop)
|
||||
if( IsDigit(*++uri) && IsDigit(*++uri) &&
|
||||
//100 or less (note !)
|
||||
!( (*(uri-2) < '2') ||
|
||||
!( (*(uri-2) < wxT('2')) ||
|
||||
//240 or less
|
||||
(*(uri-2) == '2' &&
|
||||
(*(uri-1) < '5' || (*(uri-1) == '5' && *uri <= '5'))
|
||||
(*(uri-2) == wxT('2') &&
|
||||
(*(uri-1) < wxT('5') || (*(uri-1) == wxT('5') && *uri <= wxT('5')))
|
||||
)
|
||||
)
|
||||
)
|
||||
@ -936,16 +981,16 @@ bool wxURI::ParseIPv4address(const wxChar*& uri)
|
||||
//compilers should unroll this loop
|
||||
for(; iIPv4 < 4; ++iIPv4)
|
||||
{
|
||||
if (*uri != '.' || !IsDigit(*++uri))
|
||||
if (*uri != wxT('.') || !IsDigit(*++uri))
|
||||
break;
|
||||
|
||||
//each ip part must be between 0-255
|
||||
if( IsDigit(*++uri) && IsDigit(*++uri) &&
|
||||
//100 or less (note !)
|
||||
!( (*(uri-2) < '2') ||
|
||||
!( (*(uri-2) < wxT('2')) ||
|
||||
//240 or less
|
||||
(*(uri-2) == '2' &&
|
||||
(*(uri-1) < '5' || (*(uri-1) == '5' && *uri <= '5'))
|
||||
(*(uri-2) == wxT('2') &&
|
||||
(*(uri-1) < wxT('5') || (*(uri-1) == wxT('5') && *uri <= wxT('5')))
|
||||
)
|
||||
)
|
||||
)
|
||||
@ -958,18 +1003,6 @@ bool wxURI::ParseIPv4address(const wxChar*& uri)
|
||||
return iIPv4 == 4;
|
||||
}
|
||||
|
||||
bool wxURI::ParseH16(const wxChar*& uri)
|
||||
{
|
||||
// h16 = 1*4HEXDIG
|
||||
if(!IsHex(*++uri))
|
||||
return false;
|
||||
|
||||
if(IsHex(*++uri) && IsHex(*++uri) && IsHex(*++uri))
|
||||
++uri;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool wxURI::ParseIPv6address(const wxChar*& uri)
|
||||
{
|
||||
// IPv6address = 6( h16 ":" ) ls32
|
||||
@ -996,7 +1029,7 @@ bool wxURI::ParseIPv6address(const wxChar*& uri)
|
||||
break;
|
||||
}
|
||||
|
||||
if(*uri != ':')
|
||||
if(*uri != wxT(':'))
|
||||
{
|
||||
break;
|
||||
}
|
||||
@ -1009,9 +1042,9 @@ bool wxURI::ParseIPv6address(const wxChar*& uri)
|
||||
if (numPrefix)
|
||||
return false;
|
||||
|
||||
if (*uri == ':')
|
||||
if (*uri == wxT(':'))
|
||||
{
|
||||
if (*++uri != ':')
|
||||
if (*++uri != wxT(':'))
|
||||
return false;
|
||||
|
||||
maxPostfix = 5;
|
||||
@ -1021,18 +1054,18 @@ bool wxURI::ParseIPv6address(const wxChar*& uri)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (*uri != ':' || *(uri+1) != ':')
|
||||
if (*uri != wxT(':') || *(uri+1) != wxT(':'))
|
||||
{
|
||||
if (numPrefix != 6)
|
||||
return false;
|
||||
|
||||
while (*--uri != ':') {}
|
||||
while (*--uri != wxT(':')) {}
|
||||
++uri;
|
||||
|
||||
const wxChar* uristart = uri;
|
||||
//parse ls32
|
||||
// ls32 = ( h16 ":" h16 ) / IPv4address
|
||||
if (ParseH16(uri) && *uri == ':' && ParseH16(uri))
|
||||
if (ParseH16(uri) && *uri == wxT(':') && ParseH16(uri))
|
||||
return true;
|
||||
|
||||
uri = uristart;
|
||||
@ -1057,7 +1090,7 @@ bool wxURI::ParseIPv6address(const wxChar*& uri)
|
||||
|
||||
for(; maxPostfix != 0; --maxPostfix)
|
||||
{
|
||||
if(!ParseH16(uri) || *uri != ':')
|
||||
if(!ParseH16(uri) || *uri != wxT(':'))
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -1066,7 +1099,7 @@ bool wxURI::ParseIPv6address(const wxChar*& uri)
|
||||
const wxChar* uristart = uri;
|
||||
//parse ls32
|
||||
// ls32 = ( h16 ":" h16 ) / IPv4address
|
||||
if (ParseH16(uri) && *uri == ':' && ParseH16(uri))
|
||||
if (ParseH16(uri) && *uri == wxT(':') && ParseH16(uri))
|
||||
return true;
|
||||
|
||||
uri = uristart;
|
||||
@ -1089,40 +1122,50 @@ bool wxURI::ParseIPv6address(const wxChar*& uri)
|
||||
bool wxURI::ParseIPvFuture(const wxChar*& uri)
|
||||
{
|
||||
// IPvFuture = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" )
|
||||
if (*++uri != 'v' || !IsHex(*++uri))
|
||||
if (*++uri != wxT('v') || !IsHex(*++uri))
|
||||
return false;
|
||||
|
||||
while (IsHex(*++uri)) {}
|
||||
|
||||
if (*uri != '.' || !(IsUnreserved(*++uri) || IsSubDelim(*uri) || *uri == ':'))
|
||||
if (*uri != wxT('.') || !(IsUnreserved(*++uri) || IsSubDelim(*uri) || *uri == wxT(':')))
|
||||
return false;
|
||||
|
||||
while(IsUnreserved(*++uri) || IsSubDelim(*uri) || *uri == ':') {}
|
||||
while(IsUnreserved(*++uri) || IsSubDelim(*uri) || *uri == wxT(':')) {}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Misc methods - IsXXX and CharToHex
|
||||
// CharToHex
|
||||
//
|
||||
// Converts a character into a numeric hexidecimal value, or 0 if the
|
||||
// passed in character is not a valid hex character
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
//static
|
||||
wxInt32 wxURI::CharToHex(const wxChar& c)
|
||||
{
|
||||
if ((c >= 'A') && (c <= 'Z')) return c - 'A' + 0x0A;
|
||||
if ((c >= 'a') && (c <= 'z')) return c - 'a' + 0x0a;
|
||||
if ((c >= '0') && (c <= '9')) return c - '0' + 0x00;
|
||||
if ((c >= wxT('A')) && (c <= wxT('Z'))) return c - wxT('A') + 0x0A;
|
||||
if ((c >= wxT('a')) && (c <= wxT('z'))) return c - wxT('a') + 0x0a;
|
||||
if ((c >= wxT('0')) && (c <= wxT('9'))) return c - wxT('0') + 0x00;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// IsXXX
|
||||
//
|
||||
// Returns true if the passed in character meets the criteria of the method
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
//! unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
|
||||
bool wxURI::IsUnreserved (const wxChar& c)
|
||||
{ return IsAlpha(c) || IsDigit(c) ||
|
||||
c == '-' ||
|
||||
c == '.' ||
|
||||
c == '_' ||
|
||||
c == '~' //tilde
|
||||
c == wxT('-') ||
|
||||
c == wxT('.') ||
|
||||
c == wxT('_') ||
|
||||
c == wxT('~') //tilde
|
||||
;
|
||||
}
|
||||
|
||||
@ -1134,41 +1177,41 @@ bool wxURI::IsReserved (const wxChar& c)
|
||||
//! gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"
|
||||
bool wxURI::IsGenDelim (const wxChar& c)
|
||||
{
|
||||
return c == ':' ||
|
||||
c == '/' ||
|
||||
c == '?' ||
|
||||
c == '#' ||
|
||||
c == '[' ||
|
||||
c == ']' ||
|
||||
c == '@';
|
||||
return c == wxT(':') ||
|
||||
c == wxT('/') ||
|
||||
c == wxT('?') ||
|
||||
c == wxT('#') ||
|
||||
c == wxT('[') ||
|
||||
c == wxT(']') ||
|
||||
c == wxT('@');
|
||||
}
|
||||
|
||||
//! sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
|
||||
//! / "*" / "+" / "," / ";" / "="
|
||||
bool wxURI::IsSubDelim (const wxChar& c)
|
||||
{
|
||||
return c == '!' ||
|
||||
c == '$' ||
|
||||
c == '&' ||
|
||||
c == '\'' ||
|
||||
c == '(' ||
|
||||
c == ')' ||
|
||||
c == '*' ||
|
||||
c == '+' ||
|
||||
c == ',' ||
|
||||
c == ';' ||
|
||||
c == '='
|
||||
return c == wxT('!') ||
|
||||
c == wxT('$') ||
|
||||
c == wxT('&') ||
|
||||
c == wxT('\'') ||
|
||||
c == wxT('(') ||
|
||||
c == wxT(')') ||
|
||||
c == wxT('*') ||
|
||||
c == wxT('+') ||
|
||||
c == wxT(',') ||
|
||||
c == wxT(';') ||
|
||||
c == wxT('=')
|
||||
;
|
||||
}
|
||||
|
||||
bool wxURI::IsHex(const wxChar& c)
|
||||
{ return IsDigit(c) || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'); }
|
||||
{ return IsDigit(c) || (c >= wxT('a') && c <= wxT('f')) || (c >= wxT('A') && c <= wxT('F')); }
|
||||
|
||||
bool wxURI::IsAlpha(const wxChar& c)
|
||||
{ return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); }
|
||||
{ return (c >= wxT('a') && c <= wxT('z')) || (c >= wxT('A') && c <= wxT('Z')); }
|
||||
|
||||
bool wxURI::IsDigit(const wxChar& c)
|
||||
{ return c >= '0' && c <= '9'; }
|
||||
{ return c >= wxT('0') && c <= wxT('9'); }
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
@ -54,6 +54,10 @@ USE_PROTOCOL(wxFTP)
|
||||
//
|
||||
// --------------------------------------------------------------
|
||||
|
||||
// --------------------------------------------------------------
|
||||
// Construction
|
||||
// --------------------------------------------------------------
|
||||
|
||||
wxURL::wxURL(const wxString& url) : wxURI(url)
|
||||
{
|
||||
Init(url);
|
||||
@ -66,21 +70,6 @@ wxURL::wxURL(const wxURI& url) : wxURI(url)
|
||||
ParseURL();
|
||||
}
|
||||
|
||||
wxURL& wxURL::operator = (const wxURI& url)
|
||||
{
|
||||
wxURI::operator = (url);
|
||||
Init(url.BuildURI());
|
||||
ParseURL();
|
||||
return *this;
|
||||
}
|
||||
wxURL& wxURL::operator = (const wxString& url)
|
||||
{
|
||||
wxURI::operator = (url);
|
||||
Init(url);
|
||||
ParseURL();
|
||||
return *this;
|
||||
}
|
||||
|
||||
void wxURL::Init(const wxString& url)
|
||||
{
|
||||
m_protocol = NULL;
|
||||
@ -107,6 +96,26 @@ void wxURL::Init(const wxString& url)
|
||||
#endif // wxUSE_SOCKETS
|
||||
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------
|
||||
// Assignment
|
||||
// --------------------------------------------------------------
|
||||
|
||||
wxURL& wxURL::operator = (const wxURI& url)
|
||||
{
|
||||
wxURI::operator = (url);
|
||||
Init(url.BuildURI());
|
||||
ParseURL();
|
||||
return *this;
|
||||
}
|
||||
wxURL& wxURL::operator = (const wxString& url)
|
||||
{
|
||||
wxURI::operator = (url);
|
||||
Init(url);
|
||||
ParseURL();
|
||||
return *this;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------
|
||||
// ParseURL
|
||||
//
|
||||
@ -167,6 +176,10 @@ bool wxURL::ParseURL()
|
||||
return true;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------
|
||||
// Destruction/Cleanup
|
||||
// --------------------------------------------------------------
|
||||
|
||||
void wxURL::CleanData()
|
||||
{
|
||||
#if wxUSE_SOCKETS
|
||||
@ -187,6 +200,9 @@ wxURL::~wxURL()
|
||||
#endif
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------
|
||||
// FetchProtocol
|
||||
// --------------------------------------------------------------
|
||||
|
||||
bool wxURL::FetchProtocol()
|
||||
{
|
||||
@ -208,7 +224,7 @@ bool wxURL::FetchProtocol()
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------
|
||||
// --------- wxURL get ------------------------------------------
|
||||
// GetInputStream
|
||||
// --------------------------------------------------------------
|
||||
|
||||
wxInputStream *wxURL::GetInputStream()
|
||||
@ -365,6 +381,8 @@ void wxURL::SetProxy(const wxString& url_proxy)
|
||||
#endif // wxUSE_SOCKETS
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// wxURLModule
|
||||
//
|
||||
// A module which deletes the default proxy if we created it
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user