From a79d62b9f8c0a75efe56d135a0f08b898969338d Mon Sep 17 00:00:00 2001 From: David Robillard Date: Thu, 5 Jul 2018 21:01:12 +0200 Subject: Simplify writer style options --- NEWS | 1 + include/serd/serd.h | 9 ++++----- src/serdi.c | 34 +++------------------------------- src/writer.c | 5 +++-- test/meson.build | 3 --- test/run_test_suite.py | 34 +++++++++++++++++++++++----------- 6 files changed, 34 insertions(+), 52 deletions(-) diff --git a/NEWS b/NEWS index 99bbc724..48b588c0 100644 --- a/NEWS +++ b/NEWS @@ -8,6 +8,7 @@ serd (1.0.1) unstable; * Remove serd_uri_to_path() * Remove useless character counting from API * Rename SerdChunk to SerdStringView + * Simplify writer style options * Use a fixed-size reader stack * Use char* for strings in public API diff --git a/include/serd/serd.h b/include/serd/serd.h index d689cc62..dd88a23f 100644 --- a/include/serd/serd.h +++ b/include/serd/serd.h @@ -293,11 +293,10 @@ typedef struct { does not support abbreviation and is always ASCII. */ typedef enum { - SERD_WRITE_ABBREVIATED = 1u << 0u, ///< Abbreviate triples when possible - SERD_WRITE_ASCII = 1u << 1u, ///< Escape all non-ASCII characters - SERD_WRITE_RESOLVED = 1u << 2u, ///< Resolve URIs against base URI - SERD_WRITE_CURIED = 1u << 3u, ///< Shorten URIs into CURIEs - SERD_WRITE_BULK = 1u << 4u, ///< Write output in pages + SERD_WRITE_ASCII = 1u << 0u, ///< Escape all non-ASCII characters + SERD_WRITE_BULK = 1u << 1u, ///< Write output in pages + SERD_WRITE_UNQUALIFIED = 1u << 2u, ///< Do not shorten URIs into CURIEs + SERD_WRITE_UNRESOLVED = 1u << 3u ///< Do not make URIs relative } SerdWriterFlag; /// Bitwise OR of SerdWriterFlag values diff --git a/src/serdi.c b/src/serdi.c index eec58bd5..27ffbe71 100644 --- a/src/serdi.c +++ b/src/serdi.c @@ -87,36 +87,6 @@ quiet_error_func(void* const handle, const SerdError* const e) return SERD_SUCCESS; } -static SerdWriterFlags -choose_style(const SerdSyntax input_syntax, - const SerdSyntax output_syntax, - const bool ascii, - const bool bulk_write, - const bool full_uris) -{ - SerdWriterFlags writer_flags = 0u; - if (output_syntax == SERD_NTRIPLES || ascii) { - writer_flags |= SERD_WRITE_ASCII; - } else if (output_syntax == SERD_TURTLE) { - writer_flags |= SERD_WRITE_ABBREVIATED; - if (!full_uris) { - writer_flags |= SERD_WRITE_CURIED; - } - } - - if ((input_syntax == SERD_TURTLE || input_syntax == SERD_TRIG) || - (writer_flags & SERD_WRITE_CURIED)) { - // Base URI may change and/or we're abbreviating URIs, so must resolve - writer_flags |= SERD_WRITE_RESOLVED; - } - - if (bulk_write) { - writer_flags |= SERD_WRITE_BULK; - } - - return writer_flags; -} - int main(int argc, char** argv) { @@ -238,7 +208,9 @@ main(int argc, char** argv) } const SerdWriterFlags writer_flags = - choose_style(input_syntax, output_syntax, ascii, bulk_write, full_uris); + ((ascii ? SERD_WRITE_ASCII : 0) | // + (bulk_write ? SERD_WRITE_BULK : 0) | // + (full_uris ? (SERD_WRITE_UNQUALIFIED | SERD_WRITE_UNRESOLVED) : 0)); SerdNode* base = NULL; if (a < argc) { // Base URI given on command line diff --git a/src/writer.c b/src/writer.c index 663d8f64..455c720c 100644 --- a/src/writer.c +++ b/src/writer.c @@ -581,7 +581,7 @@ write_uri_node(SerdWriter* const writer, return sink("()", 2, writer) == 2; } - if (has_scheme && (writer->flags & SERD_WRITE_CURIED) && + if (has_scheme && !(writer->flags & SERD_WRITE_UNQUALIFIED) && serd_env_qualify_in_place(writer->env, node, &prefix, &suffix) && is_name(serd_node_string(prefix), serd_node_length(prefix)) && is_name(suffix.buf, suffix.len)) { @@ -602,7 +602,8 @@ write_uri_node(SerdWriter* const writer, } write_sep(writer, SEP_URI_BEGIN); - if ((writer->flags & SERD_WRITE_RESOLVED) && serd_env_base_uri(writer->env)) { + if (!(writer->flags & SERD_WRITE_UNRESOLVED) && + serd_env_base_uri(writer->env)) { const SerdURIView base_uri = serd_env_base_uri_view(writer->env); SerdURIView uri = serd_parse_uri(node_str); SerdURIView abs_uri = serd_resolve_uri(uri, base_uri); diff --git a/test/meson.build b/test/meson.build index 82a307d2..e46e75ab 100644 --- a/test/meson.build +++ b/test/meson.build @@ -157,9 +157,6 @@ if get_option('utils') base_uri = w3c_base + syntax + 'Tests/' args = ['--syntax', syntax, manifest, base_uri] - if syntax == 'TriG' - args += ['--', '-a'] - endif test(syntax, run_test_suite, args: script_args + args, diff --git a/test/run_test_suite.py b/test/run_test_suite.py index e4f5a79a..2d52e576 100755 --- a/test/run_test_suite.py +++ b/test/run_test_suite.py @@ -47,6 +47,13 @@ def log_error(message): sys.stderr.write(message) +def test_osyntax_options(osyntax): + if osyntax.lower() == "ntriples" or osyntax.lower() == "nquads": + return ["-a"] + + return [] + + def test_thru( base_uri, path, @@ -81,16 +88,21 @@ def test_thru( ] ) - thru_cmd = command_prefix + [ - "-i", - isyntax, - "-o", - osyntax, - "-c", - "foo", - out_path, - base_uri, - ] + thru_cmd = ( + command_prefix + + test_osyntax_options(osyntax) + + [ + "-i", + isyntax, + "-o", + osyntax, + "-c", + "foo", + "-a", + out_path, + base_uri, + ] + ) with open(out_path, "wb") as out: subprocess.run(out_cmd, check=True, stdout=out) @@ -232,7 +244,7 @@ def test_suite( test_name = os.path.basename(test_uri_path) test_path = os.path.join(test_dir, test_name) - command = command_prefix + ["-f", test_path, test_uri] + command = command_prefix + ["-a"] + [test_path, test_uri] command_string = " ".join(shlex.quote(c) for c in command) out_filename = os.path.join(out_test_dir, test_name + ".out") -- cgit v1.2.1