From 5253caf91fe456a75e059fc56cc752e16d740f21 Mon Sep 17 00:00:00 2001 From: Dan Larkin Date: Sun, 1 Nov 2009 11:56:42 -0500 Subject: [PATCH] whitespace, indenting & ; vs. ;; fixes --- src/org/danlarkin/json.clj | 6 +-- src/org/danlarkin/json/decoder.clj | 62 +++++++++++++++--------------- src/org/danlarkin/json/encoder.clj | 12 +++--- test/test.clj | 16 ++++---- 4 files changed, 48 insertions(+), 48 deletions(-) diff --git a/src/org/danlarkin/json.clj b/src/org/danlarkin/json.clj index 8877ab5..5aefe65 100644 --- a/src/org/danlarkin/json.clj +++ b/src/org/danlarkin/json.clj @@ -78,9 +78,9 @@ "Takes a java.io.Reader pointing to JSON-encoded data and returns a clojure datastructure." [reader] - ; Unless we're already dealing with a BufferedReader, wrap the supplied reader in one - ; (this ensures we have a consistent interface supporting mark/reset regardless which - ; subclass of Reader we were passed). For now, we'll use the default buffer length. + ;; Unless we're already dealing with a BufferedReader, wrap the supplied reader in one + ;; (this ensures we have a consistent interface supporting mark/reset regardless which + ;; subclass of Reader we were passed). For now, we'll use the default buffer length. (if (isa? reader BufferedReader) (decoder/decode-from-buffered-reader reader) (decoder/decode-from-buffered-reader (BufferedReader. reader)))) diff --git a/src/org/danlarkin/json/decoder.clj b/src/org/danlarkin/json/decoder.clj index 3ecc9db..4ed0343 100644 --- a/src/org/danlarkin/json/decoder.clj +++ b/src/org/danlarkin/json/decoder.clj @@ -65,7 +65,7 @@ [#^BufferedReader b-reader match-fn] (loop [s ""] (let [_ (.mark b-reader 1) - codepoint (.read b-reader)] + codepoint (.read b-reader)] (cond (= codepoint -1) s (match-fn codepoint) (recur (str s (char codepoint))) @@ -82,39 +82,39 @@ [#^BufferedReader b-reader] (loop [object {}] (let [_ (.mark b-reader 1) - codepoint (.read b-reader)] + codepoint (.read b-reader)] (cond (= codepoint 0x7D) object ; } (= codepoint 0x2C) (recur object) (json-ws? codepoint) (let [_ (eat-whitespace b-reader)] (recur object)) :else (let [_ (.reset b-reader) - _ (eat-whitespace b-reader) - key (decode-value b-reader) - _ (eat-whitespace b-reader) - name-sep (.read b-reader) ; should be : (0x3A) - _ (eat-whitespace b-reader) - value (decode-value b-reader) - _ (eat-whitespace b-reader)] - (when-not (= name-sep 0x3A) - (throw (Exception. "Error parsing object: colon not where expected."))) - (recur (assoc object (keyword key) value))))))) + _ (eat-whitespace b-reader) + key (decode-value b-reader) + _ (eat-whitespace b-reader) + name-sep (.read b-reader) ; should be : (0x3A) + _ (eat-whitespace b-reader) + value (decode-value b-reader) + _ (eat-whitespace b-reader)] + (when-not (= name-sep 0x3A) + (throw (Exception. "Error parsing object: colon not where expected."))) + (recur (assoc object (keyword key) value))))))) (defn- decode-array "Decodes a JSON array and returns a vector." [#^BufferedReader b-reader] (loop [array []] (let [_ (.mark b-reader 1) - codepoint (.read b-reader)] + codepoint (.read b-reader)] (cond (= codepoint 0x5D) array (= codepoint 0x2C) (recur array) - ; next case handles empty array with whitespace between [ and ] + ;; next case handles empty array with whitespace between [ and ] (json-ws? codepoint) (let [_ (eat-whitespace b-reader)] (recur array)) :else (let [_ (.reset b-reader) - _ (eat-whitespace b-reader) - value (decode-value b-reader) - _ (eat-whitespace b-reader)] - (recur (conj array value))))))) + _ (eat-whitespace b-reader) + value (decode-value b-reader) + _ (eat-whitespace b-reader)] + (recur (conj array value))))))) (def unescape-map #^{:private true} @@ -132,15 +132,15 @@ it." [#^BufferedReader b-reader] (let [codepoint (.read b-reader) - map-value (unescape-map codepoint)] + map-value (unescape-map codepoint)] (cond map-value map-value (= codepoint 0x75) (read-string (str - "\\u" - (apply str (take 4 (map - #(char (.read #^BufferedReader %)) - (repeat b-reader))))))))) + "\\u" + (apply str (take 4 (map + #(char (.read #^BufferedReader %)) + (repeat b-reader))))))))) (defn- decode-string "Decodes a JSON string and returns it. NOTE: strings are terminated by a double-quote @@ -159,22 +159,22 @@ match the expectation. Otherwise, the supplied constant value is returned." [#^BufferedReader b-reader #^String expected value] (let [exp-len (count expected) - got (loop [s "" br b-reader len exp-len] - (if (> len 0) - (recur (str s (char (.read br))) br (dec len)) - s))] + got (loop [s "" br b-reader len exp-len] + (if (> len 0) + (recur (str s (char (.read br))) br (dec len)) + s))] (if (= got expected) value (throw (Exception. (str - "Unexpected constant remainder: " got - " expected: " expected)))))) + "Unexpected constant remainder: " got + " expected: " expected)))))) (defn- decode-number "Decodes a number and returns it. NOTE: first character of the number has already read so the first thing we need to do is reset the BufferedReader." [#^BufferedReader b-reader] (let [_ (.reset b-reader) - number-str (read-matching b-reader number-char?)] + number-str (read-matching b-reader number-char?)] (convert-number (read-string number-str)))) (defn- decode-value @@ -183,7 +183,7 @@ [#^BufferedReader b-reader] (let [_ (.mark b-reader 1) int-char (.read b-reader) - char (char int-char)] + char (char int-char)] (cond (= char \{) (decode-object b-reader) (= char \[) (decode-array b-reader) diff --git a/src/org/danlarkin/json/encoder.clj b/src/org/danlarkin/json/encoder.clj index 65281aa..da08f66 100644 --- a/src/org/danlarkin/json/encoder.clj +++ b/src/org/danlarkin/json/encoder.clj @@ -74,8 +74,8 @@ [#^clojure.lang.MapEntry pair #^Writer writer #^String pad #^String current-indent #^Integer indent-size] (let [next-indent (get-next-indent current-indent indent-size) - k (key pair) - ke (if (integer? k) (str k) k)] + k (key pair) + ke (if (integer? k) (str k) k)] (encode-helper ke writer pad current-indent indent-size) (.append writer ":") (encode-helper (val pair) writer pad "" indent-size next-indent))) @@ -101,7 +101,7 @@ \u000C "\\f" \u000D "\\r" \u0022 "\\\"" - \u005C "\\\\" + \u005C "\\\\" }) (defn- escaped-char @@ -125,8 +125,8 @@ (apply str (map escaped-char string))) (defmulti encode-custom - ;Multimethod for encoding classes of objects that - ;aren't handled by the default encode-helper. + ;; Multimethod for encoding classes of objects that + ;; aren't handled by the default encode-helper. (fn [value & _] (type value))) (defmethod @@ -147,7 +147,7 @@ (string? value) (.append writer (str current-indent \" (escaped-str value) \")) (number? value) (.append writer (str current-indent value)) (keyword? value) (.append writer - (str current-indent \" (escaped-str (subs (str value) 1)) \")) + (str current-indent \" (escaped-str (subs (str value) 1)) \")) (symbol? value) (encode-symbol value writer pad) (map-entry? value) (encode-map-entry value writer pad current-indent indent-size) (coll? value) (encode-coll value writer pad next-indent current-indent indent-size) diff --git a/test/test.clj b/test/test.clj index 8655c03..df1b54f 100644 --- a/test/test.clj +++ b/test/test.clj @@ -2,7 +2,7 @@ (:require (org.danlarkin [json :as json])) (:use (clojure test))) -;setup JSON encoder-decoder checker test +;; setup JSON encoder-decoder checker test (defmethod assert-expr :json= [msg form] `(let [values# (list ~@(next form)) @@ -103,19 +103,19 @@ (deftest string-escaping (is (:json= {:key "\""})) (is (= (json/encode-to-str "\"") "\"\\\"\"")) ; single double-quote gets escaped - ; make sure hash-map keys get string-escaped when encoding: + ;; make sure hash-map keys get string-escaped when encoding: (is (= (json/encode-to-str {(keyword "/\\\"") 42}) "{\"/\\\\\\\"\":42}")) (is (= (json/encode-to-str "\u009f\u0078\u0004\u003e\u001e\u0080\u0000") - "\"\u009f\u0078\\u0004\u003e\\u001E\u0080\\u0000\"")) + "\"\u009f\u0078\\u0004\u003e\\u001E\u0080\\u0000\"")) (let [long-str (str "\u0000\u0007\u0008\u0009\u000A\u000B\u000C\u000D\u000E" "\u001F\u0020\u0021\u0022\u0023\u005B\u005C\u005D\u2222") - encoded-long-str (str "\"\\u0000\\u0007\\b\\t\\n\\u000B\\f\\r\\u000E\\u001F" - " !\\\"#\u005B\\\\\u005D\u2222\"")] + encoded-long-str (str "\"\\u0000\\u0007\\b\\t\\n\\u000B\\f\\r\\u000E\\u001F" + " !\\\"#\u005B\\\\\u005D\u2222\"")] (is (= (json/encode-to-str long-str) encoded-long-str)) (is (= (json/decode-from-str encoded-long-str) long-str)) - ; now run long-str through a round-trip test + ;; now run long-str through a round-trip test (is (:json= long-str)) - ; don't loop infinitely if input has an unterminated string: + ;; don't loop infinitely if input has an unterminated string: (is (thrown? Exception (json/decode-from-str "\"\\\\\\\""))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -128,7 +128,7 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; All-in-one ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;; -; from http://www.json.org/JSON_checker/test/pass1.json +;; from http://www.json.org/JSON_checker/test/pass1.json (deftest pass1 (let [string (slurp "test/pass1.json") decoded-json (json/decode-from-str string)