| 30 | return{init:function(source){if(typeof source==='string'){lines=source.replace(/\r\n/g,'\n').replace(/\r/g,'\n').split('\n');}else{lines=source;} |
| 31 | line=-1;nextLine();from=0;},token:function(){var b,c,captures,d,depth,high,i,l,low,q,t;function match(x){var r=x.exec(s),r1;if(r){l=r[0].length;r1=r[1];c=r1.charAt(0);s=s.substr(l);character+=l;from=character-r1.length;return r1;}} |
| 32 | function string(x){var c,j,r='';if(jsonmode&&x!=='"'){warningAt("Strings must use doublequote.",line,character);} |
| 33 | if(xmode===x||xmode==='string'){return it('(punctuator)',x);} |
| 34 | function esc(n){var i=parseInt(s.substr(j+1,n),16);j+=n;if(i>=32&&i<=127&&i!==34&&i!==92&&i!==39){warningAt("Unnecessary escapement.",line,character);} |
| 35 | character+=n;c=String.fromCharCode(i);} |
| 36 | j=0;for(;;){while(j>=s.length){j=0;if(xmode!=='xml'||!nextLine()){errorAt("Unclosed string.",line,from);}} |
| 37 | c=s.charAt(j);if(c===x){character+=1;s=s.substr(j+1);return it('(string)',r,x);} |
| 38 | if(c<' '){if(c==='\n'||c==='\r'){break;} |
| 39 | warningAt("Control character in string: {a}.",line,character+j,s.slice(0,j));}else if(c==='<'){if(option.adsafe&&xmode==='xml'){warningAt("ADsafe string violation.",line,character+j);}else if(s.charAt(j+1)==='/'&&((xmode&&xmode!=='CDATA')||option.adsafe)){warningAt("Expected '<\\/' and instead saw '</'.",line,character);}}else if(c==='\\'){if(option.adsafe&&xmode==='xml'){warningAt("ADsafe string violation.",line,character+j);} |
| 40 | j+=1;character+=1;c=s.charAt(j);switch(c){case'\\':case'\'':case'"':case'/':break;case'b':c='\b';break;case'f':c='\f';break;case'n':c='\n';break;case'r':c='\r';break;case't':c='\t';break;case'u':esc(4);break;case'v':c='\v';break;case'x':if(jsonmode){warningAt("Avoid \\x-.",line,character);} |
| 41 | esc(2);break;default:warningAt("Bad escapement.",line,character);}} |
| 42 | r+=c;character+=1;j+=1;}} |
| 43 | for(;;){if(!s){return it(nextLine()?'(endline)':'(end)','');} |
| 44 | t=match(tx);if(!t){t='';c='';while(s&&s<'!'){s=s.substr(1);} |
| 45 | if(s){errorAt("Unexpected '{a}'.",line,character,s.substr(0,1));}} |