| ... | @@ -538,18 +538,24 @@ test fmtChar { | ... | @@ -538,18 +538,24 @@ test fmtChar { |
| 538 | } | 538 | } |
| 539 | | 539 | |
| 540 | /// Print the string as escaped contents of a double quoted string. | 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 | pub fn stringEscape(bytes: []const u8, w: *Writer) Writer.Error!void { | 547 | pub fn stringEscape(bytes: []const u8, w: *Writer) Writer.Error!void { |
| 542 | for (bytes) |byte| switch (byte) { | 548 | for (bytes) |byte| switch (byte) { |
| | 549 | '\t' => try w.writeAll("\\t"), |
| 543 | '\n' => try w.writeAll("\\n"), | 550 | '\n' => try w.writeAll("\\n"), |
| 544 | '\r' => try w.writeAll("\\r"), | 551 | '\r' => try w.writeAll("\\r"), |
| 545 | '\t' => try w.writeAll("\\t"), | | |
| 546 | '\\' => try w.writeAll("\\\\"), | 552 | '\\' => try w.writeAll("\\\\"), |
| 547 | '"' => try w.writeAll("\\\""), | 553 | '"' => try w.writeAll("\\\""), |
| 548 | ' ', '!', '#'...'[', ']'...'~' => try w.writeByte(byte), | 554 | 0...8, 11, 12, 14...0x1f, 0x7f => { |
| 549 | else => { | | |
| 550 | try w.writeAll("\\x"); | 555 | try w.writeAll("\\x"); |
| 551 | try w.printInt(byte, 16, .lower, .{ .width = 2, .fill = '0' }); | 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 | |