IWBH_01

javascript crawl (can help preform syntax highlighting)

Apr 29th, 2021 (edited)
1,239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //note end bracket/brace/parenth character indexes are index Of that end character not index after
  2. self.JScrawl={
  3.  
  4. "XrakScrps":function(hs,gd){var T=this,d=document,db=document.body,ifr=T.ifr1||(T.ifr1=d.createElement("iframe")),Hdoc;
  5.   db.appendChild(ifr);Hdoc=ifr.contentDocument;db.removeChild(ifr);
  6.   Hdoc.documentElement.innerHTML=hs;
  7.   return gd?Hdoc:Hdoc.getElementsByTagName("script");
  8. },
  9.  
  10.  
  11. "jsp_":function javascript_parse_string(js){
  12. var i=0,
  13. lev=[],ins,em={"(":")","[":"]","{":"}"}, //lev = bracket level, em=end bracket map
  14. AM=[], //all map
  15. bm=[],cl=0,lc=0, //bm = bracket map [bracketChar, AbsoluteIndex, MatchingBracketAbsoluteIndex,IndexOfMatchingBracketInBmArray]; cl=current line; lc=line character (current character index on line)
  16. Lm={"(":[],"[":[],"{":[]}, //Last match (bracket)
  17. sm=[],nl=[], //string map [denoterChar,AbsoluteIndex,AbsoluteEndIndex], nl=new line array
  18. evs=":?&|*^-+<>!",ev=1,rf="gimsuy",rm=[],inR, //expecting value string;ev = expecting value (not literal number) rather any value, after : or , or = or [ or "(" a value is expected; a "value" can be anything besides whitespace ? Right now this is just to determine if '/' has the context of division or regex; rm=RegEx map; inR = in RegEx;
  19. inC,cm=[], //inC= in comment, cm= comment map [denoteType,AbsoluteIndex,AbsoluteEndIndex]
  20. stmnt=["case","class","const","break","delete","do","else","export","for","function","import","in","let","new","of","return","switch","this","throw","var","while","with","yield"],
  21. stmtR=new RegExp(stmnt.join("|")),
  22. a_z=/[a-zA-Z]/,Var=/[a-zA-Z_$]/,num=/[0-9]/,hex=/[0-9a-fA-F]/,
  23. nm=[], //Number Map
  24. vm=[], //Var Map
  25. smm=[], //StateMent Map
  26. B,b,ws="\t \xA0\f\v",Lnw; //B & b=buffer (generic temp storage), ws= whitespace, Lnw = Last non-whitespace
  27. while(i<js.length){
  28.  let c=js[i];
  29.  if(ws.indexOf(c)+1){ //white space
  30.   if(js[i-1]=="/"){ev=1;}
  31.  }else if(ins){ //in string
  32.   if(c==ins&&js[i-1]!="\x5C"){ ins=!1; sm[sm.length-1][2]=i+1; }
  33.  }else if(inR){ //in RegEx in regex (/) like in string and differentiate it from division operator by weather a value has come before it?
  34.   if(inR==1){
  35.    if(c=="/"&&js[i-1]!="\x5C"){ if(rf.indexOf(js[i+1])+1){ inR=2; }else{ inR=!1; rm[rm.length-1][1]=i+1; } }
  36.   }else if(inR==2){ if(rf.indexOf(js[i+1])<0){ inR=!1; rm[rm.length-1][1]=i+1; } }
  37.  }else if(inC){ //in Comment
  38.   if((inC=="//"&&(c=="\r"||c=="\n"))||(inC=="/*"&&c=="/"&&js[i-1]=="*")){inC=!1;cm[cm.length-1][2]=i+1;}
  39.  }else{
  40.   if(c=="\n"||(c=="\r"&&js[i+1]!="\n")){ nl.push(i); AM.push(["nl",i]); }
  41.   else{
  42.    if(c=="/"){
  43.     if((B=c[i+1])==c){ cm.push(b=["//",i]); inC="//"; AM.push(["cm",b]); }
  44.     else if(B=="*"){ cm.push(b=["/*",i]); inC="/*"; AM.push(["cm",b]); }
  45.     else if(ev){ inR=1; rm.push(b=[i]); AM.push(["rm",b]); }
  46.    }
  47.    else if(c==";"){ ev=1; }
  48.    else if(evs.indexOf(c)+1){ ev=1; }
  49.    else if((c=='"'||c=="'")){sm.push(b=[ins=c,i]); AM.push(["sm",b]);}
  50.    else if(c=="("||c=="["||c=="{"){lev.push(c); Lm[c].push(bm.push(b=[c,i])-1); AM.push(["bm",b]); ev=1; }
  51.    else if(lev.length&&c==em[lev[lev.length-1]]){ let m=Lm[lev.pop()].pop(); (B=bm[m])[2]=i;B[3]=bm.push(b=[c,i,bm[m][1],m])-1; AM.push(["bm",b]); ev=0; }
  52.    else if(num.test(c)){ ev=0; nm.push(b=[i]); AM.push(["nm",b]); let T=num,o=1; if(c=="0"&&js[i+1]=="x"){o++;T=hex;} while(T.test(js[i+o]))o++; b[1]=i+o;  i+=(o-1);/*Number*/ }
  53.    else if(Var.test(c)){ //var and statement
  54.     let o=1; while(Var.test(B=js[i+o])||num.test(B))o++; let T,p=js[Lnw]==".",cv=js.substr(i,o);
  55.     b=[i,i+o];
  56.     if((!p)&&stmtR.test(cv)){ T="smm"; smm.push(b);  }
  57.     else{ T="vm"; vm.push(b); if(p)b[2]=!0; }
  58.     AM.push([T,b]);
  59.     i+=(o-1);
  60.    }
  61.    Lnw=i;
  62.   }
  63.  }
  64.  i++;
  65. }
  66. return {"raw":js,"bm":bm,"sm":sm,"nl":nl,"cm":cm,"rm":rm,"nm":nm,"vm":vm,"smm":smm,"AM":AM};
  67. },
  68.  
  69.  
  70. "XtrkJSON":function(jspo){
  71. var jsna=[],js=jspo.raw,Rs="";
  72. for(let V of jspo.bm){ if(V[0]=="{"){
  73.   let R=js.substring(V[1],V[2]+1),jo;
  74.   try{ if(V[2]-V[1]>3&&Rs.indexOf(R)<0){ jo=JSON.parse(R); Rs+=(";\r\n\r\n"+R); jsna.push([V,jo]); } }catch(e){}
  75. } }
  76.  
  77. return jsna;
  78. },
  79.  
  80. //is this a useful function?
  81. "splunk":function(s,f,dil,d2){
  82. var fi=s.indexOf(f); if(!d2)d2=dil;
  83. return s.substring(s.lastIndexOf(dil,fi)+dil.length,s.indexOf(d2,fi)+d2.length);
  84. }
  85.  
  86. };
  87.  
  88.  
  89.  
  90. //&nbsp; = 0xA0 =
  91.  
  92.  
  93.  
Add Comment
Please, Sign In to add comment