[tracker/wip/carlosg/deserialize-api: 7/17] libtracker-sparql: Refactor handling of prefix/base in Turtle parsing
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/wip/carlosg/deserialize-api: 7/17] libtracker-sparql: Refactor handling of prefix/base in Turtle parsing
- Date: Thu, 30 Jun 2022 21:57:56 +0000 (UTC)
commit 4c6e7e06b31f63382547098bcdbe57e9b6f7375c
Author: Carlos Garnacho <carlosg gnome org>
Date: Sun May 8 00:05:20 2022 +0200
libtracker-sparql: Refactor handling of prefix/base in Turtle parsing
This is handled in the same state that handles subject, but since we
handle Trig format in the same object, this should happen prior to
parsing the first GRAPH clause there.
Move this parsing to the initial state, so that it applies for both
formats the same. This involved changes in parser location handling
for errors, since the initial state now actually advances the parser.
.../tracker-deserializer-turtle.c | 44 +++++++++++-----------
1 file changed, 22 insertions(+), 22 deletions(-)
---
diff --git a/src/libtracker-sparql/tracker-deserializer-turtle.c
b/src/libtracker-sparql/tracker-deserializer-turtle.c
index b3dafa2d2..1670217ef 100644
--- a/src/libtracker-sparql/tracker-deserializer-turtle.c
+++ b/src/libtracker-sparql/tracker-deserializer-turtle.c
@@ -294,6 +294,8 @@ expand_prefix (TrackerDeserializerTurtle *deserializer,
expanded = tracker_namespace_manager_expand_uri (namespaces, shortname);
if (g_strcmp0 (expanded, shortname) == 0) {
+ /* Point to beginning of term */
+ deserializer->column_no -= strlen(shortname);
g_free (expanded);
g_set_error (error,
TRACKER_SPARQL_ERROR,
@@ -491,10 +493,20 @@ tracker_deserializer_turtle_iterate_next (TrackerDeserializerTurtle *deserializ
switch (deserializer->state) {
case STATE_INITIAL:
- if (deserializer->parse_trig)
- deserializer->state = STATE_GRAPH;
- else
- deserializer->state = STATE_SUBJECT;
+ if (parse_token (deserializer, "@prefix")) {
+ if (!handle_prefix (deserializer, error))
+ return FALSE;
+ break;
+ } else if (parse_token (deserializer, "@base")) {
+ if (!handle_base (deserializer, error))
+ return FALSE;
+ break;
+ } else {
+ if (deserializer->parse_trig)
+ deserializer->state = STATE_GRAPH;
+ else
+ deserializer->state = STATE_SUBJECT;
+ }
break;
case STATE_GRAPH:
if (parse_token (deserializer, "graph")) {
@@ -519,22 +531,15 @@ tracker_deserializer_turtle_iterate_next (TrackerDeserializerTurtle *deserializ
TRACKER_SPARQL_ERROR,
TRACKER_SPARQL_ERROR_PARSE,
"Expected graph block");
+ return FALSE;
}
+
+ deserializer->state = STATE_SUBJECT;
break;
case STATE_SUBJECT:
if (g_buffered_input_stream_get_available (deserializer->buffered_stream) == 0)
return FALSE;
- if (parse_token (deserializer, "@prefix")) {
- if (!handle_prefix (deserializer, error))
- return FALSE;
- break;
- } else if (parse_token (deserializer, "@base")) {
- if (!handle_base (deserializer, error))
- return FALSE;
- break;
- }
-
g_clear_pointer (&deserializer->subject, g_free);
if (parse_token (deserializer, "[")) {
@@ -685,13 +690,14 @@ tracker_deserializer_turtle_iterate_next (TrackerDeserializerTurtle *deserializ
if (parse_token (deserializer, ".")) {
advance_whitespace_and_comments (deserializer);
- deserializer->state = STATE_SUBJECT;
+ deserializer->state = deserializer->parse_trig ?
+ STATE_SUBJECT : STATE_INITIAL;
}
if (deserializer->parse_trig &&
parse_token (deserializer, "}")) {
advance_whitespace_and_comments (deserializer);
- deserializer->state = STATE_GRAPH;
+ deserializer->state = STATE_INITIAL;
}
/* If we did not advance state, this is a parsing error */
@@ -797,12 +803,6 @@ tracker_deserializer_turtle_get_parser_location (TrackerDeserializer *deserializ
{
TrackerDeserializerTurtle *deserializer_ttl = TRACKER_DESERIALIZER_TURTLE (deserializer);
- if (deserializer_ttl->state == STATE_INITIAL) {
- *line_no = 0;
- *column_no = 0;
- return FALSE;
- }
-
*line_no = deserializer_ttl->line_no;
*column_no = deserializer_ttl->column_no;
return TRUE;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]