From 2bb0250be8297cc950d0036915ecdf61ab6f3700 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sat, 31 Jul 2021 16:43:50 -0400 Subject: Factor out and expose prefixed name predicates Towards using these in the writer to escape names more precisely. --- src/n3.c | 33 ++++++--------------------------- 1 file changed, 6 insertions(+), 27 deletions(-) (limited to 'src/n3.c') diff --git a/src/n3.c b/src/n3.c index 79a48a93..08c7754d 100644 --- a/src/n3.c +++ b/src/n3.c @@ -19,11 +19,13 @@ #include "env.h" #include "namespaces.h" #include "node.h" +#include "ntriples.h" #include "read_ntriples.h" #include "reader.h" #include "stack.h" #include "string_utils.h" #include "try.h" +#include "turtle.h" #include "serd/serd.h" @@ -185,33 +187,10 @@ read_PN_LOCAL_ESC(SerdReader* const reader, SerdNode* const dest) eat_byte_safe(reader, '\\'); const int c = peek_byte(reader); - switch (c) { - case '!': - case '#': - case '$': - case '%': - case '&': - case '\'': - case '(': - case ')': - case '*': - case '+': - case ',': - case '-': - case '.': - case '/': - case ';': - case '=': - case '?': - case '@': - case '_': - case '~': - return push_byte(reader, dest, eat_byte_safe(reader, c)); - default: - break; - } - return r_err(reader, SERD_ERR_BAD_SYNTAX, "invalid escape"); + return is_PN_LOCAL_ESC(c) + ? push_byte(reader, dest, eat_byte_safe(reader, c)) + : r_err(reader, SERD_ERR_BAD_SYNTAX, "invalid escape"); } static SerdStatus @@ -611,7 +590,7 @@ read_verb(SerdReader* reader, SerdNode** dest) SerdNode* node = *dest; const int next = peek_byte(reader); if (node->length == 1 && serd_node_string(node)[0] == 'a' && next != ':' && - !is_PN_CHARS_BASE((uint32_t)next)) { + !is_PN_CHARS_BASE(next)) { serd_stack_pop_to(&reader->stack, orig_stack_size); return ((*dest = push_node(reader, SERD_URI, NS_RDF "type", 47)) ? SERD_SUCCESS -- cgit v1.2.1