Skip to content

Commit

Permalink
Merge pull request #2 from freethenation/issue1
Browse files Browse the repository at this point in the history
Fixed Bug with Unicode Characters
  • Loading branch information
freethenation committed Jul 25, 2015
2 parents b8f772d + bb1bdf4 commit 1419b40
Show file tree
Hide file tree
Showing 4 changed files with 114 additions and 109 deletions.
216 changes: 109 additions & 107 deletions lib/durable-json-lint-with-dependencies.js
Expand Up @@ -3894,112 +3894,112 @@ parseStatement: true, parseSourceElement: true */
}));
/* vim: set sw=4 ts=4 et tw=80 : */

(function() {
var parse = typeof(module)=='undefined' ? window.esprima.parse : require('esprima').parse;
var objectKeys = Object.keys || function (obj) {
var keys = [];
for (var key in obj) keys.push(key);
return keys;
};
var forEach = function (xs, fn) {
if (xs.forEach) return xs.forEach(fn);
for (var i = 0; i < xs.length; i++) {
fn.call(xs, xs[i], i, xs);
}
};

var isArray = Array.isArray || function (xs) {
return Object.prototype.toString.call(xs) === '[object Array]';
};

var falafel = function (src, opts, fn, breadthFirstFn) {
if (typeof opts === 'function') {
breadthFirstFn = fn;
fn = opts;
opts = {};
}
if (typeof src === 'object') {
opts = src;
src = opts.source;
delete opts.source;
}
src = src || opts.source;
opts.range = true;
if (typeof src !== 'string') { src = String(src); }
if (!breadthFirstFn) { breadthFirstFn = function(){}; }

var ast = opts.ast || parse(src, opts);
delete opts.ast;

var result = {
chunks : src.split(''),
toString : function () { return result.chunks.join(''); },
inspect : function () { return result.toString(); }
};
var index = 0;

(function walk (node, parent) {
insertHelpers(node, parent, result.chunks);
breadthFirstFn(node);
insertHelpers2(node, parent, result.chunks);
forEach(objectKeys(node), function (key) {
if (key === 'parent') { return; }
var child = node[key];
if (isArray(child)) {
forEach(child, function (c) {
if (c && typeof c.type === 'string') {
walk(c, node);
}
});
}
else if (child && typeof child.type === 'string') {
insertHelpers(child, node, result.chunks);
walk(child, node);
}
});
fn(node);
})(ast, undefined);

return result;
};

function insertHelpers (node, parent, chunks) {
if (!node.range) return;

node.parent = parent;

node.source = function () {
return chunks.slice(
node.range[0], node.range[1]
).join('');
};
}

function insertHelpers2 (node, parent, chunks) {
if (node.update && typeof node.update === 'object') {
var prev = node.update;
forEach(objectKeys(prev), function (key) {
update[key] = prev[key];
});
node.update = update;
}
else {
node.update = update;
}

function update (s) {
chunks[node.range[0]] = s;
for (var i = node.range[0] + 1; i < node.range[1]; i++) {
chunks[i] = '';
}
};
}

//export
if(typeof(module)==='undefined') { window.falafel = falafel; }
else { module.exports = falafel; }

})();
(function() {
var parse = typeof(module)=='undefined' ? window.esprima.parse : require('esprima').parse;
var objectKeys = Object.keys || function (obj) {
var keys = [];
for (var key in obj) keys.push(key);
return keys;
};
var forEach = function (xs, fn) {
if (xs.forEach) return xs.forEach(fn);
for (var i = 0; i < xs.length; i++) {
fn.call(xs, xs[i], i, xs);
}
};

var isArray = Array.isArray || function (xs) {
return Object.prototype.toString.call(xs) === '[object Array]';
};

var falafel = function (src, opts, fn, breadthFirstFn) {
if (typeof opts === 'function') {
breadthFirstFn = fn;
fn = opts;
opts = {};
}
if (typeof src === 'object') {
opts = src;
src = opts.source;
delete opts.source;
}
src = src || opts.source;
opts.range = true;
if (typeof src !== 'string') { src = String(src); }
if (!breadthFirstFn) { breadthFirstFn = function(){}; }

var ast = opts.ast || parse(src, opts);
delete opts.ast;

var result = {
chunks : src.split(''),
toString : function () { return result.chunks.join(''); },
inspect : function () { return result.toString(); }
};
var index = 0;

(function walk (node, parent) {
insertHelpers(node, parent, result.chunks);
breadthFirstFn(node);
insertHelpers2(node, parent, result.chunks);
forEach(objectKeys(node), function (key) {
if (key === 'parent') { return; }
var child = node[key];
if (isArray(child)) {
forEach(child, function (c) {
if (c && typeof c.type === 'string') {
walk(c, node);
}
});
}
else if (child && typeof child.type === 'string') {
insertHelpers(child, node, result.chunks);
walk(child, node);
}
});
fn(node);
})(ast, undefined);

return result;
};

function insertHelpers (node, parent, chunks) {
if (!node.range) return;

node.parent = parent;

node.source = function () {
return chunks.slice(
node.range[0], node.range[1]
).join('');
};
}

function insertHelpers2 (node, parent, chunks) {
if (node.update && typeof node.update === 'object') {
var prev = node.update;
forEach(objectKeys(prev), function (key) {
update[key] = prev[key];
});
node.update = update;
}
else {
node.update = update;
}

function update (s) {
chunks[node.range[0]] = s;
for (var i = node.range[0] + 1; i < node.range[1]; i++) {
chunks[i] = '';
}
};
}

//export
if(typeof(module)==='undefined') { window.falafel = falafel; }
else { module.exports = falafel; }

})();

(function() {
var esprima, falafel, jsonLint;
Expand All @@ -4023,6 +4023,9 @@ else { module.exports = falafel; }
]
};
}
src = src.replace(/[\u0000-\u001f]/g, function(c) {
return JSON.stringify(c).slice(1, -1);
});
wrappedSrc = "(function(){return " + src + '\n})();';
errors = [];
try {
Expand Down Expand Up @@ -4136,7 +4139,6 @@ else { module.exports = falafel; }
node.valid = false;
return node.correct = "";
default:
console.log(node.type);
node.valid = false;
return createError(node, "fail", "A \"" + node.type + "\" is an invalid Json element.");
}
Expand Down
4 changes: 3 additions & 1 deletion lib/durable-json-lint.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Expand Up @@ -6,7 +6,7 @@
"type": "git"
, "url": "https://github.com/freethenation/durable-json-lint.git"
},
"version": "0.0.1",
"version": "0.0.2",
"private": false,
"dependencies": {
"free-falafel": "0.1.6",
Expand Down
1 change: 1 addition & 0 deletions src/durable-json-lint.coffee
Expand Up @@ -2,6 +2,7 @@ esprima = if typeof module == 'undefined' then window.esprima else require('espr
falafel = if typeof module == 'undefined' then window.falafel else require('free-falafel')
jsonLint=(src)->
if !src or /^\s*$/.test(src) then return {json:null, errors:[{lineNumber:1,column:1,description:"An empty string is not valid Json",status:"crash"}]}
src = src.replace(/[\u0000-\u001f]/g, (c)->JSON.stringify(c).slice(1,-1)) #escape troublesome characters
wrappedSrc = "(function(){return "+src+'\n})();'
errors = []
try
Expand Down

0 comments on commit 1419b40

Please sign in to comment.