<html>
<head>
<title>格式化JS代码</title>
</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();
};
};
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];
};
};
- 1
- 2
- 3
- 4
前往页