blob: 3c816b8858e008b33976d2ff6514cfe78cab43d2 [file] [log] [blame]
/**************************************************************
*
* 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 SVTOOLS_URIHELPER_HXX
#define SVTOOLS_URIHELPER_HXX
#include "svl/svldllapi.h"
#include "com/sun/star/uno/Reference.hxx"
#include <com/sun/star/uno/RuntimeException.hpp>
#include <rtl/textenc.h>
#include <tools/link.hxx>
#include <tools/solar.h>
#include <tools/urlobj.hxx>
namespace com { namespace sun { namespace star {
namespace uno { class XComponentContext; }
namespace uri { class XUriReference; }
} } }
namespace rtl { class OUString; }
class ByteString;
class CharClass;
class UniString;
//============================================================================
namespace URIHelper {
/**
@ATT
Calling this function with defaulted arguments rMaybeFileHdl = Link() and
bCheckFileExists = true often leads to results that are not intended:
Whenever the given rTheBaseURIRef is a file URL, the given rTheRelURIRef is
relative, and rTheRelURIRef could also be smart-parsed as a non-file URL
(e.g., the relative URL "foo/bar" can be smart-parsed as "http://foo/bar"),
then SmartRel2Abs called with rMaybeFileHdl = Link() and bCheckFileExists =
true returns the non-file URL interpretation. To avoid this, either pass
some non-null rMaybeFileHdl if you want to check generated file URLs for
existence (see URIHelper::GetMaybeFileHdl), or use bCheckFileExists = false
if you want to generate file URLs without checking for their existence.
*/
SVL_DLLPUBLIC UniString
SmartRel2Abs(INetURLObject const & rTheBaseURIRef,
ByteString const & rTheRelURIRef,
Link const & rMaybeFileHdl = Link(),
bool bCheckFileExists = true,
bool bIgnoreFragment = false,
INetURLObject::EncodeMechanism eEncodeMechanism
= INetURLObject::WAS_ENCODED,
INetURLObject::DecodeMechanism eDecodeMechanism
= INetURLObject::DECODE_TO_IURI,
rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8,
bool bRelativeNonURIs = false,
INetURLObject::FSysStyle eStyle = INetURLObject::FSYS_DETECT);
/**
@ATT
Calling this function with defaulted arguments rMaybeFileHdl = Link() and
bCheckFileExists = true often leads to results that are not intended:
Whenever the given rTheBaseURIRef is a file URL, the given rTheRelURIRef is
relative, and rTheRelURIRef could also be smart-parsed as a non-file URL
(e.g., the relative URL "foo/bar" can be smart-parsed as "http://foo/bar"),
then SmartRel2Abs called with rMaybeFileHdl = Link() and bCheckFileExists =
true returns the non-file URL interpretation. To avoid this, either pass
some non-null rMaybeFileHdl if you want to check generated file URLs for
existence (see URIHelper::GetMaybeFileHdl), or use bCheckFileExists = false
if you want to generate file URLs without checking for their existence.
*/
SVL_DLLPUBLIC UniString
SmartRel2Abs(INetURLObject const & rTheBaseURIRef,
UniString const & rTheRelURIRef,
Link const & rMaybeFileHdl = Link(),
bool bCheckFileExists = true,
bool bIgnoreFragment = false,
INetURLObject::EncodeMechanism eEncodeMechanism
= INetURLObject::WAS_ENCODED,
INetURLObject::DecodeMechanism eDecodeMechanism
= INetURLObject::DECODE_TO_IURI,
rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8,
bool bRelativeNonURIs = false,
INetURLObject::FSysStyle eStyle = INetURLObject::FSYS_DETECT);
//============================================================================
SVL_DLLPUBLIC void SetMaybeFileHdl(Link const & rTheMaybeFileHdl);
//============================================================================
SVL_DLLPUBLIC Link GetMaybeFileHdl();
/**
Converts a URI reference to a relative one, ignoring certain differences (for
example, treating file URLs for case-ignoring file systems
case-insensitively).
@param context a component context; must not be null
@param baseUriReference a base URI reference
@param uriReference a URI reference
@return a URI reference representing the given uriReference relative to the
given baseUriReference; if the given baseUriReference is not an absolute,
hierarchical URI reference, or the given uriReference is not a valid URI
reference, null is returned
@exception std::bad_alloc if an out-of-memory condition occurs
@exception com::sun::star::uno::RuntimeException if any error occurs
*/
SVL_DLLPUBLIC com::sun::star::uno::Reference< com::sun::star::uri::XUriReference >
normalizedMakeRelative(
com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext >
const & context,
rtl::OUString const & baseUriReference, rtl::OUString const & uriReference);
/**
A variant of normalizedMakeRelative with a simplified interface.
Internally calls normalizedMakeRelative with the default component context.
@param baseUriReference a base URI reference, passed to
normalizedMakeRelative
@param uriReference a URI reference, passed to normalizedMakeRelative
@return if the XUriReference returnd by normalizedMakeRelative is empty,
uriReference is returned unmodified; otherwise, the result of calling
XUriReference::getUriReference on the XUriReference returnd by
normalizedMakeRelative is returned
@exception std::bad_alloc if an out-of-memory condition occurs
@exception com::sun::star::uno::RuntimeException if any error occurs
@deprecated
No code should rely on the default component context.
*/
SVL_DLLPUBLIC rtl::OUString simpleNormalizedMakeRelative(
rtl::OUString const & baseUriReference, rtl::OUString const & uriReference);
//============================================================================
SVL_DLLPUBLIC UniString
FindFirstURLInText(UniString const & rText,
xub_StrLen & rBegin,
xub_StrLen & rEnd,
CharClass const & rCharClass,
INetURLObject::EncodeMechanism eMechanism
= INetURLObject::WAS_ENCODED,
rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8,
INetURLObject::FSysStyle eStyle
= INetURLObject::FSYS_DETECT);
//============================================================================
/** Remove any password component from both absolute and relative URLs.
@ATT The current implementation will not remove a password from a
relative URL that has an authority component (e.g., the password is not
removed from the relative ftp URL <//user:password@domain/path>). But
since our functions to translate between absolute and relative URLs never
produce relative URLs with authority components, this is no real problem.
@ATT For relative URLs (or anything not recognized as an absolute URI),
the current implementation will return the input unmodified, not applying
any translations implied by the encode/decode parameters.
@param rURI An absolute or relative URI reference.
@param eEncodeMechanism See the general discussion for INetURLObject set-
methods.
@param eDecodeMechanism See the general discussion for INetURLObject get-
methods.
@param eCharset See the general discussion for INetURLObject get- and
set-methods.
@return The input URI with any password component removed.
*/
SVL_DLLPUBLIC UniString
removePassword(UniString const & rURI,
INetURLObject::EncodeMechanism eEncodeMechanism
= INetURLObject::WAS_ENCODED,
INetURLObject::DecodeMechanism eDecodeMechanism
= INetURLObject::DECODE_TO_IURI,
rtl_TextEncoding eCharset = RTL_TEXTENCODING_UTF8);
//============================================================================
/** Query the notational conventions used in the file system provided by some
file content provider.
@param rFileUrl This file URL determines which file content provider is
used to query the desired information. (The UCB's usual mapping from URLs
to content providers is used.)
@param bAddConvenienceStyles If true, the return value contains not only
the style bit corresponding to the queried content provider's conventions,
but may also contain additional style bits that make using this function
more convenient in certain situations. Currently, the effect is that
FSYS_UNX is extended with FSYS_VOS, and both FSYS_DOS and FSYS_MAC are
extended with FSYS_VOS and FSYS_UNX (i.e., the---unambiguous---detection
of VOS style and Unix style file system paths is always enabled); also, in
case the content provider's conventions cannot be determined, FSYS_DETECT
is returned instead of FSysStyle(0).
@return The style bit corresponding to the queried content provider's
conventions, or FSysStyle(0) if these cannot be determined.
*/
SVL_DLLPUBLIC INetURLObject::FSysStyle queryFSysStyle(UniString const & rFileUrl,
bool bAddConvenienceStyles = true)
throw (com::sun::star::uno::RuntimeException);
}
#endif // SVTOOLS_URIHELPER_HXX