(c byte, j int, out DecodingBuffer)
| 156 | } |
| 157 | |
| 158 | func (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': |
no test coverage detected