diff options
Diffstat (limited to 'src/writer.c')
-rw-r--r-- | src/writer.c | 52 |
1 files changed, 11 insertions, 41 deletions
diff --git a/src/writer.c b/src/writer.c index c86b066d..bfce4f9e 100644 --- a/src/writer.c +++ b/src/writer.c @@ -761,7 +761,7 @@ 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]))) { + if (!(is_alpha(buf[i]) || is_digit(buf[i]) || lname_must_escape(buf[i]))) { return false; } } @@ -811,11 +811,11 @@ write_uri_node(SerdWriter* const writer, const SerdNode* const node, const SerdField field) { - SerdStatus st = SERD_SUCCESS; - const SerdNode* prefix = NULL; - SerdStringView suffix = {NULL, 0}; - const char* node_str = serd_node_string(node); - const bool has_scheme = serd_uri_string_has_scheme(node_str); + SerdStatus st = SERD_SUCCESS; + SerdStringView prefix = {NULL, 0}; + SerdStringView suffix = {NULL, 0}; + const char* node_str = serd_node_string(node); + const bool has_scheme = serd_uri_string_has_scheme(node_str); if (supports_abbrev(writer)) { if (field == SERD_PREDICATE && serd_node_equals(node, writer->world->rdf_type)) { @@ -827,12 +827,12 @@ write_uri_node(SerdWriter* const writer, } if (has_scheme && !(writer->flags & SERD_WRITE_UNQUALIFIED) && - serd_env_qualify_in_place(writer->env, node, &prefix, &suffix) && - is_name(serd_node_string(prefix), serd_node_length(prefix)) && - is_name(suffix.buf, suffix.len)) { - TRY(st, write_uri_from_node(writer, prefix)); + !serd_env_qualify( + writer->env, serd_node_string_view(node), &prefix, &suffix) && + is_name(prefix.buf, prefix.len) && is_name(suffix.buf, suffix.len)) { + TRY(st, write_lname(writer, prefix.buf, prefix.len)); TRY(st, esink(":", 1, writer)); - return ewrite_uri(writer, suffix.buf, suffix.len); + return write_lname(writer, suffix.buf, suffix.len); } } @@ -848,33 +848,6 @@ write_uri_node(SerdWriter* const writer, } SERD_WARN_UNUSED_RESULT static SerdStatus -write_curie(SerdWriter* const writer, const SerdNode* const node) -{ - writer->last_sep = SEP_NONE; - - SerdStringView prefix = {NULL, 0}; - SerdStringView suffix = {NULL, 0}; - SerdStatus st = SERD_SUCCESS; - - if (writer->syntax == SERD_NTRIPLES || writer->syntax == SERD_NQUADS) { - const SerdStringView curie = serd_node_string_view(node); - if ((st = serd_env_expand_in_place(writer->env, curie, &prefix, &suffix))) { - return w_err(writer, - st, - "undefined namespace prefix in `%s'", - serd_node_string(node)); - } - - TRY(st, esink("<", 1, writer)); - TRY(st, ewrite_uri(writer, prefix.buf, prefix.len)); - TRY(st, ewrite_uri(writer, suffix.buf, suffix.len)); - return esink(">", 1, writer); - } - - return write_lname(writer, serd_node_string(node), node->length); -} - -SERD_WARN_UNUSED_RESULT static SerdStatus write_blank(SerdWriter* const writer, const SerdNode* node, const SerdField field, @@ -940,9 +913,6 @@ write_node(SerdWriter* const writer, case SERD_URI: st = write_uri_node(writer, node, field); break; - case SERD_CURIE: - st = write_curie(writer, node); - break; case SERD_BLANK: st = write_blank(writer, node, field, flags); break; |