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/writer.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/writer.c')
-rw-r--r-- | src/writer.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/writer.c b/src/writer.c index 78a8347f..83ad6e20 100644 --- a/src/writer.c +++ b/src/writer.c @@ -284,10 +284,20 @@ write_text(SerdWriter* writer, TextContext ctx, uint8_t in = utf8[i++]; if (ctx == WRITE_LONG_STRING) { - if (in == '\\') { - len += sink("\\\\", 2, writer); continue; - } else if (in == '\"' && i == n_bytes) { - len += sink("\\\"", 2, writer); continue; // '"' at string end + switch (in) { + case '\\': len += sink("\\\\", 2, writer); continue; + case '\b': len += sink("\\b", 2, writer); continue; + case '\n': case '\r': case '\t': case '\f': + len += sink(&in, 1, writer); // Write character as-is + continue; + case '\"': + if (i == n_bytes) { // '"' at string end + len += sink("\\\"", 2, writer); + } else { + len += sink(&in, 1, writer); + } + continue; + default: break; } } else if (ctx == WRITE_STRING) { switch (in) { |