Index: third_party/json_minify/minify-sans-regexp.js |
diff --git a/third_party/json_minify/minify-sans-regexp.js b/third_party/json_minify/minify-sans-regexp.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..99c817c2eb92ecb9044fb10cfdf3a4f8c152780b |
--- /dev/null |
+++ b/third_party/json_minify/minify-sans-regexp.js |
@@ -0,0 +1,91 @@ |
+/*! |
+ * `JSON.minify()` |
+ * This version does not use regular expressions. |
+ * |
+ * Copyright 2011, Kyle Simpson. |
+ * Copyright 2012, Kit Cambridge. |
+ * |
+ * Released under the MIT License. |
+*/ |
+ |
+;(function () { |
+ var JSON = this.JSON; |
+ |
+ // Create the global JSON object if it doesn't exist. |
+ if (Object(JSON) !== JSON) { |
+ JSON = this.JSON = {}; |
+ } |
+ |
+ JSON.minify = function (source) { |
+ var index = 0, length = source.length, result = "", symbol, position; |
+ while (index < length) { |
+ symbol = source.charAt(index); |
+ switch (symbol) { |
+ // Ignore whitespace tokens. According to ES 5.1 section 15.12.1.1, |
+ // whitespace tokens include tabs, carriage returns, line feeds, and |
+ // space characters. |
+ // ----------------------------------------------------------------- |
+ case "\t": |
+ case "\r": |
+ case "\n": |
+ case " ": |
+ index += 1; |
+ break; |
+ // Ignore line and block comments. |
+ // ------------------------------- |
+ case "/": |
+ symbol = source.charAt(index += 1); |
+ switch (symbol) { |
+ // Line comments. |
+ // ------------- |
+ case "/": |
+ position = source.indexOf("\n", index); |
+ if (position < 0) { |
+ // Check for CR-style line endings. |
+ position = source.indexOf("\r", index); |
+ } |
+ index = position > -1 ? position : length; |
+ break; |
+ // Block comments. |
+ // --------------- |
+ case "*": |
+ position = source.indexOf("*/", index); |
+ if (position > -1) { |
+ // Advance the scanner's position past the end of the comment. |
+ index = position += 2; |
+ break; |
+ } |
+ throw SyntaxError("Unterminated block comment."); |
+ default: |
+ throw SyntaxError("Invalid comment."); |
+ } |
+ break; |
+ // Parse strings separately to ensure that any whitespace characters and |
+ // JavaScript-style comments within them are preserved. |
+ // --------------------------------------------------------------------- |
+ case '"': |
+ position = index; |
+ while (index < length) { |
+ symbol = source.charAt(index += 1); |
+ if (symbol == "\\") { |
+ // Skip past escaped characters. |
+ index += 1; |
+ } else if (symbol == '"') { |
+ break; |
+ } |
+ } |
+ if (source.charAt(index) == '"') { |
+ result += source.slice(position, index += 1); |
+ break; |
+ } |
+ throw SyntaxError("Unterminated string."); |
+ // Preserve all other characters. |
+ // ------------------------------ |
+ default: |
+ result += symbol; |
+ index += 1; |
+ } |
+ } |
+ return result; |
+ }; |
+}).call(this); |