diff options
-rw-r--r-- | NEWS | 3 | ||||
-rw-r--r-- | doc/serdi.1 | 4 | ||||
-rw-r--r-- | serd/serd.h | 1 | ||||
-rw-r--r-- | src/n3.c | 2 | ||||
-rw-r--r-- | src/serdi.c | 39 | ||||
-rw-r--r-- | src/writer.c | 12 |
6 files changed, 36 insertions, 25 deletions
@@ -15,8 +15,9 @@ serd (1.0.0) unstable; * Add logging functions to public API * Add model for storing statements in memory * Add support for validation + * Add option for writing terse output without newlines - -- David Robillard <d@drobilla.net> Sat, 19 Jan 2019 13:31:12 +0100 + -- David Robillard <d@drobilla.net> Sun, 10 Mar 2019 13:21:37 +0100 serd (0.30.1) unstable; diff --git a/doc/serdi.1 b/doc/serdi.1 index ca821a4c..e67c33d4 100644 --- a/doc/serdi.1 +++ b/doc/serdi.1 @@ -74,6 +74,10 @@ Keep relative URIs within ROOT_URI. Parse INPUT as a string (terminates options). .TP +\fB\-t\fR +Write terser output without newlines. + +.TP \fB\-v\fR Display version information and exit. diff --git a/serd/serd.h b/serd/serd.h index abdb7708..770c201d 100644 --- a/serd/serd.h +++ b/serd/serd.h @@ -285,6 +285,7 @@ typedef struct { */ typedef enum { SERD_WRITE_ASCII = 1 << 0, ///< Escape all non-ASCII characters + SERD_WRITE_TERSE = 1 << 1, ///< Write terser output without newlines } SerdWriterFlag; /// Bitwise OR of SerdWriterFlag values @@ -1046,7 +1046,7 @@ read_object(SerdReader* reader, ReadContext* ctx, bool emit, bool* ate_dot) if (!emit) { ctx->object = o; - } else if (!ret && emit && simple && o) { + } else if (!ret && simple && o) { ret = emit_statement(reader, *ctx, o); serd_stack_pop_to(&reader->stack, orig_stack_size); } diff --git a/src/serdi.c b/src/serdi.c index a9e25c14..5c543f9d 100644 --- a/src/serdi.c +++ b/src/serdi.c @@ -66,6 +66,7 @@ print_usage(const char* name, bool error) 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, " -t Write terser output without newlines.\n"); fprintf(os, " -v Display version information and exit.\n"); return error ? 1 : 0; } @@ -92,28 +93,28 @@ main(int argc, char** argv) return print_usage(argv[0], true); } - SerdSyntax input_syntax = (SerdSyntax)0; - SerdSyntax output_syntax = (SerdSyntax)0; - bool from_string = false; - bool from_stdin = false; - bool ascii = false; - bool bulk_read = true; - bool bulk_write = false; - bool no_inline = false; - bool lax = false; - bool use_model = false; - bool quiet = false; - size_t stack_size = 4194304; - const char* add_prefix = NULL; - const char* chop_prefix = NULL; - const char* root_uri = NULL; - int a = 1; + SerdSyntax input_syntax = (SerdSyntax)0; + SerdSyntax output_syntax = (SerdSyntax)0; + SerdWriterFlags writer_flags = 0; + bool from_string = false; + bool from_stdin = false; + bool bulk_read = true; + bool bulk_write = false; + bool no_inline = false; + bool lax = false; + bool use_model = false; + bool quiet = false; + size_t stack_size = 4194304; + const char* add_prefix = NULL; + const char* chop_prefix = NULL; + const char* root_uri = NULL; + int a = 1; for (; a < argc && argv[a][0] == '-'; ++a) { if (argv[a][1] == '\0') { from_stdin = true; break; } else if (argv[a][1] == 'a') { - ascii = true; + writer_flags |= SERD_WRITE_ASCII; } else if (argv[a][1] == 'b') { bulk_write = true; } else if (argv[a][1] == 'e') { @@ -134,6 +135,8 @@ main(int argc, char** argv) from_string = true; ++a; break; + } else if (argv[a][1] == 't') { + writer_flags |= SERD_WRITE_TERSE; } else if (argv[a][1] == 'i') { if (++a == argc) { return missing_arg(argv[0], 'i'); @@ -210,8 +213,6 @@ main(int argc, char** argv) SerdWorld* world = serd_world_new(); SerdEnv* env = serd_env_new(base); - const SerdWriterFlags writer_flags = (ascii ? SERD_WRITE_ASCII : 0U); - const SerdSerialisationFlags serialisation_flags = no_inline ? SERD_NO_INLINE_OBJECTS : 0U; diff --git a/src/writer.c b/src/writer.c index 46d485c3..e2abf5a8 100644 --- a/src/writer.c +++ b/src/writer.c @@ -382,16 +382,20 @@ uri_sink(const void* buf, size_t size, size_t nmemb, void* stream) static void write_newline(SerdWriter* writer) { - sink("\n", 1, writer); - for (int i = 0; i < writer->indent; ++i) { - sink("\t", 1, writer); + if (writer->flags & SERD_WRITE_TERSE) { + sink(" ", 1, writer); + } else { + sink("\n", 1, writer); + for (int i = 0; i < writer->indent; ++i) { + sink("\t", 1, writer); + } } } static void write_top_level_sep(SerdWriter* writer) { - if (!writer->empty) { + if (!writer->empty && !(writer->flags & SERD_WRITE_TERSE)) { write_newline(writer); } } |