aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2019-05-05 12:36:01 +0200
committerDavid Robillard <d@drobilla.net>2019-12-20 10:26:55 -0500
commita3dc7ce6fd9eddbb619e0e5a4a6a808415eb6228 (patch)
treea39dc9b1bbed9c674c3506a27462f3ecf257e5d6
parentb9554abeb93b7c39db5beaa34c35bd0b2b332b03 (diff)
downloadserd-a3dc7ce6fd9eddbb619e0e5a4a6a808415eb6228.tar.gz
serd-a3dc7ce6fd9eddbb619e0e5a4a6a808415eb6228.tar.bz2
serd-a3dc7ce6fd9eddbb619e0e5a4a6a808415eb6228.zip
Simplify handling of input string arguments
-rw-r--r--doc/serdi.12
-rw-r--r--src/serdi.c21
-rw-r--r--wscript1
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,
diff --git a/wscript b/wscript
index a89327ab..69c6ed12 100644
--- a/wscript
+++ b/wscript
@@ -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)