소스 검색

JsonParser: Support basic escaped string characters.

I didn't implement \uXXXX-style escape in this patch. That's a FIXME.
Andreas Kling 6 년 전
부모
커밋
e9b619c4aa
1개의 변경된 파일37개의 추가작업 그리고 2개의 파일을 삭제
  1. 37 2
      AK/JsonParser.cpp

+ 37 - 2
AK/JsonParser.cpp

@@ -54,9 +54,44 @@ void JsonParser::consume_specific(char expected_ch)
 String JsonParser::consume_quoted_string()
 {
     consume_specific('"');
-    auto string = extract_while([](char ch) { return ch != '"'; });
+    StringBuilder builder;
+    for (;;) {
+        char ch = peek();
+        if (ch == '"')
+            break;
+        if (ch != '\\') {
+            builder.append(consume());
+            continue;
+        }
+        consume();
+        char escaped_ch = consume();
+        switch (escaped_ch) {
+        case 'n':
+            builder.append('\n');
+            break;
+        case 'r':
+            builder.append('\n');
+            break;
+        case 't':
+            builder.append('\t');
+            break;
+        case 'b':
+            builder.append('\b');
+            break;
+        case 'f':
+            builder.append('\f');
+            break;
+        case 'u':
+            // FIXME: Implement \uXXXX
+            ASSERT_NOT_REACHED();
+            break;
+        default:
+            builder.append(escaped_ch);
+            break;
+        }
+    }
     consume_specific('"');
-    return string;
+    return builder.to_string();
 }
 
 JsonValue JsonParser::parse_object()