Last active
August 29, 2015 14:00
-
-
Save mikecrews/04f1212e63ba1effdcc5 to your computer and use it in GitHub Desktop.
JSON serializer adapted for use in Magma framework for Rust game
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // :: In Rust We Trust :: Plugin Dev server for Magma :: net.connect 23.239.114.234:28025 :: | |
| // JSON serializer adapted from https://github.com/douglascrockford/JSON-js 2014-02-04 Public Domain. | |
| // Adapted by mikec @ gomagma.org forum. Steam Group: http://steamcommunity.com/groups/MCIRWT | |
| // Use: var jsonstring = IRWTJSON.stringify(obj); var obj = IRWTJSON.parse(jsonstring); | |
| // Copy this code to the top of any plugin running on your system. All plugins can use it. | |
| // You can even put it in a plugin by itself, with no hooks or other code. | |
| var IRWTJSON = {}; | |
| (function () { | |
| 'use strict'; | |
| function f(n) { | |
| return n < 10 ? '0' + n : n; | |
| } | |
| var cx, escapable, gap, indent, meta, rep; | |
| function quote(string) { | |
| escapable.lastIndex = 0; | |
| return escapable.test(string) ? '"' + string.replace(escapable, function (a) { | |
| var c = meta[a]; | |
| return typeof c === 'string' ? c : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); | |
| }) + '"' : '"' + string + '"'; | |
| } | |
| function str(key, holder) { | |
| var i, k, v, length, mind = gap, partial, value = holder[key]; | |
| if (value && typeof value === 'object' && typeof value.toJSON === 'function') { | |
| value = value.toJSON(key); | |
| } | |
| switch (typeof value) { | |
| case 'string': | |
| return quote(value); | |
| case 'number': | |
| return isFinite(value) ? String(value) : 'null'; | |
| case 'boolean': | |
| case 'null': | |
| return String(value); | |
| case 'object': | |
| if (!value) { return 'null'; } | |
| gap += indent; | |
| partial = []; | |
| if (Object.prototype.toString.apply(value) === '[object Array]') { | |
| length = value.length; | |
| for (i = 0; i < length; i += 1) { | |
| partial[i] = str(i, value) || 'null'; | |
| } | |
| v = partial.length === 0 ? '[]' : gap ? '[ ' + gap + partial.join(', ' + gap) + ' ' + mind + ']' : '[' + partial.join(',') + ']'; | |
| gap = mind; | |
| return v; | |
| } | |
| for (k in value) { | |
| if (Object.prototype.hasOwnProperty.call(value, k)) { | |
| v = str(k, value); | |
| if (v) { partial.push(quote(k) + (gap ? ': ' : ':') + v); } | |
| } | |
| } | |
| v = partial.length === 0 ? '{}' : gap ? '{ ' + gap + partial.join(', ' + gap) + ' ' + mind + '}' : '{' + partial.join(',') + '}'; | |
| gap = mind; | |
| return v; | |
| } | |
| } | |
| if (typeof IRWTJSON.stringify !== 'function') { | |
| escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; | |
| meta = { '\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"' : '\\"', '\\': '\\\\' }; | |
| IRWTJSON.stringify = function (value) { gap = ''; indent = ''; return str('', {'': value}); }; | |
| } | |
| if (typeof IRWTJSON.parse !== 'function') { | |
| cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; | |
| IRWTJSON.parse = function (text, reviver) { | |
| var j; | |
| function walk(holder, key) { | |
| var k, v, value = holder[key]; | |
| if (value && typeof value === 'object') { | |
| for (k in value) { | |
| if (Object.prototype.hasOwnProperty.call(value, k)) { | |
| v = walk(value, k); | |
| if (v !== undefined) { | |
| value[k] = v; | |
| } else { | |
| delete value[k]; | |
| } | |
| } | |
| } | |
| } | |
| return reviver.call(holder, key, value); | |
| } | |
| text = String(text); | |
| cx.lastIndex = 0; | |
| if (cx.test(text)) { | |
| text = text.replace(cx, function (a) { | |
| return '\\u' + | |
| ('0000' + a.charCodeAt(0).toString(16)).slice(-4); | |
| }); | |
| } | |
| if (/^[\],:{}\s]*$/ | |
| .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@') | |
| .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') | |
| .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { | |
| j = eval('(' + text + ')'); | |
| return typeof reviver === 'function' | |
| ? walk({'': j}, '') | |
| : j; | |
| } | |
| throw new SyntaxError('JSON.parse'); | |
| }; | |
| } | |
| }()); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment