Guest User

Untitled

a guest
Jun 17th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.83 KB | None | 0 0
  1. string parseString() {
  2. auto str = appender!string();
  3. Next:
  4.  
  5. switch(peekChar()) {
  6. case '"':
  7. getChar();
  8. break;
  9. case '\\':
  10. getChar();
  11. auto c = getChar();
  12. switch(c) {
  13. case '"': str.put('"'); break;
  14. case '\\': str.put('\\'); break;
  15. case '/': str.put('/'); break;
  16. case 'b': str.put('\b'); break;
  17. case 'f': str.put('\f'); break;
  18. case 'n': str.put('\n'); break;
  19. case 'r': str.put('\r'); break;
  20. case 't': str.put('\t'); break;
  21. case 'u':
  22. dchar val = 0;
  23. foreach_reverse(i; 0 .. 4) {
  24. auto hex = toupper(getChar());
  25. if(!isxdigit(hex)) error("Expecting hex character");
  26. val += (isdigit(hex) ? hex - '0' : hex - 'A') << (4 * i);
  27. }
  28. char[4] buf = void;
  29. str.put(toUTF8(buf, val)); // *****error here
  30. break;
  31. default:
  32. error(text("Invalid escape sequence '\\", c, "'."));
  33. }
  34. goto Next;
  35. default:
  36. auto c = getChar();
  37. appendJSONChar(&str, c, &error);
  38. goto Next;
  39. }
  40. return str.data;
  41. }
Add Comment
Please, Sign In to add comment