aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2020-10-10 12:31:29 +0200
committerDavid Robillard <d@drobilla.net>2022-01-13 23:05:27 -0500
commitaf81ace5f5a8f4bb0df93dd937395c65e92a5b6a (patch)
tree1a40185db9c66ce8bee528e81e5cfa9569b2d4bd
parent5d43cb36087292a397992aa1b59326fc355d5247 (diff)
downloadserd-af81ace5f5a8f4bb0df93dd937395c65e92a5b6a.tar.gz
serd-af81ace5f5a8f4bb0df93dd937395c65e92a5b6a.tar.bz2
serd-af81ace5f5a8f4bb0df93dd937395c65e92a5b6a.zip
Add SERD_READ_EXACT_BLANKS flag
This allows suppressing the blank node ID clashing mechanism to read blank IDs exactly as they appear in the input, even if they match the scheme used to generate blank node IDs internally.
-rw-r--r--include/serd/serd.h5
-rw-r--r--src/n3.c2
2 files changed, 4 insertions, 3 deletions
diff --git a/include/serd/serd.h b/include/serd/serd.h
index a98b2b8a..b0892573 100644
--- a/include/serd/serd.h
+++ b/include/serd/serd.h
@@ -1566,8 +1566,9 @@ typedef struct SerdReaderImpl SerdReader;
/// Reader options
typedef enum {
- SERD_READ_LAX = 1u << 0u, ///< Tolerate invalid input where possible
- SERD_READ_VARIABLES = 1u << 1u ///< Support variable nodes
+ SERD_READ_LAX = 1u << 0u, ///< Tolerate invalid input where possible
+ SERD_READ_VARIABLES = 1u << 1u, ///< Support variable nodes
+ SERD_READ_EXACT_BLANKS = 1u << 2u, ///< Allow clashes with generated blanks
} SerdReaderFlag;
/// Bitwise OR of SerdReaderFlag values
diff --git a/src/n3.c b/src/n3.c
index 517dce8f..14f5aec1 100644
--- a/src/n3.c
+++ b/src/n3.c
@@ -1090,7 +1090,7 @@ read_BLANK_NODE_LABEL(SerdReader* const reader,
*ate_dot = true;
}
- if (fancy_syntax(reader)) {
+ if (fancy_syntax(reader) && !(reader->flags & SERD_READ_EXACT_BLANKS)) {
if (is_digit(buf[reader->bprefix_len + 1])) {
if ((buf[reader->bprefix_len]) == 'b') {
buf[reader->bprefix_len] = 'B'; // Prevent clash