]> Repositorios git - scryer-prolog.git/commitdiff
Fixed forward slash special case issue, added a bunch of test files that were success...
authorpanasenco <[email protected]>
Tue, 20 Apr 2021 04:46:11 +0000 (21:46 -0700)
committerpanasenco <[email protected]>
Wed, 21 Apr 2021 00:30:41 +0000 (17:30 -0700)
src/lib/json.pl
src/tests/json/fail_bigint.json [new file with mode: 0644]
src/tests/json/pass_alnum.json [new file with mode: 0644]
src/tests/json/pass_bigfloat.json [new file with mode: 0644]
src/tests/json/pass_everything.json [new file with mode: 0644]
src/tests/json/pass_forward_slash.json [new file with mode: 0644]
src/tests/json/pass_hex.json [new file with mode: 0644]
src/tests/json/pass_mandatory_escapes.json [new file with mode: 0644]
src/tests/json/pass_null.json [new file with mode: 0644]
src/tests/json/pass_smallfloat.json [new file with mode: 0644]
src/tests/json/pass_special.json [new file with mode: 0644]

index 1b0340f6e08b18232c03645317a2f7be9709d7d2..a134d30ae85010b7f6a3a69f62a68f5b06d832f3 100644 (file)
@@ -148,7 +148,7 @@ json_characters([Char|Chars]) --> json_character(Char), json_characters(Chars).
 escape_map([
         '"' - '"',
         ('\\') - ('\\'),
-        ('/') - ('/'),
+        ('/') - ('/'), /* Forward slash parsed with or without a preceding backslash, but always generated with. */
         '\b' - 'b',
         '\f' - 'f',
         '\n' - 'n',
@@ -156,9 +156,13 @@ escape_map([
         '\t' - 't' ]).
 
 json_character(PrintChar)  -->
+        { (   nonvar(PrintChar) ->
+              dif(PrintChar, '/') /* Don't generate forward slash without preceding backslash */
+          ;   true
+          ) },
         [PrintChar],
-        { escape_map(EscapeMap),
-          \+ member(PrintChar-_, EscapeMap),
+        { dif(PrintChar, '"'),
+          dif(PrintChar, '\\'),
           char_code(PrintChar, PrintCharCode),
           PrintCharCode in 32..1114111 /* 20.10FFFF */ }.
 json_character(EscapeChar) --> "\\", json_escape(EscapeChar).
diff --git a/src/tests/json/fail_bigint.json b/src/tests/json/fail_bigint.json
new file mode 100644 (file)
index 0000000..09c33d9
--- /dev/null
@@ -0,0 +1 @@
+23456789012E666\r
diff --git a/src/tests/json/pass_alnum.json b/src/tests/json/pass_alnum.json
new file mode 100644 (file)
index 0000000..b37bf50
--- /dev/null
@@ -0,0 +1 @@
+"ABCDEFGHIJKLMNOPQRSTUVWYZabcdefghijklmnopqrstuvwyz0123456789"
diff --git a/src/tests/json/pass_bigfloat.json b/src/tests/json/pass_bigfloat.json
new file mode 100644 (file)
index 0000000..1c996bd
--- /dev/null
@@ -0,0 +1 @@
+1.234567890E+34\r
diff --git a/src/tests/json/pass_everything.json b/src/tests/json/pass_everything.json
new file mode 100644 (file)
index 0000000..086b556
--- /dev/null
@@ -0,0 +1,56 @@
+[
+    "JSON Test Pattern pass1",
+    {"object with 1 member":["array with 1 element"]},
+    {},
+    [],
+    -42,
+    true,
+    false,
+    null,
+    {
+        "integer": 1234567890,
+        "real": -9876.543210,
+        "e": 0.123456789e-12,
+        "E": 1.234567890E+34,
+        "":  23456789012E66,
+        "zero": 0,
+        "one": 1,
+        "space": " ",
+        "quote": "\"",
+        "backslash": "\\",
+        "controls": "\b\f\n\r\t",
+        "slash": "/ & \/",
+        "alpha": "abcdefghijklmnopqrstuvwyz",
+        "ALPHA": "ABCDEFGHIJKLMNOPQRSTUVWYZ",
+        "digit": "0123456789",
+        "special": "`1~!@#$%^&*()_+-={':[,]}|;.</>?",
+        "hex": "\u0123\u4567\u89AB\uCDEF\uabcd\uef4A",
+        "true": true,
+        "false": false,
+        "null": null,
+        "array":[  ],
+        "object":{  },
+        "address": "50 St. James Street",
+        "url": "http://www.JSON.org/",
+        "comment": "// /* <!-- --",
+        "# -- --> */": " ",
+        " s p a c e d " :[1,2 , 3
+
+,
+
+4 , 5        ,          6           ,7        ],
+        "compact": [1,2,3,4,5,6,7],
+        "jsontext": "{\"object with 1 member\":[\"array with 1 element\"]}",
+        "quotes": "&#34; \u0022 %22 0x22 034 &#x22;",
+        "\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"
+: "A key can be any string"
+    },
+    0.5 ,98.6
+,
+99.44
+,
+
+1066
+
+
+,"rosebud"]
diff --git a/src/tests/json/pass_forward_slash.json b/src/tests/json/pass_forward_slash.json
new file mode 100644 (file)
index 0000000..803b324
--- /dev/null
@@ -0,0 +1 @@
+"/ & \/"\r
diff --git a/src/tests/json/pass_hex.json b/src/tests/json/pass_hex.json
new file mode 100644 (file)
index 0000000..e33d13b
--- /dev/null
@@ -0,0 +1 @@
+"\u0123\u4567\u89AB\uCDEF\uabcd\uef4A"\r
diff --git a/src/tests/json/pass_mandatory_escapes.json b/src/tests/json/pass_mandatory_escapes.json
new file mode 100644 (file)
index 0000000..7a3191b
--- /dev/null
@@ -0,0 +1 @@
+" \" \\ \b\f\n\r\t "\r
diff --git a/src/tests/json/pass_null.json b/src/tests/json/pass_null.json
new file mode 100644 (file)
index 0000000..19765bd
--- /dev/null
@@ -0,0 +1 @@
+null
diff --git a/src/tests/json/pass_smallfloat.json b/src/tests/json/pass_smallfloat.json
new file mode 100644 (file)
index 0000000..85a4e51
--- /dev/null
@@ -0,0 +1 @@
+0.123456789e-12\r
diff --git a/src/tests/json/pass_special.json b/src/tests/json/pass_special.json
new file mode 100644 (file)
index 0000000..dbb9e9c
--- /dev/null
@@ -0,0 +1 @@
+"`1~!@#$%^&*()_+-={':[,]}|;.</>?"\r