aboutsummaryrefslogtreecommitdiffstats
path: root/src/writer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/writer.c')
-rw-r--r--src/writer.c18
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) {