Files
sx/src/unescape.zig
2026-02-16 01:58:30 +02:00

28 lines
735 B
Zig

const std = @import("std");
/// Process escape sequences in a raw string literal.
pub fn unescapeString(allocator: std.mem.Allocator, raw: []const u8) ![]u8 {
var result = try allocator.alloc(u8, raw.len);
var i: usize = 0;
var j: usize = 0;
while (i < raw.len) {
if (raw[i] == '\\' and i + 1 < raw.len) {
i += 1;
result[j] = switch (raw[i]) {
'n' => '\n',
't' => '\t',
'r' => '\r',
'\\' => '\\',
'"' => '"',
'0' => 0,
else => raw[i],
};
} else {
result[j] = raw[i];
}
j += 1;
i += 1;
}
return result[0..j];
}