juicer 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -1
- data/lib/juicer.rb +1 -1
- metadata +1 -7
- data/test/bin/jslint.js +0 -474
- data/test/bin/rhino1_7R1.zip +0 -0
- data/test/bin/rhino1_7R2-RC1.zip +0 -0
- data/test/bin/yuicompressor +0 -238
- data/test/bin/yuicompressor-2.3.5.zip +0 -0
- data/test/bin/yuicompressor-2.4.2.zip +0 -0
data/Rakefile
CHANGED
@@ -22,7 +22,7 @@ PROJ.url = 'http://www.cjohansen.no/en/projects/juicer'
|
|
22
22
|
PROJ.version = Juicer::VERSION
|
23
23
|
PROJ.rubyforge.name = 'juicer'
|
24
24
|
PROJ.readme_file = 'Readme.rdoc'
|
25
|
-
PROJ.exclude = %w(tmp$ bak$ ~$ CVS \.svn ^pkg ^doc \.git ^rcov ^test\/data gemspec ^test\/bin
|
25
|
+
PROJ.exclude = %w(tmp$ bak$ ~$ CVS \.svn ^pkg ^doc \.git ^rcov ^test\/data gemspec ^test\/bin)
|
26
26
|
PROJ.rdoc.remote_dir = 'juicer'
|
27
27
|
|
28
28
|
PROJ.spec.opts << '--color'
|
data/lib/juicer.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: juicer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christian Johansen
|
@@ -106,12 +106,6 @@ files:
|
|
106
106
|
- tasks/svn.rake
|
107
107
|
- tasks/test.rake
|
108
108
|
- tasks/test/setup.rake
|
109
|
-
- test/bin/jslint.js
|
110
|
-
- test/bin/rhino1_7R1.zip
|
111
|
-
- test/bin/rhino1_7R2-RC1.zip
|
112
|
-
- test/bin/yuicompressor
|
113
|
-
- test/bin/yuicompressor-2.3.5.zip
|
114
|
-
- test/bin/yuicompressor-2.4.2.zip
|
115
109
|
- test/juicer/command/test_install.rb
|
116
110
|
- test/juicer/command/test_list.rb
|
117
111
|
- test/juicer/command/test_merge.rb
|
data/test/bin/jslint.js
DELETED
@@ -1,474 +0,0 @@
|
|
1
|
-
// (C)2002 Douglas Crockford
|
2
|
-
// www.JSLint.com
|
3
|
-
// Rhino Edition
|
4
|
-
"use strict";JSLINT=function(){var adsafe_id,adsafe_may,adsafe_went,anonname,approved,atrule={'import':true,media:true,'font-face':true,page:true},badbreak={')':true,']':true,'++':true,'--':true},banned={apply:true,'arguments':true,call:true,callee:true,caller:true,constructor:true,'eval':true,prototype:true,unwatch:true,valueOf:true,watch:true},boolOptions={adsafe:true,bitwise:true,browser:true,cap:true,css:true,debug:true,eqeqeq:true,evil:true,forin:true,fragment:true,laxbreak:true,newcap:true,nomen:true,on:true,onevar:true,passfail:true,plusplus:true,regexp:true,rhino:true,undef:true,safe:true,sidebar:true,strict:true,sub:true,white:true,widget:true},browser={alert:true,blur:true,clearInterval:true,clearTimeout:true,close:true,closed:true,confirm:true,console:true,Debug:true,defaultStatus:true,document:true,event:true,focus:true,frames:true,getComputedStyle:true,history:true,Image:true,length:true,location:true,moveBy:true,moveTo:true,name:true,navigator:true,onblur:true,onerror:true,onfocus:true,onload:true,onresize:true,onunload:true,open:true,opener:true,opera:true,Option:true,parent:true,print:true,prompt:true,resizeBy:true,resizeTo:true,screen:true,scroll:true,scrollBy:true,scrollTo:true,self:true,setInterval:true,setTimeout:true,status:true,top:true,window:true,XMLHttpRequest:true},cssAttributeData,cssAny,cssColorData={"aliceblue":true,"antiquewhite":true,"aqua":true,"aquamarine":true,"azure":true,"beige":true,"bisque":true,"black":true,"blanchedalmond":true,"blue":true,"blueviolet":true,"brown":true,"burlywood":true,"cadetblue":true,"chartreuse":true,"chocolate":true,"coral":true,"cornflowerblue":true,"cornsilk":true,"crimson":true,"cyan":true,"darkblue":true,"darkcyan":true,"darkgoldenrod":true,"darkgray":true,"darkgreen":true,"darkkhaki":true,"darkmagenta":true,"darkolivegreen":true,"darkorange":true,"darkorchid":true,"darkred":true,"darksalmon":true,"darkseagreen":true,"darkslateblue":true,"darkslategray":true,"darkturquoise":true,"darkviolet":true,"deeppink":true,"deepskyblue":true,"dimgray":true,"dodgerblue":true,"firebrick":true,"floralwhite":true,"forestgreen":true,"fuchsia":true,"gainsboro":true,"ghostwhite":true,"gold":true,"goldenrod":true,"gray":true,"green":true,"greenyellow":true,"honeydew":true,"hotpink":true,"indianred":true,"indigo":true,"ivory":true,"khaki":true,"lavender":true,"lavenderblush":true,"lawngreen":true,"lemonchiffon":true,"lightblue":true,"lightcoral":true,"lightcyan":true,"lightgoldenrodyellow":true,"lightgreen":true,"lightpink":true,"lightsalmon":true,"lightseagreen":true,"lightskyblue":true,"lightslategray":true,"lightsteelblue":true,"lightyellow":true,"lime":true,"limegreen":true,"linen":true,"magenta":true,"maroon":true,"mediumaquamarine":true,"mediumblue":true,"mediumorchid":true,"mediumpurple":true,"mediumseagreen":true,"mediumslateblue":true,"mediumspringgreen":true,"mediumturquoise":true,"mediumvioletred":true,"midnightblue":true,"mintcream":true,"mistyrose":true,"moccasin":true,"navajowhite":true,"navy":true,"oldlace":true,"olive":true,"olivedrab":true,"orange":true,"orangered":true,"orchid":true,"palegoldenrod":true,"palegreen":true,"paleturquoise":true,"palevioletred":true,"papayawhip":true,"peachpuff":true,"peru":true,"pink":true,"plum":true,"powderblue":true,"purple":true,"red":true,"rosybrown":true,"royalblue":true,"saddlebrown":true,"salmon":true,"sandybrown":true,"seagreen":true,"seashell":true,"sienna":true,"silver":true,"skyblue":true,"slateblue":true,"slategray":true,"snow":true,"springgreen":true,"steelblue":true,"tan":true,"teal":true,"thistle":true,"tomato":true,"turquoise":true,"violet":true,"wheat":true,"white":true,"whitesmoke":true,"yellow":true,"yellowgreen":true},cssBorderStyle,cssLengthData={'%':true,'cm':true,'em':true,'ex':true,'in':true,'mm':true,'pc':true,'pt':true,'px':true},escapes={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','/':'\\/','\\':'\\\\'},funct,functions,global,htmltag={a:{},abbr:{},acronym:{},address:{},applet:{},area:{empty:true,parent:' map '},b:{},base:{empty:true,parent:' head '},bdo:{},big:{},blockquote:{},body:{parent:' html noframes '},br:{empty:true},button:{},canvas:{parent:' body p div th td '},caption:{parent:' table '},center:{},cite:{},code:{},col:{empty:true,parent:' table colgroup '},colgroup:{parent:' table '},dd:{parent:' dl '},del:{},dfn:{},dir:{},div:{},dl:{},dt:{parent:' dl '},em:{},embed:{},fieldset:{},font:{},form:{},frame:{empty:true,parent:' frameset '},frameset:{parent:' html frameset '},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},head:{parent:' html '},html:{parent:'*'},hr:{empty:true},i:{},iframe:{},img:{empty:true},input:{empty:true},ins:{},kbd:{},label:{},legend:{parent:' fieldset '},li:{parent:' dir menu ol ul '},link:{empty:true,parent:' head '},map:{},menu:{},meta:{empty:true,parent:' head noframes noscript '},noframes:{parent:' html body '},noscript:{parent:' body head noframes '},object:{},ol:{},optgroup:{parent:' select '},option:{parent:' optgroup select '},p:{},param:{empty:true,parent:' applet object '},pre:{},q:{},samp:{},script:{empty:true,parent:' body div frame head iframe p pre span '},select:{},small:{},span:{},strong:{},style:{parent:' head ',empty:true},sub:{},sup:{},table:{},tbody:{parent:' table '},td:{parent:' tr '},textarea:{},tfoot:{parent:' table '},th:{parent:' tr '},thead:{parent:' table '},title:{parent:' head '},tr:{parent:' table tbody thead tfoot '},tt:{},u:{},ul:{},'var':{}},ids,implied,inblock,indent,jsonmode,lines,lookahead,member,membersOnly,nexttoken,noreach,option,predefined,prereg,prevtoken,pseudorule={'first-child':true,link:true,visited:true,hover:true,active:true,focus:true,lang:true,'first-letter':true,'first-line':true,before:true,after:true},rhino={defineClass:true,deserialize:true,gc:true,help:true,load:true,loadClass:true,print:true,quit:true,readFile:true,readUrl:true,runCommand:true,seal:true,serialize:true,spawn:true,sync:true,toint32:true,version:true},scope,sidebar={System:true},src,stack,standard={Array:true,Boolean:true,Date:true,decodeURI:true,decodeURIComponent:true,encodeURI:true,encodeURIComponent:true,Error:true,'eval':true,EvalError:true,Function:true,isFinite:true,isNaN:true,JSON:true,Math:true,Number:true,Object:true,parseInt:true,parseFloat:true,RangeError:true,ReferenceError:true,RegExp:true,String:true,SyntaxError:true,TypeError:true,URIError:true},standard_member={E:true,LN2:true,LN10:true,LOG2E:true,LOG10E:true,PI:true,SQRT1_2:true,SQRT2:true,MAX_VALUE:true,MIN_VALUE:true,NEGATIVE_INFINITY:true,POSITIVE_INFINITY:true},syntax={},tab,token,urls,warnings,widget={alert:true,animator:true,appleScript:true,beep:true,bytesToUIString:true,Canvas:true,chooseColor:true,chooseFile:true,chooseFolder:true,closeWidget:true,COM:true,convertPathToHFS:true,convertPathToPlatform:true,CustomAnimation:true,escape:true,FadeAnimation:true,filesystem:true,focusWidget:true,form:true,FormField:true,Frame:true,HotKey:true,Image:true,include:true,isApplicationRunning:true,iTunes:true,konfabulatorVersion:true,log:true,MenuItem:true,MoveAnimation:true,openURL:true,play:true,Point:true,popupMenu:true,preferenceGroups:true,preferences:true,print:true,prompt:true,random:true,reloadWidget:true,ResizeAnimation:true,resolvePath:true,resumeUpdates:true,RotateAnimation:true,runCommand:true,runCommandInBg:true,saveAs:true,savePreferences:true,screen:true,ScrollBar:true,showWidgetPreferences:true,sleep:true,speak:true,suppressUpdates:true,system:true,tellWidget:true,Text:true,TextArea:true,Timer:true,unescape:true,updateNow:true,URL:true,widget:true,Window:true,XMLDOM:true,XMLHttpRequest:true,yahooCheckLogin:true,yahooLogin:true,yahooLogout:true},xmode,xquote,ax=/@cc|<\/?|script|\]*s\]|<\s*!|</i,cx=/[\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/,tx=/^\s*([(){}\[.,:;'"~\?\]#@]|==?=?|\/(\*(global|extern|jslint|member|members)?|=|\/)?|\*[\/=]?|\+[+=]?|-[\-=]?|%=?|&[&=]?|\|[|=]?|>>?>?=?|<([\/=!]|\!(\[|--)?|<=?)?|\^=?|\!=?=?|[a-zA-Z_$][a-zA-Z0-9_$]*|[0-9]+([xX][0-9a-fA-F]+|\.[0-9]*)?([eE][+\-]?[0-9]+)?)/,hx=/^\s*(['"=>\/&#]|<(?:\/|\!(?:--)?)?|[a-zA-Z][a-zA-Z0-9_\-]*|[0-9]+|--|.)/,ox=/[>&]|<[\/!]?|--/,lx=/\*\/|\/\*/,ix=/^([a-zA-Z_$][a-zA-Z0-9_$]*)$/,jx=/^(?:javascript|jscript|ecmascript|vbscript|mocha|livescript)\s*:/i,ux=/&|\+|\u00AD|\.\.|\/\*|%[^;]|base64|url|expression|data|mailto/i,sx=/^\s*([{:#*%.=,>+\[\]@()"';*]|[a-zA-Z0-9_][a-zA-Z0-9_\-]*|<\/|\/\*)/,ssx=/^\s*([@#!"'};:\-\/%.=,+\[\]()*_]|[a-zA-Z][a-zA-Z0-9._\-]*|\d+(?:\.\d+)?|<\/)/,qx=/[\[\]\/\\"'*<>.&:(){}+=#_]/,dx=/[\[\]\/\\"'*<>.&:(){}+=#]/,rx={outer:hx,html:hx,style:sx,styleproperty:ssx};function F(){}
|
5
|
-
if(typeof Object.create!=='function'){Object.create=function(o){F.prototype=o;return new F();};}
|
6
|
-
function combine(t,o){var n;for(n in o){if(o.hasOwnProperty(n)){t[n]=o[n];}}}
|
7
|
-
String.prototype.entityify=function(){return this.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>');};String.prototype.isAlpha=function(){return(this>='a'&&this<='z\uffff')||(this>='A'&&this<='Z\uffff');};String.prototype.isDigit=function(){return(this>='0'&&this<='9');};String.prototype.supplant=function(o){return this.replace(/\{([^{}]*)\}/g,function(a,b){var r=o[b];return typeof r==='string'||typeof r==='number'?r:a;});};String.prototype.name=function(){if(ix.test(this)){return this;}
|
8
|
-
if(/[&<"\/\\\x00-\x1f]/.test(this)){return'"'+this.replace(/[&<"\/\\\x00-\x1f]/g,function(a){var c=escapes[a];if(c){return c;}
|
9
|
-
c=a.charCodeAt();return'\\u00'+
|
10
|
-
Math.floor(c/16).toString(16)+
|
11
|
-
(c%16).toString(16);})+'"';}
|
12
|
-
return'"'+this+'"';};function assume(){if(!option.safe){if(option.rhino){combine(predefined,rhino);}
|
13
|
-
if(option.browser||option.sidebar){combine(predefined,browser);}
|
14
|
-
if(option.sidebar){combine(predefined,sidebar);}
|
15
|
-
if(option.widget){combine(predefined,widget);}}}
|
16
|
-
function quit(m,l,ch){throw{name:'JSLintError',line:l,character:ch,message:m+" ("+Math.floor((l/lines.length)*100)+"% scanned)."};}
|
17
|
-
function warning(m,t,a,b,c,d){var ch,l,w;t=t||nexttoken;if(t.id==='(end)'){t=token;}
|
18
|
-
l=t.line||0;ch=t.from||0;w={id:'(error)',raw:m,evidence:lines[l]||'',line:l,character:ch,a:a,b:b,c:c,d:d};w.reason=m.supplant(w);JSLINT.errors.push(w);if(option.passfail){quit('Stopping. ',l,ch);}
|
19
|
-
warnings+=1;if(warnings===50){quit("Too many errors.",l,ch);}
|
20
|
-
return w;}
|
21
|
-
function warningAt(m,l,ch,a,b,c,d){return warning(m,{line:l,from:ch},a,b,c,d);}
|
22
|
-
function error(m,t,a,b,c,d){var w=warning(m,t,a,b,c,d);quit("Stopping, unable to continue.",w.line,w.character);}
|
23
|
-
function errorAt(m,l,ch,a,b,c,d){return error(m,{line:l,from:ch},a,b,c,d);}
|
24
|
-
var lex=function lex(){var character,from,line,s;function nextLine(){var at;line+=1;if(line>=lines.length){return false;}
|
25
|
-
character=0;s=lines[line].replace(/\t/g,tab);at=s.search(cx);if(at>=0){warningAt("Unsafe character.",line,at);}
|
26
|
-
return true;}
|
27
|
-
function it(type,value){var i,t;if(type==='(color)'){t={type:type};}else if(type==='(punctuator)'||(type==='(identifier)'&&syntax.hasOwnProperty(value))){t=syntax[value]||syntax['(error)'];if(!t.id){t=syntax[type];}}else{t=syntax[type];}
|
28
|
-
t=Object.create(t);if(type==='(string)'||type==='(range)'){if(jx.test(value)){warningAt("Script URL.",line,from);}}
|
29
|
-
if(type==='(identifier)'){t.identifier=true;if(option.nomen&&value.charAt(0)==='_'){warningAt("Unexpected '_' in '{a}'.",line,from,value);}}
|
30
|
-
t.value=value;t.line=line;t.character=character;t.from=from;i=t.id;if(i!=='(endline)'){prereg=i&&(('(,=:[!&|?{};'.indexOf(i.charAt(i.length-1))>=0)||i==='return');}
|
31
|
-
return t;}
|
32
|
-
return{init:function(source){if(typeof source==='string'){lines=source.replace(/\r\n/g,'\n').replace(/\r/g,'\n').split('\n');}else{lines=source;}
|
33
|
-
line=-1;nextLine();from=0;},range:function(begin,end){var c,value='';from=character;if(s.charAt(0)!==begin){errorAt("Expected '{a}' and instead saw '{b}'.",line,character,begin,s.charAt(0));}
|
34
|
-
for(;;){s=s.slice(1);character+=1;c=s.charAt(0);switch(c){case'':errorAt("Missing '{a}'.",line,character,c);break;case end:s=s.slice(1);character+=1;return it('(range)',value);case xquote:case'\\':case'\'':case'"':warningAt("Unexpected '{a}'.",line,character,c);}
|
35
|
-
value+=c;}},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;}}
|
36
|
-
function string(x){var c,j,r='';if(jsonmode&&x!=='"'){warningAt("Strings must use doublequote.",line,character);}
|
37
|
-
if(xquote===x||(xmode==='scriptstring'&&!xquote)){return it('(punctuator)',x);}
|
38
|
-
function esc(n){var i=parseInt(s.substr(j+1,n),16);j+=n;if(i>=32&&i<=126&&i!==34&&i!==92&&i!==39){warningAt("Unnecessary escapement.",line,character);}
|
39
|
-
character+=n;c=String.fromCharCode(i);}
|
40
|
-
j=0;for(;;){while(j>=s.length){j=0;if(xmode!=='html'||!nextLine()){errorAt("Unclosed string.",line,from);}}
|
41
|
-
c=s.charAt(j);if(c===x){character+=1;s=s.substr(j+1);return it('(string)',r,x);}
|
42
|
-
if(c<' '){if(c==='\n'||c==='\r'){break;}
|
43
|
-
warningAt("Control character in string: {a}.",line,character+j,s.slice(0,j));}else if(c===xquote){warningAt("Bad HTML string",line,character+j);}else if(c==='<'){if(option.safe&&xmode==='html'){warningAt("ADsafe string violation.",line,character+j);}else if(s.charAt(j+1)==='/'&&(xmode||option.safe)){warningAt("Expected '<\\/' and instead saw '</'.",line,character);}else if(s.charAt(j+1)==='!'&&(xmode||option.safe)){warningAt("Unexpected '<!' in a string.",line,character);}}else if(c==='\\'){if(xmode==='html'){if(option.safe){warningAt("ADsafe string violation.",line,character+j);}}else if(xmode==='styleproperty'){j+=1;character+=1;c=s.charAt(j);if(c!==x){warningAt("Escapement in style string.",line,character+j);}}else{j+=1;character+=1;c=s.charAt(j);switch(c){case xquote:warningAt("Bad HTML string",line,character+j);break;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);}
|
44
|
-
esc(2);break;default:warningAt("Bad escapement.",line,character);}}}
|
45
|
-
r+=c;character+=1;j+=1;}}
|
46
|
-
for(;;){if(!s){return it(nextLine()?'(endline)':'(end)','');}
|
47
|
-
while(xmode==='outer'){i=s.search(ox);if(i===0){break;}else if(i>0){character+=1;s=s.slice(i);break;}else{if(!nextLine()){return it('(end)','');}}}
|
48
|
-
t=match(rx[xmode]||tx);if(!t){if(xmode==='html'){return it('(error)',s.charAt(0));}else{t='';c='';while(s&&s<'!'){s=s.substr(1);}
|
49
|
-
if(s){errorAt("Unexpected '{a}'.",line,character,s.substr(0,1));}}}else{if(c.isAlpha()||c==='_'||c==='$'){return it('(identifier)',t);}
|
50
|
-
if(c.isDigit()){if(xmode!=='style'&&!isFinite(Number(t))){warningAt("Bad number '{a}'.",line,character,t);}
|
51
|
-
if(xmode!=='styleproperty'&&s.substr(0,1).isAlpha()){warningAt("Missing space after '{a}'.",line,character,t);}
|
52
|
-
if(c==='0'){d=t.substr(1,1);if(d.isDigit()){if(token.id!=='.'&&xmode!=='styleproperty'){warningAt("Don't use extra leading zeros '{a}'.",line,character,t);}}else if(jsonmode&&(d==='x'||d==='X')){warningAt("Avoid 0x-. '{a}'.",line,character,t);}}
|
53
|
-
if(t.substr(t.length-1)==='.'){warningAt("A trailing decimal point can be confused with a dot '{a}'.",line,character,t);}
|
54
|
-
return it('(number)',t);}
|
55
|
-
switch(t){case'"':case"'":return string(t);case'//':if(src||(xmode&&xmode!=='script')){warningAt("Unexpected comment.",line,character);}else if(xmode==='script'&&/<\s*\//i.test(s)){warningAt("Unexpected <\/ in comment.",line,character);}else if((option.safe||xmode==='script')&&ax.test(s)){warningAt("Dangerous comment.",line,character);}
|
56
|
-
s='';token.comment=true;break;case'/*':if(src||(xmode&&xmode!=='script'&&xmode!=='style'&&xmode!=='styleproperty')){warningAt("Unexpected comment.",line,character);}
|
57
|
-
if(option.safe&&ax.test(s)){warningAt("ADsafe comment violation.",line,character);}
|
58
|
-
for(;;){i=s.search(lx);if(i>=0){break;}
|
59
|
-
if(!nextLine()){errorAt("Unclosed comment.",line,character);}else{if(option.safe&&ax.test(s)){warningAt("ADsafe comment violation.",line,character);}}}
|
60
|
-
character+=i+2;if(s.substr(i,1)==='/'){errorAt("Nested comment.",line,character);}
|
61
|
-
s=s.substr(i+2);token.comment=true;break;case'/*global':case'/*extern':case'/*members':case'/*member':case'/*jslint':case'*/':return{value:t,type:'special',line:line,character:character,from:from};case'':break;case'/':if(prereg){depth=0;captures=0;l=0;for(;;){b=true;c=s.charAt(l);l+=1;switch(c){case'':errorAt("Unclosed regular expression.",line,from);return;case'/':if(depth>0){warningAt("Unescaped '{a}'.",line,from+l,'/');}
|
62
|
-
c=s.substr(0,l-1);q={g:true,i:true,m:true};while(q[s.charAt(l)]===true){q[s.charAt(l)]=false;l+=1;}
|
63
|
-
character+=l;s=s.substr(l);return it('(regexp)',c);case'\\':c=s.charAt(l);if(c<' '){warningAt("Unexpected control character in regular expression.",line,from+l);}else if(c==='<'){warningAt("Unexpected escaped character '{a}' in regular expression.",line,from+l,c);}
|
64
|
-
l+=1;break;case'(':depth+=1;b=false;if(s.charAt(l)==='?'){l+=1;switch(s.charAt(l)){case':':case'=':case'!':l+=1;break;default:warningAt("Expected '{a}' and instead saw '{b}'.",line,from+l,':',s.charAt(l));}}else{captures+=1;}
|
65
|
-
break;case')':if(depth===0){warningAt("Unescaped '{a}'.",line,from+l,')');}else{depth-=1;}
|
66
|
-
break;case' ':q=1;while(s.charAt(l)===' '){l+=1;q+=1;}
|
67
|
-
if(q>1){warningAt("Spaces are hard to count. Use {{a}}.",line,from+l,q);}
|
68
|
-
break;case'[':if(s.charAt(l)==='^'){l+=1;}
|
69
|
-
q=false;klass:do{c=s.charAt(l);l+=1;switch(c){case'[':case'^':warningAt("Unescaped '{a}'.",line,from+l,c);q=true;break;case'-':if(q){q=false;}else{warningAt("Unescaped '{a}'.",line,from+l,'-');q=true;}
|
70
|
-
break;case']':if(!q){warningAt("Unescaped '{a}'.",line,from+l-1,'-');}
|
71
|
-
break klass;case'\\':c=s.charAt(l);if(c<' '){warningAt("Unexpected control character in regular expression.",line,from+l);}else if(c==='<'){warningAt("Unexpected escaped character '{a}' in regular expression.",line,from+l,c);}
|
72
|
-
l+=1;q=true;break;case'/':warningAt("Unescaped '{a}'.",line,from+l-1,'/');q=true;break;case'<':if(xmode==='script'){c=s.charAt(l);if(c==='!'||c==='/'){warningAt("HTML confusion in regular expression '<{a}'.",line,from+l,c);}}
|
73
|
-
q=true;break;default:q=true;}}while(c);break;case'.':if(option.regexp){warningAt("Unexpected '{a}'.",line,from+l,c);}
|
74
|
-
break;case']':case'?':case'{':case'}':case'+':case'*':warningAt("Unescaped '{a}'.",line,from+l,c);break;case'<':if(xmode==='script'){c=s.charAt(l);if(c==='!'||c==='/'){warningAt("HTML confusion in regular expression '<{a}'.",line,from+l,c);}}}
|
75
|
-
if(b){switch(s.charAt(l)){case'?':case'+':case'*':l+=1;if(s.charAt(l)==='?'){l+=1;}
|
76
|
-
break;case'{':l+=1;c=s.charAt(l);if(c<'0'||c>'9'){warningAt("Expected a number and instead saw '{a}'.",line,from+l,c);}
|
77
|
-
l+=1;low=+c;for(;;){c=s.charAt(l);if(c<'0'||c>'9'){break;}
|
78
|
-
l+=1;low=+c+(low*10);}
|
79
|
-
high=low;if(c===','){l+=1;high=Infinity;c=s.charAt(l);if(c>='0'&&c<='9'){l+=1;high=+c;for(;;){c=s.charAt(l);if(c<'0'||c>'9'){break;}
|
80
|
-
l+=1;high=+c+(high*10);}}}
|
81
|
-
if(s.charAt(l)!=='}'){warningAt("Expected '{a}' and instead saw '{b}'.",line,from+l,'}',c);}else{l+=1;}
|
82
|
-
if(s.charAt(l)==='?'){l+=1;}
|
83
|
-
if(low>high){warningAt("'{a}' should not be greater than '{b}'.",line,from+l,low,high);}}}}
|
84
|
-
c=s.substr(0,l-1);character+=l;s=s.substr(l);return it('(regexp)',c);}
|
85
|
-
return it('(punctuator)',t);case'#':if(xmode==='html'||xmode==='styleproperty'){for(;;){c=s.charAt(0);if((c<'0'||c>'9')&&(c<'a'||c>'f')&&(c<'A'||c>'F')){break;}
|
86
|
-
character+=1;s=s.substr(1);t+=c;}
|
87
|
-
if(t.length!==4&&t.length!==7){warningAt("Bad hex color '{a}'.",line,from+l,t);}
|
88
|
-
return it('(color)',t);}
|
89
|
-
return it('(punctuator)',t);default:if(xmode==='outer'&&c==='&'){character+=1;s=s.substr(1);for(;;){c=s.charAt(0);character+=1;s=s.substr(1);if(c===';'){break;}
|
90
|
-
if(!((c>='0'&&c<='9')||(c>='a'&&c<='z')||c==='#')){errorAt("Bad entity",line,from+l,character);}}
|
91
|
-
break;}
|
92
|
-
return it('(punctuator)',t);}}}}};}();function addlabel(t,type){if(t==='hasOwnProperty'){error("'hasOwnProperty' is a really bad name.");}
|
93
|
-
if(option.safe&&funct['(global)']){warning('ADsafe global: '+t+'.',token);}
|
94
|
-
if(funct.hasOwnProperty(t)){warning(funct[t]===true?"'{a}' was used before it was defined.":"'{a}' is already defined.",nexttoken,t);}
|
95
|
-
funct[t]=type;if(type==='label'){scope[t]=funct;}else if(funct['(global)']){global[t]=funct;if(implied.hasOwnProperty(t)){warning("'{a}' was used before it was defined.",nexttoken,t);delete implied[t];}}else{funct['(scope)'][t]=funct;}}
|
96
|
-
function doOption(){var b,obj,filter,o=nexttoken.value,t,v;switch(o){case'*/':error("Unbegun comment.");break;case'/*global':case'/*extern':if(option.safe){warning("ADsafe restriction.");}
|
97
|
-
obj=predefined;break;case'/*members':case'/*member':o='/*members';if(!membersOnly){membersOnly={};}
|
98
|
-
obj=membersOnly;break;case'/*jslint':if(option.safe){warning("ADsafe restriction.");}
|
99
|
-
obj=option;filter=boolOptions;}
|
100
|
-
for(;;){t=lex.token();if(t.id===','){t=lex.token();}
|
101
|
-
while(t.id==='(endline)'){t=lex.token();}
|
102
|
-
if(t.type==='special'&&t.value==='*/'){break;}
|
103
|
-
if(t.type!=='(string)'&&t.type!=='(identifier)'&&o!=='/*members'){error("Bad option.",t);}
|
104
|
-
if(filter){if(filter[t.value]!==true){error("Bad option.",t);}
|
105
|
-
v=lex.token();if(v.id!==':'){error("Expected '{a}' and instead saw '{b}'.",t,':',t.value);}
|
106
|
-
v=lex.token();if(v.value==='true'){b=true;}else if(v.value==='false'){b=false;}else{error("Expected '{a}' and instead saw '{b}'.",t,'true',t.value);}}else{b=true;}
|
107
|
-
obj[t.value]=b;}
|
108
|
-
if(filter){assume();}}
|
109
|
-
function peek(p){var i=p||0,j=0,t;while(j<=i){t=lookahead[j];if(!t){t=lookahead[j]=lex.token();}
|
110
|
-
j+=1;}
|
111
|
-
return t;}
|
112
|
-
function advance(id,t){var l;switch(token.id){case'(number)':if(nexttoken.id==='.'){warning("A dot following a number can be confused with a decimal point.",token);}
|
113
|
-
break;case'-':if(nexttoken.id==='-'||nexttoken.id==='--'){warning("Confusing minusses.");}
|
114
|
-
break;case'+':if(nexttoken.id==='+'||nexttoken.id==='++'){warning("Confusing plusses.");}
|
115
|
-
break;}
|
116
|
-
if(token.type==='(string)'||token.identifier){anonname=token.value;}
|
117
|
-
if(id&&nexttoken.id!==id){if(t){if(nexttoken.id==='(end)'){warning("Unmatched '{a}'.",t,t.id);}else{warning("Expected '{a}' to match '{b}' from line {c} and instead saw '{d}'.",nexttoken,id,t.id,t.line+1,nexttoken.value);}}else if(nexttoken.type!=='(identifier)'||nexttoken.value!==id){warning("Expected '{a}' and instead saw '{b}'.",nexttoken,id,nexttoken.value);}}
|
118
|
-
prevtoken=token;token=nexttoken;for(;;){nexttoken=lookahead.shift()||lex.token();if(nexttoken.id==='(end)'||nexttoken.id==='(error)'){return;}
|
119
|
-
if(nexttoken.type==='special'){doOption();}else{if(nexttoken.id!=='(endline)'){break;}
|
120
|
-
l=!xmode&&!option.laxbreak&&(token.type==='(string)'||token.type==='(number)'||token.type==='(identifier)'||badbreak[token.id]);}}
|
121
|
-
if(!option.evil&&nexttoken.value==='eval'){warning("eval is evil.",nexttoken);}
|
122
|
-
if(l){switch(nexttoken.id){case'{':case'}':case']':case'.':break;case')':switch(token.id){case')':case'}':case']':break;default:warning("Line breaking error '{a}'.",token,')');}
|
123
|
-
break;default:warning("Line breaking error '{a}'.",token,token.value);}}}
|
124
|
-
function parse(rbp,initial){var left,o;if(nexttoken.id==='(end)'){error("Unexpected early end of program.",token);}
|
125
|
-
advance();if(option.safe&&predefined[token.value]===true&&(nexttoken.id!=='('&&nexttoken.id!=='.')){warning('ADsafe violation.',token);}
|
126
|
-
if(initial){anonname='anonymous';funct['(verb)']=token.value;}
|
127
|
-
if(initial===true&&token.fud){left=token.fud();}else{if(token.nud){o=token.exps;left=token.nud();}else{if(nexttoken.type==='(number)'&&token.id==='.'){warning("A leading decimal point can be confused with a dot: '.{a}'.",token,nexttoken.value);advance();return token;}else{error("Expected an identifier and instead saw '{a}'.",token,token.id);}}
|
128
|
-
while(rbp<nexttoken.lbp){o=nexttoken.exps;advance();if(token.led){left=token.led(left);}else{error("Expected an operator and instead saw '{a}'.",token,token.id);}}
|
129
|
-
if(initial&&!o){warning("Expected an assignment or function call and instead saw an expression.",token);}}
|
130
|
-
return left;}
|
131
|
-
function abut(left,right){left=left||token;right=right||nexttoken;if(left.line!==right.line||left.character!==right.from){warning("Unexpected space after '{a}'.",right,left.value);}}
|
132
|
-
function adjacent(left,right){left=left||token;right=right||nexttoken;if(option.white||xmode==='styleproperty'||xmode==='style'){if(left.character!==right.from&&left.line===right.line){warning("Unexpected space after '{a}'.",right,left.value);}}}
|
133
|
-
function nospace(left,right){left=left||token;right=right||nexttoken;if(option.white&&!left.comment){if(left.line===right.line){adjacent(left,right);}}}
|
134
|
-
function nonadjacent(left,right){left=left||token;right=right||nexttoken;if(option.white){if(left.character===right.from){warning("Missing space after '{a}'.",nexttoken,left.value);}}}
|
135
|
-
function indentation(bias){var i;if(option.white&&nexttoken.id!=='(end)'){i=indent+(bias||0);if(nexttoken.from!==i){warning("Expected '{a}' to have an indentation of {b} instead of {c}.",nexttoken,nexttoken.value,i,nexttoken.from);}}}
|
136
|
-
function nolinebreak(t){if(t.line!==nexttoken.line){warning("Line breaking error '{a}'.",t,t.id);}}
|
137
|
-
function symbol(s,p){var x=syntax[s];if(!x||typeof x!=='object'){syntax[s]=x={id:s,lbp:p,value:s};}
|
138
|
-
return x;}
|
139
|
-
function delim(s){return symbol(s,0);}
|
140
|
-
function stmt(s,f){var x=delim(s);x.identifier=x.reserved=true;x.fud=f;return x;}
|
141
|
-
function blockstmt(s,f){var x=stmt(s,f);x.block=true;return x;}
|
142
|
-
function reserveName(x){var c=x.id.charAt(0);if((c>='a'&&c<='z')||(c>='A'&&c<='Z')){x.identifier=x.reserved=true;}
|
143
|
-
return x;}
|
144
|
-
function prefix(s,f){var x=symbol(s,150);reserveName(x);x.nud=(typeof f==='function')?f:function(){if(option.plusplus&&(this.id==='++'||this.id==='--')){warning("Unexpected use of '{a}'.",this,this.id);}
|
145
|
-
this.right=parse(150);this.arity='unary';return this;};return x;}
|
146
|
-
function type(s,f){var x=delim(s);x.type=s;x.nud=f;return x;}
|
147
|
-
function reserve(s,f){var x=type(s,f);x.identifier=x.reserved=true;return x;}
|
148
|
-
function reservevar(s,v){return reserve(s,function(){if(this.id==='this'){if(option.safe){warning("ADsafe violation.",this);}}
|
149
|
-
return this;});}
|
150
|
-
function infix(s,f,p){var x=symbol(s,p);reserveName(x);x.led=(typeof f==='function')?f:function(left){nonadjacent(prevtoken,token);nonadjacent(token,nexttoken);this.left=left;this.right=parse(p);return this;};return x;}
|
151
|
-
function relation(s,f){var x=symbol(s,100);x.led=function(left){nonadjacent(prevtoken,token);nonadjacent(token,nexttoken);var right=parse(100);if((left&&left.id==='NaN')||(right&&right.id==='NaN')){warning("Use the isNaN function to compare with NaN.",this);}else if(f){f.apply(this,[left,right]);}
|
152
|
-
this.left=left;this.right=right;return this;};return x;}
|
153
|
-
function isPoorRelation(node){return(node.type==='(number)'&&!+node.value)||(node.type==='(string)'&&!node.value)||node.type==='true'||node.type==='false'||node.type==='undefined'||node.type==='null';}
|
154
|
-
function assignop(s,f){symbol(s,20).exps=true;return infix(s,function(left){var l;this.left=left;nonadjacent(prevtoken,token);nonadjacent(token,nexttoken);if(option.safe){l=left;do{if(predefined[l.value]===true){warning('ADsafe violation.',l);}
|
155
|
-
l=l.left;}while(l);}
|
156
|
-
if(left){if(left.id==='.'||left.id==='['){if(left.left.value==='arguments'){warning('Bad assignment.',this);}
|
157
|
-
this.right=parse(19);return this;}else if(left.identifier&&!left.reserved){this.right=parse(19);return this;}
|
158
|
-
if(left===syntax['function']){warning("Expected an identifier in an assignment and instead saw a function invocation.",token);}}
|
159
|
-
error("Bad assignment.",this);},20);}
|
160
|
-
function bitwise(s,f,p){var x=symbol(s,p);reserveName(x);x.led=(typeof f==='function')?f:function(left){if(option.bitwise){warning("Unexpected use of '{a}'.",this,this.id);}
|
161
|
-
nonadjacent(prevtoken,token);nonadjacent(token,nexttoken);this.left=left;this.right=parse(p);return this;};return x;}
|
162
|
-
function bitwiseassignop(s){symbol(s,20).exps=true;return infix(s,function(left){if(option.bitwise){warning("Unexpected use of '{a}'.",this,this.id);}
|
163
|
-
nonadjacent(prevtoken,token);nonadjacent(token,nexttoken);if(left){if(left.id==='.'||left.id==='['||(left.identifier&&!left.reserved)){parse(19);return left;}
|
164
|
-
if(left===syntax['function']){warning("Expected an identifier in an assignment, and instead saw a function invocation.",token);}}
|
165
|
-
error("Bad assignment.",this);},20);}
|
166
|
-
function suffix(s,f){var x=symbol(s,150);x.led=function(left){if(option.plusplus){warning("Unexpected use of '{a}'.",this,this.id);}
|
167
|
-
this.left=left;return this;};return x;}
|
168
|
-
function optionalidentifier(){if(nexttoken.reserved){warning("Expected an identifier and instead saw '{a}' (a reserved word).",nexttoken,nexttoken.id);}
|
169
|
-
if(nexttoken.identifier){advance();return token.value;}}
|
170
|
-
function identifier(){var i=optionalidentifier();if(i){return i;}
|
171
|
-
if(token.id==='function'&&nexttoken.id==='('){warning("Missing name in function statement.");}else{error("Expected an identifier and instead saw '{a}'.",nexttoken,nexttoken.value);}}
|
172
|
-
function reachable(s){var i=0,t;if(nexttoken.id!==';'||noreach){return;}
|
173
|
-
for(;;){t=peek(i);if(t.reach){return;}
|
174
|
-
if(t.id!=='(endline)'){if(t.id==='function'){warning("Inner functions should be listed at the top of the outer function.",t);break;}
|
175
|
-
warning("Unreachable '{a}' after '{b}'.",t,t.value,s);break;}
|
176
|
-
i+=1;}}
|
177
|
-
function statement(noindent){var i=indent,r,s=scope,t=nexttoken;if(t.id===';'){warning("Unnecessary semicolon.",t);advance(';');return;}
|
178
|
-
if(t.identifier&&!t.reserved&&peek().id===':'){advance();advance(':');scope=Object.create(s);addlabel(t.value,'label');if(!nexttoken.labelled){warning("Label '{a}' on {b} statement.",nexttoken,t.value,nexttoken.value);}
|
179
|
-
if(jx.test(t.value+':')){warning("Label '{a}' looks like a javascript url.",t,t.value);}
|
180
|
-
nexttoken.label=t.value;t=nexttoken;}
|
181
|
-
if(!noindent){indentation();}
|
182
|
-
r=parse(0,true);if(!t.block){if(nexttoken.id!==';'){warningAt("Missing semicolon.",token.line,token.from+token.value.length);}else{adjacent(token,nexttoken);advance(';');nonadjacent(token,nexttoken);}}
|
183
|
-
indent=i;scope=s;return r;}
|
184
|
-
function use_strict(){if(nexttoken.type==='(string)'&&/^use +strict(?:,.+)?$/.test(nexttoken.value)){advance();advance(';');return true;}else{return false;}}
|
185
|
-
function statements(begin){var a=[],f,p;if(begin&&option.strict&&!use_strict()){warning('Missing "use strict" statement.',nexttoken);}
|
186
|
-
if(option.adsafe){switch(begin){case'script':if(!adsafe_may){if(nexttoken.value!=='ADSAFE'||peek(0).id!=='.'||(peek(1).value!=='id'&&peek(1).value!=='go')){error('ADsafe violation: Missing ADSAFE.id or ADSAFE.go.',nexttoken);}}
|
187
|
-
if(nexttoken.value==='ADSAFE'&&peek(0).id==='.'&&peek(1).value==='id'){if(adsafe_may){error('ADsafe violation.',nexttoken);}
|
188
|
-
advance('ADSAFE');advance('.');advance('id');advance('(');if(nexttoken.value!==adsafe_id){error('ADsafe violation: id does not match.',nexttoken);}
|
189
|
-
advance('(string)');advance(')');advance(';');adsafe_may=true;}
|
190
|
-
break;case'lib':if(nexttoken.value==='ADSAFE'){advance('ADSAFE');advance('.');advance('lib');advance('(');advance('(string)');advance(',');f=parse(0);if(f.id!=='function'){error('The second argument to lib must be a function.',f);}
|
191
|
-
p=f.funct['(params)'];if(p&&p!=='lib'){error("Expected '{a}' and instead saw '{b}'.",f,'lib',p);}
|
192
|
-
advance(')');advance(';');return a;}else{error("ADsafe lib violation.");}}}
|
193
|
-
while(!nexttoken.reach&&nexttoken.id!=='(end)'){if(nexttoken.id===';'){warning("Unnecessary semicolon.");advance(';');}else{a.push(statement());}}
|
194
|
-
return a;}
|
195
|
-
function block(f){var a,b=inblock,s=scope,t;inblock=f;if(f){scope=Object.create(scope);}
|
196
|
-
nonadjacent(token,nexttoken);t=nexttoken;if(nexttoken.id==='{'){advance('{');if(nexttoken.id!=='}'||token.line!==nexttoken.line){indent+=option.indent;if(!f&&nexttoken.from===indent+option.indent){indent+=option.indent;}
|
197
|
-
if(!f){use_strict();}
|
198
|
-
a=statements();indent-=option.indent;indentation();}
|
199
|
-
advance('}',t);}else{warning("Expected '{a}' and instead saw '{b}'.",nexttoken,'{',nexttoken.value);noreach=true;a=[statement()];noreach=false;}
|
200
|
-
funct['(verb)']=null;scope=s;inblock=b;return a;}
|
201
|
-
function idValue(){return this;}
|
202
|
-
function countMember(m){if(membersOnly&&membersOnly[m]!==true){warning("Unexpected /*member '{a}'.",nexttoken,m);}
|
203
|
-
if(typeof member[m]==='number'){member[m]+=1;}else{member[m]=1;}}
|
204
|
-
function note_implied(token){var name=token.value,line=token.line+1,a=implied[name];if(!a){a=[line];implied[name]=a;}else if(a[a.length-1]!==line){a.push(line);}}
|
205
|
-
function cssName(){if(nexttoken.identifier){advance();return true;}}
|
206
|
-
function cssNumber(){if(nexttoken.id==='-'){advance('-');advance('(number)');}
|
207
|
-
if(nexttoken.type==='(number)'){advance();return true;}}
|
208
|
-
function cssString(){if(nexttoken.type==='(string)'){advance();return true;}}
|
209
|
-
function cssColor(){var i,number;if(nexttoken.identifier){if(nexttoken.value==='rgb'){advance();advance('(');for(i=0;i<3;i+=1){number=nexttoken.value;if(nexttoken.type!=='(number)'||number<0){warning("Expected a positive number and instead saw '{a}'",nexttoken,number);advance();}else{advance();if(nexttoken.id==='%'){advance('%');if(number>100){warning("Expected a percentage and instead saw '{a}'",token,number);}}else{if(number>255){warning("Expected a small number and instead saw '{a}'",token,number);}}}}
|
210
|
-
advance(')');return true;}else if(cssColorData[nexttoken.value]===true){advance();return true;}}else if(nexttoken.type==='(color)'){advance();return true;}
|
211
|
-
return false;}
|
212
|
-
function cssLength(){if(nexttoken.id==='-'){advance('-');adjacent();}
|
213
|
-
if(nexttoken.type==='(number)'){advance();if(nexttoken.type!=='(string)'&&cssLengthData[nexttoken.value]===true){adjacent();advance();}else if(+token.value!==0){warning("Expected a linear unit and instead saw '{a}'.",nexttoken,nexttoken.value);}
|
214
|
-
return true;}
|
215
|
-
return false;}
|
216
|
-
function cssLineHeight(){if(nexttoken.id==='-'){advance('-');adjacent();}
|
217
|
-
if(nexttoken.type==='(number)'){advance();if(nexttoken.type!=='(string)'&&cssLengthData[nexttoken.value]===true){adjacent();advance();}
|
218
|
-
return true;}
|
219
|
-
return false;}
|
220
|
-
function cssWidth(){if(nexttoken.identifier){switch(nexttoken.value){case'thin':case'medium':case'thick':advance();return true;}}else{return cssLength();}}
|
221
|
-
function cssMargin(){if(nexttoken.identifier){if(nexttoken.value==='auto'){advance();return true;}}else{return cssLength();}}
|
222
|
-
function cssAttr(){if(nexttoken.identifier&&nexttoken.value==='attr'){advance();advance('(');if(!nexttoken.identifier){warning("Expected a name and instead saw '{a}'.",nexttoken,nexttoken.value);}
|
223
|
-
advance();advance(')');return true;}
|
224
|
-
return false;}
|
225
|
-
function cssCommaList(){while(nexttoken.id!==';'){if(!cssName()&&!cssString()){warning("Expected a name and instead saw '{a}'.",nexttoken,nexttoken.value);}
|
226
|
-
if(nexttoken.id!==','){return true;}
|
227
|
-
advance(',');}}
|
228
|
-
function cssCounter(){if(nexttoken.identifier&&nexttoken.value==='counter'){advance();advance('(');if(!nexttoken.identifier){}
|
229
|
-
advance();if(nexttoken.id===','){advance(',');if(nexttoken.type!=='(string)'){warning("Expected a string and instead saw '{a}'.",nexttoken,nexttoken.value);}
|
230
|
-
advance();}
|
231
|
-
advance(')');return true;}
|
232
|
-
if(nexttoken.identifier&&nexttoken.value==='counters'){advance();advance('(');if(!nexttoken.identifier){warning("Expected a name and instead saw '{a}'.",nexttoken,nexttoken.value);}
|
233
|
-
advance();if(nexttoken.id===','){advance(',');if(nexttoken.type!=='(string)'){warning("Expected a string and instead saw '{a}'.",nexttoken,nexttoken.value);}
|
234
|
-
advance();}
|
235
|
-
if(nexttoken.id===','){advance(',');if(nexttoken.type!=='(string)'){warning("Expected a string and instead saw '{a}'.",nexttoken,nexttoken.value);}
|
236
|
-
advance();}
|
237
|
-
advance(')');return true;}
|
238
|
-
return false;}
|
239
|
-
function cssShape(){var i;if(nexttoken.identifier&&nexttoken.value==='rect'){advance();advance('(');for(i=0;i<4;i+=1){if(!cssLength()){warning("Expected a number and instead saw '{a}'.",nexttoken,nexttoken.value);break;}}
|
240
|
-
advance(')');return true;}
|
241
|
-
return false;}
|
242
|
-
function cssUrl(){var url;if(nexttoken.identifier&&nexttoken.value==='url'){nexttoken=lex.range('(',')');url=nexttoken.value;advance();if(option.safe&&ux.test(url)){error("ADsafe URL violation.");}
|
243
|
-
urls.push(url);return true;}
|
244
|
-
return false;}
|
245
|
-
cssAny=[cssUrl,function(){for(;;){if(nexttoken.identifier){switch(nexttoken.value.toLowerCase()){case'url':cssUrl();break;case'expression':warning("Unexpected expression '{a}'.",nexttoken,nexttoken.value);advance();break;default:advance();}}else{if(nexttoken.id===';'||nexttoken.id==='!'||nexttoken.id==='(end)'||nexttoken.id==='}'){return true;}
|
246
|
-
advance();}}}];cssBorderStyle=['none','hidden','dotted','dashed','solid','double','ridge','inset','outset'];cssAttributeData={background:[true,'background-attachment','background-color','background-image','background-position','background-repeat'],'background-attachment':['scroll','fixed'],'background-color':['transparent',cssColor],'background-image':['none',cssUrl],'background-position':[2,[cssLength,'top','bottom','left','right','center']],'background-repeat':['repeat','repeat-x','repeat-y','no-repeat'],'border':[true,'border-color','border-style','border-width'],'border-bottom':[true,'border-bottom-color','border-bottom-style','border-bottom-width'],'border-bottom-color':cssColor,'border-bottom-style':cssBorderStyle,'border-bottom-width':cssWidth,'border-collapse':['collapse','separate'],'border-color':['transparent',4,cssColor],'border-left':[true,'border-left-color','border-left-style','border-left-width'],'border-left-color':cssColor,'border-left-style':cssBorderStyle,'border-left-width':cssWidth,'border-right':[true,'border-right-color','border-right-style','border-right-width'],'border-right-color':cssColor,'border-right-style':cssBorderStyle,'border-right-width':cssWidth,'border-spacing':[2,cssLength],'border-style':[4,cssBorderStyle],'border-top':[true,'border-top-color','border-top-style','border-top-width'],'border-top-color':cssColor,'border-top-style':cssBorderStyle,'border-top-width':cssWidth,'border-width':[4,cssWidth],bottom:[cssLength,'auto'],'caption-side':['bottom','left','right','top'],clear:['both','left','none','right'],clip:[cssShape,'auto'],color:cssColor,content:['open-quote','close-quote','no-open-quote','no-close-quote',cssString,cssUrl,cssCounter,cssAttr],'counter-increment':[cssName,'none'],'counter-reset':[cssName,'none'],cursor:[cssUrl,'auto','crosshair','default','e-resize','help','move','n-resize','ne-resize','nw-resize','pointer','s-resize','se-resize','sw-resize','w-resize','text','wait'],direction:['ltr','rtl'],display:['block','compact','inline','inline-block','inline-table','list-item','marker','none','run-in','table','table-caption','table-column','table-column-group','table-footer-group','table-header-group','table-row','table-row-group'],'empty-cells':['show','hide'],'float':['left','none','right'],font:['caption','icon','menu','message-box','small-caption','status-bar',true,'font-size','font-style','font-weight','font-family'],'font-family':cssCommaList,'font-size':['xx-small','x-small','small','medium','large','x-large','xx-large','larger','smaller',cssLength],'font-size-adjust':['none',cssNumber],'font-stretch':['normal','wider','narrower','ultra-condensed','extra-condensed','condensed','semi-condensed','semi-expanded','expanded','extra-expanded'],'font-style':['normal','italic','oblique'],'font-variant':['normal','small-caps'],'font-weight':['normal','bold','bolder','lighter',cssNumber],height:[cssLength,'auto'],left:[cssLength,'auto'],'letter-spacing':['normal',cssLength],'line-height':['normal',cssLineHeight],'list-style':[true,'list-style-image','list-style-position','list-style-type'],'list-style-image':['none',cssUrl],'list-style-position':['inside','outside'],'list-style-type':['circle','disc','square','decimal','decimal-leading-zero','lower-roman','upper-roman','lower-greek','lower-alpha','lower-latin','upper-alpha','upper-latin','hebrew','katakana','hiragana-iroha','katakana-oroha','none'],margin:[4,cssMargin],'margin-bottom':cssMargin,'margin-left':cssMargin,'margin-right':cssMargin,'margin-top':cssMargin,'marker-offset':[cssLength,'auto'],'max-height':[cssLength,'none'],'max-width':[cssLength,'none'],'min-height':cssLength,'min-width':cssLength,opacity:cssNumber,outline:[true,'outline-color','outline-style','outline-width'],'outline-color':['invert',cssColor],'outline-style':['dashed','dotted','double','groove','inset','none','outset','ridge','solid'],'outline-width':cssWidth,overflow:['auto','hidden','scroll','visible'],padding:[4,cssLength],'padding-bottom':cssLength,'padding-left':cssLength,'padding-right':cssLength,'padding-top':cssLength,position:['absolute','fixed','relative','static'],quotes:[8,cssString],right:[cssLength,'auto'],'table-layout':['auto','fixed'],'text-align':['center','justify','left','right'],'text-decoration':['none','underline','overline','line-through','blink'],'text-indent':cssLength,'text-shadow':['none',4,[cssColor,cssLength]],'text-transform':['capitalize','uppercase','lowercase','none'],top:[cssLength,'auto'],'unicode-bidi':['normal','embed','bidi-override'],'vertical-align':['baseline','bottom','sub','super','top','text-top','middle','text-bottom',cssLength],visibility:['visible','hidden','collapse'],'white-space':['normal','pre','nowrap'],width:[cssLength,'auto'],'word-spacing':['normal',cssLength],'z-index':['auto',cssNumber]};function styleAttribute(){var v;while(nexttoken.id==='*'||nexttoken.id==='#'||nexttoken.value==='_'){if(!option.css){warning("Unexpected '{a}'.",nexttoken,nexttoken.value);}
|
247
|
-
advance();}
|
248
|
-
if(nexttoken.id==='-'){if(!option.css){warning("Unexpected '{a}'.",nexttoken,nexttoken.value);}
|
249
|
-
advance('-');if(!nexttoken.identifier){warning("Expected a non-standard style attribute and instead saw '{a}'.",nexttoken,nexttoken.value);}
|
250
|
-
advance();return cssAny;}else{if(!nexttoken.identifier){warning("Excepted a style attribute, and instead saw '{a}'.",nexttoken,nexttoken.value);}else{if(cssAttributeData.hasOwnProperty(nexttoken.value)){v=cssAttributeData[nexttoken.value];}else{v=cssAny;if(!option.css){warning("Unrecognized style attribute '{a}'.",nexttoken,nexttoken.value);}}}
|
251
|
-
advance();return v;}}
|
252
|
-
function styleValue(v){var i=0,n,once,match,round,start=0,vi;switch(typeof v){case'function':return v();case'string':if(nexttoken.identifier&&nexttoken.value===v){advance();return true;}
|
253
|
-
return false;}
|
254
|
-
for(;;){if(i>=v.length){return false;}
|
255
|
-
vi=v[i];i+=1;if(vi===true){break;}else if(typeof vi==='number'){n=vi;vi=v[i];i+=1;}else{n=1;}
|
256
|
-
match=false;while(n>0){if(styleValue(vi)){match=true;n-=1;}else{break;}}
|
257
|
-
if(match){return true;}}
|
258
|
-
start=i;once=[];for(;;){round=false;for(i=start;i<v.length;i+=1){if(!once[i]){if(styleValue(cssAttributeData[v[i]])){match=true;round=true;once[i]=true;break;}}}
|
259
|
-
if(!round){return match;}}}
|
260
|
-
function substyle(){var v;for(;;){if(nexttoken.id==='}'||nexttoken.id==='(end)'||xquote&&nexttoken.id===xquote){return;}
|
261
|
-
while(nexttoken.id===';'){warning("Misplaced ';'.");advance(';');}
|
262
|
-
v=styleAttribute();advance(':');if(nexttoken.identifier&&nexttoken.value==='inherit'){advance();}else{styleValue(v);}
|
263
|
-
while(nexttoken.id!==';'&&nexttoken.id!=='!'&&nexttoken.id!=='}'&&nexttoken.id!=='(end)'&&nexttoken.id!==xquote){warning("Unexpected token '{a}'.",nexttoken,nexttoken.value);advance();}
|
264
|
-
if(nexttoken.id==='!'){advance('!');adjacent();if(nexttoken.identifier&&nexttoken.value==='important'){advance();}else{warning("Expected '{a}' and instead saw '{b}'.",nexttoken,'important',nexttoken.value);}}
|
265
|
-
if(nexttoken.id==='}'||nexttoken.id===xquote){warning("Missing '{a}'.",nexttoken,';');}else{advance(';');}}}
|
266
|
-
function stylePattern(){var name;if(nexttoken.id==='{'){warning("Expected a style pattern, and instead saw '{a}'.",nexttoken,nexttoken.id);}else if(nexttoken.id==='@'){advance('@');name=nexttoken.value;if(nexttoken.identifier&&atrule[name]===true){advance();return name;}
|
267
|
-
warning("Expected an at-rule, and instead saw @{a}.",nexttoken,name);}
|
268
|
-
for(;;){if(nexttoken.identifier){if(!htmltag.hasOwnProperty(nexttoken.value)){warning("Expected a tagName, and instead saw {a}.",nexttoken,nexttoken.value);}
|
269
|
-
advance();}else{switch(nexttoken.id){case'>':case'+':advance();if(!nexttoken.identifier||!htmltag.hasOwnProperty(nexttoken.value)){warning("Expected a tagName, and instead saw {a}.",nexttoken,nexttoken.value);}
|
270
|
-
advance();break;case':':advance(':');if(pseudorule[nexttoken.value]!==true){warning("Expected a pseudo, and instead saw :{a}.",nexttoken,nexttoken.value);}
|
271
|
-
advance();if(nexttoken.value==='lang'){advance('(');if(!nexttoken.identifier){warning("Expected a lang code, and instead saw :{a}.",nexttoken,nexttoken.value);}
|
272
|
-
advance(')');}
|
273
|
-
break;case'#':advance('#');if(!nexttoken.identifier){warning("Expected an id, and instead saw #{a}.",nexttoken,nexttoken.value);}
|
274
|
-
advance();break;case'*':advance('*');break;case'.':advance('.');if(!nexttoken.identifier){warning("Expected a class, and instead saw #.{a}.",nexttoken,nexttoken.value);}
|
275
|
-
advance();break;case'[':advance('[');if(!nexttoken.identifier){warning("Expected an attribute, and instead saw [{a}].",nexttoken,nexttoken.value);}
|
276
|
-
advance();if(nexttoken.id==='='||nexttoken.id==='~='||nexttoken.id==='|='){advance();if(nexttoken.type!=='(string)'){warning("Expected a string, and instead saw {a}.",nexttoken,nexttoken.value);}
|
277
|
-
advance();}
|
278
|
-
advance(']');break;default:error("Expected a CSS selector, and instead saw {a}.",nexttoken,nexttoken.value);}}
|
279
|
-
if(nexttoken.id==='</'||nexttoken.id==='{'||nexttoken.id==='(end)'){return'';}
|
280
|
-
if(nexttoken.id===','){advance(',');}}}
|
281
|
-
function styles(){while(nexttoken.id!=='</'&&nexttoken.id!=='(end)'){stylePattern();xmode='styleproperty';if(nexttoken.id===';'){advance(';');}else{advance('{');substyle();xmode='style';advance('}');}}}
|
282
|
-
function doBegin(n){if(n!=='html'&&!option.fragment){if(n==='div'&&option.adsafe){error("ADSAFE: Use the fragment option.");}else{error("Expected '{a}' and instead saw '{b}'.",token,'html',n);}}
|
283
|
-
if(option.adsafe){if(n==='html'){error("Currently, ADsafe does not operate on whole HTML documents. It operates on <div> fragments and .js files.",token);}
|
284
|
-
if(option.fragment){if(n!=='div'){error("ADsafe violation: Wrap the widget in a div.",token);}}else{error("Use the fragment option.",token);}}
|
285
|
-
option.browser=true;assume();}
|
286
|
-
function doAttribute(n,a,v){var u,x;if(a==='id'){u=typeof v==='string'?v.toUpperCase():'';if(ids[u]===true){warning("Duplicate id='{a}'.",nexttoken,v);}
|
287
|
-
if(option.adsafe){if(adsafe_id){if(v.slice(0,adsafe_id.length)!==adsafe_id){warning("ADsafe violation: An id must have a '{a}' prefix",nexttoken,adsafe_id);}else if(!/^[A-Z]+_[A-Z]+$/.test(v)){warning("ADSAFE violation: bad id.");}}else{adsafe_id=v;if(!/^[A-Z]+_$/.test(v)){warning("ADSAFE violation: bad id.");}}}
|
288
|
-
x=v.search(dx);if(x>=0){warning("Unexpected character '{a}' in {b}.",token,v.charAt(x),a);}
|
289
|
-
ids[u]=true;}else if(a==='class'||a==='type'||a==='name'){x=v.search(qx);if(x>=0){warning("Unexpected character '{a}' in {b}.",token,v.charAt(x),a);}
|
290
|
-
ids[u]=true;}else if(a==='href'||a==='background'||a==='content'||a==='data'||a.indexOf('src')>=0||a.indexOf('url')>=0){if(option.safe&&ux.test(v)){error("ADsafe URL violation.");}
|
291
|
-
urls.push(v);}else if(a==='for'){if(option.adsafe){if(adsafe_id){if(v.slice(0,adsafe_id.length)!==adsafe_id){warning("ADsafe violation: An id must have a '{a}' prefix",nexttoken,adsafe_id);}else if(!/^[A-Z]+_[A-Z]+$/.test(v)){warning("ADSAFE violation: bad id.");}}else{warning("ADSAFE violation: bad id.");}}}else if(a==='name'){if(option.adsafe&&v.indexOf('_')>=0){warning("ADsafe name violation.");}}}
|
292
|
-
function doTag(n,a){var i,t=htmltag[n],x;src=false;if(!t){error("Unrecognized tag '<{a}>'.",nexttoken,n===n.toLowerCase()?n:n+' (capitalization error)');}
|
293
|
-
if(stack.length>0){if(n==='html'){error("Too many <html> tags.",token);}
|
294
|
-
x=t.parent;if(x){if(x.indexOf(' '+stack[stack.length-1].name+' ')<0){error("A '<{a}>' must be within '<{b}>'.",token,n,x);}}else if(!option.adsafe&&!option.fragment){i=stack.length;do{if(i<=0){error("A '<{a}>' must be within '<{b}>'.",token,n,'body');}
|
295
|
-
i-=1;}while(stack[i].name!=='body');}}
|
296
|
-
switch(n){case'div':if(option.adsafe&&stack.length===1&&!adsafe_id){warning("ADSAFE violation: missing ID_.");}
|
297
|
-
break;case'script':xmode='script';advance('>');indent=nexttoken.from;if(a.lang){warning("lang is deprecated.",token);}
|
298
|
-
if(option.adsafe&&stack.length!==1){warning("ADsafe script placement violation.",token);}
|
299
|
-
if(a.src){if(option.adsafe&&(!adsafe_may||!approved[a.src])){warning("ADsafe unapproved script source.",token);}
|
300
|
-
if(a.type){warning("type is unnecessary.",token);}}else{if(adsafe_went){error("ADsafe script violation.",token);}
|
301
|
-
statements('script');}
|
302
|
-
xmode='html';advance('</');if(!nexttoken.identifier&&nexttoken.value!=='script'){warning("Expected '{a}' and instead saw '{b}'.",nexttoken,'script',nexttoken.value);}
|
303
|
-
advance();xmode='outer';break;case'style':xmode='style';advance('>');styles();xmode='html';advance('</');if(!nexttoken.identifier&&nexttoken.value!=='style'){warning("Expected '{a}' and instead saw '{b}'.",nexttoken,'style',nexttoken.value);}
|
304
|
-
advance();xmode='outer';break;case'input':switch(a.type){case'radio':case'checkbox':case'text':case'button':case'file':case'reset':case'submit':case'password':case'file':case'hidden':case'image':break;default:warning("Bad input type.");}
|
305
|
-
if(option.adsafe&&a.autocomplete!=='off'){warning("ADsafe autocomplete violation.");}
|
306
|
-
break;case'applet':case'body':case'embed':case'frame':case'frameset':case'head':case'iframe':case'img':case'noembed':case'noframes':case'object':case'param':if(option.adsafe){warning("ADsafe violation: Disallowed tag: "+n);}
|
307
|
-
break;}}
|
308
|
-
function closetag(n){return'</'+n+'>';}
|
309
|
-
function html(){var a,attributes,e,n,q,t,v,w=option.white,wmode;xmode='html';xquote='';stack=null;for(;;){switch(nexttoken.value){case'<':xmode='html';advance('<');attributes={};t=nexttoken;if(!t.identifier){warning("Bad identifier {a}.",t,t.value);}
|
310
|
-
n=t.value;if(option.cap){n=n.toLowerCase();}
|
311
|
-
t.name=n;advance();if(!stack){stack=[];doBegin(n);}
|
312
|
-
v=htmltag[n];if(typeof v!=='object'){error("Unrecognized tag '<{a}>'.",t,n);}
|
313
|
-
e=v.empty;t.type=n;for(;;){if(nexttoken.id==='/'){advance('/');if(nexttoken.id!=='>'){warning("Expected '{a}' and instead saw '{b}'.",nexttoken,'>',nexttoken.value);}
|
314
|
-
break;}
|
315
|
-
if(nexttoken.id&&nexttoken.id.substr(0,1)==='>'){break;}
|
316
|
-
if(!nexttoken.identifier){if(nexttoken.id==='(end)'||nexttoken.id==='(error)'){error("Missing '>'.",nexttoken);}
|
317
|
-
warning("Bad identifier.");}
|
318
|
-
option.white=true;nonadjacent(token,nexttoken);a=nexttoken.value;option.white=w;advance();if(!option.cap&&a!==a.toLowerCase()){warning("Attribute '{a}' not all lower case.",nexttoken,a);}
|
319
|
-
a=a.toLowerCase();xquote='';if(attributes.hasOwnProperty(a)){warning("Attribute '{a}' repeated.",nexttoken,a);}
|
320
|
-
if(a.slice(0,2)==='on'){if(!option.on){warning("Avoid HTML event handlers.");}
|
321
|
-
xmode='scriptstring';advance('=');q=nexttoken.id;if(q!=='"'&&q!=="'"){error("Missing quote.");}
|
322
|
-
xquote=q;wmode=option.white;option.white=false;advance(q);statements('on');option.white=wmode;if(nexttoken.id!==q){error("Missing close quote on script attribute.");}
|
323
|
-
xmode='html';xquote='';advance(q);v=false;}else if(a==='style'){xmode='scriptstring';advance('=');q=nexttoken.id;if(q!=='"'&&q!=="'"){error("Missing quote.");}
|
324
|
-
xmode='styleproperty';xquote=q;advance(q);substyle();xmode='html';xquote='';advance(q);v=false;}else{if(nexttoken.id==='='){advance('=');v=nexttoken.value;if(!nexttoken.identifier&&nexttoken.id!=='"'&&nexttoken.id!=='\''&&nexttoken.type!=='(string)'&&nexttoken.type!=='(number)'&&nexttoken.type!=='(color)'){warning("Expected an attribute value and instead saw '{a}'.",token,a);}
|
325
|
-
advance();}else{v=true;}}
|
326
|
-
attributes[a]=v;doAttribute(n,a,v);}
|
327
|
-
doTag(n,attributes);if(!e){stack.push(t);}
|
328
|
-
xmode='outer';advance('>');break;case'</':xmode='html';advance('</');if(!nexttoken.identifier){warning("Bad identifier.");}
|
329
|
-
n=nexttoken.value;if(option.cap){n=n.toLowerCase();}
|
330
|
-
advance();if(!stack){error("Unexpected '{a}'.",nexttoken,closetag(n));}
|
331
|
-
t=stack.pop();if(!t){error("Unexpected '{a}'.",nexttoken,closetag(n));}
|
332
|
-
if(t.name!==n){error("Expected '{a}' and instead saw '{b}'.",nexttoken,closetag(t.name),closetag(n));}
|
333
|
-
if(nexttoken.id!=='>'){error("Missing '{a}'.",nexttoken,'>');}
|
334
|
-
xmode='outer';advance('>');break;case'<!':if(option.safe){warning("ADsafe HTML violation.");}
|
335
|
-
xmode='html';for(;;){advance();if(nexttoken.id==='>'||nexttoken.id==='(end)'){break;}
|
336
|
-
if(nexttoken.id==='--'){warning("Unexpected --.");}}
|
337
|
-
xmode='outer';advance('>');break;case'<!--':xmode='html';if(option.safe){warning("ADsafe HTML violation.");}
|
338
|
-
for(;;){advance();if(nexttoken.id==='(end)'){error("Missing '-->'.");}
|
339
|
-
if(nexttoken.id==='<!'||nexttoken.id==='<!--'){error("Unexpected '<!' in HTML comment.");}
|
340
|
-
if(nexttoken.id==='--'){advance('--');break;}}
|
341
|
-
abut();xmode='outer';advance('>');break;case'(end)':return;default:if(nexttoken.id==='(end)'){error("Missing '{a}'.",nexttoken,'</'+stack[stack.length-1].value+'>');}else{advance();}}
|
342
|
-
if(stack&&stack.length===0&&(option.adsafe||!option.fragment||nexttoken.id==='(end)')){break;}}
|
343
|
-
if(nexttoken.id!=='(end)'){error("Unexpected material after the end.");}}
|
344
|
-
type('(number)',idValue);type('(string)',idValue);syntax['(identifier)']={type:'(identifier)',lbp:0,identifier:true,nud:function(){var v=this.value,s=scope[v];if(s&&(s===funct||s===funct['(global)'])){if(!funct['(global)']){switch(funct[v]){case'unused':funct[v]='var';break;case'label':warning("'{a}' is a statement label.",token,v);break;}}}else if(funct['(global)']){if(option.undef){warning("'{a}' is undefined.",token,v);}
|
345
|
-
note_implied(token);}else{switch(funct[v]){case'closure':case'function':case'var':case'unused':warning("'{a}' used out of scope.",token,v);break;case'label':warning("'{a}' is a statement label.",token,v);break;case'outer':case true:break;default:if(s===true){funct[v]=true;}else if(typeof s!=='object'){if(option.undef){warning("'{a}' is undefined.",token,v);}else{funct[v]=true;}
|
346
|
-
note_implied(token);}else{switch(s[v]){case'function':case'var':case'unused':s[v]='closure';funct[v]='outer';break;case'closure':case'parameter':funct[v]='outer';break;case'label':warning("'{a}' is a statement label.",token,v);}}}}
|
347
|
-
return this;},led:function(){error("Expected an operator and instead saw '{a}'.",nexttoken,nexttoken.value);}};type('(regexp)',function(){return this;});delim('(endline)');delim('(begin)');delim('(end)').reach=true;delim('</').reach=true;delim('<!');delim('<!--');delim('-->');delim('(error)').reach=true;delim('}').reach=true;delim(')');delim(']');delim('"').reach=true;delim("'").reach=true;delim(';');delim(':').reach=true;delim(',');delim('#');delim('@');reserve('else');reserve('case').reach=true;reserve('catch');reserve('default').reach=true;reserve('finally');reservevar('arguments');reservevar('eval');reservevar('false');reservevar('Infinity');reservevar('NaN');reservevar('null');reservevar('this');reservevar('true');reservevar('undefined');assignop('=','assign',20);assignop('+=','assignadd',20);assignop('-=','assignsub',20);assignop('*=','assignmult',20);assignop('/=','assigndiv',20).nud=function(){error("A regular expression literal can be confused with '/='.");};assignop('%=','assignmod',20);bitwiseassignop('&=','assignbitand',20);bitwiseassignop('|=','assignbitor',20);bitwiseassignop('^=','assignbitxor',20);bitwiseassignop('<<=','assignshiftleft',20);bitwiseassignop('>>=','assignshiftright',20);bitwiseassignop('>>>=','assignshiftrightunsigned',20);infix('?',function(left){this.left=left;this.right=parse(10);advance(':');this['else']=parse(10);return this;},30);infix('||','or',40);infix('&&','and',50);bitwise('|','bitor',70);bitwise('^','bitxor',80);bitwise('&','bitand',90);relation('==',function(left,right){if(option.eqeqeq){warning("Expected '{a}' and instead saw '{b}'.",this,'===','==');}else if(isPoorRelation(left)){warning("Use '{a}' to compare with '{b}'.",this,'===',left.value);}else if(isPoorRelation(right)){warning("Use '{a}' to compare with '{b}'.",this,'===',right.value);}
|
348
|
-
return this;});relation('===');relation('!=',function(left,right){if(option.eqeqeq){warning("Expected '{a}' and instead saw '{b}'.",this,'!==','!=');}else if(isPoorRelation(left)){warning("Use '{a}' to compare with '{b}'.",this,'!==',left.value);}else if(isPoorRelation(right)){warning("Use '{a}' to compare with '{b}'.",this,'!==',right.value);}
|
349
|
-
return this;});relation('!==');relation('<');relation('>');relation('<=');relation('>=');bitwise('<<','shiftleft',120);bitwise('>>','shiftright',120);bitwise('>>>','shiftrightunsigned',120);infix('in','in',120);infix('instanceof','instanceof',120);infix('+',function(left){nonadjacent(prevtoken,token);nonadjacent(token,nexttoken);var right=parse(130);if(left&&right&&left.id==='(string)'&&right.id==='(string)'){left.value+=right.value;left.character=right.character;if(jx.test(left.value)){warning("JavaScript URL.",left);}
|
350
|
-
return left;}
|
351
|
-
this.left=left;this.right=right;return this;},130);prefix('+','num');infix('-','sub',130);prefix('-','neg');infix('*','mult',140);infix('/','div',140);infix('%','mod',140);suffix('++','postinc');prefix('++','preinc');syntax['++'].exps=true;suffix('--','postdec');prefix('--','predec');syntax['--'].exps=true;prefix('delete',function(){var p=parse(0);if(p.id!=='.'&&p.id!=='['){warning("Expected '{a}' and instead saw '{b}'.",nexttoken,'.',nexttoken.value);}}).exps=true;prefix('~',function(){if(option.bitwise){warning("Unexpected '{a}'.",this,'~');}
|
352
|
-
parse(150);return this;});prefix('!','not');prefix('typeof','typeof');prefix('new',function(){var c=parse(155),i;if(c&&c.id!=='function'){if(c.identifier){c['new']=true;switch(c.value){case'Object':warning("Use the object literal notation {}.",token);break;case'Array':warning("Use the array literal notation [].",token);break;case'Number':case'String':case'Boolean':case'Math':warning("Do not use {a} as a constructor.",token,c.value);break;case'Function':if(!option.evil){warning("The Function constructor is eval.");}
|
353
|
-
break;case'Date':case'RegExp':break;default:if(c.id!=='function'){i=c.value.substr(0,1);if(option.newcap&&(i<'A'||i>'Z')){warning("A constructor name should start with an uppercase letter.",token);}}}}else{if(c.id!=='.'&&c.id!=='['&&c.id!=='('){warning("Bad constructor.",token);}}}else{warning("Weird construction. Delete 'new'.",this);}
|
354
|
-
adjacent(token,nexttoken);if(nexttoken.id!=='('){warning("Missing '()' invoking a constructor.");}
|
355
|
-
this.first=c;return this;});syntax['new'].exps=true;infix('.',function(left){adjacent(prevtoken,token);var t=this,m=identifier();if(typeof m==='string'){countMember(m);}
|
356
|
-
t.left=left;t.right=m;if(!option.evil&&left&&left.value==='document'&&(m==='write'||m==='writeln')){warning("document.write can be a form of eval.",left);}
|
357
|
-
if(option.adsafe){if(left&&left.value==='ADSAFE'){if(m==='id'||m==='lib'){warning("ADsafe violation.",this);}else if(m==='go'){if(xmode!=='script'){warning("ADsafe violation.",this);}else if(adsafe_went||nexttoken.id!=='('||peek(0).id!=='(string)'||peek(0).value!==adsafe_id||peek(1).id!==','){error("ADsafe violation: go.",this);}
|
358
|
-
adsafe_went=true;adsafe_may=false;}}}
|
359
|
-
if(option.safe){for(;;){if(banned[m]===true){warning("ADsafe restricted word '{a}'.",token,m);}
|
360
|
-
if(predefined[left.value]!==true||nexttoken.id==='('){break;}
|
361
|
-
if(standard_member[m]===true){if(nexttoken.id==='.'){warning("ADsafe violation.",this);}
|
362
|
-
break;}
|
363
|
-
if(nexttoken.id!=='.'){warning("ADsafe violation.",this);break;}
|
364
|
-
advance('.');token.left=t;token.right=m;t=token;m=identifier();if(typeof m==='string'){countMember(m);}}}
|
365
|
-
return t;},160);infix('(',function(left){adjacent(prevtoken,token);nospace();var n=0,p=[];if(left){if(left.type==='(identifier)'){if(left.value.match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/)){if(left.value!=='Number'&&left.value!=='String'&&left.value!=='Boolean'&&left.value!=='Date'){if(left.value==='Math'){warning("Math is not a function.",left);}else if(option.newcap){warning("Missing 'new' prefix when invoking a constructor.",left);}}}}else if(left.id==='.'){if(option.safe&&left.left.value==='Math'&&left.right==='random'){warning("ADsafe violation.",left);}}}
|
366
|
-
if(nexttoken.id!==')'){for(;;){p[p.length]=parse(10);n+=1;if(nexttoken.id!==','){break;}
|
367
|
-
advance(',');nonadjacent(token,nexttoken);}}
|
368
|
-
advance(')');nospace(prevtoken,token);if(typeof left==='object'){if(left.value==='parseInt'&&n===1){warning("Missing radix parameter.",left);}
|
369
|
-
if(!option.evil){if(left.value==='eval'||left.value==='Function'||left.value==='execScript'){warning("eval is evil.",left);}else if(p[0]&&p[0].id==='(string)'&&(left.value==='setTimeout'||left.value==='setInterval')){warning("Implied eval is evil. Pass a function instead of a string.",left);}}
|
370
|
-
if(!left.identifier&&left.id!=='.'&&left.id!=='['&&left.id!=='('&&left.id!=='&&'&&left.id!=='||'&&left.id!=='?'){warning("Bad invocation.",left);}}
|
371
|
-
this.left=left;return this;},155).exps=true;prefix('(',function(){nospace();var v=parse(0);advance(')',this);nospace(prevtoken,token);return v;});infix('[',function(left){nospace();var e=parse(0),s;if(e&&e.type==='(string)'){if(option.safe&&banned[e.value]===true){warning("ADsafe restricted word '{a}'.",this,e.value);}
|
372
|
-
countMember(e.value);if(!option.sub&&ix.test(e.value)){s=syntax[e.value];if(!s||!s.reserved){warning("['{a}'] is better written in dot notation.",e,e.value);}}}else if(!e||(e.type!=='(number)'&&(e.id!=='+'||e.arity!=='unary'))){if(option.safe){warning('ADsafe subscripting.');}}
|
373
|
-
advance(']',this);nospace(prevtoken,token);this.left=left;this.right=e;return this;},160);prefix('[',function(){if(nexttoken.id===']'){advance(']');return;}
|
374
|
-
var b=token.line!==nexttoken.line;if(b){indent+=option.indent;if(nexttoken.from===indent+option.indent){indent+=option.indent;}}
|
375
|
-
for(;;){if(b&&token.line!==nexttoken.line){indentation();}
|
376
|
-
parse(10);if(nexttoken.id===','){adjacent(token,nexttoken);advance(',');if(nexttoken.id===','){warning("Extra comma.",token);}else if(nexttoken.id===']'){warning("Extra comma.",token);break;}
|
377
|
-
nonadjacent(token,nexttoken);}else{if(b){indent-=option.indent;indentation();}
|
378
|
-
break;}}
|
379
|
-
advance(']',this);return;},160);(function(x){x.nud=function(){var b,i,s,seen={};b=token.line!==nexttoken.line;if(b){indent+=option.indent;if(nexttoken.from===indent+option.indent){indent+=option.indent;}}
|
380
|
-
for(;;){if(nexttoken.id==='}'){break;}
|
381
|
-
if(b){indentation();}
|
382
|
-
i=optionalidentifier(true);if(!i){if(nexttoken.id==='(string)'){i=nexttoken.value;if(ix.test(i)){s=syntax[i];}
|
383
|
-
advance();}else if(nexttoken.id==='(number)'){i=nexttoken.value.toString();advance();}else{error("Expected '{a}' and instead saw '{b}'.",nexttoken,'}',nexttoken.value);}}
|
384
|
-
if(seen[i]===true){warning("Duplicate member '{a}'.",nexttoken,i);}
|
385
|
-
seen[i]=true;countMember(i);advance(':');nonadjacent(token,nexttoken);parse(10);if(nexttoken.id===','){adjacent(token,nexttoken);advance(',');if(nexttoken.id===','||nexttoken.id==='}'){warning("Extra comma.",token);}
|
386
|
-
nonadjacent(token,nexttoken);}else{break;}}
|
387
|
-
if(b){indent-=option.indent;indentation();}
|
388
|
-
advance('}',this);return;};x.fud=function(){error("Expected to see a statement and instead saw a block.",token);};})(delim('{'));function varstatement(prefix){if(funct['(onevar)']&&option.onevar){warning("Too many var statements.");}else if(!funct['(global)']){funct['(onevar)']=true;}
|
389
|
-
for(;;){nonadjacent(token,nexttoken);addlabel(identifier(),'unused');if(prefix){return;}
|
390
|
-
if(nexttoken.id==='='){nonadjacent(token,nexttoken);advance('=');nonadjacent(token,nexttoken);if(peek(0).id==='='){error("Variable {a} was not declared correctly.",nexttoken,nexttoken.value);}
|
391
|
-
parse(20);}
|
392
|
-
if(nexttoken.id!==','){return;}
|
393
|
-
adjacent(token,nexttoken);advance(',');nonadjacent(token,nexttoken);}}
|
394
|
-
stmt('var',varstatement);stmt('new',function(){error("'new' should not be used as a statement.");});function functionparams(){var i,t=nexttoken,p=[];advance('(');nospace();if(nexttoken.id===')'){advance(')');nospace(prevtoken,token);return;}
|
395
|
-
for(;;){i=identifier();p.push(i);addlabel(i,'parameter');if(nexttoken.id===','){advance(',');nonadjacent(token,nexttoken);}else{advance(')',t);nospace(prevtoken,token);return p.join(', ');}}}
|
396
|
-
function doFunction(i){var s=scope;scope=Object.create(s);funct={'(name)':i||'"'+anonname+'"','(line)':nexttoken.line+1,'(context)':funct,'(breakage)':0,'(loopage)':0,'(scope)':scope};token.funct=funct;functions.push(funct);if(i){addlabel(i,'function');}
|
397
|
-
funct['(params)']=functionparams();block(false);scope=s;funct=funct['(context)'];}
|
398
|
-
blockstmt('function',function(){if(inblock){warning("Function statements cannot be placed in blocks. Use a function expression or move the statement to the top of the outer function.",token);}
|
399
|
-
var i=identifier();adjacent(token,nexttoken);addlabel(i,'unused');doFunction(i);if(nexttoken.id==='('&&nexttoken.line===token.line){error("Function statements are not invocable. Wrap the function expression in parens.");}});prefix('function',function(){var i=optionalidentifier();if(i){adjacent(token,nexttoken);}else{nonadjacent(token,nexttoken);}
|
400
|
-
doFunction(i);if(funct['(loopage)']&&nexttoken.id!=='('){warning("Be careful when making functions within a loop. Consider putting the function in a closure.");}
|
401
|
-
return this;});blockstmt('if',function(){var t=nexttoken;advance('(');nonadjacent(this,t);nospace();parse(20);if(nexttoken.id==='='){warning("Expected a conditional expression and instead saw an assignment.");advance('=');parse(20);}
|
402
|
-
advance(')',t);nospace(prevtoken,token);block(true);if(nexttoken.id==='else'){nonadjacent(token,nexttoken);advance('else');if(nexttoken.id==='if'||nexttoken.id==='switch'){statement(true);}else{block(true);}}
|
403
|
-
return this;});blockstmt('try',function(){var b,e,s;if(option.adsafe){warning("ADsafe try violation.",this);}
|
404
|
-
block(false);if(nexttoken.id==='catch'){advance('catch');nonadjacent(token,nexttoken);advance('(');s=scope;scope=Object.create(s);e=nexttoken.value;if(nexttoken.type!=='(identifier)'){warning("Expected an identifier and instead saw '{a}'.",nexttoken,e);}else{addlabel(e,'unused');}
|
405
|
-
advance();advance(')');block(false);b=true;scope=s;}
|
406
|
-
if(nexttoken.id==='finally'){advance('finally');block(false);return;}else if(!b){error("Expected '{a}' and instead saw '{b}'.",nexttoken,'catch',nexttoken.value);}});blockstmt('while',function(){var t=nexttoken;funct['(breakage)']+=1;funct['(loopage)']+=1;advance('(');nonadjacent(this,t);nospace();parse(20);if(nexttoken.id==='='){warning("Expected a conditional expression and instead saw an assignment.");advance('=');parse(20);}
|
407
|
-
advance(')',t);nospace(prevtoken,token);block(true);funct['(breakage)']-=1;funct['(loopage)']-=1;}).labelled=true;reserve('with');blockstmt('switch',function(){var t=nexttoken,g=false;funct['(breakage)']+=1;advance('(');nonadjacent(this,t);nospace();this.condition=parse(20);advance(')',t);nospace(prevtoken,token);nonadjacent(token,nexttoken);t=nexttoken;advance('{');nonadjacent(token,nexttoken);indent+=option.indent;this.cases=[];for(;;){switch(nexttoken.id){case'case':switch(funct['(verb)']){case'break':case'case':case'continue':case'return':case'switch':case'throw':break;default:warning("Expected a 'break' statement before 'case'.",token);}
|
408
|
-
indentation(-option.indent);advance('case');this.cases.push(parse(20));g=true;advance(':');funct['(verb)']='case';break;case'default':switch(funct['(verb)']){case'break':case'continue':case'return':case'throw':break;default:warning("Expected a 'break' statement before 'default'.",token);}
|
409
|
-
indentation(-option.indent);advance('default');g=true;advance(':');break;case'}':indent-=option.indent;indentation();advance('}',t);if(this.cases.length===1||this.condition.id==='true'||this.condition.id==='false'){warning("This 'switch' should be an 'if'.",this);}
|
410
|
-
funct['(breakage)']-=1;funct['(verb)']=undefined;return;case'(end)':error("Missing '{a}'.",nexttoken,'}');return;default:if(g){switch(token.id){case',':error("Each value should have its own case label.");return;case':':statements();break;default:error("Missing ':' on a case clause.",token);}}else{error("Expected '{a}' and instead saw '{b}'.",nexttoken,'case',nexttoken.value);}}}}).labelled=true;stmt('debugger',function(){if(!option.debug){warning("All 'debugger' statements should be removed.");}});stmt('do',function(){funct['(breakage)']+=1;funct['(loopage)']+=1;block(true);advance('while');var t=nexttoken;nonadjacent(token,t);advance('(');nospace();parse(20);if(nexttoken.id==='='){warning("Expected a conditional expression and instead saw an assignment.");advance('=');parse(20);}
|
411
|
-
advance(')',t);nospace(prevtoken,token);funct['(breakage)']-=1;funct['(loopage)']-=1;}).labelled=true;blockstmt('for',function(){var s,t=nexttoken;funct['(breakage)']+=1;funct['(loopage)']+=1;advance('(');nonadjacent(this,t);nospace();if(peek(nexttoken.id==='var'?1:0).id==='in'){if(nexttoken.id==='var'){advance('var');varstatement(true);}else{advance();}
|
412
|
-
advance('in');parse(20);advance(')',t);s=block(true);if(!option.forin&&(s.length>1||typeof s[0]!=='object'||s[0].value!=='if')){warning("The body of a for in should be wrapped in an if statement to filter unwanted properties from the prototype.",this);}
|
413
|
-
funct['(breakage)']-=1;funct['(loopage)']-=1;return this;}else{if(nexttoken.id!==';'){if(nexttoken.id==='var'){advance('var');varstatement();}else{for(;;){parse(0,'for');if(nexttoken.id!==','){break;}
|
414
|
-
advance(',');}}}
|
415
|
-
advance(';');if(nexttoken.id!==';'){parse(20);if(nexttoken.id==='='){warning("Expected a conditional expression and instead saw an assignment.");advance('=');parse(20);}}
|
416
|
-
advance(';');if(nexttoken.id===';'){error("Expected '{a}' and instead saw '{b}'.",nexttoken,')',';');}
|
417
|
-
if(nexttoken.id!==')'){for(;;){parse(0,'for');if(nexttoken.id!==','){break;}
|
418
|
-
advance(',');}}
|
419
|
-
advance(')',t);nospace(prevtoken,token);block(true);funct['(breakage)']-=1;funct['(loopage)']-=1;}}).labelled=true;stmt('break',function(){var v=nexttoken.value;if(funct['(breakage)']===0){warning("Unexpected '{a}'.",nexttoken,this.value);}
|
420
|
-
nolinebreak(this);if(nexttoken.id!==';'){if(token.line===nexttoken.line){if(funct[v]!=='label'){warning("'{a}' is not a statement label.",nexttoken,v);}else if(scope[v]!==funct){warning("'{a}' is out of scope.",nexttoken,v);}
|
421
|
-
advance();}}
|
422
|
-
reachable('break');});stmt('continue',function(){var v=nexttoken.value;if(funct['(breakage)']===0){warning("Unexpected '{a}'.",nexttoken,this.value);}
|
423
|
-
nolinebreak(this);if(nexttoken.id!==';'){if(token.line===nexttoken.line){if(funct[v]!=='label'){warning("'{a}' is not a statement label.",nexttoken,v);}else if(scope[v]!==funct){warning("'{a}' is out of scope.",nexttoken,v);}
|
424
|
-
advance();}}
|
425
|
-
reachable('continue');});stmt('return',function(){nolinebreak(this);if(nexttoken.id==='(regexp)'){warning("Wrap the /regexp/ literal in parens to disambiguate the slash operator.");}
|
426
|
-
if(nexttoken.id!==';'&&!nexttoken.reach){nonadjacent(token,nexttoken);parse(20);}
|
427
|
-
reachable('return');});stmt('throw',function(){nolinebreak(this);nonadjacent(token,nexttoken);parse(20);reachable('throw');});reserve('void');reserve('class');reserve('const');reserve('enum');reserve('export');reserve('extends');reserve('float');reserve('goto');reserve('import');reserve('let');reserve('super');function jsonValue(){function jsonObject(){var t=nexttoken;advance('{');if(nexttoken.id!=='}'){for(;;){if(nexttoken.id==='(end)'){error("Missing '}' to match '{' from line {a}.",nexttoken,t.line+1);}else if(nexttoken.id==='}'){warning("Unexpected comma.",token);break;}else if(nexttoken.id===','){error("Unexpected comma.",nexttoken);}else if(nexttoken.id!=='(string)'){warning("Expected a string and instead saw {a}.",nexttoken,nexttoken.value);}
|
428
|
-
advance();advance(':');jsonValue();if(nexttoken.id!==','){break;}
|
429
|
-
advance(',');}}
|
430
|
-
advance('}');}
|
431
|
-
function jsonArray(){var t=nexttoken;advance('[');if(nexttoken.id!==']'){for(;;){if(nexttoken.id==='(end)'){error("Missing ']' to match '[' from line {a}.",nexttoken,t.line+1);}else if(nexttoken.id===']'){warning("Unexpected comma.",token);break;}else if(nexttoken.id===','){error("Unexpected comma.",nexttoken);}
|
432
|
-
jsonValue();if(nexttoken.id!==','){break;}
|
433
|
-
advance(',');}}
|
434
|
-
advance(']');}
|
435
|
-
switch(nexttoken.id){case'{':jsonObject();break;case'[':jsonArray();break;case'true':case'false':case'null':case'(number)':case'(string)':advance();break;case'-':advance('-');if(token.character!==nexttoken.from){warning("Unexpected space after '-'.",token);}
|
436
|
-
adjacent(token,nexttoken);advance('(number)');break;default:error("Expected a JSON value.",nexttoken);}}
|
437
|
-
var itself=function(s,o){var a,i;JSLINT.errors=[];predefined=Object.create(standard);if(o){a=o.predef;if(a instanceof Array){for(i=0;i<a.length;i+=1){predefined[a[i]]=true;}}
|
438
|
-
if(o.adsafe){o.safe=true;}
|
439
|
-
if(o.safe){o.browser=false;o.css=false;o.debug=false;o.eqeqeq=true;o.evil=false;o.forin=false;o.nomen=true;o.on=false;o.rhino=false;o.safe=true;o.sidebar=false;o.strict=true;o.sub=false;o.undef=true;o.widget=false;predefined.Date=false;predefined['eval']=false;predefined.Function=false;predefined.Object=false;predefined.ADSAFE=true;predefined.lib=true;}
|
440
|
-
option=o;}else{option={};}
|
441
|
-
option.indent=option.indent||4;adsafe_id='';adsafe_may=false;adsafe_went=false;approved={};if(option.approved){for(i=0;i<option.approved.length;i+=1){approved[option.approved[i]]=option.approved[i];}}
|
442
|
-
approved.test='test';tab='';for(i=0;i<option.indent;i+=1){tab+=' ';}
|
443
|
-
indent=0;global=Object.create(predefined);scope=global;funct={'(global)':true,'(name)':'(global)','(scope)':scope,'(breakage)':0,'(loopage)':0};functions=[];ids={};urls=[];src=false;xmode=false;stack=null;member={};membersOnly=null;implied={};inblock=false;lookahead=[];jsonmode=false;warnings=0;lex.init(s);prereg=true;prevtoken=token=nexttoken=syntax['(begin)'];assume();try{advance();if(nexttoken.value.charAt(0)==='<'){html();if(option.adsafe&&!adsafe_went){warning("ADsafe violation: Missing ADSAFE.go.",this);}}else{switch(nexttoken.id){case'{':case'[':option.laxbreak=true;jsonmode=true;jsonValue();break;case'@':case'*':case'#':case'.':case':':xmode='style';advance();if(token.id!=='@'||!nexttoken.identifier||nexttoken.value!=='charset'){error('A css file should begin with @charset "UTF-8";');}
|
444
|
-
advance();if(nexttoken.type!=='(string)'&&nexttoken.value!=='UTF-8'){error('A css file should begin with @charset "UTF-8";');}
|
445
|
-
advance();advance(';');styles();break;default:if(option.adsafe&&option.fragment){warning("ADsafe violation.",this);}
|
446
|
-
statements('lib');}}
|
447
|
-
advance('(end)');}catch(e){if(e){JSLINT.errors.push({reason:e.message,line:e.line||nexttoken.line,character:e.character||nexttoken.from},null);}}
|
448
|
-
return JSLINT.errors.length===0;};function to_array(o){var a=[],k;for(k in o){if(o.hasOwnProperty(k)){a.push(k);}}
|
449
|
-
return a;}
|
450
|
-
itself.report=function(option,sep){var a=[],c,e,f,i,k,l,m='',n,o=[],s,v,cl,va,un,ou,gl,la;function detail(h,s,sep){if(s.length){o.push('<div><i>'+h+'</i> '+
|
451
|
-
s.sort().join(sep||', ')+'</div>');}}
|
452
|
-
s=to_array(implied);k=JSLINT.errors.length;if(k||s.length>0){o.push('<div id=errors><i>Error:</i>');if(s.length>0){s.sort();for(i=0;i<s.length;i+=1){s[i]='<code>'+s[i]+'</code> <i>'+
|
453
|
-
implied[s[i]].join(' ')+'</i>';}
|
454
|
-
o.push('<p><i>Implied global:</i> '+s.join(', ')+'</p>');c=true;}
|
455
|
-
for(i=0;i<k;i+=1){c=JSLINT.errors[i];if(c){e=c.evidence||'';o.push('<p>Problem'+(isFinite(c.line)?' at line '+(c.line+1)+' character '+(c.character+1):'')+': '+c.reason.entityify()+'</p><p class=evidence>'+
|
456
|
-
(e&&(e.length>80?e.slice(0,77)+'...':e).entityify())+'</p>');}}
|
457
|
-
o.push('</div>');if(!c){return o.join('');}}
|
458
|
-
if(!option){o.push('<br><div id=functions>');if(urls.length>0){detail("URLs<br>",urls,'<br>');}
|
459
|
-
s=to_array(scope);if(s.length===0){if(jsonmode){if(k===0){o.push('<p>JSON: good.</p>');}else{o.push('<p>JSON: bad.</p>');}}else{o.push('<div><i>No new global variables introduced.</i></div>');}}else{o.push('<div><i>Global</i> '+s.sort().join(', ')+'</div>');}
|
460
|
-
for(i=0;i<functions.length;i+=1){f=functions[i];cl=[];va=[];un=[];ou=[];gl=[];la=[];for(k in f){if(f.hasOwnProperty(k)&&k.charAt(0)!=='('){v=f[k];switch(v){case'closure':cl.push(k);break;case'var':va.push(k);break;case'unused':un.push(k);break;case'label':la.push(k);break;case'outer':ou.push(k);break;case true:gl.push(k);break;}}}
|
461
|
-
o.push('<br><div class=function><i>'+f['(line)']+'</i> '+
|
462
|
-
(f['(name)']||'')+'('+
|
463
|
-
(f['(params)']||'')+')</div>');detail('Closure',cl);detail('Variable',va);detail('Outer',ou);detail('Global',gl);detail('<big><b>Unused</b></big>',un);detail('Label',la);}
|
464
|
-
a=[];for(k in member){if(typeof member[k]==='number'){a.push(k);}}
|
465
|
-
if(a.length){a=a.sort();m='<br><pre>/*members ';l=10;for(i=0;i<a.length;i+=1){k=a[i];n=k.name();if(l+n.length>72){o.push(m+'<br>');m=' ';l=1;}
|
466
|
-
l+=n.length+2;if(member[k]===1){n='<i>'+n+'</i>';}
|
467
|
-
if(i<a.length-1){n+=', ';}
|
468
|
-
m+=n;}
|
469
|
-
o.push(m+'<br>*/</pre>');}
|
470
|
-
o.push('</div>');}
|
471
|
-
return o.join('');};return itself;}();(function(a){if(!a[0]){print("Usage: jslint.js file.js");quit(1);}
|
472
|
-
var input=readFile(a[0]);if(!input){print("jslint: Couldn't open file '"+a[0]+"'.");quit(1);}
|
473
|
-
if(!JSLINT(input,{rhino:true,passfail:false})){for(var i=0;i<JSLINT.errors.length;i+=1){var e=JSLINT.errors[i];if(e){print('Lint at line '+(e.line+1)+' character '+
|
474
|
-
(e.character+1)+': '+e.reason);print((e.evidence||'').replace(/^\s*(\S*(\s+\S+)*)\s*$/,"$1"));print('');}}}else{print("jslint: No problems found in "+a[0]);quit();}})(arguments);
|
data/test/bin/rhino1_7R1.zip
DELETED
Binary file
|
data/test/bin/rhino1_7R2-RC1.zip
DELETED
Binary file
|
data/test/bin/yuicompressor
DELETED
@@ -1,238 +0,0 @@
|
|
1
|
-
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
|
2
|
-
<html>
|
3
|
-
<head>
|
4
|
-
<title>Download the YUI Compressor</title>
|
5
|
-
<style>
|
6
|
-
|
7
|
-
/* reset.css */
|
8
|
-
|
9
|
-
body {color:#000;background:#FFF;}
|
10
|
-
body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}
|
11
|
-
table{border-collapse:collapse;border-spacing:0;}
|
12
|
-
fieldset,img{border:0;}
|
13
|
-
address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}
|
14
|
-
li {list-style:none;}
|
15
|
-
caption,th {text-align:left;}
|
16
|
-
h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}
|
17
|
-
q:before,q:after{content:'';}
|
18
|
-
abbr,acronym {border:0;font-variant:normal;}
|
19
|
-
sup,sub {line-height:-1px;vertical-align: text-top;}
|
20
|
-
sub {vertical-align:text-bottom;}
|
21
|
-
input, textarea, select{font-family:inherit;font-size:inherit;font-weight:inherit;}
|
22
|
-
|
23
|
-
/* fonts.css */
|
24
|
-
|
25
|
-
body {font:13px/1.22 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}
|
26
|
-
table {font-size:inherit;font:100%;}
|
27
|
-
pre,code,kbd,samp,tt {font-family:monospace;*font-size:108%;line-height:99%;}
|
28
|
-
|
29
|
-
/* button.css */
|
30
|
-
|
31
|
-
.yui-button{display:-moz-inline-box;display:inline-block;border-width:1px 0;border-style:solid;border-color:#999;background:#ecece3 url(background.png)left center;margin:auto .25em;}
|
32
|
-
.yui-button.ie6{background-image:none;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../../build/button/assets/background.png',sizingMethod = 'scale');}
|
33
|
-
.yui-button .first-child{display:block;*display:inline-block;border-width:0 1px;border-style:solid;border-color:#999;margin:0 -1px;*position:relative;*left:-1px;}
|
34
|
-
.yui-button button,.yui-button a{display:block;*display:inline-block;padding:.25em .5em;border:1px solid #ccc;}
|
35
|
-
.yui-button button{*overflow:visible;font-size:100%;background-color:transparent;cursor:pointer;cursor:hand;}
|
36
|
-
.yui-button a{text-decoration:none;color:#000;}
|
37
|
-
.yui-split-button button,.yui-menu-button button{padding-right:20px;background-position:right center;background-repeat:no-repeat;}
|
38
|
-
.yui-menu-button button{background-image:url(menuarrow.gif);}
|
39
|
-
.yui-split-button button{background-image:url(splitarrow.gif);}
|
40
|
-
.yui-button-focus{border-color:#5e5c95;}
|
41
|
-
.yui-button-focus .first-child{border-color:#5e5c95;}
|
42
|
-
.yui-button-focus button,.yui-button-focus a{border-color:#cec1fc;}
|
43
|
-
.yui-button-hover{border-color:#406fac;background-color:#98d5fc;}
|
44
|
-
.yui-button-hover .first-child{border-color:#406fac;}
|
45
|
-
.yui-button-hover button,.yui-button-hover a{border-color:#7099ce;}
|
46
|
-
.yui-button-active{border-color:#7a8180;background-color:#333;}
|
47
|
-
.yui-button-active .first-child{border-color:#7a8180;}
|
48
|
-
.yui-button-active button,.yui-button-active a{border-color:#98a09f;}
|
49
|
-
.yui-split-button-activeoption button{background-color:transparent;background-image:url(splitarrow_active.gif);}
|
50
|
-
.yui-radio-button-checked,.yui-checkbox-button-checked{border-color:#7a8180;background-color:#333;}
|
51
|
-
.yui-radio-button-checked .first-child,.yui-checkbox-button-checked .first-child{border-color:#7a8180;}
|
52
|
-
.yui-radio-button-checked button,.yui-checkbox-button-checked button{border-color:#98a09f;}
|
53
|
-
.yui-button-disabled{border-color:#cbcdc5;background:#ecece3;filter:none;}
|
54
|
-
.yui-button-disabled .first-child{border-color:#cbcdc5;}
|
55
|
-
.yui-button-disabled button,.yui-button-disabled a{border-color:transparent;color:#b9b9b9;cursor:default;}
|
56
|
-
|
57
|
-
/* custom css */
|
58
|
-
|
59
|
-
body { padding:1em; }
|
60
|
-
|
61
|
-
#downloadbutton a {
|
62
|
-
padding:.8em; padding-left:3em;
|
63
|
-
background:#deecf7 url(download.png) 4% 50% no-repeat;
|
64
|
-
font-size:1.5em;
|
65
|
-
font-weight:bold;
|
66
|
-
}
|
67
|
-
|
68
|
-
h3 {
|
69
|
-
margin:1em 0;
|
70
|
-
font-size:1.5em;
|
71
|
-
font-weight:bold;
|
72
|
-
}
|
73
|
-
|
74
|
-
ul {
|
75
|
-
margin-left:1em;
|
76
|
-
}
|
77
|
-
|
78
|
-
ul li {
|
79
|
-
list-style-type:disc;
|
80
|
-
}
|
81
|
-
</style>
|
82
|
-
</head>
|
83
|
-
<body>
|
84
|
-
|
85
|
-
<div id="doc">
|
86
|
-
|
87
|
-
<span id="downloadbutton" class="yui-button yui-link-button" style="margin-bottom:1em;">
|
88
|
-
<em class="first-child">
|
89
|
-
<a href="yuicompressor-2.4.2.zip">Download YUI Compressor version 2.4.2</a>
|
90
|
-
</em>
|
91
|
-
</span>
|
92
|
-
|
93
|
-
<h3>Documentation</h3>
|
94
|
-
|
95
|
-
<pre>==============================================================================
|
96
|
-
YUI Compressor
|
97
|
-
==============================================================================
|
98
|
-
|
99
|
-
NAME
|
100
|
-
|
101
|
-
YUI Compressor - The Yahoo! JavaScript and CSS Compressor
|
102
|
-
|
103
|
-
SYNOPSIS
|
104
|
-
|
105
|
-
Usage: java -jar yuicompressor-x.y.z.jar [options] [input file]
|
106
|
-
|
107
|
-
Global Options
|
108
|
-
-h, --help Displays this information
|
109
|
-
--type <js|css> Specifies the type of the input file
|
110
|
-
--charset <charset> Read the input file using <charset>
|
111
|
-
--line-break <column> Insert a line break after the specified column number
|
112
|
-
-v, --verbose Display informational messages and warnings
|
113
|
-
-o <file> Place the output into <file>. Defaults to stdout.
|
114
|
-
|
115
|
-
JavaScript Options
|
116
|
-
--nomunge Minify only, do not obfuscate
|
117
|
-
--preserve-semi Preserve all semicolons
|
118
|
-
--disable-optimizations Disable all micro optimizations
|
119
|
-
|
120
|
-
DESCRIPTION
|
121
|
-
|
122
|
-
The YUI Compressor is a JavaScript compressor which, in addition to removing
|
123
|
-
comments and white-spaces, obfuscates local variables using the smallest
|
124
|
-
possible variable name. This obfuscation is safe, even when using constructs
|
125
|
-
such as 'eval' or 'with' (although the compression is not optimal is those
|
126
|
-
cases) Compared to jsmin, the average savings is around 20%.
|
127
|
-
|
128
|
-
The YUI Compressor is also able to safely compress CSS files. The decision
|
129
|
-
on which compressor is being used is made on the file extension (js or css)
|
130
|
-
|
131
|
-
GLOBAL OPTIONS
|
132
|
-
|
133
|
-
-h, --help
|
134
|
-
Prints help on how to use the YUI Compressor
|
135
|
-
|
136
|
-
--line-break
|
137
|
-
Some source control tools don't like files containing lines longer than,
|
138
|
-
say 8000 characters. The linebreak option is used in that case to split
|
139
|
-
long lines after a specific column. It can also be used to make the code
|
140
|
-
more readable, easier to debug (especially with the MS Script Debugger)
|
141
|
-
Specify 0 to get a line break after each semi-colon in JavaScript, and
|
142
|
-
after each rule in CSS.
|
143
|
-
|
144
|
-
--type js|css
|
145
|
-
The type of compressor (JavaScript or CSS) is chosen based on the
|
146
|
-
extension of the input file name (.js or .css) This option is required
|
147
|
-
if no input file has been specified. Otherwise, this option is only
|
148
|
-
required if the input file extension is neither 'js' nor 'css'.
|
149
|
-
|
150
|
-
--charset character-set
|
151
|
-
If a supported character set is specified, the YUI Compressor will use it
|
152
|
-
to read the input file. Otherwise, it will assume that the platform's
|
153
|
-
default character set is being used. The output file is encoded using
|
154
|
-
the same character set.
|
155
|
-
|
156
|
-
-o outfile
|
157
|
-
Place output in file outfile. If not specified, the YUI Compressor will
|
158
|
-
default to the standard output, which you can redirect to a file.
|
159
|
-
|
160
|
-
-v, --verbose
|
161
|
-
Display informational messages and warnings.
|
162
|
-
|
163
|
-
JAVASCRIPT ONLY OPTIONS
|
164
|
-
|
165
|
-
--nomunge
|
166
|
-
Minify only. Do not obfuscate local symbols.
|
167
|
-
|
168
|
-
--preserve-semi
|
169
|
-
Preserve unnecessary semicolons (such as right before a '}') This option
|
170
|
-
is useful when compressed code has to be run through JSLint (which is the
|
171
|
-
case of YUI for example)
|
172
|
-
|
173
|
-
--disable-optimizations
|
174
|
-
Disable all the built-in micro optimizations.
|
175
|
-
|
176
|
-
NOTES
|
177
|
-
|
178
|
-
+ If no input file is specified, it defaults to stdin.
|
179
|
-
|
180
|
-
+ The YUI Compressor requires Java version >= 1.4.
|
181
|
-
|
182
|
-
+ It is possible to prevent a local variable, nested function or function
|
183
|
-
argument from being obfuscated by using "hints". A hint is a string that
|
184
|
-
is located at the very beginning of a function body like so:
|
185
|
-
|
186
|
-
function fn (arg1, arg2, arg3) {
|
187
|
-
"arg2:nomunge, localVar:nomunge, nestedFn:nomunge";
|
188
|
-
|
189
|
-
...
|
190
|
-
var localVar;
|
191
|
-
...
|
192
|
-
|
193
|
-
function nestedFn () {
|
194
|
-
....
|
195
|
-
}
|
196
|
-
|
197
|
-
...
|
198
|
-
}
|
199
|
-
|
200
|
-
The hint itself disappears from the compressed file.
|
201
|
-
|
202
|
-
+ C-style comments starting with /*! are preserved. This is useful with
|
203
|
-
comments containing copyright/license information. For example:
|
204
|
-
|
205
|
-
/*!
|
206
|
-
* TERMS OF USE - EASING EQUATIONS
|
207
|
-
* Open source under the BSD License.
|
208
|
-
* Copyright 2001 Robert Penner All rights reserved.
|
209
|
-
*/
|
210
|
-
|
211
|
-
becomes:
|
212
|
-
|
213
|
-
/*
|
214
|
-
* TERMS OF USE - EASING EQUATIONS
|
215
|
-
* Open source under the BSD License.
|
216
|
-
* Copyright 2001 Robert Penner All rights reserved.
|
217
|
-
*/
|
218
|
-
|
219
|
-
AUTHOR
|
220
|
-
|
221
|
-
The YUI Compressor was written and is maintained by:
|
222
|
-
Julien Lecomte <jlecomte@yahoo-inc.com>
|
223
|
-
The CSS portion is a port of Isaac Schlueter's cssmin utility.
|
224
|
-
|
225
|
-
COPYRIGHT
|
226
|
-
|
227
|
-
Copyright (c) 2007-2009, Yahoo! Inc. All rights reserved.
|
228
|
-
|
229
|
-
LICENSE
|
230
|
-
|
231
|
-
All code specific to YUI Compressor is issued under a BSD license.
|
232
|
-
YUI Compressor extends and implements code from Mozilla's Rhino project.
|
233
|
-
Rhino is issued under the Mozilla Public License (MPL), and MPL applies
|
234
|
-
to the Rhino source and binaries that are distributed with YUI Compressor.</pre>
|
235
|
-
|
236
|
-
</div>
|
237
|
-
</body>
|
238
|
-
</html>
|
Binary file
|
Binary file
|