| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| #ifndef _URLOBJ_HXX |
| #define _URLOBJ_HXX |
| |
| #include "tools/toolsdllapi.h" |
| #include <tools/string.hxx> |
| #include "com/sun/star/uno/Reference.hxx" |
| #include "rtl/string.h" |
| #include "rtl/ustrbuf.hxx" |
| #include "rtl/textenc.h" |
| #include "sal/types.h" |
| |
| namespace com { namespace sun { namespace star { namespace util { |
| class XStringWidth; |
| } } } } |
| |
| //============================================================================ |
| // Special tokens: |
| #define INET_PASS_TOKEN '@' |
| #define INET_DELIM_TOKEN ':' |
| #define INET_DELIM_IMAPID ';' |
| #define INET_ENC_DELIM_TOKEN '|' |
| #define INET_DELIM_HOST_TOKEN '.' |
| #define INET_PATH_TOKEN '/' |
| #define INET_DOSPATH_TOKEN '\\' |
| #define INET_MARK_TOKEN '#' |
| #define INET_PARAM_TOKEN '?' |
| #define INET_HEX_ESCAPE '%' |
| |
| //============================================================================ |
| // Common URL prefixes for various schemes: |
| #define INET_FTP_SCHEME "ftp://" |
| #define INET_HTTP_SCHEME "http://" |
| #define INET_HTTPS_SCHEME "https://" |
| #define INET_FILE_SCHEME "file://" |
| #define INET_GOPHER_SCHEME "gopher://" |
| #define INET_MAILTO_SCHEME "mailto:" |
| #define INET_CID_SCHEME "cid:" |
| #define INET_NEWS_SCHEME "news:" |
| #define INET_POP3_SCHEME "pop3://" |
| #define INET_LDAP_SCHEME "ldap://" |
| #define INET_PRIVATE_SCHEME "private:" |
| #define INET_BUGDOC_SCHEME "bugdoc:" |
| #define INET_SLOT_SCHEME "slot:" |
| #define INET_MACRO_SCHEME "macro:" |
| #define INET_JAVASCRIPT_SCHEME "javascript:" |
| #define INET_IMAP_SCHEME "imap://" |
| #define INET_DOWNPASS_SCHEME ".." |
| #define INET_DATA_SCHEME "data:" |
| #define INET_OUT_SCHEME "out://" |
| #define INET_FIF_SCHEME "fif://" |
| #define INET_CEPT_SCHEME "cept://" |
| #define INET_VIM_SCHEME "vim://" |
| #define INET_UNO_SCHEME ".uno:" |
| #define INET_COMPONENT_SCHEME ".component:" |
| #define INET_DB_SCHEME "db:" |
| #define INET_BUGID_SCHEME "bugid:" |
| #define INET_TELNET_SCHEME "telnet://" |
| #define INET_HID_SCHEME "hid:" |
| |
| #define URL_PREFIX_PRIV_SOFFICE "private:" |
| enum |
| { |
| URL_PREFIX_PRIV_SOFFICE_LEN |
| = RTL_CONSTASCII_LENGTH(URL_PREFIX_PRIV_SOFFICE) |
| }; |
| |
| #define URL_PREFIX_PRIV_OBSOLETE URL_PREFIX_PRIV_SOFFICE |
| enum |
| { |
| URL_PREFIX_PRIV_OBSOLETE_LEN |
| = RTL_CONSTASCII_LENGTH(URL_PREFIX_PRIV_OBSOLETE) |
| }; |
| |
| #define URL_PREFIX_PRIV_EXTERN "staroffice:" |
| enum |
| { |
| URL_PREFIX_PRIV_EXTERN_LEN = RTL_CONSTASCII_LENGTH(URL_PREFIX_PRIV_EXTERN) |
| }; |
| |
| //============================================================================ |
| // Schemes: |
| enum INetProtocol |
| { |
| INET_PROT_NOT_VALID = 0, |
| INET_PROT_FTP = 1, |
| INET_PROT_HTTP = 2, |
| INET_PROT_FILE = 3, |
| INET_PROT_MAILTO = 4, |
| INET_PROT_VND_SUN_STAR_WEBDAV = 5, |
| INET_PROT_NEWS = 6, |
| INET_PROT_PRIV_SOFFICE = 7, |
| INET_PROT_PRIVATE = INET_PROT_PRIV_SOFFICE, // obsolete |
| INET_PROT_VND_SUN_STAR_HELP = 8, |
| INET_PROT_HTTPS = 9, |
| INET_PROT_SLOT = 10, |
| INET_PROT_MACRO = 11, |
| INET_PROT_JAVASCRIPT = 12, |
| INET_PROT_IMAP = 13, |
| INET_PROT_POP3 = 14, |
| INET_PROT_DATA = 15, |
| INET_PROT_CID = 16, |
| INET_PROT_OUT = 17, |
| INET_PROT_VND_SUN_STAR_HIER = 18, |
| INET_PROT_VIM = 19, |
| INET_PROT_UNO = 20, |
| INET_PROT_COMPONENT = 21, |
| INET_PROT_VND_SUN_STAR_PKG = 22, |
| INET_PROT_LDAP = 23, |
| INET_PROT_DB = 24, |
| INET_PROT_VND_SUN_STAR_CMD = 25, |
| INET_PROT_VND_SUN_STAR_ODMA = 26, |
| INET_PROT_TELNET = 27, |
| INET_PROT_VND_SUN_STAR_EXPAND = 28, |
| INET_PROT_VND_SUN_STAR_TDOC = 29, |
| INET_PROT_GENERIC = 30, |
| INET_PROT_SMB = 31, |
| INET_PROT_HID = 32, |
| INET_PROT_END = 33 |
| }; |
| |
| //============================================================================ |
| class TOOLS_DLLPUBLIC INetURLObject |
| { |
| public: |
| //======================================================================== |
| // Get- and Set-Methods: |
| |
| /** The way input strings that represent (parts of) URIs are interpreted |
| in set-methods. |
| |
| @descr Most set-methods accept either a ByteString or a rtl::OUString |
| as input. Using a ByteString, octets in the range 0x80--0xFF are |
| replaced by single escape sequences. Using a rtl::OUString , UTF-32 |
| characters in the range 0x80--0x10FFFF are replaced by sequences of |
| escape sequences, representing the UTF-8 coded characters. |
| |
| @descr Along with an EncodeMechanism parameter, the set-methods all |
| take an rtl_TextEncoding parameter, which is ignored unless the |
| EncodeMechanism is WAS_ENCODED. |
| */ |
| enum EncodeMechanism |
| { |
| /** All escape sequences that are already present are ignored, and are |
| interpreted as literal sequences of three characters. |
| */ |
| ENCODE_ALL, |
| |
| /** Sequences of escape sequences, that represent characters from the |
| specified character set and that can be converted to UTF-32 |
| characters, are first decoded. If they have to be encoded, they |
| are converted to UTF-8 characters and are than translated into |
| (sequences of) escape sequences. Other escape sequences are |
| copied verbatim (but using upper case hex digits). |
| */ |
| WAS_ENCODED, |
| |
| /** All escape sequences that are already present are copied verbatim |
| (but using upper case hex digits). |
| */ |
| NOT_CANONIC |
| }; |
| |
| /** The way strings that represent (parts of) URIs are returned from get- |
| methods. |
| |
| @descr Along with a DecodeMechanism parameter, the get-methods all |
| take an rtl_TextEncoding parameter, which is ignored unless the |
| DecodeMechanism is DECODE_WITH_CHARSET or DECODE_UNAMBIGUOUS. |
| */ |
| enum DecodeMechanism |
| { |
| /** The (part of the) URI is returned unchanged. Since URIs are |
| written using a subset of US-ASCII, the returned string is |
| guaranteed to contain only US-ASCII characters. |
| */ |
| NO_DECODE, |
| |
| /** All sequences of escape sequences that represent UTF-8 coded |
| UTF-32 characters with a numerical value greater than 0x7F, are |
| replaced by the respective UTF-16 characters. All other escape |
| sequences are not decoded. |
| */ |
| DECODE_TO_IURI, |
| |
| /** All (sequences of) escape sequences that represent characters from |
| the specified character set, and that can be converted to UTF-32, |
| are replaced by the respective UTF-16 characters. All other |
| escape sequences are not decoded. |
| */ |
| DECODE_WITH_CHARSET, |
| |
| /** All (sequences of) escape sequences that represent characters from |
| the specified character set, that can be converted to UTF-32, and |
| that (in the case of ASCII characters) can safely be decoded |
| without altering the meaning of the (part of the) URI, are |
| replaced by the respective UTF-16 characters. All other escape |
| sequences are not decoded. |
| */ |
| DECODE_UNAMBIGUOUS |
| }; |
| |
| //======================================================================== |
| // General Structure: |
| |
| inline INetURLObject(): |
| m_eScheme(INET_PROT_NOT_VALID), m_eSmartScheme(INET_PROT_HTTP) {} |
| |
| inline bool HasError() const { return m_eScheme == INET_PROT_NOT_VALID; } |
| |
| inline rtl::OUString GetMainURL(DecodeMechanism eMechanism, |
| rtl_TextEncoding eCharset |
| = RTL_TEXTENCODING_UTF8) const |
| { return decode(m_aAbsURIRef, getEscapePrefix(), eMechanism, eCharset); } |
| |
| rtl::OUString GetURLNoPass(DecodeMechanism eMechanism = DECODE_TO_IURI, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8) |
| const; |
| |
| rtl::OUString GetURLNoMark(DecodeMechanism eMechanism = DECODE_TO_IURI, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8) |
| const; |
| |
| rtl::OUString |
| getAbbreviated(com::sun::star::uno::Reference< |
| com::sun::star::util::XStringWidth > const & |
| rStringWidth, |
| sal_Int32 nWidth, |
| DecodeMechanism eMechanism = DECODE_TO_IURI, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8) |
| const; |
| |
| bool operator ==(INetURLObject const & rObject) const; |
| |
| inline bool operator !=(INetURLObject const & rObject) const |
| { return !(*this == rObject); } |
| |
| bool operator <(INetURLObject const & rObject) const; |
| |
| inline bool operator >(INetURLObject const & rObject) const |
| { return rObject < *this; } |
| |
| //======================================================================== |
| // Strict Parsing: |
| |
| inline INetURLObject(ByteString const & rTheAbsURIRef, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8); |
| |
| inline INetURLObject(rtl::OUString const & rTheAbsURIRef, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8); |
| |
| inline bool SetURL(ByteString const & rTheAbsURIRef, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8); |
| |
| inline bool SetURL(rtl::OUString const & rTheAbsURIRef, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8); |
| |
| bool ConcatData(INetProtocol eTheScheme, rtl::OUString const & rTheUser, |
| rtl::OUString const & rThePassword, |
| rtl::OUString const & rTheHost, sal_uInt32 nThePort, |
| rtl::OUString const & rThePath, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8); |
| |
| //======================================================================== |
| // Smart Parsing: |
| |
| /** The supported notations for file system paths. |
| */ |
| enum FSysStyle |
| { |
| /** VOS notation (e.g., "//server/dir/file"). |
| */ |
| FSYS_VOS = 0x1, |
| |
| /** Unix notation (e.g., "/dir/file"). |
| */ |
| FSYS_UNX = 0x2, |
| |
| /** DOS notation (e.g., "a:\dir\file" and "\\server\dir\file"). |
| */ |
| FSYS_DOS = 0x4, |
| |
| /** Mac notation (e.g., "dir:file"). |
| */ |
| FSYS_MAC = 0x8, |
| |
| /** Detect the used notation. |
| |
| @descr For the following descriptions, please note that |
| whereas FSYS_DEFAULT includes all style bits, combinations of only |
| a few style bits are also possible, and are also described. |
| |
| @descr When used to translate a file system path to a file URL, |
| the subset of the following productions for which the appropriate |
| style bit is set are checked in order (using the conventions of |
| RFC 2234, RFC 2396, and RFC 2732; UCS4 stands for any UCS4 |
| character): |
| |
| Production T1 (VOS local; FSYS_VOS only): |
| "//." ["/" *UCS4] |
| becomes |
| "file:///" *UCS4 |
| |
| Production T2 (VOS host; FSYS_VOS only): |
| "//" [host] ["/" *UCS4] |
| becomes |
| "file://" host "/" *UCS4 |
| |
| Production T3 (UNC; FSYS_DOS only): |
| "\\" [host] ["\" *UCS4] |
| becomes |
| "file://" host "/" *UCS4 |
| replacing "\" by "/" within <*UCS4> |
| |
| Production T4 (Unix-like DOS; FSYS_DOS only): |
| ALPHA ":" ["/" *UCS4] |
| becomes |
| "file:///" ALPHA ":/" *UCS4 |
| replacing "\" by "/" within <*UCS4> |
| |
| Production T5 (DOS; FSYS_DOS only): |
| ALPHA ":" ["\" *UCS4] |
| becomes |
| "file:///" ALPHA ":/" *UCS4 |
| replacing "\" by "/" within <*UCS4> |
| |
| Production T6 (any): |
| *UCS4 |
| becomes |
| "file:///" *UCS4 |
| replacing the delimiter by "/" within <*UCS4>. The delimiter is |
| that character from the set { "/", "\", ":" } which appears most |
| often in <*UCS4> (if FSYS_UNX is not among the style bits, "/" |
| is removed from the set; if FSYS_DOS is not among the style |
| bits, "\" is removed from the set; if FSYS_MAC is not among the |
| style bits, ":" is removed from the set). If two or more |
| characters appear the same number of times, the character |
| mentioned first in that set is chosen. If the first character |
| of <*UCS4> is the delimiter, that character is not copied. |
| |
| @descr When used to translate a file URL to a file system path, |
| the following productions are checked in order (using the |
| conventions of RFC 2234, RFC 2396, and RFC 2732): |
| |
| Production F1 (VOS; FSYS_VOS): |
| "file://" host "/" fpath ["#" fragment] |
| becomes |
| "//" host "/" fpath |
| |
| Production F2 (DOS; FSYS_DOS): |
| "file:///" ALPHA ":" ["/" fpath] ["#" fragment] |
| becomes |
| ALPHA ":" ["\" fpath] |
| replacing "/" by "\" in <fpath> |
| |
| Production F3 (Unix; FSYS_UNX): |
| "file:///" fpath ["#" fragment] |
| becomes |
| "/" fpath |
| */ |
| FSYS_DETECT = FSYS_VOS | FSYS_UNX | FSYS_DOS |
| }; |
| |
| inline INetURLObject(rtl::OUString const & rTheAbsURIRef, |
| INetProtocol eTheSmartScheme, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8, |
| FSysStyle eStyle = FSYS_DETECT); |
| |
| inline void SetSmartProtocol(INetProtocol eTheSmartScheme) |
| { m_eSmartScheme = eTheSmartScheme; } |
| |
| inline bool |
| SetSmartURL(ByteString const & rTheAbsURIRef, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8, |
| FSysStyle eStyle = FSYS_DETECT); |
| |
| inline bool |
| SetSmartURL(rtl::OUString const & rTheAbsURIRef, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8, |
| FSysStyle eStyle = FSYS_DETECT); |
| |
| inline INetURLObject |
| smartRel2Abs(ByteString const & rTheRelURIRef, |
| bool & rWasAbsolute, |
| bool bIgnoreFragment = false, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8, |
| bool bRelativeNonURIs = false, |
| FSysStyle eStyle = FSYS_DETECT) const; |
| |
| inline INetURLObject |
| smartRel2Abs(rtl::OUString const & rTheRelURIRef, |
| bool & rWasAbsolute, |
| bool bIgnoreFragment = false, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8, |
| bool bRelativeNonURIs = false, |
| FSysStyle eStyle = FSYS_DETECT) const; |
| |
| //======================================================================== |
| // Relative URLs: |
| |
| inline bool |
| GetNewAbsURL(ByteString const & rTheRelURIRef, |
| INetURLObject * pTheAbsURIRef, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8, |
| FSysStyle eStyle = FSYS_DETECT, bool bIgnoreFragment = false) |
| const; |
| |
| inline bool |
| GetNewAbsURL(rtl::OUString const & rTheRelURIRef, |
| INetURLObject * pTheAbsURIRef, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8, |
| FSysStyle eStyle = FSYS_DETECT, bool bIgnoreFragment = false) |
| const; |
| |
| /** @descr If rTheRelURIRef cannot be converted to an absolute URL |
| (because of syntactic reasons), either rTheRelURIRef or an empty |
| string is returned: If all of the parameters eEncodeMechanism, |
| eDecodeMechanism and eCharset have their respective default values, |
| then rTheRelURIRef is returned unmodified; otherwise, an empty string |
| is returned. |
| */ |
| static rtl::OUString |
| GetAbsURL(rtl::OUString const & rTheBaseURIRef, |
| rtl::OUString const & rTheRelURIRef, |
| bool bIgnoreFragment = false, |
| EncodeMechanism eEncodeMechanism = WAS_ENCODED, |
| DecodeMechanism eDecodeMechanism = DECODE_TO_IURI, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8, |
| FSysStyle eStyle = FSYS_DETECT); |
| |
| static inline rtl::OUString |
| GetRelURL(ByteString const & rTheBaseURIRef, |
| ByteString const & rTheAbsURIRef, |
| EncodeMechanism eEncodeMechanism = WAS_ENCODED, |
| DecodeMechanism eDecodeMechanism = DECODE_TO_IURI, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8, |
| FSysStyle eStyle = FSYS_DETECT); |
| |
| static inline rtl::OUString |
| GetRelURL(rtl::OUString const & rTheBaseURIRef, |
| rtl::OUString const & rTheAbsURIRef, |
| EncodeMechanism eEncodeMechanism = WAS_ENCODED, |
| DecodeMechanism eDecodeMechanism = DECODE_TO_IURI, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8, |
| FSysStyle eStyle = FSYS_DETECT); |
| |
| //======================================================================== |
| // External URLs: |
| |
| rtl::OUString getExternalURL(DecodeMechanism eMechanism = DECODE_TO_IURI, |
| rtl_TextEncoding eCharset |
| = RTL_TEXTENCODING_UTF8) const; |
| |
| static inline bool translateToExternal(ByteString const & rTheIntURIRef, |
| rtl::OUString & rTheExtURIRef, |
| DecodeMechanism eDecodeMechanism |
| = DECODE_TO_IURI, |
| rtl_TextEncoding eCharset |
| = RTL_TEXTENCODING_UTF8); |
| |
| static inline bool translateToExternal(rtl::OUString const & rTheIntURIRef, |
| rtl::OUString & rTheExtURIRef, |
| DecodeMechanism eDecodeMechanism |
| = DECODE_TO_IURI, |
| rtl_TextEncoding eCharset |
| = RTL_TEXTENCODING_UTF8); |
| |
| static inline bool translateToInternal(ByteString const & rTheExtURIRef, |
| rtl::OUString & rTheIntURIRef, |
| DecodeMechanism eDecodeMechanism |
| = DECODE_TO_IURI, |
| rtl_TextEncoding eCharset |
| = RTL_TEXTENCODING_UTF8); |
| |
| static inline bool translateToInternal(rtl::OUString const & rTheExtURIRef, |
| rtl::OUString & rTheIntURIRef, |
| DecodeMechanism eDecodeMechanism |
| = DECODE_TO_IURI, |
| rtl_TextEncoding eCharset |
| = RTL_TEXTENCODING_UTF8); |
| |
| //======================================================================== |
| // Scheme: |
| |
| struct SchemeInfo; |
| |
| inline INetProtocol GetProtocol() const { return m_eScheme; } |
| |
| /** Return the URL 'prefix' for a given scheme. |
| |
| @param eTheScheme One of the supported URL schemes. |
| |
| @return The 'prefix' of URLs of the given scheme. |
| */ |
| static rtl::OUString GetScheme(INetProtocol eTheScheme); |
| |
| static inline INetProtocol CompareProtocolScheme(ByteString const & |
| rTheAbsURIRef) |
| { return CompareProtocolScheme(extend(rTheAbsURIRef)); } |
| |
| static INetProtocol CompareProtocolScheme(rtl::OUString const & |
| rTheAbsURIRef); |
| |
| //======================================================================== |
| // User Info: |
| |
| inline bool HasUserData() const { return m_aUser.isPresent(); } |
| |
| inline bool IsEmptyUser() const |
| { return m_aUser.isPresent() && m_aUser.isEmpty(); } |
| |
| bool hasPassword() const; |
| |
| inline bool IsEmptyPass() const |
| { return hasPassword() && m_aAuth.isEmpty(); } |
| |
| inline rtl::OUString GetUser(DecodeMechanism eMechanism = DECODE_TO_IURI, |
| rtl_TextEncoding eCharset |
| = RTL_TEXTENCODING_UTF8) const |
| { return decode(m_aUser, getEscapePrefix(), eMechanism, eCharset); } |
| |
| inline rtl::OUString GetPass(DecodeMechanism eMechanism = DECODE_TO_IURI, |
| rtl_TextEncoding eCharset |
| = RTL_TEXTENCODING_UTF8) const |
| { return decode(m_aAuth, getEscapePrefix(), eMechanism, eCharset); } |
| |
| inline bool SetUser(ByteString const & rTheUser, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8) |
| { return setUser(extend(rTheUser), true, eMechanism, eCharset); } |
| |
| inline bool SetUser(rtl::OUString const & rTheUser, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8) |
| { return setUser(rTheUser, false, eMechanism, eCharset); } |
| |
| void makeAuthCanonic(); |
| |
| inline bool SetPass(ByteString const & rThePassword, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8); |
| |
| inline bool SetPass(rtl::OUString const & rThePassword, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8); |
| |
| inline bool SetUserAndPass(ByteString const & rTheUser, |
| ByteString const & rThePassword, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset |
| = RTL_TEXTENCODING_UTF8); |
| |
| inline bool SetUserAndPass(rtl::OUString const & rTheUser, |
| rtl::OUString const & rThePassword, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset |
| = RTL_TEXTENCODING_UTF8); |
| |
| //======================================================================== |
| // Host and Port: |
| |
| inline bool HasPort() const { return m_aPort.isPresent(); } |
| |
| inline rtl::OUString GetHost(DecodeMechanism eMechanism = DECODE_TO_IURI, |
| rtl_TextEncoding eCharset |
| = RTL_TEXTENCODING_UTF8) const |
| { return decode(m_aHost, getEscapePrefix(), eMechanism, eCharset); } |
| |
| rtl::OUString GetHostPort(DecodeMechanism eMechanism = DECODE_TO_IURI, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8); |
| |
| sal_uInt32 GetPort() const; |
| |
| inline bool SetHost(ByteString const & rTheHost, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8) |
| { return setHost(extend(rTheHost), true, eMechanism, eCharset); } |
| |
| inline bool SetHost(rtl::OUString const & rTheHost, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8) |
| { return setHost(rTheHost, false, eMechanism, eCharset); } |
| |
| bool SetPort(sal_uInt32 nThePort); |
| |
| void makePortCanonic(); |
| |
| /** Encode the <hostport> part of a URL. |
| |
| @ATT Obsolete, because at the moment the <hostport> part of a URL may |
| not contain any escape sequences anyway, and because this method does |
| not inform the caller whether the given <hostport> part is legal. |
| |
| @param rTheHostPort The <hostport> part of a URL (for its |
| interpretation, see the general discussion for set-methods). |
| |
| @param eMechanism See the general discussion for set-methods. |
| |
| @param eCharset See the general discussion for set-methods. |
| |
| @return The <hostport> part, encoded according to the given mechanism |
| and charset ('forbidden' characters replaced by escape sequences). |
| */ |
| static inline rtl::OUString encodeHostPort(ByteString const & rTheHostPort, |
| EncodeMechanism eMechanism, |
| rtl_TextEncoding eCharset |
| = RTL_TEXTENCODING_UTF8); |
| |
| /** Encode the <hostport> part of a URL. |
| |
| @ATT Obsolete, because at the moment the <hostport> part of a URL may |
| not contain any escape sequences anyway, and because this method does |
| not inform the caller whether the given <hostport> part is legal. |
| |
| @param rTheHostPort The <hostport> part of a URL (for its |
| interpretation, see the general discussion for set-methods). |
| |
| @param eMechanism See the general discussion for set-methods. |
| |
| @param eCharset See the general discussion for set-methods. |
| |
| @return The <hostport> part, encoded according to the given mechanism |
| and charset ('forbidden' characters replaced by escape sequences). |
| */ |
| static inline rtl::OUString encodeHostPort(rtl::OUString const & rTheHostPort, |
| EncodeMechanism eMechanism, |
| rtl_TextEncoding eCharset |
| = RTL_TEXTENCODING_UTF8) |
| { return encodeHostPort(rTheHostPort, false, eMechanism, eCharset); } |
| |
| //======================================================================== |
| // Path: |
| |
| inline bool HasURLPath() const { return !m_aPath.isEmpty(); } |
| |
| inline rtl::OUString GetURLPath(DecodeMechanism eMechanism = DECODE_TO_IURI, |
| rtl_TextEncoding eCharset |
| = RTL_TEXTENCODING_UTF8) const |
| { return decode(m_aPath, getEscapePrefix(), eMechanism, eCharset); } |
| |
| inline bool SetURLPath(ByteString const & rThePath, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8) |
| { return setPath(extend(rThePath), true, eMechanism, eCharset); } |
| |
| inline bool SetURLPath(rtl::OUString const & rThePath, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8) |
| { return setPath(rThePath, false, eMechanism, eCharset); } |
| |
| //======================================================================== |
| // Hierarchical Path: |
| |
| /** A constant to address the last segment in various methods dealing with |
| hierarchical paths. |
| |
| @descr It is often more efficient to address the last segment using |
| this constant, than to determine its ordinal value using |
| getSegmentCount(). |
| */ |
| enum { LAST_SEGMENT = -1 }; |
| |
| /** The number of segments in the hierarchical path. |
| |
| @descr Using RFC 2396 and RFC 2234, a hierarchical path is of the |
| form |
| |
| hierarchical-path = 1*("/" segment) |
| |
| segment = name *(";" param) |
| |
| name = [base ["." extension]] |
| |
| base = 1*pchar |
| |
| extension = *<any pchar except "."> |
| |
| param = *pchar |
| |
| @param bIgnoreFinalSlash If true, a final slash at the end of the |
| hierarchical path does not denote an empty segment, but is ignored. |
| |
| @return The number of segments in the hierarchical path. If the path |
| is not hierarchical, 0 is returned. |
| */ |
| sal_Int32 getSegmentCount(bool bIgnoreFinalSlash = true) const; |
| |
| /** Remove a segment from the hierarchical path. |
| |
| @param nIndex The non-negative index of the segment, or LAST_SEGMENT |
| if addressing the last segment. |
| |
| @param bIgnoreFinalSlash If true, a final slash at the end of the |
| hierarchical path does not denote an empty segment, but is ignored. |
| |
| @return True if the segment has successfully been removed (and the |
| resulting URI is still valid). If the path is not hierarchical, or |
| the specified segment does not exist, false is returned. If false is |
| returned, the object is not modified. |
| */ |
| bool removeSegment(sal_Int32 nIndex = LAST_SEGMENT, |
| bool bIgnoreFinalSlash = true); |
| |
| /** Insert a new segment into the hierarchical path. |
| |
| @param rTheName The name part of the new segment. The new segment |
| will contain no parameters. |
| |
| @param bAppendFinalSlash If the new segment is appended at the end of |
| the hierarchical path, this parameter specifies whether to add a final |
| slash after it or not. |
| |
| @param nIndex The non-negative index of the segment before which |
| to insert the new segment. LAST_SEGMENT or an nIndex that equals |
| getSegmentCount() inserts the new segment at the end of the |
| hierarchical path. |
| |
| @param bIgnoreFinalSlash If true, a final slash at the end of the |
| hierarchical path does not denote an empty segment, but is ignored. |
| |
| @param eMechanism See the general discussion for set-methods. |
| |
| @param eCharset See the general discussion for set-methods. |
| |
| @return True if the segment has successfully been inserted (and the |
| resulting URI is still valid). If the path is not hierarchical, or |
| the specified place to insert the new segment does not exist, false is |
| returned. If false is returned, the object is not modified. |
| */ |
| inline bool insertName(rtl::OUString const & rTheName, |
| bool bAppendFinalSlash = false, |
| sal_Int32 nIndex = LAST_SEGMENT, |
| bool bIgnoreFinalSlash = true, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8); |
| |
| /** Get the name of a segment of the hierarchical path. |
| |
| @param nIndex The non-negative index of the segment, or LAST_SEGMENT |
| if addressing the last segment. |
| |
| @param bIgnoreFinalSlash If true, a final slash at the end of the |
| hierarchical path does not denote an empty segment, but is ignored. |
| |
| @param eMechanism See the general discussion for get-methods. |
| |
| @param eCharset See the general discussion for get-methods. |
| |
| @return The name part of the specified segment. If the path is not |
| hierarchical, or the specified segment does not exits, an empty string |
| is returned. |
| */ |
| rtl::OUString getName(sal_Int32 nIndex = LAST_SEGMENT, |
| bool bIgnoreFinalSlash = true, |
| DecodeMechanism eMechanism = DECODE_TO_IURI, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8) |
| const; |
| |
| /** Set the name of a segment (preserving any parameters and any query or |
| fragment part). |
| |
| @param rTheName The new name. |
| |
| @param nIndex The non-negative index of the segment, or LAST_SEGMENT |
| if addressing the last segment. |
| |
| @param bIgnoreFinalSlash If true, a final slash at the end of the |
| hierarchical path does not denote an empty segment, but is ignored. |
| |
| @param eMechanism See the general discussion for set-methods. |
| |
| @param eCharset See the general discussion for set-methods. |
| |
| @return True if the name has successfully been modified (and the |
| resulting URI is still valid). If the path is not hierarchical, or |
| the specified segment does not exist, false is returned. If false is |
| returned, the object is not modified. |
| */ |
| bool setName(rtl::OUString const & rTheName, |
| sal_Int32 nIndex = LAST_SEGMENT, |
| bool bIgnoreFinalSlash = true, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8); |
| |
| /** Get the base of the name of a segment. |
| |
| @param nIndex The non-negative index of the segment, or LAST_SEGMENT |
| if addressing the last segment. |
| |
| @param bIgnoreFinalSlash If true, a final slash at the end of the |
| hierarchical path does not denote an empty segment, but is ignored. |
| |
| @param eMechanism See the general discussion for get-methods. |
| |
| @param eCharset See the general discussion for get-methods. |
| |
| @return The base part of the specified segment. If the path is |
| not hierarchical, or the specified segment does not exits, an empty |
| string is returned. |
| */ |
| rtl::OUString getBase(sal_Int32 nIndex = LAST_SEGMENT, |
| bool bIgnoreFinalSlash = true, |
| DecodeMechanism eMechanism = DECODE_TO_IURI, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8) |
| const; |
| |
| /** Set the base of the name of a segment (preserving the extension). |
| |
| @param rTheBase The new base. |
| |
| @param nIndex The non-negative index of the segment, or LAST_SEGMENT |
| if addressing the last segment. |
| |
| @param bIgnoreFinalSlash If true, a final slash at the end of the |
| hierarchical path does not denote an empty segment, but is ignored. |
| |
| @param eMechanism See the general discussion for set-methods. |
| |
| @param eCharset See the general discussion for set-methods. |
| |
| @return True if the base has successfully been modified (and the |
| resulting URI is still valid). If the path is not hierarchical, or |
| the specified segment does not exist, false is returned. If false is |
| returned, the object is not modified. |
| */ |
| bool setBase(rtl::OUString const & rTheBase, |
| sal_Int32 nIndex = LAST_SEGMENT, |
| bool bIgnoreFinalSlash = true, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8); |
| |
| /** Determine whether the name of a segment has an extension. |
| |
| @param nIndex The non-negative index of the segment, or LAST_SEGMENT |
| if addressing the last segment. |
| |
| @param bIgnoreFinalSlash If true, a final slash at the end of the |
| hierarchical path does not denote an empty segment, but is ignored. |
| |
| @return True if the name of the specified segment has an extension. |
| If the path is not hierarchical, or the specified segment does not |
| exist, false is returned. |
| */ |
| bool hasExtension(sal_Int32 nIndex = LAST_SEGMENT, |
| bool bIgnoreFinalSlash = true) const; |
| |
| /** Get the extension of the name of a segment. |
| |
| @param nIndex The non-negative index of the segment, or LAST_SEGMENT |
| if addressing the last segment. |
| |
| @param bIgnoreFinalSlash If true, a final slash at the end of the |
| hierarchical path does not denote an empty segment, but is ignored. |
| |
| @param eMechanism See the general discussion for get-methods. |
| |
| @param eCharset See the general discussion for get-methods. |
| |
| @return The extension part of the specified segment. If the path is |
| not hierarchical, or the specified segment does not exits, an empty |
| string is returned. |
| */ |
| rtl::OUString getExtension(sal_Int32 nIndex = LAST_SEGMENT, |
| bool bIgnoreFinalSlash = true, |
| DecodeMechanism eMechanism = DECODE_TO_IURI, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8) |
| const; |
| |
| /** Set the extension of the name of a segment (replacing an already |
| existing extension). |
| |
| @param rTheExtension The new extension. |
| |
| @param nIndex The non-negative index of the segment, or LAST_SEGMENT |
| if addressing the last segment. |
| |
| @param bIgnoreFinalSlash If true, a final slash at the end of the |
| hierarchical path does not denote an empty segment, but is ignored. |
| |
| @param eMechanism See the general discussion for set-methods. |
| |
| @param eCharset See the general discussion for set-methods. |
| |
| @return True if the extension has successfully been modified (and the |
| resulting URI is still valid). If the path is not hierarchical, or |
| the specified segment does not exist, false is returned. If false is |
| returned, the object is not modified. |
| */ |
| bool setExtension(rtl::OUString const & rTheExtension, |
| sal_Int32 nIndex = LAST_SEGMENT, |
| bool bIgnoreFinalSlash = true, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8); |
| |
| /** Remove the extension of the name of a segment. |
| |
| @param nIndex The non-negative index of the segment, or LAST_SEGMENT |
| if addressing the last segment. |
| |
| @param bIgnoreFinalSlash If true, a final slash at the end of the |
| hierarchical path does not denote an empty segment, but is ignored. |
| |
| @return True if the extension has successfully been removed (and the |
| resulting URI is still valid), or if the name did not have an |
| extension. If the path is not hierarchical, or the specified segment |
| does not exist, false is returned. If false is returned, the object |
| is not modified. |
| */ |
| bool removeExtension(sal_Int32 nIndex = LAST_SEGMENT, |
| bool bIgnoreFinalSlash = true); |
| |
| /** Determine whether the hierarchical path ends in a final slash. |
| |
| @return True if the hierarchical path ends in a final slash. If the |
| path is not hierarchical, false is returned. |
| */ |
| bool hasFinalSlash() const; |
| |
| /** Make the hierarchical path end in a final slash (if it does not |
| already do so). |
| |
| @return True if a final slash has successfully been appended (and the |
| resulting URI is still valid), or if the hierarchical path already |
| ended in a final slash. If the path is not hierarchical, false is |
| returned. If false is returned, the object is not modified. |
| */ |
| bool setFinalSlash(); |
| |
| /** Remove a final slash from the hierarchical path. |
| |
| @return True if a final slash has successfully been removed (and the |
| resulting URI is still valid), or if the hierarchical path already did |
| not end in a final slash. If the path is not hierarchical, false is |
| returned. If false is returned, the object is not modified. |
| */ |
| bool removeFinalSlash(); |
| |
| //======================================================================== |
| // Query: |
| |
| inline bool HasParam() const { return m_aQuery.isPresent(); } |
| |
| inline rtl::OUString GetParam(DecodeMechanism eMechanism = DECODE_TO_IURI, |
| rtl_TextEncoding eCharset |
| = RTL_TEXTENCODING_UTF8) const |
| { return decode(m_aQuery, getEscapePrefix(), eMechanism, eCharset); } |
| |
| inline bool SetParam(ByteString const & rTheQuery, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8); |
| |
| inline bool SetParam(rtl::OUString const & rTheQuery, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8); |
| |
| //======================================================================== |
| // Fragment: |
| |
| inline bool HasMark() const { return m_aFragment.isPresent(); } |
| |
| inline rtl::OUString GetMark(DecodeMechanism eMechanism = DECODE_TO_IURI, |
| rtl_TextEncoding eCharset |
| = RTL_TEXTENCODING_UTF8) const |
| { return decode(m_aFragment, getEscapePrefix(), eMechanism, eCharset); } |
| |
| inline bool SetMark(ByteString const & rTheFragment, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8); |
| |
| inline bool SetMark(rtl::OUString const & rTheFragment, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8); |
| |
| static rtl::OUString createFragment(rtl::OUString const & rText); |
| |
| //======================================================================== |
| // File URLs: |
| |
| /** Create an INetURLObject from a file system path. |
| |
| @param rFSysPath A file system path. An URL is not allowed here! |
| |
| @param eStyle The notation of rFSysPath. |
| */ |
| inline INetURLObject(rtl::OUString const & rFSysPath, FSysStyle eStyle); |
| |
| /** Set this INetURLObject to a file URL constructed from a file system |
| path. |
| |
| @param rFSysPath A file system path. An URL is not allowed here! |
| |
| @param eStyle The notation of rFSysPath. |
| |
| @return True if this INetURLObject has successfully been changed. If |
| false is returned, this INetURLObject has not been modified. |
| */ |
| bool setFSysPath(rtl::OUString const & rFSysPath, FSysStyle eStyle); |
| |
| /** Return the file system path represented by a file URL (ignoring any |
| fragment part). |
| |
| @param eStyle The notation of the returned file system path. |
| |
| @param pDelimiter Upon successful return, this parameter can return |
| the character that is the 'main' delimiter within the returned file |
| system path (e.g., "/" for Unix, "\" for DOS, ":" for Mac). This is |
| especially useful for routines that later try to shorten the returned |
| file system path at a 'good' position, e.g. to fit it into some |
| limited display space. |
| |
| @return The file system path represented by this file URL. If this |
| file URL does not represent a file system path according to the |
| specified notation, or if this is not a file URL at all, an empty |
| string is returned. |
| */ |
| rtl::OUString getFSysPath(FSysStyle eStyle, sal_Unicode * pDelimiter = 0) |
| const; |
| |
| //======================================================================== |
| // POP3 and URLs: |
| |
| bool HasMsgId() const; |
| |
| rtl::OUString GetMsgId(DecodeMechanism eMechanism = DECODE_TO_IURI, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8) |
| const; |
| |
| //======================================================================== |
| // Coding: |
| |
| enum Part |
| { |
| PART_OBSOLETE_NORMAL = 0x001, // Obsolete, do not use! |
| PART_OBSOLETE_FILE = 0x002, // Obsolete, do not use! |
| PART_OBSOLETE_PARAM = 0x004, // Obsolete, do not use! |
| PART_USER_PASSWORD = 0x008, |
| PART_IMAP_ACHAR = 0x010, |
| PART_VIM = 0x020, |
| PART_HOST_EXTRA = 0x040, |
| PART_FPATH = 0x080, |
| PART_AUTHORITY = 0x100, |
| PART_PATH_SEGMENTS_EXTRA = 0x200, |
| PART_REL_SEGMENT_EXTRA = 0x400, |
| PART_URIC = 0x800, |
| PART_HTTP_PATH = 0x1000, |
| PART_FILE_SEGMENT_EXTRA = 0x2000, // Obsolete, do not use! |
| PART_MESSAGE_ID = 0x4000, |
| PART_MESSAGE_ID_PATH = 0x8000, |
| PART_MAILTO = 0x10000, |
| PART_PATH_BEFORE_QUERY = 0x20000, |
| PART_PCHAR = 0x40000, |
| PART_FRAGMENT = 0x80000, // Obsolete, do not use! |
| PART_VISIBLE = 0x100000, |
| PART_VISIBLE_NONSPECIAL = 0x200000, |
| PART_CREATEFRAGMENT = 0x400000, |
| PART_UNO_PARAM_VALUE = 0x800000, |
| PART_UNAMBIGUOUS = 0x1000000, |
| PART_URIC_NO_SLASH = 0x2000000, |
| PART_HTTP_QUERY = 0x4000000, //TODO! unused? |
| PART_NEWS_ARTICLE_LOCALPART = 0x8000000, |
| max_part = 0x80000000 |
| // Do not use! Only there to allow compatible changes in the |
| // future. |
| }; |
| |
| enum EscapeType |
| { |
| ESCAPE_NO, |
| ESCAPE_OCTET, |
| ESCAPE_UTF32 |
| }; |
| |
| /** Encode some text as part of a URI. |
| |
| @param rText Some text (for its interpretation, see the general |
| discussion for set-methods). |
| |
| @param ePart The part says which characters are 'forbidden' and must |
| be encoded (replaced by escape sequences). Characters outside the US- |
| ASCII range are always 'forbidden.' |
| |
| @param cEscapePrefix The first character in an escape sequence |
| (normally '%'). |
| |
| @param eMechanism See the general discussion for set-methods. |
| |
| @param eCharset See the general discussion for set-methods. |
| |
| @return The encoded representation of the text ('forbidden' |
| characters replaced by escape sequences). |
| */ |
| static inline rtl::OUString encode(ByteString const & rText, Part ePart, |
| sal_Char cEscapePrefix, |
| EncodeMechanism eMechanism, |
| rtl_TextEncoding eCharset |
| = RTL_TEXTENCODING_UTF8); |
| |
| /** Encode some text as part of a URI. |
| |
| @param rText Some text (for its interpretation, see the general |
| discussion for set-methods). |
| |
| @param ePart The part says which characters are 'forbidden' and must |
| be encoded (replaced by escape sequences). Characters outside the US- |
| ASCII range are always 'forbidden.' |
| |
| @param cEscapePrefix The first character in an escape sequence |
| (normally '%'). |
| |
| @param eMechanism See the general discussion for set-methods. |
| |
| @param eCharset See the general discussion for set-methods. |
| |
| @return The text, encoded according to the given mechanism and |
| charset ('forbidden' characters replaced by escape sequences). |
| */ |
| static inline rtl::OUString encode(rtl::OUString const & rText, Part ePart, |
| sal_Char cEscapePrefix, |
| EncodeMechanism eMechanism, |
| rtl_TextEncoding eCharset |
| = RTL_TEXTENCODING_UTF8); |
| |
| /** Decode some text. |
| |
| @param rText Some (encoded) text. |
| |
| @param cEscapePrefix The first character in an escape sequence |
| (normally '%'). |
| |
| @param eMechanism See the general discussion for get-methods. |
| |
| @param eCharset See the general discussion for get-methods. |
| |
| @return The text, decoded according to the given mechanism and |
| charset (escape sequences replaced by 'raw' characters). |
| */ |
| static inline rtl::OUString decode(rtl::OUString const & rText, |
| sal_Char cEscapePrefix, |
| DecodeMechanism eMechanism, |
| rtl_TextEncoding eCharset |
| = RTL_TEXTENCODING_UTF8); |
| |
| static inline rtl::OUString decode(rtl::OUStringBuffer const & rText, |
| sal_Char cEscapePrefix, |
| DecodeMechanism eMechanism, |
| rtl_TextEncoding eCharset |
| = RTL_TEXTENCODING_UTF8); |
| |
| static void appendUCS4Escape(rtl::OUStringBuffer & rTheText, |
| sal_Char cEscapePrefix, |
| sal_uInt32 nUCS4); |
| |
| static void appendUCS4(rtl::OUStringBuffer & rTheText, sal_uInt32 nUCS4, |
| EscapeType eEscapeType, bool bOctets, Part ePart, |
| sal_Char cEscapePrefix, rtl_TextEncoding eCharset, |
| bool bKeepVisibleEscapes); |
| |
| static sal_uInt32 getUTF32(sal_Unicode const *& rBegin, |
| sal_Unicode const * pEnd, bool bOctets, |
| sal_Char cEscapePrefix, |
| EncodeMechanism eMechanism, |
| rtl_TextEncoding eCharset, |
| EscapeType & rEscapeType); |
| |
| //======================================================================== |
| // Specialized helpers: |
| |
| static sal_uInt32 scanDomain(sal_Unicode const *& rBegin, |
| sal_Unicode const * pEnd, |
| bool bEager = true); |
| |
| //======================================================================== |
| // OBSOLETE Hierarchical Path: |
| |
| rtl::OUString GetPartBeforeLastName(DecodeMechanism eMechanism |
| = DECODE_TO_IURI, |
| rtl_TextEncoding eCharset |
| = RTL_TEXTENCODING_UTF8) const; |
| |
| /** Get the last segment in the path. |
| |
| @param eMechanism See the general discussion for get-methods. |
| |
| @param eCharset See the general discussion for get-methods. |
| |
| @return For a hierarchical URL, the last segment (everything after |
| the last unencoded '/'). Not that this last segment may be empty. If |
| the URL is not hierarchical, an empty string is returned. |
| */ |
| rtl::OUString GetLastName(DecodeMechanism eMechanism = DECODE_TO_IURI, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8) |
| const; |
| |
| /** Get the 'extension' of the last segment in the path. |
| |
| @param eMechanism See the general discussion for get-methods. |
| |
| @param eCharset See the general discussion for get-methods. |
| |
| @return For a hierarchical URL, everything after the first unencoded |
| '.' in the last segment of the path. Note that this 'extension' may |
| be empty. If the URL is not hierarchical, or if the last segment does |
| not contain an unencoded '.', an empty string is returned. |
| */ |
| rtl::OUString GetFileExtension(DecodeMechanism eMechanism = DECODE_TO_IURI, |
| rtl_TextEncoding eCharset |
| = RTL_TEXTENCODING_UTF8) const; |
| |
| inline bool Append(ByteString const & rTheSegment, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8) |
| { return appendSegment(extend(rTheSegment), true, eMechanism, eCharset); } |
| |
| inline bool Append(rtl::OUString const & rTheSegment, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8) |
| { return appendSegment(rTheSegment, false, eMechanism, eCharset); } |
| |
| bool CutLastName(); |
| |
| //======================================================================== |
| // OBSOLETE File URLs: |
| |
| rtl::OUString PathToFileName() const; |
| |
| rtl::OUString GetFull() const; |
| |
| rtl::OUString GetPath() const; |
| |
| void SetBase(rtl::OUString const & rTheBase); |
| |
| rtl::OUString GetBase() const; |
| |
| void SetName(rtl::OUString const & rTheName, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8); |
| |
| inline rtl::OUString GetName(DecodeMechanism eMechanism = DECODE_TO_IURI, |
| rtl_TextEncoding eCharset |
| = RTL_TEXTENCODING_UTF8) const |
| { return GetLastName(eMechanism, eCharset); } |
| |
| rtl::OUString CutName(DecodeMechanism eMechanism = DECODE_TO_IURI, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8); |
| |
| void SetExtension(rtl::OUString const & rTheExtension, |
| EncodeMechanism eMechanism = WAS_ENCODED, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8); |
| |
| inline rtl::OUString GetExtension( |
| DecodeMechanism eMechanism = DECODE_TO_IURI, |
| rtl_TextEncoding eCharset |
| = RTL_TEXTENCODING_UTF8) const |
| { return GetFileExtension(eMechanism, eCharset); } |
| |
| rtl::OUString CutExtension(DecodeMechanism eMechanism = DECODE_TO_IURI, |
| rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8); |
| |
| bool IsCaseSensitive() const; |
| |
| //======================================================================== |
| |
| private: |
| // General Structure: |
| |
| class SubString |
| { |
| sal_Int32 m_nBegin; |
| sal_Int32 m_nLength; |
| |
| public: |
| explicit inline SubString(sal_Int32 nTheBegin = -1, |
| sal_Int32 nTheLength = 0): |
| m_nBegin(nTheBegin), m_nLength(nTheLength) {} |
| |
| inline bool isPresent() const { return m_nBegin != -1; } |
| |
| inline bool isEmpty() const { return m_nLength == 0; } |
| |
| inline sal_Int32 getBegin() const { return m_nBegin; } |
| |
| inline sal_Int32 getLength() const { return m_nLength; } |
| |
| inline sal_Int32 getEnd() const { return m_nBegin + m_nLength; } |
| |
| inline sal_Int32 clear(); |
| |
| inline sal_Int32 set(rtl::OUStringBuffer & rString, |
| rtl::OUString const & rSubString, |
| sal_Int32 nTheBegin); |
| |
| inline sal_Int32 set(rtl::OUString & rString, |
| rtl::OUString const & rSubString); |
| |
| inline sal_Int32 set(rtl::OUStringBuffer & rString, |
| rtl::OUString const & rSubString); |
| |
| inline void operator +=(sal_Int32 nDelta); |
| |
| int compare(SubString const & rOther, |
| rtl::OUStringBuffer const & rThisString, |
| rtl::OUStringBuffer const & rOtherString) const; |
| }; |
| |
| rtl::OUStringBuffer m_aAbsURIRef; |
| SubString m_aScheme; |
| SubString m_aUser; |
| SubString m_aAuth; |
| SubString m_aHost; |
| SubString m_aPort; |
| SubString m_aPath; |
| SubString m_aQuery; |
| SubString m_aFragment; |
| INetProtocol m_eScheme; |
| INetProtocol m_eSmartScheme; |
| |
| TOOLS_DLLPRIVATE void setInvalid(); |
| |
| bool setAbsURIRef( |
| rtl::OUString const & rTheAbsURIRef, bool bOctets, |
| EncodeMechanism eMechanism, rtl_TextEncoding eCharset, bool bSmart, |
| FSysStyle eStyle); |
| |
| // Relative URLs: |
| |
| bool convertRelToAbs( |
| rtl::OUString const & rTheRelURIRef, bool bOctets, |
| INetURLObject & rTheAbsURIRef, bool & rWasAbsolute, |
| EncodeMechanism eMechanism, rtl_TextEncoding eCharset, |
| bool bIgnoreFragment, bool bSmart, bool bRelativeNonURIs, |
| FSysStyle eStyle) const; |
| |
| bool convertAbsToRel( |
| rtl::OUString const & rTheAbsURIRef, bool bOctets, |
| rtl::OUString & rTheRelURIRef, EncodeMechanism eEncodeMechanism, |
| DecodeMechanism eDecodeMechanism, rtl_TextEncoding eCharset, |
| FSysStyle eStyle) const; |
| |
| // External URLs: |
| |
| static bool convertIntToExt( |
| rtl::OUString const & rTheIntURIRef, bool bOctets, |
| rtl::OUString & rTheExtURIRef, DecodeMechanism eDecodeMechanism, |
| rtl_TextEncoding eCharset); |
| |
| static bool convertExtToInt( |
| rtl::OUString const & rTheExtURIRef, bool bOctets, |
| rtl::OUString & rTheIntURIRef, DecodeMechanism eDecodeMechanism, |
| rtl_TextEncoding eCharset); |
| |
| // Scheme: |
| |
| struct PrefixInfo; |
| |
| TOOLS_DLLPRIVATE static inline SchemeInfo const & getSchemeInfo( |
| INetProtocol eTheScheme); |
| |
| TOOLS_DLLPRIVATE inline SchemeInfo const & getSchemeInfo() const; |
| |
| TOOLS_DLLPRIVATE static PrefixInfo const * getPrefix( |
| sal_Unicode const *& rBegin, sal_Unicode const * pEnd); |
| |
| // Authority: |
| |
| TOOLS_DLLPRIVATE sal_Int32 getAuthorityBegin() const; |
| |
| TOOLS_DLLPRIVATE SubString getAuthority() const; |
| |
| // User Info: |
| |
| bool setUser( |
| rtl::OUString const & rTheUser, bool bOctets, |
| EncodeMechanism eMechanism, rtl_TextEncoding eCharset); |
| |
| bool clearPassword(); |
| |
| bool setPassword( |
| rtl::OUString const & rThePassword, bool bOctets, |
| EncodeMechanism eMechanism, rtl_TextEncoding eCharset); |
| |
| // Host and Port: |
| |
| TOOLS_DLLPRIVATE static bool parseHost( |
| sal_Unicode const *& rBegin, sal_Unicode const * pEnd, |
| rtl::OUString & rCanonic); |
| |
| TOOLS_DLLPRIVATE static bool parseHostOrNetBiosName( |
| sal_Unicode const * pBegin, sal_Unicode const * pEnd, bool bOctets, |
| EncodeMechanism eMechanism, rtl_TextEncoding eCharset, |
| bool bNetBiosName, rtl::OUStringBuffer* pCanonic); |
| |
| static rtl::OUString encodeHostPort( |
| rtl::OUString const & rTheHostPort, bool bOctets, |
| EncodeMechanism eMechanism, rtl_TextEncoding eCharset); |
| |
| bool setHost( |
| rtl::OUString const & rTheHost, bool bOctets, |
| EncodeMechanism eMechanism, rtl_TextEncoding eCharset); |
| |
| // Path: |
| |
| TOOLS_DLLPRIVATE static bool parsePath( |
| INetProtocol eScheme, sal_Unicode const ** pBegin, |
| sal_Unicode const * pEnd, bool bOctets, EncodeMechanism eMechanism, |
| rtl_TextEncoding eCharset, bool bSkippedInitialSlash, |
| sal_uInt32 nSegmentDelimiter, sal_uInt32 nAltSegmentDelimiter, |
| sal_uInt32 nQueryDelimiter, sal_uInt32 nFragmentDelimiter, |
| rtl::OUStringBuffer &rSynPath); |
| |
| bool setPath( |
| rtl::OUString const & rThePath, bool bOctets, |
| EncodeMechanism eMechanism, rtl_TextEncoding eCharset); |
| |
| // Hierarchical Path: |
| |
| TOOLS_DLLPRIVATE bool checkHierarchical() const; |
| |
| bool appendSegment( |
| rtl::OUString const & rTheSegment, bool bOctets, |
| EncodeMechanism eMechanism, rtl_TextEncoding eCharset); |
| |
| TOOLS_DLLPRIVATE SubString getSegment( |
| sal_Int32 nIndex, bool bIgnoreFinalSlash) const; |
| |
| bool insertName( |
| rtl::OUString const & rTheName, bool bOctets, bool bAppendFinalSlash, |
| sal_Int32 nIndex, bool bIgnoreFinalSlash, EncodeMechanism eMechanism, |
| rtl_TextEncoding eCharset); |
| |
| // Query: |
| |
| bool clearQuery(); |
| |
| bool setQuery( |
| rtl::OUString const & rTheQuery, bool bOctets, |
| EncodeMechanism eMechanism, rtl_TextEncoding eCharset); |
| |
| // Fragment: |
| |
| bool clearFragment(); |
| |
| bool setFragment( |
| rtl::OUString const & rTheMark, bool bOctets, |
| EncodeMechanism eMechanism, rtl_TextEncoding eCharset); |
| |
| // FTP URLs: |
| |
| enum FTPType { FTP_TYPE_NONE, FTP_TYPE_A, FTP_TYPE_I, FTP_TYPE_D }; |
| |
| TOOLS_DLLPRIVATE FTPType getFTPType() const; |
| |
| // FILE URLs: |
| |
| TOOLS_DLLPRIVATE bool hasDosVolume(FSysStyle eStyle) const; |
| |
| // IMAP URLs: |
| |
| TOOLS_DLLPRIVATE sal_uInt32 getIMAPUID() const; |
| |
| // Coding: |
| |
| static inline rtl::OUString extend(ByteString const & rOctets) |
| { |
| return rtl::OUString(rOctets.GetBuffer(), rOctets.Len(), |
| RTL_TEXTENCODING_ISO_8859_1); |
| } |
| |
| static inline sal_Char getEscapePrefix(INetProtocol eTheScheme) |
| { return eTheScheme == INET_PROT_VIM ? '=' : '%'; } |
| |
| inline sal_Char getEscapePrefix() const |
| { return getEscapePrefix(m_eScheme); } |
| |
| TOOLS_DLLPRIVATE static inline void appendEscape( |
| rtl::OUStringBuffer & rTheText, sal_Char cEscapePrefix, |
| sal_uInt32 nOctet); |
| |
| static rtl::OUString encodeText( |
| sal_Unicode const * pBegin, sal_Unicode const * pEnd, bool bOctets, |
| Part ePart, sal_Char cEscapePrefix, EncodeMechanism eMechanism, |
| rtl_TextEncoding eCharset, bool bKeepVisibleEscapes); |
| |
| static inline rtl::OUString encodeText( |
| rtl::OUString const & rTheText, bool bOctets, Part ePart, |
| sal_Char cEscapePrefix, EncodeMechanism eMechanism, |
| rtl_TextEncoding eCharset, bool bKeepVisibleEscapes); |
| |
| static rtl::OUString decode( |
| sal_Unicode const * pBegin, sal_Unicode const * pEnd, |
| sal_Char cEscapePrefix, DecodeMechanism, rtl_TextEncoding eCharset); |
| |
| inline rtl::OUString decode( |
| SubString const & rSubString, sal_Char cEscapePrefix, |
| DecodeMechanism eMechanism, rtl_TextEncoding eCharset) const; |
| |
| // Specialized helpers: |
| |
| TOOLS_DLLPRIVATE static bool scanIPv6reference( |
| sal_Unicode const *& rBegin, sal_Unicode const * pEnd); |
| }; |
| |
| // static |
| inline rtl::OUString INetURLObject::encodeText(rtl::OUString const & rTheText, |
| bool bOctets, Part ePart, |
| sal_Char cEscapePrefix, |
| EncodeMechanism eMechanism, |
| rtl_TextEncoding eCharset, |
| bool bKeepVisibleEscapes) |
| { |
| return encodeText(rTheText.getStr(), |
| rTheText.getStr() + rTheText.getLength(), bOctets, ePart, |
| cEscapePrefix, eMechanism, eCharset, |
| bKeepVisibleEscapes); |
| } |
| |
| inline rtl::OUString INetURLObject::decode(SubString const & rSubString, |
| sal_Char cEscapePrefix, |
| DecodeMechanism eMechanism, |
| rtl_TextEncoding eCharset) const |
| { |
| return rSubString.isPresent() ? |
| decode(m_aAbsURIRef.getStr() + rSubString.getBegin(), |
| m_aAbsURIRef.getStr() + rSubString.getEnd(), |
| cEscapePrefix, eMechanism, eCharset) : |
| rtl::OUString(); |
| } |
| |
| inline INetURLObject::INetURLObject(ByteString const & rTheAbsURIRef, |
| EncodeMechanism eMechanism, |
| rtl_TextEncoding eCharset): |
| m_eScheme(INET_PROT_NOT_VALID), m_eSmartScheme(INET_PROT_HTTP) |
| { |
| setAbsURIRef(extend(rTheAbsURIRef), true, eMechanism, eCharset, false, |
| FSysStyle(0)); |
| } |
| |
| inline INetURLObject::INetURLObject(rtl::OUString const & rTheAbsURIRef, |
| EncodeMechanism eMechanism, |
| rtl_TextEncoding eCharset): |
| m_eScheme(INET_PROT_NOT_VALID), m_eSmartScheme(INET_PROT_HTTP) |
| { |
| setAbsURIRef(rTheAbsURIRef, false, eMechanism, eCharset, false, |
| FSysStyle(0)); |
| } |
| |
| inline bool INetURLObject::SetURL(ByteString const & rTheAbsURIRef, |
| EncodeMechanism eMechanism, |
| rtl_TextEncoding eCharset) |
| { |
| return setAbsURIRef(extend(rTheAbsURIRef), true, eMechanism, eCharset, |
| false, FSysStyle(0)); |
| } |
| |
| inline bool INetURLObject::SetURL(rtl::OUString const & rTheAbsURIRef, |
| EncodeMechanism eMechanism, |
| rtl_TextEncoding eCharset) |
| { |
| return setAbsURIRef(rTheAbsURIRef, false, eMechanism, eCharset, false, |
| FSysStyle(0)); |
| } |
| |
| inline INetURLObject::INetURLObject(rtl::OUString const & rTheAbsURIRef, |
| INetProtocol eTheSmartScheme, |
| EncodeMechanism eMechanism, |
| rtl_TextEncoding eCharset, |
| FSysStyle eStyle): |
| m_eScheme(INET_PROT_NOT_VALID), m_eSmartScheme(eTheSmartScheme) |
| { |
| setAbsURIRef(rTheAbsURIRef, false, eMechanism, eCharset, true, eStyle); |
| } |
| |
| inline bool INetURLObject::SetSmartURL(ByteString const & rTheAbsURIRef, |
| EncodeMechanism eMechanism, |
| rtl_TextEncoding eCharset, |
| FSysStyle eStyle) |
| { |
| return setAbsURIRef(extend(rTheAbsURIRef), true, eMechanism, eCharset, |
| true, eStyle); |
| } |
| |
| inline bool INetURLObject::SetSmartURL(rtl::OUString const & rTheAbsURIRef, |
| EncodeMechanism eMechanism, |
| rtl_TextEncoding eCharset, |
| FSysStyle eStyle) |
| { |
| return setAbsURIRef(rTheAbsURIRef, false, eMechanism, eCharset, true, |
| eStyle); |
| } |
| |
| inline INetURLObject |
| INetURLObject::smartRel2Abs(ByteString const & rTheRelURIRef, |
| bool & rWasAbsolute, |
| bool bIgnoreFragment, |
| EncodeMechanism eMechanism, |
| rtl_TextEncoding eCharset, |
| bool bRelativeNonURIs, |
| FSysStyle eStyle) const |
| { |
| INetURLObject aTheAbsURIRef; |
| convertRelToAbs(extend(rTheRelURIRef), true, aTheAbsURIRef, rWasAbsolute, |
| eMechanism, eCharset, bIgnoreFragment, true, |
| bRelativeNonURIs, eStyle); |
| return aTheAbsURIRef; |
| } |
| |
| inline INetURLObject |
| INetURLObject::smartRel2Abs(rtl::OUString const & rTheRelURIRef, |
| bool & rWasAbsolute, |
| bool bIgnoreFragment, |
| EncodeMechanism eMechanism, |
| rtl_TextEncoding eCharset, |
| bool bRelativeNonURIs, |
| FSysStyle eStyle) const |
| { |
| INetURLObject aTheAbsURIRef; |
| convertRelToAbs(rTheRelURIRef, false, aTheAbsURIRef, rWasAbsolute, |
| eMechanism, eCharset, bIgnoreFragment, true, |
| bRelativeNonURIs, eStyle); |
| return aTheAbsURIRef; |
| } |
| |
| inline bool INetURLObject::GetNewAbsURL(ByteString const & rTheRelURIRef, |
| INetURLObject * pTheAbsURIRef, |
| EncodeMechanism eMechanism, |
| rtl_TextEncoding eCharset, |
| FSysStyle eStyle, bool bIgnoreFragment) |
| const |
| { |
| INetURLObject aTheAbsURIRef; |
| bool bWasAbsolute; |
| if (!convertRelToAbs(extend(rTheRelURIRef), true, aTheAbsURIRef, |
| bWasAbsolute, eMechanism, eCharset, bIgnoreFragment, |
| false, false, eStyle)) |
| return false; |
| if (pTheAbsURIRef) |
| *pTheAbsURIRef = aTheAbsURIRef; |
| return true; |
| } |
| |
| inline bool INetURLObject::GetNewAbsURL(rtl::OUString const & rTheRelURIRef, |
| INetURLObject * pTheAbsURIRef, |
| EncodeMechanism eMechanism, |
| rtl_TextEncoding eCharset, |
| FSysStyle eStyle, bool bIgnoreFragment) |
| const |
| { |
| INetURLObject aTheAbsURIRef; |
| bool bWasAbsolute; |
| if (!convertRelToAbs(rTheRelURIRef, false, aTheAbsURIRef, bWasAbsolute, |
| eMechanism, eCharset, bIgnoreFragment, false, false, |
| eStyle)) |
| return false; |
| if (pTheAbsURIRef) |
| *pTheAbsURIRef = aTheAbsURIRef; |
| return true; |
| } |
| |
| // static |
| inline rtl::OUString INetURLObject::GetRelURL(ByteString const & rTheBaseURIRef, |
| ByteString const & rTheAbsURIRef, |
| EncodeMechanism eEncodeMechanism, |
| DecodeMechanism eDecodeMechanism, |
| rtl_TextEncoding eCharset, |
| FSysStyle eStyle) |
| { |
| rtl::OUString aTheRelURIRef; |
| INetURLObject(rTheBaseURIRef, eEncodeMechanism, eCharset). |
| convertAbsToRel(extend(rTheAbsURIRef), true, aTheRelURIRef, |
| eEncodeMechanism, eDecodeMechanism, eCharset, eStyle); |
| return aTheRelURIRef; |
| } |
| |
| // static |
| inline rtl::OUString INetURLObject::GetRelURL(rtl::OUString const & rTheBaseURIRef, |
| rtl::OUString const & rTheAbsURIRef, |
| EncodeMechanism eEncodeMechanism, |
| DecodeMechanism eDecodeMechanism, |
| rtl_TextEncoding eCharset, |
| FSysStyle eStyle) |
| { |
| rtl::OUString aTheRelURIRef; |
| INetURLObject(rTheBaseURIRef, eEncodeMechanism, eCharset). |
| convertAbsToRel(rTheAbsURIRef, false, aTheRelURIRef, eEncodeMechanism, |
| eDecodeMechanism, eCharset, eStyle); |
| return aTheRelURIRef; |
| } |
| |
| // static |
| inline bool INetURLObject::translateToExternal(ByteString const & |
| rTheIntURIRef, |
| rtl::OUString & rTheExtURIRef, |
| DecodeMechanism |
| eDecodeMechanism, |
| rtl_TextEncoding eCharset) |
| { |
| rtl::OUString aTheExtURIRef; |
| bool bRet = convertIntToExt(extend(rTheIntURIRef), true, aTheExtURIRef, |
| eDecodeMechanism, eCharset); |
| rTheExtURIRef = aTheExtURIRef; |
| return bRet; |
| } |
| |
| // static |
| inline bool INetURLObject::translateToExternal(rtl::OUString const & |
| rTheIntURIRef, |
| rtl::OUString & rTheExtURIRef, |
| DecodeMechanism |
| eDecodeMechanism, |
| rtl_TextEncoding eCharset) |
| { |
| return convertIntToExt(rTheIntURIRef, false, rTheExtURIRef, |
| eDecodeMechanism, eCharset); |
| } |
| |
| // static |
| inline bool INetURLObject::translateToInternal(ByteString const & |
| rTheExtURIRef, |
| rtl::OUString & rTheIntURIRef, |
| DecodeMechanism |
| eDecodeMechanism, |
| rtl_TextEncoding eCharset) |
| { |
| rtl::OUString aTheIntURIRef; |
| bool bRet = convertExtToInt(extend(rTheExtURIRef), true, aTheIntURIRef, |
| eDecodeMechanism, eCharset); |
| rTheIntURIRef = aTheIntURIRef; |
| return bRet; |
| } |
| |
| // static |
| inline bool INetURLObject::translateToInternal(rtl::OUString const & |
| rTheExtURIRef, |
| rtl::OUString & rTheIntURIRef, |
| DecodeMechanism |
| eDecodeMechanism, |
| rtl_TextEncoding eCharset) |
| { |
| return convertExtToInt(rTheExtURIRef, false, rTheIntURIRef, |
| eDecodeMechanism, eCharset); |
| } |
| |
| inline bool INetURLObject::SetPass(ByteString const & rThePassword, |
| EncodeMechanism eMechanism, |
| rtl_TextEncoding eCharset) |
| { |
| return rThePassword.Len() == 0 ? |
| clearPassword() : |
| setPassword(extend(rThePassword), true, eMechanism, eCharset); |
| } |
| |
| inline bool INetURLObject::SetPass(rtl::OUString const & rThePassword, |
| EncodeMechanism eMechanism, |
| rtl_TextEncoding eCharset) |
| { |
| return rThePassword.getLength() == 0 ? |
| clearPassword() : |
| setPassword(rThePassword, false, eMechanism, eCharset); |
| } |
| |
| inline bool INetURLObject::SetUserAndPass(ByteString const & rTheUser, |
| ByteString const & rThePassword, |
| EncodeMechanism eMechanism, |
| rtl_TextEncoding eCharset) |
| { |
| return setUser(extend(rTheUser), true, eMechanism, eCharset) |
| && (rThePassword.Len() == 0 ? |
| clearPassword() : |
| setPassword(extend(rThePassword), true, eMechanism, |
| eCharset)); |
| } |
| |
| inline bool INetURLObject::SetUserAndPass(rtl::OUString const & rTheUser, |
| rtl::OUString const & rThePassword, |
| EncodeMechanism eMechanism, |
| rtl_TextEncoding eCharset) |
| { |
| return setUser(rTheUser, false, eMechanism, eCharset) |
| && (rThePassword.getLength() == 0 ? |
| clearPassword() : |
| setPassword(rThePassword, false, eMechanism, eCharset)); |
| } |
| |
| // static |
| inline rtl::OUString INetURLObject::encodeHostPort(ByteString const & |
| rTheHostPort, |
| EncodeMechanism eMechanism, |
| rtl_TextEncoding eCharset) |
| { |
| return encodeHostPort(extend(rTheHostPort), true, eMechanism, eCharset); |
| } |
| |
| inline bool INetURLObject::insertName(rtl::OUString const & rTheName, |
| bool bAppendFinalSlash, |
| sal_Int32 nIndex, |
| bool bIgnoreFinalSlash, |
| EncodeMechanism eMechanism, |
| rtl_TextEncoding eCharset) |
| { |
| return insertName(rTheName, false, bAppendFinalSlash, nIndex, |
| bIgnoreFinalSlash, eMechanism, eCharset); |
| } |
| |
| inline bool INetURLObject::SetParam(ByteString const & rTheQuery, |
| EncodeMechanism eMechanism, |
| rtl_TextEncoding eCharset) |
| { |
| return rTheQuery.Len() == 0 ? |
| clearQuery() : |
| setQuery(extend(rTheQuery), true, eMechanism, eCharset); |
| } |
| |
| inline bool INetURLObject::SetParam(rtl::OUString const & rTheQuery, |
| EncodeMechanism eMechanism, |
| rtl_TextEncoding eCharset) |
| { |
| return rTheQuery.getLength() == 0 ? |
| clearQuery() : |
| setQuery(rTheQuery, false, eMechanism, eCharset); |
| } |
| |
| inline bool INetURLObject::SetMark(ByteString const & rTheFragment, |
| EncodeMechanism eMechanism, |
| rtl_TextEncoding eCharset) |
| { |
| return rTheFragment.Len() == 0 ? |
| clearFragment() : |
| setFragment(extend(rTheFragment), true, eMechanism, eCharset); |
| } |
| |
| inline bool INetURLObject::SetMark(rtl::OUString const & rTheFragment, |
| EncodeMechanism eMechanism, |
| rtl_TextEncoding eCharset) |
| { |
| return rTheFragment.getLength() == 0 ? |
| clearFragment() : |
| setFragment(rTheFragment, false, eMechanism, eCharset); |
| } |
| |
| inline INetURLObject::INetURLObject(rtl::OUString const & rFSysPath, |
| FSysStyle eStyle): |
| m_eScheme(INET_PROT_NOT_VALID), m_eSmartScheme(INET_PROT_HTTP) |
| { |
| setFSysPath(rFSysPath, eStyle); |
| } |
| |
| // static |
| inline rtl::OUString INetURLObject::encode(ByteString const & rText, Part ePart, |
| sal_Char cEscapePrefix, |
| EncodeMechanism eMechanism, |
| rtl_TextEncoding eCharset) |
| { |
| return encodeText(extend(rText), true, ePart, cEscapePrefix, eMechanism, |
| eCharset, false); |
| } |
| |
| // static |
| inline rtl::OUString INetURLObject::encode(rtl::OUString const & rText, Part ePart, |
| sal_Char cEscapePrefix, |
| EncodeMechanism eMechanism, |
| rtl_TextEncoding eCharset) |
| { |
| return encodeText(rText, false, ePart, cEscapePrefix, eMechanism, |
| eCharset, false); |
| } |
| |
| // static |
| inline rtl::OUString INetURLObject::decode(rtl::OUString const & rText, |
| sal_Char cEscapePrefix, |
| DecodeMechanism eMechanism, |
| rtl_TextEncoding eCharset) |
| { |
| return decode(rText.getStr(), rText.getStr() + rText.getLength(), |
| cEscapePrefix, eMechanism, eCharset); |
| } |
| |
| inline rtl::OUString INetURLObject::decode(rtl::OUStringBuffer const & rText, |
| sal_Char cEscapePrefix, |
| DecodeMechanism eMechanism, |
| rtl_TextEncoding eCharset) |
| { |
| return decode(rText.getStr(), rText.getStr() + rText.getLength(), |
| cEscapePrefix, eMechanism, eCharset); |
| } |
| |
| #endif // _URLOBJ_HXX |