wp/wp-includes/js/codemirror/jsonlint.js
changeset 7 cf61fcea0001
equal deleted inserted replaced
6:490d5cc509ed 7:cf61fcea0001
       
     1 /* Jison generated parser */
       
     2 var jsonlint = (function(){
       
     3 var parser = {trace: function trace() { },
       
     4 yy: {},
       
     5 symbols_: {"error":2,"JSONString":3,"STRING":4,"JSONNumber":5,"NUMBER":6,"JSONNullLiteral":7,"NULL":8,"JSONBooleanLiteral":9,"TRUE":10,"FALSE":11,"JSONText":12,"JSONValue":13,"EOF":14,"JSONObject":15,"JSONArray":16,"{":17,"}":18,"JSONMemberList":19,"JSONMember":20,":":21,",":22,"[":23,"]":24,"JSONElementList":25,"$accept":0,"$end":1},
       
     6 terminals_: {2:"error",4:"STRING",6:"NUMBER",8:"NULL",10:"TRUE",11:"FALSE",14:"EOF",17:"{",18:"}",21:":",22:",",23:"[",24:"]"},
       
     7 productions_: [0,[3,1],[5,1],[7,1],[9,1],[9,1],[12,2],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[15,2],[15,3],[20,3],[19,1],[19,3],[16,2],[16,3],[25,1],[25,3]],
       
     8 performAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) {
       
     9 
       
    10 var $0 = $$.length - 1;
       
    11 switch (yystate) {
       
    12 case 1: // replace escaped characters with actual character
       
    13           this.$ = yytext.replace(/\\(\\|")/g, "$"+"1")
       
    14                      .replace(/\\n/g,'\n')
       
    15                      .replace(/\\r/g,'\r')
       
    16                      .replace(/\\t/g,'\t')
       
    17                      .replace(/\\v/g,'\v')
       
    18                      .replace(/\\f/g,'\f')
       
    19                      .replace(/\\b/g,'\b');
       
    20         
       
    21 break;
       
    22 case 2:this.$ = Number(yytext);
       
    23 break;
       
    24 case 3:this.$ = null;
       
    25 break;
       
    26 case 4:this.$ = true;
       
    27 break;
       
    28 case 5:this.$ = false;
       
    29 break;
       
    30 case 6:return this.$ = $$[$0-1];
       
    31 break;
       
    32 case 13:this.$ = {};
       
    33 break;
       
    34 case 14:this.$ = $$[$0-1];
       
    35 break;
       
    36 case 15:this.$ = [$$[$0-2], $$[$0]];
       
    37 break;
       
    38 case 16:this.$ = {}; this.$[$$[$0][0]] = $$[$0][1];
       
    39 break;
       
    40 case 17:this.$ = $$[$0-2]; $$[$0-2][$$[$0][0]] = $$[$0][1];
       
    41 break;
       
    42 case 18:this.$ = [];
       
    43 break;
       
    44 case 19:this.$ = $$[$0-1];
       
    45 break;
       
    46 case 20:this.$ = [$$[$0]];
       
    47 break;
       
    48 case 21:this.$ = $$[$0-2]; $$[$0-2].push($$[$0]);
       
    49 break;
       
    50 }
       
    51 },
       
    52 table: [{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],12:1,13:2,15:7,16:8,17:[1,14],23:[1,15]},{1:[3]},{14:[1,16]},{14:[2,7],18:[2,7],22:[2,7],24:[2,7]},{14:[2,8],18:[2,8],22:[2,8],24:[2,8]},{14:[2,9],18:[2,9],22:[2,9],24:[2,9]},{14:[2,10],18:[2,10],22:[2,10],24:[2,10]},{14:[2,11],18:[2,11],22:[2,11],24:[2,11]},{14:[2,12],18:[2,12],22:[2,12],24:[2,12]},{14:[2,3],18:[2,3],22:[2,3],24:[2,3]},{14:[2,4],18:[2,4],22:[2,4],24:[2,4]},{14:[2,5],18:[2,5],22:[2,5],24:[2,5]},{14:[2,1],18:[2,1],21:[2,1],22:[2,1],24:[2,1]},{14:[2,2],18:[2,2],22:[2,2],24:[2,2]},{3:20,4:[1,12],18:[1,17],19:18,20:19},{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],13:23,15:7,16:8,17:[1,14],23:[1,15],24:[1,21],25:22},{1:[2,6]},{14:[2,13],18:[2,13],22:[2,13],24:[2,13]},{18:[1,24],22:[1,25]},{18:[2,16],22:[2,16]},{21:[1,26]},{14:[2,18],18:[2,18],22:[2,18],24:[2,18]},{22:[1,28],24:[1,27]},{22:[2,20],24:[2,20]},{14:[2,14],18:[2,14],22:[2,14],24:[2,14]},{3:20,4:[1,12],20:29},{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],13:30,15:7,16:8,17:[1,14],23:[1,15]},{14:[2,19],18:[2,19],22:[2,19],24:[2,19]},{3:5,4:[1,12],5:6,6:[1,13],7:3,8:[1,9],9:4,10:[1,10],11:[1,11],13:31,15:7,16:8,17:[1,14],23:[1,15]},{18:[2,17],22:[2,17]},{18:[2,15],22:[2,15]},{22:[2,21],24:[2,21]}],
       
    53 defaultActions: {16:[2,6]},
       
    54 parseError: function parseError(str, hash) {
       
    55     throw new Error(str);
       
    56 },
       
    57 parse: function parse(input) {
       
    58     var self = this,
       
    59         stack = [0],
       
    60         vstack = [null], // semantic value stack
       
    61         lstack = [], // location stack
       
    62         table = this.table,
       
    63         yytext = '',
       
    64         yylineno = 0,
       
    65         yyleng = 0,
       
    66         recovering = 0,
       
    67         TERROR = 2,
       
    68         EOF = 1;
       
    69 
       
    70     //this.reductionCount = this.shiftCount = 0;
       
    71 
       
    72     this.lexer.setInput(input);
       
    73     this.lexer.yy = this.yy;
       
    74     this.yy.lexer = this.lexer;
       
    75     if (typeof this.lexer.yylloc == 'undefined')
       
    76         this.lexer.yylloc = {};
       
    77     var yyloc = this.lexer.yylloc;
       
    78     lstack.push(yyloc);
       
    79 
       
    80     if (typeof this.yy.parseError === 'function')
       
    81         this.parseError = this.yy.parseError;
       
    82 
       
    83     function popStack (n) {
       
    84         stack.length = stack.length - 2*n;
       
    85         vstack.length = vstack.length - n;
       
    86         lstack.length = lstack.length - n;
       
    87     }
       
    88 
       
    89     function lex() {
       
    90         var token;
       
    91         token = self.lexer.lex() || 1; // $end = 1
       
    92         // if token isn't its numeric value, convert
       
    93         if (typeof token !== 'number') {
       
    94             token = self.symbols_[token] || token;
       
    95         }
       
    96         return token;
       
    97     }
       
    98 
       
    99     var symbol, preErrorSymbol, state, action, a, r, yyval={},p,len,newState, expected;
       
   100     while (true) {
       
   101         // retreive state number from top of stack
       
   102         state = stack[stack.length-1];
       
   103 
       
   104         // use default actions if available
       
   105         if (this.defaultActions[state]) {
       
   106             action = this.defaultActions[state];
       
   107         } else {
       
   108             if (symbol == null)
       
   109                 symbol = lex();
       
   110             // read action for current state and first input
       
   111             action = table[state] && table[state][symbol];
       
   112         }
       
   113 
       
   114         // handle parse error
       
   115         _handle_error:
       
   116         if (typeof action === 'undefined' || !action.length || !action[0]) {
       
   117 
       
   118             if (!recovering) {
       
   119                 // Report error
       
   120                 expected = [];
       
   121                 for (p in table[state]) if (this.terminals_[p] && p > 2) {
       
   122                     expected.push("'"+this.terminals_[p]+"'");
       
   123                 }
       
   124                 var errStr = '';
       
   125                 if (this.lexer.showPosition) {
       
   126                     errStr = 'Parse error on line '+(yylineno+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+expected.join(', ') + ", got '" + this.terminals_[symbol]+ "'";
       
   127                 } else {
       
   128                     errStr = 'Parse error on line '+(yylineno+1)+": Unexpected " +
       
   129                                   (symbol == 1 /*EOF*/ ? "end of input" :
       
   130                                               ("'"+(this.terminals_[symbol] || symbol)+"'"));
       
   131                 }
       
   132                 this.parseError(errStr,
       
   133                     {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});
       
   134             }
       
   135 
       
   136             // just recovered from another error
       
   137             if (recovering == 3) {
       
   138                 if (symbol == EOF) {
       
   139                     throw new Error(errStr || 'Parsing halted.');
       
   140                 }
       
   141 
       
   142                 // discard current lookahead and grab another
       
   143                 yyleng = this.lexer.yyleng;
       
   144                 yytext = this.lexer.yytext;
       
   145                 yylineno = this.lexer.yylineno;
       
   146                 yyloc = this.lexer.yylloc;
       
   147                 symbol = lex();
       
   148             }
       
   149 
       
   150             // try to recover from error
       
   151             while (1) {
       
   152                 // check for error recovery rule in this state
       
   153                 if ((TERROR.toString()) in table[state]) {
       
   154                     break;
       
   155                 }
       
   156                 if (state == 0) {
       
   157                     throw new Error(errStr || 'Parsing halted.');
       
   158                 }
       
   159                 popStack(1);
       
   160                 state = stack[stack.length-1];
       
   161             }
       
   162 
       
   163             preErrorSymbol = symbol; // save the lookahead token
       
   164             symbol = TERROR;         // insert generic error symbol as new lookahead
       
   165             state = stack[stack.length-1];
       
   166             action = table[state] && table[state][TERROR];
       
   167             recovering = 3; // allow 3 real symbols to be shifted before reporting a new error
       
   168         }
       
   169 
       
   170         // this shouldn't happen, unless resolve defaults are off
       
   171         if (action[0] instanceof Array && action.length > 1) {
       
   172             throw new Error('Parse Error: multiple actions possible at state: '+state+', token: '+symbol);
       
   173         }
       
   174 
       
   175         switch (action[0]) {
       
   176 
       
   177             case 1: // shift
       
   178                 //this.shiftCount++;
       
   179 
       
   180                 stack.push(symbol);
       
   181                 vstack.push(this.lexer.yytext);
       
   182                 lstack.push(this.lexer.yylloc);
       
   183                 stack.push(action[1]); // push state
       
   184                 symbol = null;
       
   185                 if (!preErrorSymbol) { // normal execution/no error
       
   186                     yyleng = this.lexer.yyleng;
       
   187                     yytext = this.lexer.yytext;
       
   188                     yylineno = this.lexer.yylineno;
       
   189                     yyloc = this.lexer.yylloc;
       
   190                     if (recovering > 0)
       
   191                         recovering--;
       
   192                 } else { // error just occurred, resume old lookahead f/ before error
       
   193                     symbol = preErrorSymbol;
       
   194                     preErrorSymbol = null;
       
   195                 }
       
   196                 break;
       
   197 
       
   198             case 2: // reduce
       
   199                 //this.reductionCount++;
       
   200 
       
   201                 len = this.productions_[action[1]][1];
       
   202 
       
   203                 // perform semantic action
       
   204                 yyval.$ = vstack[vstack.length-len]; // default to $$ = $1
       
   205                 // default location, uses first token for firsts, last for lasts
       
   206                 yyval._$ = {
       
   207                     first_line: lstack[lstack.length-(len||1)].first_line,
       
   208                     last_line: lstack[lstack.length-1].last_line,
       
   209                     first_column: lstack[lstack.length-(len||1)].first_column,
       
   210                     last_column: lstack[lstack.length-1].last_column
       
   211                 };
       
   212                 r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);
       
   213 
       
   214                 if (typeof r !== 'undefined') {
       
   215                     return r;
       
   216                 }
       
   217 
       
   218                 // pop off stack
       
   219                 if (len) {
       
   220                     stack = stack.slice(0,-1*len*2);
       
   221                     vstack = vstack.slice(0, -1*len);
       
   222                     lstack = lstack.slice(0, -1*len);
       
   223                 }
       
   224 
       
   225                 stack.push(this.productions_[action[1]][0]);    // push nonterminal (reduce)
       
   226                 vstack.push(yyval.$);
       
   227                 lstack.push(yyval._$);
       
   228                 // goto new state = table[STATE][NONTERMINAL]
       
   229                 newState = table[stack[stack.length-2]][stack[stack.length-1]];
       
   230                 stack.push(newState);
       
   231                 break;
       
   232 
       
   233             case 3: // accept
       
   234                 return true;
       
   235         }
       
   236 
       
   237     }
       
   238 
       
   239     return true;
       
   240 }};
       
   241 /* Jison generated lexer */
       
   242 var lexer = (function(){
       
   243 var lexer = ({EOF:1,
       
   244 parseError:function parseError(str, hash) {
       
   245         if (this.yy.parseError) {
       
   246             this.yy.parseError(str, hash);
       
   247         } else {
       
   248             throw new Error(str);
       
   249         }
       
   250     },
       
   251 setInput:function (input) {
       
   252         this._input = input;
       
   253         this._more = this._less = this.done = false;
       
   254         this.yylineno = this.yyleng = 0;
       
   255         this.yytext = this.matched = this.match = '';
       
   256         this.conditionStack = ['INITIAL'];
       
   257         this.yylloc = {first_line:1,first_column:0,last_line:1,last_column:0};
       
   258         return this;
       
   259     },
       
   260 input:function () {
       
   261         var ch = this._input[0];
       
   262         this.yytext+=ch;
       
   263         this.yyleng++;
       
   264         this.match+=ch;
       
   265         this.matched+=ch;
       
   266         var lines = ch.match(/\n/);
       
   267         if (lines) this.yylineno++;
       
   268         this._input = this._input.slice(1);
       
   269         return ch;
       
   270     },
       
   271 unput:function (ch) {
       
   272         this._input = ch + this._input;
       
   273         return this;
       
   274     },
       
   275 more:function () {
       
   276         this._more = true;
       
   277         return this;
       
   278     },
       
   279 less:function (n) {
       
   280         this._input = this.match.slice(n) + this._input;
       
   281     },
       
   282 pastInput:function () {
       
   283         var past = this.matched.substr(0, this.matched.length - this.match.length);
       
   284         return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, "");
       
   285     },
       
   286 upcomingInput:function () {
       
   287         var next = this.match;
       
   288         if (next.length < 20) {
       
   289             next += this._input.substr(0, 20-next.length);
       
   290         }
       
   291         return (next.substr(0,20)+(next.length > 20 ? '...':'')).replace(/\n/g, "");
       
   292     },
       
   293 showPosition:function () {
       
   294         var pre = this.pastInput();
       
   295         var c = new Array(pre.length + 1).join("-");
       
   296         return pre + this.upcomingInput() + "\n" + c+"^";
       
   297     },
       
   298 next:function () {
       
   299         if (this.done) {
       
   300             return this.EOF;
       
   301         }
       
   302         if (!this._input) this.done = true;
       
   303 
       
   304         var token,
       
   305             match,
       
   306             tempMatch,
       
   307             index,
       
   308             col,
       
   309             lines;
       
   310         if (!this._more) {
       
   311             this.yytext = '';
       
   312             this.match = '';
       
   313         }
       
   314         var rules = this._currentRules();
       
   315         for (var i=0;i < rules.length; i++) {
       
   316             tempMatch = this._input.match(this.rules[rules[i]]);
       
   317             if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
       
   318                 match = tempMatch;
       
   319                 index = i;
       
   320                 if (!this.options.flex) break;
       
   321             }
       
   322         }
       
   323         if (match) {
       
   324             lines = match[0].match(/\n.*/g);
       
   325             if (lines) this.yylineno += lines.length;
       
   326             this.yylloc = {first_line: this.yylloc.last_line,
       
   327                            last_line: this.yylineno+1,
       
   328                            first_column: this.yylloc.last_column,
       
   329                            last_column: lines ? lines[lines.length-1].length-1 : this.yylloc.last_column + match[0].length}
       
   330             this.yytext += match[0];
       
   331             this.match += match[0];
       
   332             this.yyleng = this.yytext.length;
       
   333             this._more = false;
       
   334             this._input = this._input.slice(match[0].length);
       
   335             this.matched += match[0];
       
   336             token = this.performAction.call(this, this.yy, this, rules[index],this.conditionStack[this.conditionStack.length-1]);
       
   337             if (this.done && this._input) this.done = false;
       
   338             if (token) return token;
       
   339             else return;
       
   340         }
       
   341         if (this._input === "") {
       
   342             return this.EOF;
       
   343         } else {
       
   344             this.parseError('Lexical error on line '+(this.yylineno+1)+'. Unrecognized text.\n'+this.showPosition(), 
       
   345                     {text: "", token: null, line: this.yylineno});
       
   346         }
       
   347     },
       
   348 lex:function lex() {
       
   349         var r = this.next();
       
   350         if (typeof r !== 'undefined') {
       
   351             return r;
       
   352         } else {
       
   353             return this.lex();
       
   354         }
       
   355     },
       
   356 begin:function begin(condition) {
       
   357         this.conditionStack.push(condition);
       
   358     },
       
   359 popState:function popState() {
       
   360         return this.conditionStack.pop();
       
   361     },
       
   362 _currentRules:function _currentRules() {
       
   363         return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules;
       
   364     },
       
   365 topState:function () {
       
   366         return this.conditionStack[this.conditionStack.length-2];
       
   367     },
       
   368 pushState:function begin(condition) {
       
   369         this.begin(condition);
       
   370     }});
       
   371 lexer.options = {};
       
   372 lexer.performAction = function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {
       
   373 
       
   374 var YYSTATE=YY_START
       
   375 switch($avoiding_name_collisions) {
       
   376 case 0:/* skip whitespace */
       
   377 break;
       
   378 case 1:return 6
       
   379 break;
       
   380 case 2:yy_.yytext = yy_.yytext.substr(1,yy_.yyleng-2); return 4
       
   381 break;
       
   382 case 3:return 17
       
   383 break;
       
   384 case 4:return 18
       
   385 break;
       
   386 case 5:return 23
       
   387 break;
       
   388 case 6:return 24
       
   389 break;
       
   390 case 7:return 22
       
   391 break;
       
   392 case 8:return 21
       
   393 break;
       
   394 case 9:return 10
       
   395 break;
       
   396 case 10:return 11
       
   397 break;
       
   398 case 11:return 8
       
   399 break;
       
   400 case 12:return 14
       
   401 break;
       
   402 case 13:return 'INVALID'
       
   403 break;
       
   404 }
       
   405 };
       
   406 lexer.rules = [/^(?:\s+)/,/^(?:(-?([0-9]|[1-9][0-9]+))(\.[0-9]+)?([eE][-+]?[0-9]+)?\b)/,/^(?:"(?:\\[\\"bfnrt/]|\\u[a-fA-F0-9]{4}|[^\\\0-\x09\x0a-\x1f"])*")/,/^(?:\{)/,/^(?:\})/,/^(?:\[)/,/^(?:\])/,/^(?:,)/,/^(?::)/,/^(?:true\b)/,/^(?:false\b)/,/^(?:null\b)/,/^(?:$)/,/^(?:.)/];
       
   407 lexer.conditions = {"INITIAL":{"rules":[0,1,2,3,4,5,6,7,8,9,10,11,12,13],"inclusive":true}};
       
   408 
       
   409 
       
   410 ;
       
   411 return lexer;})()
       
   412 parser.lexer = lexer;
       
   413 return parser;
       
   414 })();
       
   415 if (typeof require !== 'undefined' && typeof exports !== 'undefined') {
       
   416 exports.parser = jsonlint;
       
   417 exports.parse = function () { return jsonlint.parse.apply(jsonlint, arguments); }
       
   418 exports.main = function commonjsMain(args) {
       
   419     if (!args[1])
       
   420         throw new Error('Usage: '+args[0]+' FILE');
       
   421     if (typeof process !== 'undefined') {
       
   422         var source = require('fs').readFileSync(require('path').join(process.cwd(), args[1]), "utf8");
       
   423     } else {
       
   424         var cwd = require("file").path(require("file").cwd());
       
   425         var source = cwd.join(args[1]).read({charset: "utf-8"});
       
   426     }
       
   427     return exports.parser.parse(source);
       
   428 }
       
   429 if (typeof module !== 'undefined' && require.main === module) {
       
   430   exports.main(typeof process !== 'undefined' ? process.argv.slice(1) : require("system").args);
       
   431 }
       
   432 }