(StringBuilder builder)
| 686 | */ |
| 687 | // FIXME: This function doesn't appear to support UTF-8 or UTF-32. |
| 688 | private void readEscape(StringBuilder builder) { |
| 689 | int read = input.read(); |
| 690 | |
| 691 | // List from: https://tools.ietf.org/html/rfc7159.html#section-7 |
| 692 | switch (read) { |
| 693 | case 'b': |
| 694 | builder.append("\b"); |
| 695 | break; |
| 696 | |
| 697 | case 'f': |
| 698 | builder.append("\f"); |
| 699 | break; |
| 700 | |
| 701 | case 'n': |
| 702 | builder.append("\n"); |
| 703 | break; |
| 704 | |
| 705 | case 'r': |
| 706 | builder.append("\r"); |
| 707 | break; |
| 708 | |
| 709 | case 't': |
| 710 | builder.append("\t"); |
| 711 | break; |
| 712 | |
| 713 | case 'u': // Unicode digit. The next four characters count. |
| 714 | int result = 0; |
| 715 | int multiplier = 4096; // (16 * 16 * 16) as we start from the thousands and work to units. |
| 716 | for (int i = 0; i < 4; i++) { |
| 717 | int c = input.read(); |
| 718 | int digit = Character.digit(c, 16); |
| 719 | if (digit == -1) { |
| 720 | throw new JsonException((char) c + " is not a hexadecimal digit. " + input); |
| 721 | } |
| 722 | result += digit * multiplier; |
| 723 | multiplier /= 16; |
| 724 | } |
| 725 | builder.append((char) result); |
| 726 | break; |
| 727 | |
| 728 | case '/': |
| 729 | case '\\': |
| 730 | case '"': |
| 731 | builder.append((char) read); |
| 732 | break; |
| 733 | |
| 734 | default: |
| 735 | throw new JsonException("Unexpected escape code: " + (char) read + ". " + input); |
| 736 | } |
| 737 | } |
| 738 | |
| 739 | /** |
| 740 | * Consume whitespace characters from the head of the specified input object. |
no test coverage detected