[转]JavaScript格式化代码程序

发现一个不错的JavaScript写的格式JavaScript代码的程序,能够压缩代码,也能够格式化,功能不错。

< HTML >< HEAD >< TITLE > Format </ TITLE >
< META content ="MSHTML6.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格式化
**示例:
---------------------------------------------------------------------------------------------------

varxx=newCLASS_FORMATER(code);

document.getElementById("display").innerHTML=xx.format();

---------------------------------------------------------------------------------------------------
**作者:ttyp
**邮件:[email protected]
**日期: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 = "  ,.?!;:\/<>(){}[]"' =+-|*%@#$^& " ;
// 引用字符
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] == " " ){
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] == " " ){
// 处理换行
} else if (codeArr[i] == " " ){
slash_slash_comment_opened
= false ;
quote_opened
= false ;
line_num
++ ;
if ( ! this .isCompress){
htmlTxt[htmlTxt.length]
= " " + 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 ] != " " && codeArr[i + 1 ] != " " colo
分享到:
评论

你可能感兴趣的:(JavaScript)