diff options
author | David Robillard <d@drobilla.net> | 2013-03-24 05:53:56 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2013-03-24 05:53:56 +0000 |
commit | 0c9f5eb2eeb4927e51f43ac2cba85cebca873234 (patch) | |
tree | a07bb718fc7ac5dad87664cc8c09d19ad6a91c04 /src/reader.c | |
parent | 217bc5d3bb4ba9be558b120d594239aea46acfa5 (diff) | |
download | serd-0c9f5eb2eeb4927e51f43ac2cba85cebca873234.tar.gz serd-0c9f5eb2eeb4927e51f43ac2cba85cebca873234.tar.bz2 serd-0c9f5eb2eeb4927e51f43ac2cba85cebca873234.zip |
Set SERD_HAS_NEWLINE and SERD_HAS_QUOTE flags when unescaped newlines or quotes are read.
Don't escape legal ASCII characters when writing long literals.
git-svn-id: http://svn.drobilla.net/serd/trunk@439 490d8e77-9747-427b-9fa3-0b8f29cee8a0
Diffstat (limited to 'src/reader.c')
-rw-r--r-- | src/reader.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/reader.c b/src/reader.c index fe2e309b..a2c900c7 100644 --- a/src/reader.c +++ b/src/reader.c @@ -436,9 +436,17 @@ read_utf8_character(SerdReader* reader, Ref dest, uint8_t c) // Read one character (possibly multi-byte) // The first byte, c, has already been eaten by caller static inline SerdStatus -read_character(SerdReader* reader, Ref dest, uint8_t c) +read_character(SerdReader* reader, Ref dest, SerdNodeFlags* flags, uint8_t c) { if (!(c & 0x80)) { + switch (c) { + case 0xA: case 0xD: + *flags |= SERD_HAS_NEWLINE; + break; + case '"': case '\'': + *flags |= SERD_HAS_QUOTE; + break; + } push_byte(reader, dest, c); return SERD_SUCCESS; } else { @@ -533,10 +541,10 @@ read_STRING_LITERAL_LONG(SerdReader* reader, SerdNodeFlags* flags, uint8_t q) } else { *flags |= SERD_HAS_QUOTE; push_byte(reader, ref, c); - read_character(reader, ref, q2); + read_character(reader, ref, flags, q2); } } else { - read_character(reader, ref, eat_byte_safe(reader, c)); + read_character(reader, ref, flags, eat_byte_safe(reader, c)); } } } @@ -568,7 +576,7 @@ read_STRING_LITERAL(SerdReader* reader, SerdNodeFlags* flags, uint8_t q) eat_byte_check(reader, q); return ref; } else { - read_character(reader, ref, eat_byte_safe(reader, c)); + read_character(reader, ref, flags, eat_byte_safe(reader, c)); } } } |