📄 url.h
字号:
/// Translate to a string as only path
PathOnly,
/// Translate to a string with no scheme or host
URIOnly,
/// Translate to a string with scheme and host/port
HostPortOnly
};
/**Convert the URL object into its string representation. The parameter
indicates whether a full or partial representation os to be produced.
@return
String representation of the URL.
*/
PString AsString(
UrlFormat fmt = FullURL ///< The type of string to be returned.
) const;
/**Get the "file:" URL as a file path.
If the URL is not a "file:" URL then returns an empty string.
*/
PFilePath AsFilePath() const;
/// Type for translation of strings to URL format,
enum TranslationType {
/// Translate a username/password field for a URL.
LoginTranslation,
/// Translate the path field for a URL.
PathTranslation,
/// Translate the query parameters field for a URL.
QueryTranslation
};
/**Translate a string from general form to one that can be included into
a URL. All reserved characters for the particular field type are
escaped.
@return
String for the URL ready translation.
*/
static PString TranslateString(
const PString & str, ///< String to be translated.
TranslationType type ///< Type of translation.
);
/**Untranslate a string from a form that was included into a URL into a
normal string. All reserved characters for the particular field type
are unescaped.
@return
String from the URL untranslated.
*/
static PString UntranslateString(
const PString & str, ///< String to be translated.
TranslationType type ///< Type of translation.
);
/** Split a string in &= form to a dictionary of names and values. */
static void SplitQueryVars(
const PString & queryStr, ///< String to split into variables.
PStringToString & queryVars ///< Dictionary of variable names and values.
);
/// Get the scheme field of the URL.
const PCaselessString & GetScheme() const { return scheme; }
/// Set the scheme field of the URL
void SetScheme(const PString & scheme);
/// Get the username field of the URL.
const PString & GetUserName() const { return username; }
/// Set the username field of the URL.
void SetUserName(const PString & username);
/// Get the password field of the URL.
const PString & GetPassword() const { return password; }
/// Set the password field of the URL.
void SetPassword(const PString & password);
/// Get the hostname field of the URL.
const PCaselessString & GetHostName() const { return hostname; }
/// Set the hostname field of the URL.
void SetHostName(const PString & hostname);
/// Get the port field of the URL.
WORD GetPort() const { return port; }
/// Set the port field in the URL.
void SetPort(WORD newPort);
/// Get if path is relative or absolute
BOOL GetRelativePath() const { return relativePath; }
/// Get the path field of the URL as a string.
const PString & GetPathStr() const { return pathStr; }
/// Set the path field of the URL as a string.
void SetPathStr(const PString & pathStr);
/// Get the path field of the URL as a string array.
const PStringArray & GetPath() const { return path; }
/// Set the path field of the URL as a string array.
void SetPath(const PStringArray & path);
/// Get the parameter (;) field of the URL.
PString GetParameters() const;
/// Set the parameter (;) field of the URL.
void SetParameters(const PString & parameters);
/// Get the parameter (;) field(s) of the URL as a string dictionary.
const PStringToString & GetParamVars() const { return paramVars; }
/// Set the parameter (;) field(s) of the URL as a string dictionary.
void SetParamVars(const PStringToString & paramVars);
/// Set the parameter (;) field of the URL as a string dictionary.
void SetParamVar(const PString & key, const PString & data);
/// Get the fragment (##) field of the URL.
const PString & GetFragment() const { return fragment; }
/// Get the Query (?) field of the URL as a string.
PString GetQuery() const;
/// Set the Query (?) field of the URL as a string.
void SetQuery(const PString & query);
/// Get the Query (?) field of the URL as a string dictionary.
const PStringToString & GetQueryVars() const { return queryVars; }
/// Set the Query (?) field(s) of the URL as a string dictionary.
void SetQueryVars(const PStringToString & queryVars);
/// Set the Query (?) field of the URL as a string dictionary.
void SetQueryVar(const PString & key, const PString & data);
/// Return TRUE if the URL is an empty string.
BOOL IsEmpty() const { return urlString.IsEmpty(); }
/**Open the URL in a browser.
@return
The browser was successfully opened. This does not mean the URL exists and was
displayed.
*/
static BOOL OpenBrowser(
const PString & url ///< URL to open
);
//@}
BOOL LegacyParse(const PString & _url, const PURLLegacyScheme * schemeInfo);
PString LegacyAsString(PURL::UrlFormat fmt, const PURLLegacyScheme * schemeInfo) const;
protected:
virtual BOOL InternalParse(
const char * cstr, ///< URL as a string to parse.
const char * defaultScheme ///< Default scheme for URL
);
void Recalculate();
PString urlString;
PCaselessString scheme;
PString username;
PString password;
PCaselessString hostname;
WORD port;
BOOL portSupplied; /// port was supplied in string input
BOOL relativePath;
PString pathStr;
PStringArray path;
PStringToString paramVars;
PString fragment;
PStringToString queryVars;
};
//////////////////////////////////////////////////////////////////////////////
// PURLScheme
class PURLScheme : public PObject
{
PCLASSINFO(PURLScheme, PObject);
public:
virtual PString GetName() const = 0;
virtual BOOL Parse(const PString & url, PURL & purl) const = 0;
virtual PString AsString(PURL::UrlFormat fmt, const PURL & purl) const = 0;
};
//////////////////////////////////////////////////////////////////////////////
// PURLLegacyScheme
class PURLLegacyScheme : public PURLScheme
{
public:
PURLLegacyScheme(const char * _scheme)
: scheme(_scheme) { }
BOOL Parse(const PString & url, PURL & purl) const
{ return purl.LegacyParse(url, this); }
PString AsString(PURL::UrlFormat fmt, const PURL & purl) const
{ return purl.LegacyAsString(fmt, this); }
PString GetName() const
{ return scheme; }
PString scheme;
BOOL hasUsername;
BOOL hasPassword;
BOOL hasHostPort;
BOOL defaultToUserIfNoAt;
BOOL defaultHostToLocal;
BOOL hasQuery;
BOOL hasParameters;
BOOL hasFragments;
BOOL hasPath;
BOOL relativeImpliesScheme;
WORD defaultPort;
};
#endif
// End Of File ///////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -