aboutsummaryrefslogtreecommitdiffstats
path: root/src/serdi.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2019-10-14 23:26:41 +0200
committerDavid Robillard <d@drobilla.net>2021-03-08 23:36:08 -0500
commit1fd33e0a85bdf6bcc4f8138940462c4a4a391175 (patch)
treefab500d072049701370f45c5ae2af76683d8fd1f /src/serdi.c
parent7efaf2431b9c1a96f6ed2e28626aff4886efc749 (diff)
downloadserd-1fd33e0a85bdf6bcc4f8138940462c4a4a391175.tar.gz
serd-1fd33e0a85bdf6bcc4f8138940462c4a4a391175.tar.bz2
serd-1fd33e0a85bdf6bcc4f8138940462c4a4a391175.zip
Add support for converting literals to canonical form
Diffstat (limited to 'src/serdi.c')
-rw-r--r--src/serdi.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/src/serdi.c b/src/serdi.c
index 70c52682..b028b862 100644
--- a/src/serdi.c
+++ b/src/serdi.c
@@ -55,6 +55,7 @@ print_usage(const char* name, bool error)
fprintf(os, "Usage: %s [OPTION]... INPUT...\n", name);
fprintf(os, "Read and write RDF syntax.\n");
fprintf(os, "Use - for INPUT to read from standard input.\n\n");
+ fprintf(os, " -C Convert literals to canonical form.\n");
fprintf(os, " -I BASE_URI Input base URI.\n");
fprintf(os, " -V Validate inputs.\n");
fprintf(os, " -a Write ASCII output if possible.\n");
@@ -150,6 +151,7 @@ main(int argc, char** argv)
bool osyntax_set = false;
bool validate = false;
bool use_model = false;
+ bool normalise = false;
bool quiet = false;
size_t stack_size = 4194304;
const char* input_string = NULL;
@@ -163,7 +165,9 @@ main(int argc, char** argv)
break;
}
- if (argv[a][1] == 'I') {
+ if (argv[a][1] == 'C') {
+ normalise = true;
+ } else if (argv[a][1] == 'I') {
if (++a == argc) {
return missing_arg(argv[0], 'I');
}
@@ -316,7 +320,7 @@ main(int argc, char** argv)
SerdModel* model = NULL;
SerdSink* inserter = NULL;
- const SerdSink* sink = NULL;
+ const SerdSink* out_sink = NULL;
if (use_model) {
const SerdModelFlags flags =
SERD_INDEX_SPO | (input_has_graphs ? SERD_INDEX_GRAPHS : 0u) |
@@ -324,9 +328,16 @@ main(int argc, char** argv)
model = serd_model_new(world, flags);
inserter = serd_inserter_new(model, env, NULL);
- sink = inserter;
+ out_sink = inserter;
} else {
- sink = serd_writer_sink(writer);
+ out_sink = serd_writer_sink(writer);
+ }
+
+ const SerdSink* sink = out_sink;
+
+ SerdSink* canon = NULL;
+ if (normalise) {
+ sink = canon = serd_canon_new(world, out_sink, reader_flags);
}
if (quiet) {
@@ -410,6 +421,7 @@ main(int argc, char** argv)
serd_range_free(range);
}
+ serd_sink_free(canon);
serd_sink_free(inserter);
serd_model_free(model);
serd_writer_free(writer);