]> git.r.bdr.sh - rbdr/dotfiles/blame - atom/packages/pretty-json/node_modules/jsonminify/minify.json.js
Remove vim-surround
[rbdr/dotfiles] / atom / packages / pretty-json / node_modules / jsonminify / minify.json.js
CommitLineData
06a3d686
BB
1/*! JSON.minify()
2 v0.1 (c) Kyle Simpson
3 MIT License
4*/
5/**
6 * @name minify.json.js
7 * @author Kei Funagayama <kei.topaz@gmail.com
8 * @overview JSON.minify
9 */
10
11/**
12 * @namespace JSON
13 */
14(function(global){
15 'use strict';
16
17 /**
18 * @function
19 * @memberof JSON
20 * @param {Object} Transformed data. format) json-like
21 * @return {String}
22 *
23 * @example
24 * var json = { // hoge
25 * "foo": "bar",// this is cool
26 * "bar": [
27 * "baz", "bum", "zam" // this is cool
28 * ]
29 * } // hoge
30 *
31 */
32 var minify = function (json) {
33
34 var tokenizer = /"|(\/\*)|(\*\/)|(\/\/)|\n|\r/g,
35 in_string = false,
36 in_multiline_comment = false,
37 in_singleline_comment = false,
38 tmp, tmp2, new_str = [], ns = 0, from = 0, lc, rc
39 ;
40
41 tokenizer.lastIndex = 0;
42
43 while ( tmp = tokenizer.exec(json) ) {
44 lc = RegExp.leftContext;
45 rc = RegExp.rightContext;
46 if (!in_multiline_comment && !in_singleline_comment) {
47 tmp2 = lc.substring(from);
48 if (!in_string) {
49 tmp2 = tmp2.replace(/(\n|\r|\s)*/g,"");
50 }
51 new_str[ns++] = tmp2;
52 }
53 from = tokenizer.lastIndex;
54
55 if (tmp[0] === "\"" && !in_multiline_comment && !in_singleline_comment) {
56 tmp2 = lc.match(/(\\)*$/);
57 if (!in_string || !tmp2 || (tmp2[0].length % 2) === 0) { // start of string with ", or unescaped " character found to end string
58 in_string = !in_string;
59 }
60 from--; // include " character in next catch
61 rc = json.substring(from);
62 }
63 else if (tmp[0] === "/*" && !in_string && !in_multiline_comment && !in_singleline_comment) {
64 in_multiline_comment = true;
65 }
66 else if (tmp[0] === "*/" && !in_string && in_multiline_comment && !in_singleline_comment) {
67 in_multiline_comment = false;
68 }
69 else if (tmp[0] === "//" && !in_string && !in_multiline_comment && !in_singleline_comment) {
70 in_singleline_comment = true;
71 }
72 else if ((tmp[0] === "\n" || tmp[0] === "\r") && !in_string && !in_multiline_comment && in_singleline_comment) {
73 in_singleline_comment = false;
74 }
75 else if (!in_multiline_comment && !in_singleline_comment && !(/\n|\r|\s/.test(tmp[0]))) {
76 new_str[ns++] = tmp[0];
77 }
78 }
79 new_str[ns++] = rc;
80 return new_str.join("");
81 };
82
83 if (typeof module !== 'undefined' && module.exports) {
84 // node
85 module.exports = minify;
86 JSON.minify = minify;
87 } else {
88 // others, export global
89 if (typeof global.JSON === "undefined" || !global.JSON) {
90 global.JSON = {};
91 }
92 global.JSON.minify = minify;
93 }
94})(this);