3 Commits

Author SHA1 Message Date
Zachary Carter
cb82cc205d 1.4.1 2012-05-28 12:30:28 -07:00
Zachary Carter
3899996991 update bundle script 2012-05-28 12:30:05 -07:00
Zachary Carter
14a108f3a4 fix escaping of special characters (issue #22) 2012-05-28 12:27:08 -07:00
7 changed files with 39 additions and 13 deletions

View File

@@ -9,7 +9,15 @@ performAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) {
var $0 = $$.length - 1;
switch (yystate) {
case 1:this.$ = yytext.replace(/\\\\/g, "\\");
case 1: // replace escaped characters with actual character
this.$ = yytext.replace(/\\(\\|")/g, "$"+"1")
.replace(/\\n/g,'\n')
.replace(/\\r/g,'\r')
.replace(/\\t/g,'\t')
.replace(/\\v/g,'\v')
.replace(/\\f/g,'\f')
.replace(/\\b/g,'\b');
break;
case 2:this.$ = Number(yytext);
break;
@@ -367,13 +375,13 @@ var YYSTATE=YY_START
switch($avoiding_name_collisions) {
case 0:/* skip whitespace */
break;
case 1:return 6;
case 1:return 6
break;
case 2:yy_.yytext = yy_.yytext.substr(1,yy_.yyleng-2); return 4;
case 2:yy_.yytext = yy_.yytext.substr(1,yy_.yyleng-2); return 4
break;
case 3: return 17
case 3:return 17
break;
case 4: return 18
case 4:return 18
break;
case 5:return 23
break;

View File

@@ -8,7 +8,7 @@
"lint",
"jsonlint"
],
"version": "1.4.0",
"version": "1.4.1",
"preferGlobal": true,
"repository": {
"type": "git",

View File

@@ -1,9 +1,8 @@
var fs = require('fs');
var sys = require('sys');
var source = "var jsonlint = (function(){var require=true,module=false;var exports={};" +
var source = "var jsonlint = (function(){var require=true,module=false;var exports={};" +
fs.readFileSync(__dirname+'/../lib/jsonlint.js', 'utf8') +
"return exports;})()";
sys.puts(source);
console.log(source);

View File

@@ -9,7 +9,7 @@ frac "."[0-9]+
\"(?:'\\'[\\"bfnrt/]|'\\u'[a-fA-F0-9]{4}|[^\\\0-\x09\x0a-\x1f"])*\" yytext = yytext.substr(1,yyleng-2); return 'STRING'
"{" return '{'
"}" return ''
"}" return '}'
"[" return '['
"]" return ']'
"," return ','

View File

@@ -9,7 +9,15 @@
JSONString
: STRING
{$$ = yytext.replace(/\\\\/g, "\\");}
{ // replace escaped characters with actual character
$$ = yytext.replace(/\\(\\|")/g, "$"+"1")
.replace(/\\n/g,'\n')
.replace(/\\r/g,'\r')
.replace(/\\t/g,'\t')
.replace(/\\v/g,'\v')
.replace(/\\f/g,'\f')
.replace(/\\b/g,'\b');
}
;
JSONNumber

View File

@@ -12,9 +12,20 @@ exports["test escaped backslash"] = function () {
assert.deepEqual(parser.parse(json), {"foo": "\\"});
};
exports["test escaped chars"] = function () {
var json = '{"foo": "\\\\\\\""}';
assert.deepEqual(parser.parse(json), {"foo": '\\\"'});
};
exports["test escaped \\n"] = function () {
var json = '{"foo": "\\\\\\n"}';
assert.deepEqual(parser.parse(json), {"foo": '\\\n'});
};
exports["test string with escaped line break"] = function () {
var json = '{"foo": "bar\\nbar"}';
assert.deepEqual(parser.parse(json), {"foo": "bar\\nbar"});
assert.deepEqual(parser.parse(json), {"foo": "bar\nbar"});
assert.equal(JSON.stringify(parser.parse(json)).length, 18);
};
exports["test string with line break"] = function () {

File diff suppressed because one or more lines are too long