aboutsummaryrefslogtreecommitdiffstats
path: root/src/writer.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2011-05-06 16:48:51 +0000
committerDavid Robillard <d@drobilla.net>2011-05-06 16:48:51 +0000
commit00433beb65e513283dbd1b05d4232fa2c8e0de69 (patch)
treebd677dea97b2e00d9e996dcbc6dc162960b7dd07 /src/writer.c
parent246aa2aca72b5580ceae29487c80a2dee567bde2 (diff)
downloadserd-00433beb65e513283dbd1b05d4232fa2c8e0de69.tar.gz
serd-00433beb65e513283dbd1b05d4232fa2c8e0de69.tar.bz2
serd-00433beb65e513283dbd1b05d4232fa2c8e0de69.zip
Make writer methods directly compatible with reader callbacks.
Connect writer directly to reader in serdi. git-svn-id: http://svn.drobilla.net/serd/trunk@164 490d8e77-9747-427b-9fa3-0b8f29cee8a0
Diffstat (limited to 'src/writer.c')
-rw-r--r--src/writer.c53
1 files changed, 30 insertions, 23 deletions
diff --git a/src/writer.c b/src/writer.c
index 122cde01..4e4ee2eb 100644
--- a/src/writer.c
+++ b/src/writer.c
@@ -426,21 +426,25 @@ serd_writer_new(SerdSyntax syntax,
SERD_API
SerdStatus
-serd_writer_set_base_uri(SerdWriter* writer,
- const SerdURI* uri)
+serd_writer_set_base_uri(SerdWriter* writer,
+ const SerdNode* uri)
{
- writer->base_uri = *uri;
- if (writer->syntax != SERD_NTRIPLES) {
- if (writer->context.graph.buf || writer->context.subject.buf) {
- writer->sink(" .\n\n", 4, writer->stream);
- reset_context(writer);
+ if (!serd_env_set_base_uri(writer->env, uri)) {
+ serd_env_get_base_uri(writer->env, &writer->base_uri);
+
+ if (writer->syntax != SERD_NTRIPLES) {
+ if (writer->context.graph.buf || writer->context.subject.buf) {
+ writer->sink(" .\n\n", 4, writer->stream);
+ reset_context(writer);
+ }
+ writer->sink("@base <", 7, writer->stream);
+ writer->sink(uri->buf, uri->n_bytes - 1, writer->stream);
+ writer->sink("> .\n", 4, writer->stream);
}
- writer->sink("@base <", 7, writer->stream);
- serd_uri_serialise(uri, writer->sink, writer->stream);
- writer->sink("> .\n", 4, writer->stream);
+ reset_context(writer);
+ return SERD_SUCCESS;
}
- reset_context(writer);
- return SERD_SUCCESS;
+ return SERD_ERR_UNKNOWN;
}
SERD_API
@@ -449,19 +453,22 @@ serd_writer_set_prefix(SerdWriter* writer,
const SerdNode* name,
const SerdNode* uri)
{
- if (writer->syntax != SERD_NTRIPLES) {
- if (writer->context.graph.buf || writer->context.subject.buf) {
- writer->sink(" .\n\n", 4, writer->stream);
- reset_context(writer);
+ if (!serd_env_set_prefix(writer->env, name, uri)) {
+ if (writer->syntax != SERD_NTRIPLES) {
+ if (writer->context.graph.buf || writer->context.subject.buf) {
+ writer->sink(" .\n\n", 4, writer->stream);
+ reset_context(writer);
+ }
+ writer->sink("@prefix ", 8, writer->stream);
+ writer->sink(name->buf, name->n_bytes - 1, writer->stream);
+ writer->sink(": <", 3, writer->stream);
+ write_text(writer, WRITE_URI, uri->buf, uri->n_bytes - 1, '>');
+ writer->sink("> .\n", 4, writer->stream);
}
- writer->sink("@prefix ", 8, writer->stream);
- writer->sink(name->buf, name->n_bytes - 1, writer->stream);
- writer->sink(": <", 3, writer->stream);
- write_text(writer, WRITE_URI, uri->buf, uri->n_bytes - 1, '>');
- writer->sink("> .\n", 4, writer->stream);
+ reset_context(writer);
+ return SERD_SUCCESS;
}
- reset_context(writer);
- return SERD_SUCCESS;
+ return SERD_ERR_UNKNOWN;
}
SERD_API