aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/env.c34
-rw-r--r--tests/test-prefix.out2
-rw-r--r--tests/test-prefix.ttl4
3 files changed, 20 insertions, 20 deletions
diff --git a/src/env.c b/src/env.c
index 6afcc77e..7abe6791 100644
--- a/src/env.c
+++ b/src/env.c
@@ -169,36 +169,31 @@ serd_env_set_prefix_from_strings(SerdEnv* env,
static inline bool
is_nameStartChar(const uint8_t c)
{
- // TODO: not strictly correct (see reader.c read_nameStartChar)
- return (c >= 'A' && c <= 'Z') || c == '_' || (c >= 'a' && c <= 'z');
+ return is_alpha(c) || is_digit(c) || c == '_';
}
static inline bool
is_nameChar(const uint8_t c)
{
- // TODO: 0x300-0x036F | 0x203F-0x2040 (see reader.c read_nameChar)
- return is_nameStartChar(c) || c == '-'
- || (c >= '0' && c <= '9') || c == 0xB7;
+ return is_nameStartChar(c) || c == '.' || c == 0xB7;
}
/**
- Return true iff @c buf is a valid Turtle name.
+ Return true iff @c buf is a valid prefixed name suffix.
+ TODO: This is more strict than it should be.
*/
static inline bool
-is_name(const uint8_t* buf,
- size_t len)
+is_name(const uint8_t* buf, size_t len)
{
- if (!is_nameStartChar(buf[0])) {
- return false;
- }
-
- for (size_t i = 1; i < len; ++i) {
- if (!is_nameChar(buf[i])) {
- return false;
+ if (is_nameStartChar(buf[0])) {
+ for (size_t i = 1; i < len; ++i) {
+ if (!is_nameChar(buf[i])) {
+ return false;
+ }
}
+ return true;
}
-
- return true;
+ return false;
}
SERD_API
@@ -217,10 +212,9 @@ serd_env_qualify(const SerdEnv* env,
*prefix_name = env->prefixes[i].name;
suffix->buf = uri->buf + prefix_uri->n_bytes;
suffix->len = uri->n_bytes - prefix_uri->n_bytes;
- if (!is_name(suffix->buf, suffix->len)) {
- continue;
+ if (is_name(suffix->buf, suffix->len)) {
+ return true;
}
- return true;
}
}
}
diff --git a/tests/test-prefix.out b/tests/test-prefix.out
new file mode 100644
index 00000000..9e166588
--- /dev/null
+++ b/tests/test-prefix.out
@@ -0,0 +1,2 @@
+<http://example.org/a/b> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://example.org/Thing> .
+<http://example.org/a/b/c> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://example.org/Thing> .
diff --git a/tests/test-prefix.ttl b/tests/test-prefix.ttl
new file mode 100644
index 00000000..a1d22122
--- /dev/null
+++ b/tests/test-prefix.ttl
@@ -0,0 +1,4 @@
+@prefix eg: <http://example.org/a/> .
+
+<http://example.org/a/b> a <http://example.org/Thing> .
+<http://example.org/a/b/c> a <http://example.org/Thing> . \ No newline at end of file