From 1fd33e0a85bdf6bcc4f8138940462c4a4a391175 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Mon, 14 Oct 2019 23:26:41 +0200 Subject: Add support for converting literals to canonical form --- src/serdi.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'src/serdi.c') 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); -- cgit v1.2.1