aboutsummaryrefslogtreecommitdiffstats
path: root/serd
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2012-03-10 22:24:09 +0000
committerDavid Robillard <d@drobilla.net>2012-03-10 22:24:09 +0000
commitd14a7d113628578b6ed065b08db6c92536f550bd (patch)
treeff7ab0c295103f640e031c5013fa5c774f6fb821 /serd
parent60d7a9ff146ff3c137a99b82dd75fe8f57525938 (diff)
downloadserd-d14a7d113628578b6ed065b08db6c92536f550bd.tar.gz
serd-d14a7d113628578b6ed065b08db6c92536f550bd.tar.bz2
serd-d14a7d113628578b6ed065b08db6c92536f550bd.zip
Add serd_writer_set_root_uri(), root parameter to
serd_uri_serialise_relative(), and -r option to serdi, to enable writing URIs with up references (../) within a parent namespace. Resolve dot segments in serd_uri_resolve() instead of at write time. git-svn-id: http://svn.drobilla.net/serd/trunk@336 490d8e77-9747-427b-9fa3-0b8f29cee8a0
Diffstat (limited to 'serd')
-rw-r--r--serd/serd.h20
1 files changed, 20 insertions, 0 deletions
diff --git a/serd/serd.h b/serd/serd.h
index 94679a46..40e47499 100644
--- a/serd/serd.h
+++ b/serd/serd.h
@@ -362,11 +362,16 @@ serd_uri_serialise(const SerdURI* uri, SerdSink sink, void* stream);
/**
Serialise @c uri relative to @c base with a series of calls to @c sink.
+
+ The @c uri is written as a relative URI iff if it a child of @c base and @c
+ root. The optional @c root parameter must be a prefix of @c base and can be
+ used keep up-references ("../") within a certain namespace.
*/
SERD_API
size_t
serd_uri_serialise_relative(const SerdURI* uri,
const SerdURI* base,
+ const SerdURI* root,
SerdSink sink,
void* stream);
@@ -793,6 +798,21 @@ serd_writer_set_base_uri(SerdWriter* writer,
const SerdNode* uri);
/**
+ Set the current root URI.
+
+ The root URI should be a prefix of the base URI. The path of the root URI
+ is the highest path any relative up-reference can refer to. For example,
+ with root <file:///foo/root> and base <file:///foo/root/base>,
+ <file:///foo/root> will be written as <../>, but <file:///foo> will be
+ written non-relatively as <file:///foo>. If the root is not explicitly set,
+ it defaults to the base URI, so no up-references will be created at all.
+*/
+SERD_API
+SerdStatus
+serd_writer_set_root_uri(SerdWriter* writer,
+ const SerdNode* uri);
+
+/**
Set a namespace prefix (and emit directive if applicable).
Note this function can be safely casted to SerdPrefixSink.