diff options
author | David Robillard <d@drobilla.net> | 2019-05-05 12:36:01 +0200 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2019-12-20 10:26:55 -0500 |
commit | a3dc7ce6fd9eddbb619e0e5a4a6a808415eb6228 (patch) | |
tree | a39dc9b1bbed9c674c3506a27462f3ecf257e5d6 | |
parent | b9554abeb93b7c39db5beaa34c35bd0b2b332b03 (diff) | |
download | serd-a3dc7ce6fd9eddbb619e0e5a4a6a808415eb6228.tar.gz serd-a3dc7ce6fd9eddbb619e0e5a4a6a808415eb6228.tar.bz2 serd-a3dc7ce6fd9eddbb619e0e5a4a6a808415eb6228.zip |
Simplify handling of input string arguments
-rw-r--r-- | doc/serdi.1 | 2 | ||||
-rw-r--r-- | src/serdi.c | 21 | ||||
-rw-r--r-- | wscript | 1 |
3 files changed, 13 insertions, 11 deletions
diff --git a/doc/serdi.1 b/doc/serdi.1 index 2bcb88ad..11718dae 100644 --- a/doc/serdi.1 +++ b/doc/serdi.1 @@ -81,7 +81,7 @@ Keep relative URIs within \fIROOT_URI\fR. .TP .BR \-s " " \fIINPUT\fR -Parse \fIINPUT\fR as a string (terminates options). +Parse \fIINPUT\fR as a string. .TP .BR \-t diff --git a/src/serdi.c b/src/serdi.c index 30280280..865ef599 100644 --- a/src/serdi.c +++ b/src/serdi.c @@ -67,7 +67,7 @@ print_usage(const char* name, bool error) fprintf(os, " -p PREFIX Add PREFIX to blank node IDs.\n"); fprintf(os, " -q Suppress all output except data.\n"); fprintf(os, " -r ROOT_URI Keep relative URIs within ROOT_URI.\n"); - fprintf(os, " -s INPUT Parse INPUT as string (terminates options).\n"); + fprintf(os, " -s INPUT Parse INPUT as string.\n"); fprintf(os, " -t Write terser output without newlines.\n"); fprintf(os, " -v Display version information and exit.\n"); return error ? 1 : 0; @@ -100,7 +100,6 @@ main(int argc, char** argv) SerdSyntax output_syntax = (SerdSyntax)0; SerdReaderFlags reader_flags = 0; SerdWriterFlags writer_flags = 0; - bool from_string = false; bool from_stdin = false; bool bulk_read = true; bool bulk_write = false; @@ -108,6 +107,7 @@ main(int argc, char** argv) bool use_model = false; bool quiet = false; size_t stack_size = 4194304; + const char* input_string = NULL; const char* add_prefix = NULL; const char* chop_prefix = NULL; const char* root_uri = NULL; @@ -141,9 +141,10 @@ main(int argc, char** argv) } else if (argv[a][1] == 'v') { return print_version(); } else if (argv[a][1] == 's') { - from_string = true; - ++a; - break; + if (++a == argc) { + return missing_arg(argv[0], 's'); + } + input_string = argv[a]; } else if (argv[a][1] == 't') { writer_flags |= SERD_WRITE_TERSE; } else if (argv[a][1] == 'i') { @@ -190,7 +191,7 @@ main(int argc, char** argv) } } - if (a == argc) { + if (a == argc && !input_string) { SERDI_ERROR("missing input\n"); return 1; } @@ -202,7 +203,7 @@ main(int argc, char** argv) const char* input = argv[a++]; - if (!input_syntax && !(input_syntax = serd_guess_syntax(input))) { + if (!input_syntax && !input || !(input_syntax = serd_guess_syntax(input))) { input_syntax = SERD_TRIG; } @@ -211,7 +212,7 @@ main(int argc, char** argv) output_syntax = input_has_graphs ? SERD_NQUADS : SERD_NTRIPLES; } - if (!base) { + if (!base && input) { base = serd_new_file_uri(input, NULL); } @@ -262,9 +263,9 @@ main(int argc, char** argv) SerdStatus st = SERD_SUCCESS; SerdNode* input_name = NULL; - if (from_string) { + if (input_string) { input_name = serd_new_string("string"); - st = serd_reader_start_string(reader, input, input_name); + st = serd_reader_start_string(reader, input_string, input_name); } else if (from_stdin) { input_name = serd_new_string("stdin"); st = serd_reader_start_stream(reader, @@ -559,6 +559,7 @@ def test(tst): check([serdi, '-p']) check([serdi, '-q', '%s/tests/bad/bad-base.ttl' % srcdir], stderr=None) check([serdi, '-r']) + check([serdi, '-s']) check([serdi, '-z']) check([serdi] + ['%s/tests/bad/bad-base.ttl' % srcdir] * 2) |