aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2018-06-03 22:23:28 +0200
committerDavid Robillard <d@drobilla.net>2019-12-19 20:55:23 -0500
commitfeb8de751a7f23cbd96ad4760dea68344ea3d0d7 (patch)
tree84788fcb93ca513b01160c35114c4b424062b6d9
parentcd30f11644697d7b1a38c171007c57379bec79df (diff)
downloadserd-feb8de751a7f23cbd96ad4760dea68344ea3d0d7.tar.gz
serd-feb8de751a7f23cbd96ad4760dea68344ea3d0d7.tar.bz2
serd-feb8de751a7f23cbd96ad4760dea68344ea3d0d7.zip
Add cursor to statement
This allows the file and position of statements to be used in sinks, for example for more helpful error reporting outside the parser.
-rw-r--r--serd/serd.h7
-rw-r--r--src/reader.c3
-rw-r--r--src/sink.c3
-rw-r--r--src/statement.c6
-rw-r--r--src/statement.h3
5 files changed, 19 insertions, 3 deletions
diff --git a/serd/serd.h b/serd/serd.h
index 0a05c395..9b34dcbb 100644
--- a/serd/serd.h
+++ b/serd/serd.h
@@ -1307,6 +1307,13 @@ const SerdNode*
serd_statement_get_graph(const SerdStatement* statement);
/**
+ Return the source location where `statement` originated, or NULL.
+*/
+SERD_API
+const SerdCursor*
+serd_statement_get_cursor(const SerdStatement* statement);
+
+/**
@}
@name Cursor
@{
diff --git a/src/reader.c b/src/reader.c
index 8bc8edd7..c294a6db 100644
--- a/src/reader.c
+++ b/src/reader.c
@@ -128,7 +128,8 @@ emit_statement(SerdReader* reader, ReadContext ctx, SerdNode* o)
serd_node_zero_pad(o);
const SerdStatement statement = {
- { ctx.subject, ctx.predicate, o, graph }
+ { ctx.subject, ctx.predicate, o, graph },
+ &reader->source.cur
};
const SerdStatus st = reader->sink->statement(
diff --git a/src/sink.c b/src/sink.c
index 1c5c500f..fffa386e 100644
--- a/src/sink.c
+++ b/src/sink.c
@@ -48,7 +48,8 @@ serd_sink_write(const SerdSink* sink,
const SerdNode* object,
const SerdNode* graph)
{
- const SerdStatement statement = { { subject, predicate, object, graph } };
+ const SerdStatement statement = { { subject, predicate, object, graph },
+ NULL };
return sink->statement(sink->handle, flags, &statement);
}
diff --git a/src/statement.c b/src/statement.c
index 5e2802eb..24440a38 100644
--- a/src/statement.c
+++ b/src/statement.c
@@ -45,3 +45,9 @@ serd_statement_get_graph(const SerdStatement* statement)
{
return statement->nodes[SERD_GRAPH];
}
+
+const SerdCursor*
+serd_statement_get_cursor(const SerdStatement* statement)
+{
+ return statement->cursor;
+}
diff --git a/src/statement.h b/src/statement.h
index 7b5d752d..7c8384e9 100644
--- a/src/statement.h
+++ b/src/statement.h
@@ -27,7 +27,8 @@
typedef const SerdNode* SerdQuad[4];
struct SerdStatementImpl {
- SerdQuad nodes;
+ SerdQuad nodes;
+ SerdCursor* cursor;
};
#endif // SERD_STATEMENT_H