shawl.qiu Javascript 代码格式化类/Styler, StyleEngine v1.0
说明:
码代码这事, 开始的时候没啥经验, 就乱码...
等到积累一定的知识后, 发现代码风格实在是太重要了...
不过先前有可能已码了一堆风格不好的代码...
那怎么办? 逐个手工转换风格吗?
不用.. 鄙人写的这个JS 工具就是对付这类问题的...
本类主要规划四大类的代码格式化功能.
1. 类 C 语言(v1.0 实现, 已实现)
可完美格式化JS代码,
也可良好格式化脚本类类C语言, 如: Php
目前未针对强语言进行设计, 但也可用于格式化类C强语言, 不过因其复杂度而言, 某些代码格式化会不理想, 如C++之类那样庞大复杂的代码.
2. CSS 样式格式化(v1.1 实现, 未实现)
3. Tag 格式化(v1.2 实现, 未实现)
主要针对标签类语言, 如 xml, (x)html
4. 类 Basic 语言(v1.3 实现, 未实现)
主要规划针对 VBscript 进行设计,
但也可作用于 Pascal, VB 之类.
欢迎提供反馈: shawl.qiu@gmail.com
目录:
1. 调用(Styler_v1-0.htm)
2. 类 Styler(Styler_v1-0.js)
3. 类 StyleEngine(StyleEngine_v1-0.js)
shawl.qiu
2007-08-06
http://blog.csdn.net/btbtd
演示:
http://files.myopera.com/btbtd/javascript/class/Styler/Styler_v1-0.htm
http://shawl.qiu.googlepages.com/Styler_v1-0.htm
下载:
http://files.myopera.com/btbtd/javascript/class/Styler/Styler_v1-0.7z
http://shawl.qiu.googlepages.com/Styler_v1-0.7z
内容:
1. 调用(Styler_v1-0.htm)
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>shawl.qiu template</title>
- <style type="text/css">
- /* <![CDATA[ */
- hr
- {
- border-top: 1px dotted #FFFFFF!important;
- border-right: 1px dotted #FFFFFF!important;
- border-bottom:1px dotted black!important;
- border-left: 1px dotted #FFFFFF!important;
- margin:2px 0px;
- }
- /* ]]> */
- </style>
- <script type="text/javascript">
- //<![CDATA[
- if (navigator.appName=="Microsoft Internet Explorer")
- {
- //最大化窗口
- self.moveTo(-5,-5)
- self.resizeTo(screen.availWidth +8,screen.availHeight+8)
- //这个脚本定义的宽度其实比原窗口还要大那么一点.
- }
- //]]>
- </script>
- </head>
- <body>
- <form id="StylerId"></form>
- <script type="text/javascript" src="./Styler_v1-0.js"></script>
- <script type="text/javascript" src="./StyleEngine_v1-0.js"></script>
- <script type="text/javascript">
- //<![CDATA[
- var Ser = new Styler();
- Ser.Go(Initer);
- var Au = Ser.Get.Au();
- document.title = Au.Subject + " " + Au.Version;
- Ser = null;
- function Initer(Param)
- {
- Param.Main.Id = "StylerId";
- if(Param.Engine==null)
- {
- Param.Engine = new StyleEngine;
- }
- Param.Container.OrderAr = [3, 0, 2, 4, 1];
- Param.GenreSelect.Default = "CLike"; // Enum{BasicLike|CLike|Tag|Css}
- Param.InputTextarea.DefaultValue =
- [
- "/n"
- ,"{//shawl.qiu code/n"
- ,"/*/n"
- ," xxxxxxxxxxx/n"
- ," xxxxxxxxxxx/n"
- ," xxxxxxxxxxx/n"
- ," xxxxxxxxxxx/n"
- ,"*//n"
- ,"a/n"
- ,"{/n"
- ,"b/n"
- ,"{"
- ,"/* xxxxxxxxxxx/n"
- ," xxxxxxxxxxx/n"
- ," xxxxxxxxxxx/n"
- ," xxxxxxxxxxx/n"
- ,"*//n"
- ,"b0.1/n"
- ,"{/n"
- ,"b1/n"
- ,"}/n"
- ,"c/n"
- ,"}/n"
- ,"d/n"
- ,"}/n"
- ,"d1/n"
- ,"{/n"
- ,"a1/n"
- ,"}/n"
- ,"{/n"
- ,"a2/n"
- ,"}/n"
- ,"a0.1/n"
- ,"}/n"
- ,"/n"
- ,"/n"
- ,"/n"
- ,"{/n"
- ,"a/n"
- ,"{/n"
- ,"b/n"
- ,"{/n"
- ,"c/n"
- ,"{/n"
- ,"d/n"
- ,"}/n"
- ,"}/n"
- ,"}/n"
- ,"}/n"
- ].join("");
- };
- //]]>
- </script>
- </body>
- </html>
2. 类 Styler(Styler_v1-0.js)
- // shawl.qiu JavaScript Document
- /*-----------------------------------------------------------------------------------*/
- * shawl.qiu Javascript Styler class v1.0
- /*-----------------------------------------------------------------------------------*/
- //---------------------------------begin class Styler()-------------------------------//
- function Styler()
- { // shawl.qiu code
- //------------------------------------begin public variable
- //------------------------------------end public variable
- //------------------------------------begin private variable
- //---------------begin about
- var Au = {}
- Au.Subject = "shawl.qiu Javascript Styler class";
- Au.Version = "v1.0";
- Au.Name = "shawl.qiu";
- Au.Email = "shawl.qiu@gmail.com";
- Au.Blog = "http://blog.csdn.net/btbtd/";
- Au.CreatedDate = "2007-7-31";
- Au.Update = {};
- Au.Update["1"] = "";
- //---------------end about
- var This = this;
- var Param = {};
- Param.Main = {};
- Param.Main.Id = "StylerId";
- Param.Main.Element = null;
- Param.Engine = null;
- Param.Inti = false;
- Param.GenreSelect = {};
- Param.GenreSelect.Default = "CLike"; //CLike|BasicLike
- Param.GenreSelect.Label= "<b>流派:</b> ";
- fExtendElementBSE(Param.GenreSelect, true, "GenreSelectId", null);
- Param.Container = {};
- Param.Container.OrderAr = [0, 1, 2, 3, 4];
- Param.Container.Init = false;
- Param.Container.Set = [];
- Param.Container.Len = 5;
- Param.Container.PrefixId = function(){return Param.Main.Id+"Container";};
- Param.InputTextarea = {};
- fExtendTextareaIESSII
- (Param.InputTextarea, "TextareaId", null, "", "输入: <br/>", 15, 100);
- Param.ResultTextarea = {};
- fExtendTextareaIESSII
- (Param.ResultTextarea, "ResultTextarea", null, "", "结果: <br/>", 15, 100);
- Param.Button = {};
- Param.Button.Label = "操作: ";
- Param.Button.Submit = {};
- fExtendButtonSES(Param.Button.Submit, "SubmitId", null, "执行");
- Param.Button.Reset = {};
- fExtendButtonSES(Param.Button.Reset, "ResetId", null, "重置");
- Param.Genre = {};
- Param.Genre.CLike = {};
- Param.Genre.CLike.Indent = {};
- Param.Genre.CLike.Indent.Default = 1;
- Param.Genre.CLike.Indent.Min = 1;
- Param.Genre.CLike.Indent.Max = 8;
- fExtendElementBSE(Param.Genre.CLike.Indent, true, "CLikeIndentId", null);
- Param.Genre.CLike.Space = {};
- Param.Genre.CLike.Space.Default = "Space"; // Enum{Space|Tab}
- fExtendElementBSE(Param.Genre.CLike.Space, true, "CLikeSpaceId", null);
- Param.Genre.CLike.Paren = {};
- fExtendElementBSE(Param.Genre.CLike.Paren, true, "CLikeParenIndent", null);
- Param.Genre.CLike.BreakEmptyBrace = {};
- fExtendElementBSE(Param.Genre.CLike.BreakEmptyBrace, true, "CLikeBreakEmptyBrace", null);
- Param.Genre.CLike.LeftBraceBreakLeft = {};
- fExtendElementBSE
- (Param.Genre.CLike.LeftBraceBreakLeft, true, "CLikeLeftBraceBreakLeft", null);
- Param.Genre.CLike.LeftBraceBreakRight = {};
- fExtendElementBSE
- (Param.Genre.CLike.LeftBraceBreakRight, false, "CLikeLeftBraceBreakRight", null);
- Param.Genre.CLike.RightBraceBreakLeft = {};
- fExtendElementBSE
- (Param.Genre.CLike.RightBraceBreakLeft, true, "CLikeRightBraceBreakLeft", null);
- Param.Genre.CLike.RightBraceBreakRight = {};
- fExtendElementBSE
- (Param.Genre.CLike.RightBraceBreakRight, false, "CLikeRightBraceBreakRight", null);
- Param.Genre.CLike.BreakSuperBrace = {};
- fExtendElementBSE(Param.Genre.CLike.BreakSuperBrace, true, "CLikeBreakSuperBrace", null);
- Param.Genre.CLike.BreakFunc = {};
- fExtendElementBSE(Param.Genre.CLike.BreakFunc, true, "CLikeBreakFunc", null);
- Param.Genre.CLike.BreakAnnoFunc = {};
- fExtendElementBSE(Param.Genre.CLike.BreakAnnoFunc, true, "CLikeBreakAnnoFunc", null);
- Param.Genre.CLike.FixOperator = {};
- fExtendElementBSE(Param.Genre.CLike.FixOperator, true, "CLikeFixOperator", null);
- Param.Genre.CLike.Custom = {};
- Param.Genre.CLike.Custom.Before = {};
- fExtendElementBSE(Param.Genre.CLike.Custom.Before, true, "CLikeCustomBeforeId", null);
- Param.Genre.CLike.Custom.Before.Paren = {};
- fExtendElementBSE
- (Param.Genre.CLike.Custom.Before.Paren, true, "CLikeCustomBeforeParenId", null);
- Param.Genre.CLike.Custom.Before.Brace = {};
- fExtendElementBSE
- (Param.Genre.CLike.Custom.Before.Brace, true, "CLikeCustomBeforeBraceId", null);
- Param.Genre.CLike.Custom.After = {};
- fExtendElementBSE(Param.Genre.CLike.Custom.After, true, "CLikeCustomAfterId", null);
- Param.Genre.CLike.Custom.After.General = {};
- fExtendElementBSE
- (Param.Genre.CLike.Custom.After.General, true, "CLikeCustomAfterGeneralId", null);
- Param.Genre.CLike.DefaultSpace = {};
- Param.Genre.CLike.DefaultSpace.Num = 1;
- Param.Genre.CLike.DefaultSpace.Max = 80;
- Param.Genre.CLike.DefaultSpace.Min = 0;
- fExtendElementBSE(Param.Genre.CLike.DefaultSpace, true, "CLikeDefaultSpace", null);
- //------------------------------------end private variable
- //------------------------------------begin public method
- this.Get = {};
- this.Get.Au = fGetAu;
- this.Go = fGo;
- this.SetContainer = fSetContainer;
- //------------------------------------end public method
- //------------------------------------begin private method
- function fGo(ConfigFunc)
- {
- if(ConfigFunc&&ConfigFunc.constructor==Function)
- {
- ConfigFunc(Param);
- }
- if(!Param.Inti)
- {
- Param.Main.Element = fSetObj(Param.Main.Id);
- fSetContainer();
- fGenreSelect();
- fSetButton();
- fSetTextarea();
- fSetResultTextarea();
- fSetOptions();
- }
- Param.Inti = true;
- } // end function fGo(ConfigFunc)
- function fSetOptions()
- {
- var Sle = Param.GenreSelect.Element;
- var sGenre = Sle.options[Sle.selectedIndex].value;
- switch(sGenre)
- {
- case "Tag":
- fSetTagOptions();
- break;
- case "Css":
- fSetCssOptions();
- break;
- case "BasicLike":
- fSetBasicLikeOptions()
- break;
- default:
- fSetCLikeOptions();
- break;
- }
- } // end function fSetOptions
- function fGenreSelect(sDefaultSelect)
- {
- var GenreSelect = Param.GenreSelect;
- var sId = GenreSelect.Id();
- var sLbl = GenreSelect.Label;
- var Sle = document.createElement("select");
- Sle.id = sId;
- switch(GenreSelect.Default)
- {
- case "Tag":
- fAddOption(Sle, "Tag", "Tag", true, true);
- fAddOption(Sle, "Css", "Css", false, false);
- fAddOption(Sle, "类C", "CLike", false, false);
- fAddOption(Sle, "类Basic", "BasicLike", false, false);
- break;
- case "Css":
- fAddOption(Sle, "Css", "Css", true, true);
- fAddOption(Sle, "Tag", "Tag", false, false);
- fAddOption(Sle, "类C", "CLike", false, false);
- fAddOption(Sle, "类Basic", "BasicLike", false, false);
- break;
- case "BasicLike":
- fAddOption(Sle, "类Basic", "BasicLike", true, true);
- fAddOption(Sle, "类C", "CLike", false, false);
- fAddOption(Sle, "Tag", "Tag", false, false);
- fAddOption(Sle, "Css", "Css", false, false);
- break;
- default:
- fAddOption(Sle, "类C", "CLike", true, true);
- fAddOption(Sle, "类Basic", "BasicLike", false, false);
- fAddOption(Sle, "Tag", "Tag", false, false);
- fAddOption(Sle, "Css", "Css", false, false);
- break;
- }
- Param.Container.Set[0].innerHTML = sLbl;
- Param.Container.Set[0].appendChild(Sle);
- Param.GenreSelect.Element = document.getElementById(sId);
- Param.GenreSelect.Element.onchange =
- function()
- {
- fSetOptions();
- }
- Param.Container.Set[0].appendChild(document.createElement("hr"));
- } // end function fGenreSelect
- function fSetCssOptions()
- {
- var Container = Param.Container;
- var CLike = Param.Genre.CLike;
- var EgCLike = Param.Engine.Get.CLike();
- Container.Set[1].innerHTML = "<div><b>选项:</b> (打勾表示真, 不打表示假)</div>";
- Container.Set[1].innerHTML += "<p style='color:red;'>本功能暂未实现!</p>";
- }
- function fSetTagOptions()
- {
- var Container = Param.Container;
- var CLike = Param.Genre.CLike;
- var EgCLike = Param.Engine.Get.CLike();
- Container.Set[1].innerHTML = "<div><b>选项:</b> (打勾表示真, 不打表示假)</div>";
- Container.Set[1].innerHTML += "<p style='color:red;'>本功能暂未实现!</p>";
- }
- function fSetBasicLikeOptions()
- {
- var Container = Param.Container;
- var CLike = Param.Genre.CLike;
- var EgCLike = Param.Engine.Get.CLike();
- Container.Set[1].innerHTML = "<div><b>选项:</b> (打勾表示真, 不打表示假)</div>";
- Container.Set[1].innerHTML += "<p style='color:red;'>本功能暂未实现!</p>";
- }
- function fSetTextarea()
- {
- var Textarea = Param.InputTextarea;
- var Container = Param.Container;
- if(Textarea.Element!=null) return;
- var sLbl = Textarea.Label;
- var sId = Textarea.Id();
- var iRows = Textarea.Rows;
- var iCols = Textarea.Cols;
- var Txa = document.createElement("textarea");
- Txa.id = sId;
- Txa.rows = iRows;
- Txa.cols = iCols;
- Txa.value = Textarea.DefaultValue;
- Container.Set[3].innerHTML = sLbl;
- Container.Set[3].appendChild(Txa);
- Textarea.Element = document.getElementById(sId);
- Param.Container.Set[3].appendChild(document.createElement("hr"));
- }
- function fSetResultTextarea()
- {
- var Textarea = Param.ResultTextarea;
- var Container = Param.Container;
- if(Textarea.Element!=null) return;
- var sLbl = Textarea.Label;
- var sId = Textarea.Id();
- var iRows = Textarea.Rows;
- var iCols = Textarea.Cols;
- var Txa = document.createElement("textarea");
- Txa.id = sId;
- Txa.rows = iRows;
- Txa.cols = iCols;
- Txa.value = Textarea.DefaultValue;
- Container.Set[4].innerHTML = sLbl;
- Container.Set[4].appendChild(Txa);
- Textarea.Element = document.getElementById(sId);
- Param.Container.Set[4].appendChild(document.createElement("hr"));
- }
- function fSetButton()
- {
- var Button = Param.Button;
- var Textarea = Param.InputTextarea;
- var ResultTextarea = Param.ResultTextarea;
- var Container = Param.Container;
- if(Button.Submit.Element==null)
- {
- var SubmitText = Button.Submit.Text;
- var ResetText = Button.Reset.Text;
- Container.Set[2].innerHTML = Button.Label;
- var ExecBtn = document.createElement("input");
- ExecBtn.type="button"
- ExecBtn.id = Button.Submit.Id();
- ExecBtn.value = SubmitText;
- ExecBtn.onclick =
- function ()
- {
- var Sle = Param.GenreSelect.Element;
- var sGenre = Sle.options[Sle.selectedIndex].value;
- var TempFunc =
- function(CLike)
- {
- switch(sGenre)
- {
- case "Tag":
- break;
- case "Css":
- break;
- case "BasicLike":
- break;
- default:
- //BreakEmptyBrace
- CLike.Options.Space = Param.Genre.CLike.Space.Element.value;
- CLike.Options.Indent = Param.Genre.CLike.Indent.Element.value-0;
- CLike.Options.Parenthesis.Indent = Param.Genre.CLike.Paren.Element.checked;
- CLike.Options.Brace.Inline.Break =
- !Param.Genre.CLike.BreakEmptyBrace.Element.checked;
- CLike.Options.Brace.Left.BreakLeft =
- Param.Genre.CLike.LeftBraceBreakLeft.Element.checked;
- CLike.Options.Brace.Left.BreakRight =
- Param.Genre.CLike.LeftBraceBreakRight.Element.checked;
- CLike.Options.Brace.Right.BreakLeft =
- Param.Genre.CLike.RightBraceBreakLeft.Element.checked;
- CLike.Options.Brace.Right.BreakRight =
- Param.Genre.CLike.RightBraceBreakRight.Element.checked;
- CLike.Options.Brace.Super.Separate =
- Param.Genre.CLike.BreakSuperBrace.Element.checked;
- CLike.Options.Func.Break =
- Param.Genre.CLike.BreakFunc.Element.checked;
- CLike.Options.AnonFunc.Break =
- Param.Genre.CLike.BreakAnnoFunc.Element.checked;
- CLike.Options.Operator.Fix =
- Param.Genre.CLike.FixOperator.Element.checked;
- CLike.BreakLine.Before.Bool =
- Param.Genre.CLike.Custom.Before.Element.checked;
- CLike.BreakLine.Before.ParenList =
- Param.Genre.CLike.Custom.Before.Paren.Element.value;
- CLike.BreakLine.Before.BraceList =
- Param.Genre.CLike.Custom.Before.Brace.Element.value;
- CLike.BreakLine.After.Bool =
- Param.Genre.CLike.Custom.After.Element.checked;
- CLike.BreakLine.After.General =
- Param.Genre.CLike.Custom.After.General.Element.value;
- var TempNum = parseInt(Param.Genre.CLike.DefaultSpace.Element.value);
- if(isNaN(TempNum)) TempNum= Param.Genre.CLike.DefaultSpace.Num;
- if(TempNum<Param.Genre.CLike.DefaultSpace.Min)
- TempNum = Param.Genre.CLike.DefaultSpace.Min;
- if(TempNum>Param.Genre.CLike.DefaultSpace.Max)
- TempNum = Param.Genre.CLike.DefaultSpace.Max;
- CLike.Options.DefaultSpace = TempNum;
- break;
- }
- };
- Param.Engine.Config = TempFunc;
- ResultTextarea.Element.value = Param.Engine.Go(Textarea.Element.value, sGenre);
- }
- }
- if(Button.Reset.Element==null)
- {
- var ResetIpt = document.createElement("input");
- ResetIpt.id = Button.Reset.Id();
- ResetIpt.type = "reset";
- ResetIpt.value = ResetText;
- ResetIpt.onclick =
- function()
- {
- Textarea.Element.value = Textarea.DefaultValue;
- fSetOptions();
- return false;
- }
- Container.Set[2].appendChild(ExecBtn);
- Container.Set[2].appendChild(document.createTextNode(" "));
- Container.Set[2].appendChild(ResetIpt);
- Button.Submit.Element = document.getElementById(Button.Submit.Id);
- Button.Reset.Element = document.getElementById(Button.Reset.Id);
- }
- Param.Container.Set[2].appendChild(document.createElement("hr"));
- } // end function fSetButton
- function fAddOption(sle, text, value, defaultSelected, selected)
- {// shawl.qiu script
- if(!defaultSelected) defaultSelected = false;
- if(!selected) selected = false;
- sle.options[