blob: f0b59780e20cbd9f0583e65649d951054e44fe8b (
plain)
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
|
/*
* Authors:
* MenTaLguY <mental@rydia.net>
* Jon A. Cruz <jon@joncruz.org>
*
* Copyright (C) 2003 MenTaLguY
*
* Released under GNU GPL, read the file 'COPYING' for more information
*/
#ifndef INKSCAPE_URI_H
#define INKSCAPE_URI_H
#include <exception>
#include <libxml/uri.h>
#include <string>
namespace Inkscape {
/**
* Represents an URI as per RFC 2396.
*/
class URI {
public:
/* Blank constructor */
URI();
/**
* Copy constructor.
*/
URI(URI const &uri);
/**
* Constructor from a C-style ASCII string.
*
* @param preformed Properly quoted C-style string to be represented.
*/
explicit URI(char const *preformed);
/**
* Destructor.
*/
~URI();
/**
* Determines if the URI represented is an 'opaque' URI.
*
* @return \c true if the URI is opaque, \c false if hierarchial.
*/
bool isOpaque() const { return _impl->isOpaque(); }
/**
* Determines if the URI represented is 'relative' as per RFC 2396.
*
* Relative URI references are distinguished by not beginning with a
* scheme name.
*
* @return \c true if the URI is relative, \c false if it is absolute.
*/
bool isRelative() const { return _impl->isRelative(); }
/**
* Determines if the relative URI represented is a 'net-path' as per RFC 2396.
*
* A net-path is one that starts with "\\".
*
* @return \c true if the URI is relative and a net-path, \c false otherwise.
*/
bool isNetPath() const { return _impl->isNetPath(); }
/**
* Determines if the relative URI represented is a 'relative-path' as per RFC 2396.
*
* A relative-path is one that starts with no slashes.
*
* @return \c true if the URI is relative and a relative-path, \c false otherwise.
*/
bool isRelativePath() const { return _impl->isRelativePath(); }
/**
* Determines if the relative URI represented is a 'absolute-path' as per RFC 2396.
*
* An absolute-path is one that starts with a single "\".
*
* @return \c true if the URI is relative and an absolute-path, \c false otherwise.
*/
bool isAbsolutePath() const { return _impl->isAbsolutePath(); }
const char *getScheme() const { return _impl->getScheme(); }
const char *getPath() const { return _impl->getPath(); }
const char *getQuery() const { return _impl->getQuery(); }
const char *getFragment() const { return _impl->getFragment(); }
const char *getOpaque() const { return _impl->getOpaque(); }
static URI fromUtf8( char const* path );
static URI from_native_filename(char const *path);
static char *to_native_filename(char const* uri);
const std::string getFullPath(std::string const &base) const;
char *toNativeFilename() const;
/**
* Returns a glib string version of this URI.
*
* The returned string must be freed with \c g_free().
*
* @return a glib string version of this URI.
*/
char *toString() const { return _impl->toString(); }
/**
* Assignment operator.
*/
URI &operator=(URI const &uri);
private:
class Impl {
public:
static Impl *create(xmlURIPtr uri);
void reference();
void unreference();
bool isOpaque() const;
bool isRelative() const;
bool isNetPath() const;
bool isRelativePath() const;
bool isAbsolutePath() const;
const char *getScheme() const;
const char *getPath() const;
const char *getQuery() const;
const char *getFragment() const;
const char *getOpaque() const;
char *toString() const;
private:
Impl(xmlURIPtr uri);
~Impl();
int _refcount;
xmlURIPtr _uri;
};
Impl *_impl;
};
} /* namespace Inkscape */
#endif
/*
Local Variables:
mode:c++
c-file-style:"stroustrup"
c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
indent-tabs-mode:nil
fill-column:99
End:
*/
// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
|