1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
|
/*************************************************************************
*
* $RCSfile: urihelper.hxx,v $
*
* $Revision: 1.3 $
*
* last change: $Author: rt $ $Date: 2005-01-11 13:10:57 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
*
* - GNU Lesser General Public License Version 2.1
* - Sun Industry Standards Source License Version 1.1
*
* Sun Microsystems Inc., October, 2000
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2000 by Sun Microsystems, Inc.
* 901 San Antonio Road, Palo Alto, CA 94303, USA
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1, as published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*
*
* Sun Industry Standards Source License Version 1.1
* =================================================
* The contents of this file are subject to the Sun Industry Standards
* Source License Version 1.1 (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.openoffice.org/license.html.
*
* Software provided under this License is provided on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
* See the License for the specific provisions governing your rights and
* obligations concerning the Software.
*
* The Initial Developer of the Original Code is: Sun Microsystems, Inc.
*
* Copyright: 2000 by Sun Microsystems, Inc.
*
* All Rights Reserved.
*
* Contributor(s): _______________________________________
*
*
************************************************************************/
#ifndef SVTOOLS_URIHELPER_HXX
#define SVTOOLS_URIHELPER_HXX
#ifndef _COM_SUN_STAR_UNO_REFERENCE_HXX_
#include "com/sun/star/uno/Reference.hxx"
#endif
#ifndef _COM_SUN_STAR_UNO_RUNTIMEEXCEPTION_HPP_
#include <com/sun/star/uno/RuntimeException.hpp>
#endif
#ifndef _RTL_TEXTENC_H
#include <rtl/textenc.h>
#endif
#ifndef _LINK_HXX
#include <tools/link.hxx>
#endif
#ifndef _SOLAR_H
#include <tools/solar.h>
#endif
#ifndef _URLOBJ_HXX
#include <tools/urlobj.hxx>
#endif
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 {
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);
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);
//============================================================================
void SetMaybeFileHdl(Link const & rTheMaybeFileHdl);
//============================================================================
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
*/
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.
*/
rtl::OUString simpleNormalizedMakeRelative(
rtl::OUString const & baseUriReference, rtl::OUString const & uriReference);
//============================================================================
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.
*/
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.
*/
INetURLObject::FSysStyle queryFSysStyle(UniString const & rFileUrl,
bool bAddConvenienceStyles = true)
throw (com::sun::star::uno::RuntimeException);
}
#endif // SVTOOLS_URIHELPER_HXX
|