| ... | ... | @@ -538,18 +538,24 @@ test fmtChar { |
| 538 | 538 | } |
| 539 | 539 | |
| 540 | 540 | /// Print the string as escaped contents of a double quoted string. |
| 541 | /// |
| 542 | /// The following transformations are made: |
| 543 | /// * escaped: '\n', '\r', '\t', '\\', '"' |
| 544 | /// * hex-encoded: ascii control characters |
| 545 | /// |
| 546 | /// Everything else is passed through unmodified. |
| 541 | 547 | pub fn stringEscape(bytes: []const u8, w: *Writer) Writer.Error!void { |
| 542 | 548 | for (bytes) |byte| switch (byte) { |
| 549 | '\t' => try w.writeAll("\\t"), |
| 543 | 550 | '\n' => try w.writeAll("\\n"), |
| 544 | 551 | '\r' => try w.writeAll("\\r"), |
| 545 | | '\t' => try w.writeAll("\\t"), |
| 546 | 552 | '\\' => try w.writeAll("\\\\"), |
| 547 | 553 | '"' => try w.writeAll("\\\""), |
| 548 | | ' ', '!', '#'...'[', ']'...'~' => try w.writeByte(byte), |
| 549 | | else => { |
| 554 | 0...8, 11, 12, 14...0x1f, 0x7f => { |
| 550 | 555 | try w.writeAll("\\x"); |
| 551 | 556 | try w.printInt(byte, 16, .lower, .{ .width = 2, .fill = '0' }); |
| 552 | 557 | }, |
| 558 | else => try w.writeByte(byte), |
| 553 | 559 | }; |
| 554 | 560 | } |
| 555 | 561 | |