diff options
author | David Robillard <d@drobilla.net> | 2013-03-30 15:34:51 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2013-03-30 15:34:51 +0000 |
commit | 326d672cc93ebea8309c98c4549d30e7dc9c2eba (patch) | |
tree | 6c35739d23d056eb2e75b0ec3e77d1af572ba7af | |
parent | d9015f088eb9fe9b2eeea2c2508bd0e0d94f709f (diff) | |
download | serd-326d672cc93ebea8309c98c4549d30e7dc9c2eba.tar.gz serd-326d672cc93ebea8309c98c4549d30e7dc9c2eba.tar.bz2 serd-326d672cc93ebea8309c98c4549d30e7dc9c2eba.zip |
Implement case-insensitive language tags from new Turtle spec.
git-svn-id: http://svn.drobilla.net/serd/trunk@444 490d8e77-9747-427b-9fa3-0b8f29cee8a0
-rw-r--r-- | src/reader.c | 10 | ||||
-rw-r--r-- | tests/tests-ttl/langtagged_LONG_with_subtag.nt | 1 | ||||
-rw-r--r-- | tests/tests-ttl/langtagged_LONG_with_subtag.ttl | 3 | ||||
-rw-r--r-- | tests/tests-ttl/manifest.ttl | 8 |
4 files changed, 16 insertions, 6 deletions
diff --git a/src/reader.c b/src/reader.c index a2c900c7..6233cf30 100644 --- a/src/reader.c +++ b/src/reader.c @@ -736,12 +736,11 @@ read_PN_PREFIX(SerdReader* reader, Ref dest) return SERD_FAILURE; } -// [29] language ::= [a-z]+ ('-' [a-z0-9]+ )* static Ref -read_language(SerdReader* reader) +read_LANGTAG(SerdReader* reader) { uint8_t c = peek_byte(reader); - if (!in_range(c, 'a', 'z')) { + if (!is_alpha(c)) { return r_err(reader, SERD_ERR_BAD_SYNTAX, "unexpected `%c'\n", c); } Ref ref = push_node(reader, SERD_LITERAL, "", 0); @@ -751,8 +750,7 @@ read_language(SerdReader* reader) } while (peek_byte(reader) == '-') { push_byte(reader, ref, eat_byte_safe(reader, '-')); - while ((c = peek_byte(reader)) && ( - in_range(c, 'a', 'z') || in_range(c, '0', '9'))) { + while ((c = peek_byte(reader)) && (is_alpha(c) || is_digit(c))) { push_byte(reader, ref, eat_byte_safe(reader, c)); } } @@ -916,7 +914,7 @@ read_literal(SerdReader* reader, Ref* dest, switch (peek_byte(reader)) { case '@': eat_byte_safe(reader, '@'); - TRY_THROW(*lang = read_language(reader)); + TRY_THROW(*lang = read_LANGTAG(reader)); break; case '^': eat_byte_safe(reader, '^'); diff --git a/tests/tests-ttl/langtagged_LONG_with_subtag.nt b/tests/tests-ttl/langtagged_LONG_with_subtag.nt new file mode 100644 index 00000000..629cbf42 --- /dev/null +++ b/tests/tests-ttl/langtagged_LONG_with_subtag.nt @@ -0,0 +1 @@ +<http://example.org/ex#a> <http://example.org/ex#b> "Cheers"@en-UK . diff --git a/tests/tests-ttl/langtagged_LONG_with_subtag.ttl b/tests/tests-ttl/langtagged_LONG_with_subtag.ttl new file mode 100644 index 00000000..7fd527c4 --- /dev/null +++ b/tests/tests-ttl/langtagged_LONG_with_subtag.ttl @@ -0,0 +1,3 @@ +# Test long literal with lang tag +@prefix : <http://example.org/ex#> . +:a :b """Cheers"""@en-UK . diff --git a/tests/tests-ttl/manifest.ttl b/tests/tests-ttl/manifest.ttl index 195edc9e..7b9a5f4b 100644 --- a/tests/tests-ttl/manifest.ttl +++ b/tests/tests-ttl/manifest.ttl @@ -286,6 +286,7 @@ <#LITERAL_LONG2_with_REVERSE_SOLIDUS> <#turtle-syntax-bad-LITERAL2_with_langtag_and_datatype> <#two_LITERAL_LONG2s> + <#langtagged_LONG_with_subtag> # tests from David Robillard # http://www.w3.org/2011/rdf-wg/wiki/Turtle_Candidate_Recommendation_Comments#c21 @@ -1902,6 +1903,13 @@ mf:result <two_LITERAL_LONG2s.nt> ; . +<#langtagged_LONG_with_subtag> rdf:type rdft:TestTurtleEval ; + mf:name "langtagged_LONG_with_subtag" ; + rdfs:comment "langtagged LONG with subtag \"\"\"Cheers\"\"\"@en-UK" ; + mf:action <langtagged_LONG_with_subtag.ttl> ; + mf:result <langtagged_LONG_with_subtag.nt> ; + . + # tests from David Robillard # http://www.w3.org/2011/rdf-wg/wiki/Turtle_Candidate_Recommendation_Comments#c21 <#turtle-syntax-bad-blank-label-dot-end> |