From b5eeb621520d9c0c2647bfa1bfb53045a75a8b6e Mon Sep 17 00:00:00 2001 From: David Robillard Date: Tue, 1 May 2018 14:34:42 +0200 Subject: Remove syntax assumptions from SerdEnv implementation --- src/env.c | 26 +------------------------- src/writer.c | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 26 deletions(-) diff --git a/src/env.c b/src/env.c index fb1fd31d..81a8362b 100644 --- a/src/env.c +++ b/src/env.c @@ -20,7 +20,6 @@ #include #include "node.h" -#include "string_utils.h" typedef struct { SerdNode* name; @@ -168,27 +167,6 @@ serd_env_set_prefix_from_strings(SerdEnv* env, return st; } -static inline bool -is_nameChar(const char c) -{ - return is_alpha(c) || is_digit(c) || c == '_'; -} - -/** - Return true iff `buf` is a valid prefixed name suffix. - TODO: This is more strict than it should be. -*/ -static inline bool -is_name(const char* buf, size_t len) -{ - for (size_t i = 0; i < len; ++i) { - if (!is_nameChar(buf[i])) { - return false; - } - } - return true; -} - SERD_API bool serd_env_qualify(const SerdEnv* env, @@ -206,9 +184,7 @@ serd_env_qualify(const SerdEnv* env, *prefix = env->prefixes[i].name; suffix->buf = uri_str + prefix_uri->n_bytes; suffix->len = uri->n_bytes - prefix_uri->n_bytes; - if (is_name(suffix->buf, suffix->len)) { - return true; - } + return true; } } } diff --git a/src/writer.c b/src/writer.c index e14814bb..f75c23a0 100644 --- a/src/writer.c +++ b/src/writer.c @@ -486,6 +486,19 @@ write_literal(SerdWriter* writer, return true; } +// Return true iff `buf` is a valid prefixed name suffix +static inline bool +is_name(const char* buf, const size_t len) +{ + // TODO: This is more strict than it should be. + for (size_t i = 0; i < len; ++i) { + if (!(is_alpha(buf[i]) || is_digit(buf[i]))) { + return false; + } + } + return true; +} + static bool write_uri_node(SerdWriter* const writer, const SerdNode* node, @@ -509,7 +522,8 @@ write_uri_node(SerdWriter* const writer, } else if (supports_abbrev(writer) && !strcmp(node_str, NS_RDF "nil")) { return sink("()", 2, writer) == 2; } else if (has_scheme && (writer->style & SERD_STYLE_CURIED) && - serd_env_qualify(writer->env, node, &prefix, &suffix)) { + serd_env_qualify(writer->env, node, &prefix, &suffix) && + is_name(suffix.buf, suffix.len)) { write_uri_from_node(writer, prefix); sink(":", 1, writer); write_uri(writer, suffix.buf, suffix.len); -- cgit v1.2.1