From 4d7ad7760097f9dd01094f1a581f4d1ee4bf28a5 Mon Sep 17 00:00:00 2001
From: David Robillard <d@drobilla.net>
Date: Thu, 3 Feb 2011 20:08:50 +0000
Subject: Add ability to set blank node prefix for parsing several files
 without conflict.

git-svn-id: http://svn.drobilla.net/serd/trunk@91 490d8e77-9747-427b-9fa3-0b8f29cee8a0
---
 src/reader.c | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

(limited to 'src')

diff --git a/src/reader.c b/src/reader.c
index 226c359a..79b61385 100644
--- a/src/reader.c
+++ b/src/reader.c
@@ -85,6 +85,7 @@ struct SerdReaderImpl {
 	SerdStack         stack;
 	Cursor            cur;
 	uint8_t*          buf;
+	const uint8_t*    blank_prefix;
 	unsigned          next_id;
 	int               err;
 	uint8_t*          read_buf;
@@ -976,8 +977,12 @@ read_nodeID(SerdReader reader)
 static Ref
 blank_id(SerdReader reader)
 {
-	char str[32];
-	const int len = snprintf(str, sizeof(str), "genid%u", reader->next_id++);
+	const char* prefix = reader->blank_prefix
+		? (const char*)reader->blank_prefix
+		: "genid";
+	char str[32];  // FIXME: ensure length of reader->blank_prefix is OK
+	const int len = snprintf(str, sizeof(str), "%s%u",
+	                         prefix, reader->next_id++);
 	return push_string(reader, str, len + 1);
 }
 
@@ -1356,6 +1361,7 @@ serd_reader_new(SerdSyntax        syntax,
 	me->fd             = 0;
 	me->stack          = serd_stack_new(STACK_PAGE_SIZE);
 	me->cur            = cur;
+	me->blank_prefix   = NULL;
 	me->next_id        = 1;
 	me->read_buf       = 0;
 	me->read_head      = 0;
@@ -1391,6 +1397,14 @@ serd_reader_free(SerdReader reader)
 	free(me);
 }
 
+SERD_API
+void
+serd_reader_set_blank_prefix(SerdReader     reader,
+                             const uint8_t* prefix)
+{
+	reader->blank_prefix = prefix;
+}
+
 SERD_API
 bool
 serd_reader_read_file(SerdReader me, FILE* file, const uint8_t* name)
-- 
cgit v1.2.1