MCPcopy Create free account
hub / github.com/francoispqt/gojay / parseUnicode

Method parseUnicode

decode_string_unicode.go:47–98  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

45}
46
47func (dec *Decoder) parseUnicode() ([]byte, error) {
48 // get unicode after u
49 r, err := dec.getUnicode()
50 if err != nil {
51 return nil, err
52 }
53 // no error start making new string
54 str := make([]byte, 16, 16)
55 i := 0
56 // check if code can be a surrogate utf16
57 if utf16.IsSurrogate(r) {
58 if dec.cursor >= dec.length && !dec.read() {
59 return nil, dec.raiseInvalidJSONErr(dec.cursor)
60 }
61 c := dec.data[dec.cursor]
62 if c != '\\' {
63 i += utf8.EncodeRune(str, r)
64 return str[:i], nil
65 }
66 dec.cursor++
67 if dec.cursor >= dec.length && !dec.read() {
68 return nil, dec.raiseInvalidJSONErr(dec.cursor)
69 }
70 c = dec.data[dec.cursor]
71 if c != 'u' {
72 i += utf8.EncodeRune(str, r)
73 str, err = dec.appendEscapeChar(str[:i], c)
74 if err != nil {
75 dec.err = err
76 return nil, err
77 }
78 i++
79 dec.cursor++
80 return str[:i], nil
81 }
82 dec.cursor++
83 r2, err := dec.getUnicode()
84 if err != nil {
85 return nil, err
86 }
87 combined := utf16.DecodeRune(r, r2)
88 if combined == '\uFFFD' {
89 i += utf8.EncodeRune(str, r)
90 i += utf8.EncodeRune(str, r2)
91 } else {
92 i += utf8.EncodeRune(str, combined)
93 }
94 return str[:i], nil
95 }
96 i += utf8.EncodeRune(str, r)
97 return str[:i], nil
98}

Callers 1

parseEscapedStringMethod · 0.95

Calls 4

getUnicodeMethod · 0.95
readMethod · 0.95
raiseInvalidJSONErrMethod · 0.95
appendEscapeCharMethod · 0.95

Tested by

no test coverage detected