乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      JS代碼的格式化和壓縮

       duduwolf 2006-05-23

      曾經(jīng)為看別人寫的雜亂代碼而頭痛嗎?曾經(jīng)為看BWindow代碼而煩惱嗎?曾經(jīng)為減小JS體積和JS的可讀性之間的矛盾而左右徘徊嗎?最好的辦法是有個代碼格式化和代碼壓縮的程序,今天總算有了,它是純JS編寫的,當然也就是開源的了.不好意思,做個廣告先:),老早就想寫這個代碼了,今天總算利用這個周末把它寫完了,由于寫的倉促,還有些小BUG,請經(jīng)常注意更新!


      <HTML><HEAD><TITLE>Format</TITLE>
      <META content="MSHTML 6.00.2800.1528" name=GENERATOR>
      <META content="" name=Author>
      <META content="" name=Keywords>
      <META content="" name=Description></HEAD>
      <BODY>
      <SCRIPT language=JavaScript>
      <!--
      /**//**//**//**
      **    ================================================================================================== 
      **    類名:CLASS_FORMATER
      **    功能:JS格式化 
      **    示例: 
          --------------------------------------------------------------------------------------------------- 
       
                  var xx        = new CLASS_FORMATER(code);           

                  document.getElementById("display").innerHTML = xx.format();
       
          --------------------------------------------------------------------------------------------------- 
      **    作者:ttyp 
      **    郵件:ttyp@21cn.com 
      **    日期:2006-5-21 
      **    版本:0.1
      **    ================================================================================================== 
      **/ 

      function CLASS_FORMAT(code){
          //哈希表類
          function Hashtable(){
              this._hash        = new Object();
              this.add        = function(key,value){
                                  if(typeof(key)!="undefined"){
                                      if(this.contains(key)==false){
                                          this._hash[key]=typeof(value)=="undefined"?null:value;
                                          return true;
                                      } else {
                                          return false;
                                      }
                                  } else {
                                      return false;
                                  }
                              }
              this.remove        = function(key){delete this._hash[key];}
              this.count        = function(){var i=0;for(var k in this._hash){i++;} return i;}
              this.items        = function(key){return this._hash[key];}
              this.contains    = function(key){return typeof(this._hash[key])!="undefined";}
              this.clear        = function(){for(var k in this._hash){delete this._hash[k];}}

          }

          this._caseSensitive = true;

          //字符串轉(zhuǎn)換為哈希表
          this.str2hashtable = function(key,cs){
             
              var _key    = key.split(/,/g);
              var _hash    = new Hashtable();
              var _cs        = true;

         
              if(typeof(cs)=="undefined"||cs==null){
                  _cs = this._caseSensitive;
              } else {
                  _cs = cs;
              }

              for(var i in _key){
                  if(_cs){
                      _hash.add(_key[i]);
                  } else {
                      _hash.add((_key[i]+"").toLowerCase());
                  }

              }
              return _hash;
          }

          //獲得需要轉(zhuǎn)換的代碼
          this._codetxt        = code;

          if(typeof(syntax)=="undefined"){
              syntax = "";
          }

          this._deleteComment = false;
          //是否大小寫敏感
          this._caseSensitive = true;
          //可以后面加塊語句的關(guān)鍵字
          this._blockElement  = this.str2hashtable("switch,if,while,try,finally");
          //是函數(shù)申明
          this._function      = this.str2hashtable("function");
          //本行括號內(nèi)分號不做換行
          this._isFor            = "for";

          this._choiceElement = this.str2hashtable("else,catch");

          this._beginBlock    = "{";
          this._endBlock      = "}";
         
          this._singleEyeElement = this.str2hashtable("var,new,return,else,delete,in,case");
          //得到分割字符
          this._wordDelimiters= "  ,.?!;:\\/<>(){}[]\"‘\r\n\t=+-|*%@#$^&";
          //引用字符
          this._quotation     = this.str2hashtable("\",‘");
          //行注釋字符
          this._lineComment   = "http://";
          //轉(zhuǎn)義字符
          this._escape        = "\\";
          //多行引用開始
          this._commentOn        = "/*";
          //多行引用結(jié)束
          this._commentOff    = "*/";
          //行結(jié)束詞
          this._rowEnd        = ";";

          this._in            = "in";


          this.isCompress        = false;
          this.style            = 0;

          this._tabNum        = 0;


          this.format = function() {
              var codeArr        = new Array();
              var word_index    = 0;
              var htmlTxt        = new Array();

              if(this.isCompress){
                  this._deleteComment = true;
              }


              //得到分割字符數(shù)組(分詞)
              for (var i = 0; i < this._codetxt.length; i++) {      
                  if (this._wordDelimiters.indexOf(this._codetxt.charAt(i)) == -1) {        //找不到關(guān)鍵字
                      if (codeArr[word_index] == null || typeof(codeArr[word_index]) == ‘undefined‘) {
                          codeArr[word_index] = "";
                      }
                      codeArr[word_index] += this._codetxt.charAt(i);
                  } else {
                      if (typeof(codeArr[word_index]) != ‘undefined‘ && codeArr[word_index].length > 0)
                          word_index++;
                      codeArr[word_index++] = this._codetxt.charAt(i);               
                  }
              }


              var quote_opened                = false;    //引用標記
              var slash_star_comment_opened   = false;    //多行注釋標記
              var slash_slash_comment_opened  = false;    //單行注釋標記
              var line_num                    = 1;        //行號
              var quote_char                  = "";       //引用標記類型

              var function_opened             = false;

              var bracket_open                = false;
              var for_open                    = false;

              //按分割字,分塊顯示
              for (var i=0; i <=word_index; i++){           
                  //處理空行(由于轉(zhuǎn)義帶來)
                  if(typeof(codeArr[i])=="undefined"||codeArr[i].length==0){
                      continue;
                  } else if(codeArr[i]==" "||codeArr[i]=="\t"){
                      if(slash_slash_comment_opened||slash_star_comment_opened){
                          if(!this._deleteComment){
                              htmlTxt[htmlTxt.length] = codeArr[i];
                          }
                      }
                      if(quote_opened){
                              htmlTxt[htmlTxt.length] = codeArr[i];                   
                      }
                  } else if(codeArr[i]=="\n"){
                  //處理換行
                  } else if (codeArr[i] == "\r"){                                                                   
                      slash_slash_comment_opened = false;   
                      quote_opened    = false;
                      line_num++;
                      if(!this.isCompress){
                          htmlTxt[htmlTxt.length] = "\r\n"+ this.getIdent();   
                      }
                  //處理function里的參數(shù)標記
                  } else if (!slash_slash_comment_opened&&!slash_star_comment_opened && !quote_opened &&this.isFunction(codeArr[i])){
                      htmlTxt[htmlTxt.length] = codeArr[i]  + " ";
                      function_opened = true;
                  } else if (!slash_slash_comment_opened&&!slash_star_comment_opened && !quote_opened &&codeArr[i]==this._isFor){
                      htmlTxt[htmlTxt.length] = codeArr[i];
                      for_open = true;
                  } else if (!slash_slash_comment_opened&&!slash_star_comment_opened && !quote_opened &&codeArr[i]=="("){
                      bracket_open    = true;
                      htmlTxt[htmlTxt.length] = codeArr[i];
                  } else if (!slash_slash_comment_opened&&!slash_star_comment_opened && !quote_opened &&codeArr[i]==")"){
                      bracket_open    = false;
                      htmlTxt[htmlTxt.length] = codeArr[i];
                  } else if (!slash_slash_comment_opened&&!slash_star_comment_opened && !quote_opened &&codeArr[i]==this._rowEnd){
                      if(!this.isCompress){
                          if(!for_open){
                              if(i<word_index&&(codeArr[i+1]!="\r"&&codeArr[i+1]!="\n")){                           
                                  htmlTxt[htmlTxt.length] = codeArr[i] + "\n" + this.getIdent();
                              }else{
                                  htmlTxt[htmlTxt.length] = codeArr[i] + this.getIdent();
                              }
                          }else{
                              htmlTxt[htmlTxt.length] = codeArr[i];                   
                          }
                      }else{
                          htmlTxt[htmlTxt.length] = codeArr[i];
                      }
                  } else if(!slash_slash_comment_opened&&!slash_star_comment_opened && !quote_opened &&codeArr[i]==this._beginBlock){
                      for_open    = false;
                      if(!this.isCompress){
                          switch(this.style){
                              case 0:
                                  this._tabNum++;
                                  htmlTxt[htmlTxt.length] = codeArr[i] + "\n" + this.getIdent();
                                  break;
                              case 1:
                                  htmlTxt[htmlTxt.length] = "\n" + this.getIdent();
                                  this._tabNum++;
                                  htmlTxt[htmlTxt.length] = codeArr[i] + "\n"+ this.getIdent();
                                  break;
                              default:
                                  this._tabNum++;
                                  htmlTxt[htmlTxt.length] = codeArr[i];
                                  break;
                                 
                          }
                      }else{
                          htmlTxt[htmlTxt.length] = codeArr[i];
                      }

                  } else if(!slash_slash_comment_opened&&!slash_star_comment_opened && !quote_opened &&codeArr[i]==this._endBlock){
                      if(!this.isCompress){
                          this._tabNum--;
                          if(i<word_index&&codeArr[i+1]!=this._rowEnd){
                              htmlTxt[htmlTxt.length] = "\n" + this.getIdent() + codeArr[i];
                          }else{
                              htmlTxt[htmlTxt.length] = "\n" + this.getIdent() + codeArr[i];
                          }
                      }else{
                          if(i<word_index&&codeArr[i+1]!=this._rowEnd){
                              htmlTxt[htmlTxt.length] = codeArr[i] + this._rowEnd;
                          }else{
                              htmlTxt[htmlTxt.length] = codeArr[i];
                          }
                      }
                  //處理關(guān)鍵字
                  } else if (!slash_slash_comment_opened&&!slash_star_comment_opened && !quote_opened && this.isBlockElement(codeArr[i])){    
                      htmlTxt[htmlTxt.length] = codeArr[i];
                  //處理內(nèi)置對象(后面加一個空格)
                  } else if (!slash_slash_comment_opened&&!slash_star_comment_opened && !quote_opened && this.isSingleEyeElement(codeArr[i])){   
                      if(codeArr[i]==this._in){
                          htmlTxt[htmlTxt.length] = " ";
                      }
                      htmlTxt[htmlTxt.length] = codeArr[i] + " ";
                  //處理雙引號(引號前不能為轉(zhuǎn)義字符)   
                  } else if (!slash_star_comment_opened&&!slash_slash_comment_opened&&this._quotation.contains(codeArr[i])){                                                   
                      if (quote_opened){
                          //是相應的引號
                          if(quote_char==codeArr[i]){
                              htmlTxt[htmlTxt.length] = codeArr[i];                   
                              quote_opened    = false;
                              quote_char      = "";
                          } else {
                              htmlTxt[htmlTxt.length] = codeArr[i];           
                          }
                      } else {
                          htmlTxt[htmlTxt.length] =  codeArr[i];
                          quote_opened    = true;
                          quote_char        = codeArr[i];
                      }                   
                  //處理轉(zhuǎn)義字符
                  } else if(codeArr[i] == this._escape){   
                      htmlTxt[htmlTxt.length] = codeArr[i];
                      if(i<word_index-1){
                          if(codeArr[i+1].charCodeAt(0)>=32&&codeArr[i+1].charCodeAt(0)<=127){
                              htmlTxt[htmlTxt.length] = codeArr[i+1].substr(0,1);
                              htmlTxt[htmlTxt.length] = codeArr[i+1].substr(1);
                              i=i+1;
                          }
                      }           
                  //處理多行注釋的開始
                  } else if (!slash_slash_comment_opened && !slash_star_comment_opened&&!quote_opened&&this.isStartWith(this._commentOn,codeArr,i)){                                            
                      slash_star_comment_opened = true;
                      if(!this._deleteComment){
                          htmlTxt[htmlTxt.length] = this._commentOn;
                      }
                      i = i + this.getSkipLength(this._commentOn);   
                  //處理單行注釋
                  } else if (!slash_slash_comment_opened && !slash_star_comment_opened&&!quote_opened&&this.isStartWith(this._lineComment,codeArr,i)){                                               
                      slash_slash_comment_opened = true;
                      if(!this._deleteComment){
                          htmlTxt[htmlTxt.length] =  this._lineComment;
                      }
                      i = i + this.getSkipLength(this._lineComment);   
                  //處理忽略詞
                  } else if (!slash_slash_comment_opened && !slash_star_comment_opened&&!quote_opened&&this.isStartWith(this._ignore,codeArr,i)){                                               
                      slash_slash_comment_opened = true;
                      htmlTxt[htmlTxt.length] = this._ignore;
                      i = i + this.getSkipLength(this._ignore);                   
                  //處理多行注釋結(jié)束   
                  } else if (!quote_opened&&!slash_slash_comment_opened&&this.isStartWith(this._commentOff,codeArr,i)){                               
                      if (slash_star_comment_opened) {
                          slash_star_comment_opened = false;
                          if(!this._deleteComment){
                              htmlTxt[htmlTxt.length] =  this._commentOff;
                          }
                          i = i + this.getSkipLength(this._commentOff);       
                      }
                  } else {
                      //不是在字符串中
                      if(!quote_opened){
                          //如果不是在注釋重
                          if(!slash_slash_comment_opened && !slash_star_comment_opened){   
                                  htmlTxt[htmlTxt.length] = codeArr[i];                       
                          //注釋中                           
                          }else{
                              if(!this._deleteComment){
                                  htmlTxt[htmlTxt.length] = codeArr[i];
                              }
                          }
                      }else{
                                  htmlTxt[htmlTxt.length] = codeArr[i];
                      }
                  }
                 
              }

              return htmlTxt.join("");
          }

          this.isStartWith = function(str,code,index){

              if(typeof(str)!="undefined"&&str.length>0){       
                  var cc = new Array();           
                  for(var i=index;i<index+str.length;i++){
                      cc[cc.length] = code[i];
                  }
                  var c = cc.join("");
                  if(this._caseSensitive){
                      if(str.length>=code[index].length&&c.indexOf(str)==0){
                          return true;
                      }
                  }else{
                      if(str.length>=code[index].length&&c.toLowerCase().indexOf(str.toLowerCase())==0){
                          return true;
                      }
                  }
                  return false;

              } else {
                  return false;
              }
          }

          this.isFunction = function(val){
              return this._function.contains(this._caseSensitive?val:val.toLowerCase());
          }
         
          this.isBlockElement = function(val) {       
              return this._blockElement.contains(this._caseSensitive?val:val.toLowerCase());
          }

          this.isChoiceElement = function(val) {       
              return this._choiceElement.contains(this._caseSensitive?val:val.toLowerCase());
          }

          this.isSingleEyeElement = function(val) {
              return this._singleEyeElement.contains(this._caseSensitive?val:val.toLowerCase());
          }

          this.isNextElement = function(from,word){
              for(var i=from;i<word.length;i++){
                  if(word[i]!=" "&&word[i]!="\t"&&word[i]!="\r"&&word[i]!="\n"){               
                      return this.isChoiceElement(word[i]);
                  }
              }
              return false;
          }

          this.getSkipLength = function(val){   
              var count = 0;
              for(var i=0;i<val.length;i++){
                  if(this._wordDelimiters.indexOf(val.charAt(i))>=0){
                      count++;
                  }
              }
              if(count>0){
                  count=count-1;
              }
              return count;
          }

          this.getIdent=function(){
              var n = [];
              for(var i=0;i<this._tabNum;i++){
                  n[n.length] = "\t";
              }
              return n.join("");
          }
      }

      function doformat(o){
          var htmltxt = "";

          if (o == null){
              alert("domNode is null!");
              return;
          }

          var _codetxt = "";
         
          if(typeof(o)=="object"){
              switch(o.tagName){
                  case "TEXTAREA":
                  case "INPUT":
                      _codetxt = o.value;
                      break;
                  case "DIV":
                  case "SPAN":
                      _codetxt = o.innerText;
                      break;
                  default:
                      _codetxt = o.innerHTML;
                      break;
              }
          }else{
              _codetxt = o;
          }

          var _syn = new CLASS_FORMAT(_codetxt);
          htmltxt = _syn.format();
          return  htmltxt;
      }


      function go()
      {
          var code    = document.getElementById("code").value;
          var xx      = new CLASS_FORMAT(code);   
          var a       = new Date();

          if(document.getElementById(‘cboOperate‘).selectedIndex==1){
              xx.isCompress=true;
          }else{
              xx.style = parseInt(document.getElementById(‘cboStyle‘).value);
          }
          document.getElementById("display").value = xx.format();
          alert("共花:" + (new Date().getTime()-a.getTime()) + "ms");
      }
      //-->
      </SCRIPT>
      <TEXTAREA id=code rows=12 cols=100>
      /*
      這個是一個類
      */


      function    xx   (num,str){//說明
      var a = num;this.aa = a;
      this.bb = function(){alert(str);}
      this.cc = function(){for(var i=0;i<10;i++){document.title=i;}}};

      xx.prototype.dd= function(){alert("d  d        kd");}

      var a = new xx(100,"hello"),b=new xx(0,"ttyp");
      if(1>2)  {   alert();
       }
       else {
       alert(" hell ");
       }

      a.bb();
      b.dd();
      alert(a.aa);

      </TEXTAREA> <BR>
      <select id="cboOperate" onchange="if(this.selectedIndex==1)document.getElementById(‘cboStyle‘).disabled=true;else document.getElementById(‘cboStyle‘).disabled=false;">
          <option value="0">格式化</option>
          <option value="1">壓縮</option>
      </select>
      <select id="cboStyle">
          <option value="0">經(jīng)典</option>
          <option value="1">微軟</option>
      </select>
      <INPUT onclick=go() type=button value=go><br>
      <textarea id=display rows=12 cols=100>
      </textarea>
      </BODY></HTML>

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多