diff options
author | RĂ¼diger Timm <rt@openoffice.org> | 2005-01-11 12:14:17 +0000 |
---|---|---|
committer | RĂ¼diger Timm <rt@openoffice.org> | 2005-01-11 12:14:17 +0000 |
commit | 15f19fa7aee24a541fb6cfaf5206f9ee1546633f (patch) | |
tree | c190533b06a55f990c239dda3cd7187a9d147bf4 /tools | |
parent | c86bac3ab604944f2781b7a57d5c32db5df55662 (diff) |
INTEGRATION: CWS sb19 (1.44.4); FILE MERGED
2004/12/21 12:34:12 sb 1.44.4.7: #i10000# Cleaned up merge conflict.
2004/12/21 09:31:53 sb 1.44.4.6: RESYNC: (1.49-1.51); FILE MERGED
2004/12/09 03:08:04 sb 1.44.4.5: RESYNC: (1.47-1.49); FILE MERGED
2004/10/25 09:16:16 sb 1.44.4.4: #108948# Added assertions to detect cases where a relative input could not be made absolute because the given base URL is broken (most probably because it is empty).
2004/10/20 08:36:21 sb 1.44.4.3: #108948# Added INetURLObject::GetAbsURL as an easy replacement for INetURLObject::RelToAbs.
2004/10/11 19:38:55 sb 1.44.4.2: RESYNC: (1.45-1.47); FILE MERGED
2004/05/26 11:43:56 sb 1.44.4.1: #108948# Removed obsolete functionality from INetURLObject that relied on a static base URL.
Diffstat (limited to 'tools')
-rw-r--r-- | tools/source/fsys/urlobj.cxx | 241 |
1 files changed, 38 insertions, 203 deletions
diff --git a/tools/source/fsys/urlobj.cxx b/tools/source/fsys/urlobj.cxx index cba0e2cbe393..f30adcd7e49a 100644 --- a/tools/source/fsys/urlobj.cxx +++ b/tools/source/fsys/urlobj.cxx @@ -2,9 +2,9 @@ * * $RCSfile: urlobj.cxx,v $ * - * $Revision: 1.51 $ + * $Revision: 1.52 $ * - * last change: $Author: hr $ $Date: 2004-12-14 11:32:42 $ + * last change: $Author: rt $ $Date: 2005-01-11 13:14:17 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -91,9 +91,6 @@ #ifndef _RTL_USTRING_HXX_ #include "rtl/ustring.hxx" #endif -#ifndef INCLUDED_RTL_INSTANCE_HXX -#include "rtl/instance.hxx" -#endif #ifndef _SAL_TYPES_H_ #include "sal/types.h" #endif @@ -1474,9 +1471,6 @@ bool INetURLObject::setAbsURIRef(rtl::OUString const & rTheAbsURIRef, } //============================================================================ -namespace { struct BaseURIRef : public rtl::Static< INetURLObject, BaseURIRef > {}; } - -//============================================================================ bool INetURLObject::convertRelToAbs(rtl::OUString const & rTheRelURIRef, bool bOctets, INetURLObject & rTheAbsURIRef, @@ -1705,6 +1699,10 @@ bool INetURLObject::convertRelToAbs(rtl::OUString const & rTheRelURIRef, { if (!getSchemeInfo().m_bHierarchical) { + // Detect cases where a relative input could not be made absolute + // because the given base URL is broken (most probably because it is + // empty): + OSL_ASSERT(!HasError()); rWasAbsolute = false; return false; } @@ -1827,6 +1825,10 @@ bool INetURLObject::convertRelToAbs(rtl::OUString const & rTheRelURIRef, INetURLObject aNewURI(aSynAbsURIRef.makeStringAndClear()); if (aNewURI.HasError()) { + // Detect cases where a relative input could not be made absolute + // because the given base URL is broken (most probably because it is + // empty): + OSL_ASSERT(!HasError()); rWasAbsolute = false; return false; } @@ -3728,6 +3730,34 @@ bool INetURLObject::ConcatData(INetProtocol eTheScheme, } //============================================================================ +// static +rtl::OUString INetURLObject::GetAbsURL(rtl::OUString const & rTheBaseURIRef, + rtl::OUString const & rTheRelURIRef, + bool bIgnoreFragment, + EncodeMechanism eEncodeMechanism, + DecodeMechanism eDecodeMechanism, + rtl_TextEncoding eCharset, + FSysStyle eStyle) +{ + // Backwards compatibility: + if (rTheRelURIRef.getLength() == 0 || rTheRelURIRef[0] == '#') + return rTheRelURIRef; + + INetURLObject aTheAbsURIRef; + bool bWasAbsolute; + return INetURLObject(rTheBaseURIRef, eEncodeMechanism, eCharset). + convertRelToAbs(rTheRelURIRef, false, aTheAbsURIRef, + bWasAbsolute, eEncodeMechanism, + eCharset, bIgnoreFragment, false, + false, eStyle) + || eEncodeMechanism != WAS_ENCODED + || eDecodeMechanism != DECODE_TO_IURI + || eCharset != RTL_TEXTENCODING_UTF8 ? + aTheAbsURIRef.GetMainURL(eDecodeMechanism, eCharset) : + rTheRelURIRef; +} + +//============================================================================ rtl::OUString INetURLObject::getExternalURL(DecodeMechanism eMechanism, rtl_TextEncoding eCharset) const { @@ -5317,201 +5347,6 @@ bool INetURLObject::scanIPv6reference(sal_Unicode const *& rBegin, } //============================================================================ -// static -rtl::OUString INetURLObject::RelToAbs(ByteString const & rTheRelURIRef, - bool bIgnoreFragment, - EncodeMechanism eEncodeMechanism, - DecodeMechanism eDecodeMechanism, - rtl_TextEncoding eCharset, - FSysStyle eStyle) -{ - // Backwards compatibility: - if (rTheRelURIRef.Len() == 0 || rTheRelURIRef.GetChar(0) == '#') - return extend(rTheRelURIRef); - - INetURLObject aTheAbsURIRef; - bool bWasAbsolute; - BaseURIRef::get().convertRelToAbs(extend(rTheRelURIRef), true, aTheAbsURIRef, - bWasAbsolute, eEncodeMechanism, eCharset, - bIgnoreFragment, false, false, eStyle); - return aTheAbsURIRef.GetMainURL(eDecodeMechanism, eCharset); -} - -//============================================================================ -// static -rtl::OUString INetURLObject::RelToAbs(rtl::OUString const & rTheRelURIRef, - bool bIgnoreFragment, - EncodeMechanism eEncodeMechanism, - DecodeMechanism eDecodeMechanism, - rtl_TextEncoding eCharset, - FSysStyle eStyle) -{ - // Backwards compatibility: - if (rTheRelURIRef.getLength() == 0 || rTheRelURIRef.getStr()[0] == '#') - return rTheRelURIRef; - - INetURLObject aTheAbsURIRef; - bool bWasAbsolute; - return BaseURIRef::get().convertRelToAbs(rTheRelURIRef, false, - aTheAbsURIRef, bWasAbsolute, - eEncodeMechanism, eCharset, - bIgnoreFragment, false, false, eStyle) - || eEncodeMechanism != WAS_ENCODED - || eDecodeMechanism != DECODE_TO_IURI - || eCharset != RTL_TEXTENCODING_UTF8 ? - aTheAbsURIRef.GetMainURL(eDecodeMechanism, eCharset) : - rTheRelURIRef; -} - -// #88865# a temporary hack, to be removed together with -// INetURLObject::AbsToRel - -#include <ucbhelper/content.hxx> - -static star::uno::Any GetCasePreservedURL(const INetURLObject& aObj) -{ - DBG_ASSERT( aObj.GetProtocol() != INET_PROT_NOT_VALID, "Invalid URL!" ); - - if(aObj.GetProtocol() == INET_PROT_FILE ) - { - try - { - star::uno::Any aVoidArgument; - ucb::Content aCnt( - aObj.GetMainURL(INetURLObject::NO_DECODE), - star::uno::Reference< - star::ucb::XCommandEnvironment > () ); - - return aCnt.executeCommand( - rtl::OUString( - RTL_CONSTASCII_USTRINGPARAM("getCasePreservingURL")), - aVoidArgument); - } - catch( star::uno::Exception& ) - { - DBG_WARNING( "Any other exception" ); - } - } - - return star::uno::Any(); -} - - - -//============================================================================ -// static -rtl::OUString INetURLObject::AbsToRel(ByteString const & rTheAbsURIRef, - EncodeMechanism eEncodeMechanism, - DecodeMechanism eDecodeMechanism, - rtl_TextEncoding eCharset, - FSysStyle eStyle) -{ - rtl::OUString aTheRelURIRef; - const INetURLObject& rINetURLObject = BaseURIRef::get(); - star::uno::Any aAny = GetCasePreservedURL(rINetURLObject); - - rtl::OUString aBaseURL; - sal_Bool success = (aAny >>= aBaseURL); - - if(success) - { - INetURLObject aAbsURIRef(rTheAbsURIRef,eEncodeMechanism,eCharset); - - star::uno::Any aAny = - GetCasePreservedURL(aAbsURIRef); - rtl::OUString aAbsURL; - success = (aAny >>= aAbsURL); - if(success) - INetURLObject(aBaseURL).convertAbsToRel( - aAbsURL,false,aTheRelURIRef, - WAS_ENCODED,eDecodeMechanism, - RTL_TEXTENCODING_UTF8,eStyle); - else - INetURLObject(aBaseURL).convertAbsToRel( - extend(rTheAbsURIRef), true, aTheRelURIRef, - eEncodeMechanism, eDecodeMechanism, - eCharset, eStyle); - } - else - rINetURLObject.convertAbsToRel( - extend(rTheAbsURIRef), true, aTheRelURIRef, - eEncodeMechanism, eDecodeMechanism, - eCharset, eStyle); - - return aTheRelURIRef; -} - -//============================================================================ -// static -rtl::OUString INetURLObject::AbsToRel(rtl::OUString const & rTheAbsURIRef, - EncodeMechanism eEncodeMechanism, - DecodeMechanism eDecodeMechanism, - rtl_TextEncoding eCharset, - FSysStyle eStyle) -{ - rtl::OUString aTheRelURIRef; - - const INetURLObject& rINetURLObject = BaseURIRef::get(); - star::uno::Any aAny = GetCasePreservedURL(rINetURLObject); - - rtl::OUString aBaseURL; - sal_Bool success = (aAny >>= aBaseURL); - - if(success) - { - INetURLObject aAbsURIRef(rTheAbsURIRef,eEncodeMechanism,eCharset); - - star::uno::Any aAny = - GetCasePreservedURL(aAbsURIRef); - rtl::OUString aAbsURL; - success = (aAny >>= aAbsURL); - if(success) - INetURLObject(aBaseURL).convertAbsToRel( - aAbsURL,false,aTheRelURIRef, - WAS_ENCODED,eDecodeMechanism, - RTL_TEXTENCODING_UTF8,eStyle); - else - INetURLObject(aBaseURL).convertAbsToRel( - rTheAbsURIRef, false, aTheRelURIRef, - eEncodeMechanism, eDecodeMechanism, - eCharset, eStyle); - } - else - rINetURLObject.convertAbsToRel( - rTheAbsURIRef, false, aTheRelURIRef, - eEncodeMechanism, eDecodeMechanism, - eCharset, eStyle); - - return aTheRelURIRef; -} - -//============================================================================ -// static -bool INetURLObject::SetBaseURL(ByteString const & rTheBaseURIRef, - EncodeMechanism eMechanism, - rtl_TextEncoding eCharset) -{ - return BaseURIRef::get().SetURL(rTheBaseURIRef, eMechanism, eCharset); -} - -//============================================================================ -// static -bool INetURLObject::SetBaseURL(rtl::OUString const & rTheBaseURIRef, - EncodeMechanism eMechanism, - rtl_TextEncoding eCharset) -{ - return BaseURIRef::get().SetURL(rTheBaseURIRef, eMechanism, eCharset); -} - -//============================================================================ -// static -rtl::OUString INetURLObject::GetBaseURL(DecodeMechanism eMechanism, - rtl_TextEncoding eCharset) -{ - return BaseURIRef::get().GetMainURL(eMechanism, eCharset); -} - -//============================================================================ rtl::OUString INetURLObject::GetPartBeforeLastName(DecodeMechanism eMechanism, rtl_TextEncoding eCharset) const |