core :: Text :: json_to_nit_string
self
from a JSON string to a Nit stringassert "\\\"string\\\"".json_to_nit_string == "\"string\""
assert "\\nEscape\\t\\n".json_to_nit_string == "\nEscape\t\n"
assert "\\u0041zu\\uD800\\uDFD3".json_to_nit_string == "Azu𐏓"
# Escapes `self` from a JSON string to a Nit string
#
# assert "\\\"string\\\"".json_to_nit_string == "\"string\""
# assert "\\nEscape\\t\\n".json_to_nit_string == "\nEscape\t\n"
# assert "\\u0041zu\\uD800\\uDFD3".json_to_nit_string == "Azu𐏓"
private fun json_to_nit_string: String do
var res = new FlatBuffer.with_capacity(byte_length)
var i = 0
var ln = self.length
while i < ln do
var char = self[i]
if char == '\\' then
i += 1
char = self[i]
if char == 'b' then
char = 0x08.code_point
else if char == 'f' then
char = 0x0C.code_point
else if char == 'n' then
char = '\n'
else if char == 'r' then
char = '\r'
else if char == 't' then
char = '\t'
else if char == 'u' then
var u16_esc = from_utf16_digit(i + 1)
char = u16_esc.code_point
if char.is_surrogate and i + 10 < ln then
if self[i + 5] == '\\' and self[i + 6] == 'u' then
u16_esc <<= 16
u16_esc += from_utf16_digit(i + 7)
char = u16_esc.to_u32.from_utf16_surr.code_point
i += 6
else
char = 0xFFFD.code_point
end
end
i += 4
end
# `"`, `/` or `\` => Keep `char` as-is.
end
res.add char
i += 1
end
return res.to_s
end
lib/json/static.nit:46,2--91,4