DoxigAlpha

outputUnicodeEscape

Function parameters

Parameters

#
codepoint:u21
w:*Writer

Type definitions in this namespace

Types

#

Functions in this namespace

Functions

#
print
An alternative to calling `write` that formats a value with `std.fmt`.
beginWriteRaw
An alternative to calling `write` that allows you to write directly to the `.writer` field, e.g.
endWriteRaw
See `beginWriteRaw`.
objectField
See `Stringify` for when to call this method.
objectFieldRaw
See `Stringify` for when to call this method.
beginObjectFieldRaw
In the rare case that you need to write very long object field names,
endObjectFieldRaw
See `beginObjectFieldRaw`.
write
Renders the given Zig value as JSON.
value
Writes the given value to the `Writer` writer.
valueAlloc
Calls `value` and stores the result in dynamically allocated memory instead
encodeJsonString
Write `string` to `writer` as a JSON encoded string.
encodeJsonStringChars
Write `chars` to `writer` as JSON encoded string characters.

Error sets in this namespace

Error Sets

#

Source

Implementation

#
fn outputUnicodeEscape(codepoint: u21, w: *Writer) Error!void {
    if (codepoint <= 0xFFFF) {
        // If the character is in the Basic Multilingual Plane (U+0000 through U+FFFF),
        // then it may be represented as a six-character sequence: a reverse solidus, followed
        // by the lowercase letter u, followed by four hexadecimal digits that encode the character's code point.
        try w.writeAll("\\u");
        try w.printInt(codepoint, 16, .lower, .{ .width = 4, .fill = '0' });
    } else {
        assert(codepoint <= 0x10FFFF);
        // To escape an extended character that is not in the Basic Multilingual Plane,
        // the character is represented as a 12-character sequence, encoding the UTF-16 surrogate pair.
        const high = @as(u16, @intCast((codepoint - 0x10000) >> 10)) + 0xD800;
        const low = @as(u16, @intCast(codepoint & 0x3FF)) + 0xDC00;
        try w.writeAll("\\u");
        try w.printInt(high, 16, .lower, .{ .width = 4, .fill = '0' });
        try w.writeAll("\\u");
        try w.printInt(low, 16, .lower, .{ .width = 4, .fill = '0' });
    }
}