惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
S
Schneier on Security
A
Arctic Wolf
Scott Helme
Scott Helme
S
Securelist
Schneier on Security
Schneier on Security
W
WeLiveSecurity
Attack and Defense Labs
Attack and Defense Labs
Security Latest
Security Latest
Project Zero
Project Zero
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Know Your Adversary
Know Your Adversary
P
Palo Alto Networks Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Google DeepMind News
Google DeepMind News
P
Proofpoint News Feed
C
Check Point Blog
F
Full Disclosure
Stack Overflow Blog
Stack Overflow Blog
H
Hacker News: Front Page
T
The Blog of Author Tim Ferriss
TaoSecurity Blog
TaoSecurity Blog
Vercel News
Vercel News
A
About on SuperTechFans
N
News and Events Feed by Topic
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
The GitHub Blog
The GitHub Blog
S
Security Affairs
Y
Y Combinator Blog
T
The Exploit Database - CXSecurity.com
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Forbes - Security
Forbes - Security
IT之家
IT之家
WordPress大学
WordPress大学
Last Week in AI
Last Week in AI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
The Register - Security
The Register - Security
Jina AI
Jina AI
云风的 BLOG
云风的 BLOG
T
Tailwind CSS Blog
K
Kaspersky official blog
Hacker News: Ask HN
Hacker News: Ask HN
C
Cisco Blogs
MyScale Blog
MyScale Blog
博客园 - 【当耐特】
T
Threat Research - Cisco Blogs
D
Docker
G
GRAHAM CLULEY

博客园 - 田了你

[ZF]开心一下 [转]Java jdbc数据库连接池总结! 一台机器部署N个server步骤 [转]软件开发者面试百问 09年的第一篇日志比已往的时候来得更早一些 - 田了你 - 博客园 [转]关于锚点 - 田了你 - 博客园 从今天开始每天写一篇日志咯 Telerik RadGrid 翻页问题解决 - 田了你 果然是本命年 javascript注册事件的四种方式 - 田了你 - 博客园 Tomcat5.x的项目部署 又被老板欺骗了 .net的优点变缺点(郁闷了一天) 2007.2.1 -----2007.4.1安排计划 关于NTKO_office的操作(从数据库中提取数据,写入到NTKO_office_Word中) 层的拖动 获得控件在页面上的绝对位置的方法 解决SQL2000乱码问题 ref与out
[转]JS代码格式化工具(附源代码)
田了你 · 2007-01-17 · via 博客园 - 田了你

<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;//字符串转换为哈希表
    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;
    }
//获得需要转换的代码
    this._codetxt        = code;if(typeof(syntax)=="undefined"){
        syntax 
= "";
    }
this._deleteComment = false;
    
//是否大小写敏感
    this._caseSensitive = true;
    
//可以后面加块语句的关键字
    this._blockElement  = this.str2hashtable("switch,if,while,try,finally");
    
//是函数申明
    this._function      = this.str2hashtable("function");
    
//本行括号内分号不做换行
    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   = "//";
    
//转义字符
    this._escape        = "\\";
    
//多行引用开始
    this._commentOn        = "/*";
    
//多行引用结束
    this._commentOff    = "*/";
    
//行结束词
    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;
        }
//得到分割字符数组(分词)
        for (var i = 0; i < this._codetxt.length; i++{       
            
if (this._wordDelimiters.indexOf(this._codetxt.charAt(i)) == -1{        //找不到关键字
                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++){            
            
//处理空行(由于转义带来)
            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里的参数标记
            }
 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];
                    }

                }

            
//处理关键字
            }
 else if (!slash_slash_comment_opened&&!slash_star_comment_opened && !quote_opened && this.isBlockElement(codeArr[i])){     
                htmlTxt[htmlTxt.length] 
= codeArr[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] + " ";
            
//处理双引号(引号前不能为转义字符)    
            }
 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];
                }
                    
            
//处理转义字符
            }
 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);                    
            
//处理多行注释结束    
            }
 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">经典</option>
    
<option value="1">微软</option>
</select>
<INPUT onclick=go() type=button value=go><br>
<textarea id=display rows=12 cols=100>
</textarea>
</BODY></HTML>