MCPcopy
hub / github.com/pquerna/ffjson / handleEscaped

Method handleEscaped

fflib/v1/reader.go:158–221  ·  view source on GitHub ↗
(c byte, j int, out DecodingBuffer)

Source from the content-addressed store, hash-verified

156}
157
158func (r *ffReader) handleEscaped(c byte, j int, out DecodingBuffer) (int, error) {
159 if j >= r.l {
160 return 0, io.EOF
161 }
162
163 c = r.s[j]
164 j++
165
166 if c == 'u' {
167 ru, err := r.readU4(j)
168 if err != nil {
169 return 0, err
170 }
171
172 if utf16.IsSurrogate(ru) {
173 ru2, err := r.readU4(j + 6)
174 if err != nil {
175 return 0, err
176 }
177 out.Write(r.s[r.i : j-2])
178 r.i = j + 10
179 j = r.i
180 rval := utf16.DecodeRune(ru, ru2)
181 if rval != unicode.ReplacementChar {
182 out.WriteRune(rval)
183 } else {
184 return 0, fmt.Errorf("lex_string_invalid_unicode_surrogate: %v %v", ru, ru2)
185 }
186 } else {
187 out.Write(r.s[r.i : j-2])
188 r.i = j + 4
189 j = r.i
190 out.WriteRune(ru)
191 }
192 return j, nil
193 } else if byteLookupTable[c]&cVEC == 0 {
194 return 0, fmt.Errorf("lex_string_invalid_escaped_char: %v", c)
195 } else {
196 out.Write(r.s[r.i : j-2])
197 r.i = j
198 j = r.i
199
200 switch c {
201 case '"':
202 out.WriteByte('"')
203 case '\\':
204 out.WriteByte('\\')
205 case '/':
206 out.WriteByte('/')
207 case 'b':
208 out.WriteByte('\b')
209 case 'f':
210 out.WriteByte('\f')
211 case 'n':
212 out.WriteByte('\n')
213 case 'r':
214 out.WriteByte('\r')
215 case 't':

Callers 1

SliceStringMethod · 0.95

Calls 4

readU4Method · 0.95
WriteByteMethod · 0.80
WriteRuneMethod · 0.65
WriteMethod · 0.45

Tested by

no test coverage detected