diff options
author | David Robillard <d@drobilla.net> | 2019-05-05 15:42:40 +0200 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2020-06-21 18:12:04 +0200 |
commit | 660f1747eeecf56a252c26ad5fde419e0b101429 (patch) | |
tree | f2262c54fb8a26e70badc0c3a040e9683b5e3dd1 /src | |
parent | a74bb1f0c7f78b6d3dcf5b7bb5bb8a5838b68be5 (diff) | |
download | serd-660f1747eeecf56a252c26ad5fde419e0b101429.tar.gz serd-660f1747eeecf56a252c26ad5fde419e0b101429.tar.bz2 serd-660f1747eeecf56a252c26ad5fde419e0b101429.zip |
Add empty syntax type for suppressing output
Diffstat (limited to 'src')
-rw-r--r-- | src/serdi.c | 11 | ||||
-rw-r--r-- | src/syntax.c | 9 | ||||
-rw-r--r-- | src/writer.c | 11 |
3 files changed, 21 insertions, 10 deletions
diff --git a/src/serdi.c b/src/serdi.c index 8b7af847..114fd136 100644 --- a/src/serdi.c +++ b/src/serdi.c @@ -28,6 +28,7 @@ #include <stdbool.h> #include <stdio.h> #include <stdlib.h> +#include <string.h> #define SERDI_ERROR(msg) fprintf(stderr, "serdi: " msg); #define SERDI_ERRORF(fmt, ...) fprintf(stderr, "serdi: " fmt, __VA_ARGS__); @@ -87,14 +88,15 @@ main(int argc, char** argv) } SerdNode* base = NULL; - SerdSyntax input_syntax = (SerdSyntax)0; - SerdSyntax output_syntax = (SerdSyntax)0; + SerdSyntax input_syntax = SERD_SYNTAX_EMPTY; + SerdSyntax output_syntax = SERD_SYNTAX_EMPTY; SerdReaderFlags reader_flags = 0; SerdWriterFlags writer_flags = 0; bool from_stdin = false; bool bulk_read = true; bool bulk_write = false; bool no_inline = false; + bool osyntax_set = false; bool use_model = false; bool quiet = false; size_t stack_size = 4194304; @@ -156,8 +158,11 @@ main(int argc, char** argv) } stack_size = (size_t)size; } else if (argv[a][1] == 'o') { + osyntax_set = true; if (++a == argc) { return missing_arg(argv[0], 'o'); + } else if (!strcmp(argv[a], "empty")) { + output_syntax = SERD_SYNTAX_EMPTY; } else if (!(output_syntax = serd_syntax_by_name(argv[a]))) { return print_usage(argv[0], true); } @@ -199,7 +204,7 @@ main(int argc, char** argv) } const bool input_has_graphs = serd_syntax_has_graphs(input_syntax); - if (!output_syntax) { + if (!output_syntax && !osyntax_set) { output_syntax = input_has_graphs ? SERD_NQUADS : SERD_NTRIPLES; } diff --git a/src/syntax.c b/src/syntax.c index 8f091a1d..98fcefbc 100644 --- a/src/syntax.c +++ b/src/syntax.c @@ -32,7 +32,7 @@ static const Syntax syntaxes[] = { {"ntriples", ".nt", SERD_NTRIPLES}, {"nquads", ".nq", SERD_NQUADS}, {"trig", ".trig", SERD_TRIG}, - {NULL, NULL, (SerdSyntax)0}, + {NULL, NULL, SERD_SYNTAX_EMPTY}, }; SerdSyntax @@ -43,7 +43,7 @@ serd_syntax_by_name(const char* const name) return s->syntax; } } - return (SerdSyntax)0; + return SERD_SYNTAX_EMPTY; } SerdSyntax @@ -52,12 +52,13 @@ serd_guess_syntax(const char* const filename) const char* ext = strrchr(filename, '.'); if (ext) { for (const Syntax* s = syntaxes; s->name; ++s) { - if (!serd_strncasecmp(s->extension, ext, strlen(ext))) { + if (s->extension && + !serd_strncasecmp(s->extension, ext, strlen(ext))) { return s->syntax; } } } - return (SerdSyntax)0; + return SERD_SYNTAX_EMPTY; } bool diff --git a/src/writer.c b/src/writer.c index eab902c6..09244a7d 100644 --- a/src/writer.c +++ b/src/writer.c @@ -729,6 +729,8 @@ write_curie(SerdWriter* const writer, if (is_inline_start(writer, field, flags)) { TRY(st, esink(" ;", 2, writer)); } + default: + break; } return st; } @@ -827,6 +829,10 @@ serd_writer_write_statement(SerdWriter* writer, assert(!((flags & SERD_ANON_S) && (flags & SERD_LIST_S))); assert(!((flags & SERD_ANON_O) && (flags & SERD_LIST_O))); + if (writer->syntax == SERD_SYNTAX_EMPTY) { + return SERD_SUCCESS; + } + const SerdNode* const subject = serd_statement_get_subject(statement); const SerdNode* const predicate = serd_statement_get_predicate(statement); const SerdNode* const object = serd_statement_get_object(statement); @@ -969,10 +975,9 @@ serd_writer_write_statement(SerdWriter* writer, } SERD_WARN_UNUSED_RESULT static SerdStatus -serd_writer_end_anon(SerdWriter* writer, - const SerdNode* node) +serd_writer_end_anon(SerdWriter* writer, const SerdNode* node) { - if (writer->syntax == SERD_NTRIPLES || writer->syntax == SERD_NQUADS) { + if (writer->syntax != SERD_TURTLE && writer->syntax != SERD_TRIG) { return SERD_SUCCESS; } else if (serd_stack_is_empty(&writer->anon_stack)) { return SERD_LOG_ERROR(writer->world, SERD_ERR_UNKNOWN, |