diff --git a/src/preserves/private/parsing.nim b/src/preserves/private/parsing.nim index 3472336..f90b026 100644 --- a/src/preserves/private/parsing.nim +++ b/src/preserves/private/parsing.nim @@ -38,11 +38,19 @@ template unescape*(buf: var string; capture: string) = of 't': add(buf, char 0x09) of '"': add(buf, char 0x22) of 'u': - var r: int32 + var + long: uint32 + short: uint16 inc(i) - discard parseHex(capture, r, i, 4) + discard parseHex(capture, short, i, 4) inc(i, 3) - add(buf, Rune r) + long = uint32(short) + if capture[i] == 'u': + inc(i) + discard parseHex(capture, short, i, 4) + inc(i, 3) + long = (long shl 16) or uint32(short) + add(buf, long.Rune.toUtf8) else: validate(false) else: