diff options
author | David Robillard <d@drobilla.net> | 2018-04-01 20:33:33 +0200 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2018-11-25 09:21:03 +0100 |
commit | f6511f88fe6cab53f6e9e2044926876fac59938b (patch) | |
tree | 6aa84e2cda2398ea5fe61c123dbf0d4bc047a569 /src/n3.c | |
parent | dae82c273a7de279627c64a95aa6ae21532d6478 (diff) | |
download | serd-f6511f88fe6cab53f6e9e2044926876fac59938b.tar.gz serd-f6511f88fe6cab53f6e9e2044926876fac59938b.tar.bz2 serd-f6511f88fe6cab53f6e9e2044926876fac59938b.zip |
Merge datatype and/or language into node
This moves closer to the sord API, and is more convenient in most cases.
Diffstat (limited to 'src/n3.c')
-rw-r--r-- | src/n3.c | 12 |
1 files changed, 10 insertions, 2 deletions
@@ -701,7 +701,11 @@ read_0_9(SerdReader* reader, Ref str, bool at_least_one) } static bool -read_number(SerdReader* reader, Ref* dest, Ref* datatype, bool* ate_dot) +read_number(SerdReader* reader, + Ref* dest, + Ref* datatype, + SerdNodeFlags* flags, + bool* ate_dot) { #define XSD_DECIMAL NS_XSD "decimal" #define XSD_DOUBLE NS_XSD "double" @@ -756,6 +760,7 @@ read_number(SerdReader* reader, Ref* dest, Ref* datatype, bool* ate_dot) *datatype = push_node(reader, SERD_URI, XSD_INTEGER, sizeof(XSD_INTEGER) - 1); } + *flags |= SERD_HAS_DATATYPE; *dest = ref; return true; except: @@ -789,11 +794,13 @@ read_literal(SerdReader* reader, Ref* dest, switch (peek_byte(reader)) { case '@': eat_byte_safe(reader, '@'); + *flags |= SERD_HAS_LANGUAGE; TRY_THROW(*lang = read_LANGTAG(reader)); break; case '^': eat_byte_safe(reader, '^'); eat_byte_check(reader, '^'); + *flags |= SERD_HAS_DATATYPE; TRY_THROW(read_iri(reader, datatype, ate_dot)); break; } @@ -1003,7 +1010,7 @@ read_object(SerdReader* reader, ReadContext* ctx, bool emit, bool* ate_dot) break; case '+': case '-': case '.': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': - TRY_THROW(ret = read_number(reader, &o, &datatype, ate_dot)); + TRY_THROW(ret = read_number(reader, &o, &datatype, &flags, ate_dot)); break; case '\"': case '\'': @@ -1020,6 +1027,7 @@ read_object(SerdReader* reader, ReadContext* ctx, bool emit, bool* ate_dot) !memcmp(serd_node_get_string(node), "true", 4)) || (node->n_bytes == 5 && !memcmp(serd_node_get_string(node), "false", 5))) { + flags = flags | SERD_HAS_DATATYPE; node->type = SERD_LITERAL; datatype = push_node( reader, SERD_URI, XSD_BOOLEAN, XSD_BOOLEAN_LEN); |