shawl.qiu Javascript 代码格式化类/Styler, StyleEngine v1.0

 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)
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>shawl.qiu template</title>
  6. <style type="text/css">
  7. /* <![CDATA[ */
  8. hr
  9. {
  10.  border-top: 1px dotted #FFFFFF!important;
  11.  border-right: 1px dotted #FFFFFF!important;
  12.  border-bottom:1px dotted black!important; 
  13.  border-left: 1px dotted #FFFFFF!important;
  14.  margin:2px 0px;
  15. }
  16. /* ]]> */
  17. </style>
  18. <script type="text/javascript">
  19. //<![CDATA[
  20.  if (navigator.appName=="Microsoft Internet Explorer") 
  21.  {
  22.   //最大化窗口
  23.   self.moveTo(-5,-5)
  24.   self.resizeTo(screen.availWidth +8,screen.availHeight+8)
  25.   //这个脚本定义的宽度其实比原窗口还要大那么一点.
  26.  }
  27. //]]>
  28. </script>
  29. </head>
  30. <body>
  31. <form id="StylerId"></form>
  32. <script type="text/javascript" src="./Styler_v1-0.js"></script>
  33. <script type="text/javascript" src="./StyleEngine_v1-0.js"></script>
  34. <script type="text/javascript">
  35. //<![CDATA[
  36.  var Ser = new Styler();
  37.     
  38.  Ser.Go(Initer);
  39.   
  40.  var Au = Ser.Get.Au();
  41.  document.title = Au.Subject + " " + Au.Version;
  42.  
  43.  Ser = null;
  44.  
  45.  function Initer(Param)
  46.  {
  47.   Param.Main.Id = "StylerId";
  48.   
  49.   if(Param.Engine==null)
  50.   {
  51.    Param.Engine = new StyleEngine;
  52.   }
  53.   
  54.   Param.Container.OrderAr = [3, 0, 2, 4, 1];
  55.   
  56.   Param.GenreSelect.Default = "CLike"; // Enum{BasicLike|CLike|Tag|Css}
  57.   
  58.   Param.InputTextarea.DefaultValue = 
  59.    [
  60.     "/n"
  61.     ,"{//shawl.qiu code/n"
  62.     ,"/*/n"
  63.     ,"  xxxxxxxxxxx/n"
  64.     ,"  xxxxxxxxxxx/n"
  65.     ,"  xxxxxxxxxxx/n"
  66.     ,"  xxxxxxxxxxx/n"
  67.     ,"*//n"
  68.     ,"a/n"
  69.     ,"{/n"
  70.     ,"b/n"
  71.     ,"{"
  72.     ,"/* xxxxxxxxxxx/n"
  73.     ," xxxxxxxxxxx/n"
  74.     ," xxxxxxxxxxx/n"
  75.     ," xxxxxxxxxxx/n"
  76.     ,"*//n"
  77.     ,"b0.1/n"
  78.     ,"{/n"
  79.     ,"b1/n"
  80.     ,"}/n"
  81.     ,"c/n"
  82.     ,"}/n"
  83.     ,"d/n"
  84.     ,"}/n"
  85.     ,"d1/n"
  86.     ,"{/n"
  87.     ,"a1/n"
  88.     ,"}/n"
  89.     ,"{/n"
  90.     ,"a2/n"
  91.     ,"}/n"
  92.     ,"a0.1/n"
  93.     ,"}/n"
  94.     ,"/n"
  95.     ,"/n"
  96.     ,"/n"
  97.     ,"{/n"
  98.     ,"a/n"
  99.     ,"{/n"
  100.     ,"b/n"
  101.     ,"{/n"
  102.     ,"c/n"
  103.     ,"{/n"
  104.     ,"d/n"
  105.     ,"}/n"
  106.     ,"}/n"
  107.     ,"}/n"
  108.     ,"}/n"
  109.    ].join("");
  110.  };
  111. //]]>
  112. </script>

  113. </body>
  114. </html>

2. 类 Styler(Styler_v1-0.js)
  1.  // shawl.qiu JavaScript Document
  2.  /*-----------------------------------------------------------------------------------*/
  3.   * shawl.qiu Javascript Styler class v1.0
  4.  /*-----------------------------------------------------------------------------------*/
  5.  //---------------------------------begin class Styler()-------------------------------//
  6.  function Styler()
  7.  { // shawl.qiu code
  8.   //------------------------------------begin public variable
  9.   //------------------------------------end public variable
  10.   
  11.   //------------------------------------begin private variable
  12.   //---------------begin about
  13.   var Au = {}
  14.    Au.Subject = "shawl.qiu Javascript Styler class";
  15.    Au.Version = "v1.0";
  16.    Au.Name = "shawl.qiu";
  17.    Au.Email = "shawl.qiu@gmail.com";
  18.    Au.Blog = "http://blog.csdn.net/btbtd/";
  19.    Au.CreatedDate = "2007-7-31";
  20.    Au.Update = {};
  21.    Au.Update["1"] = "";
  22.   //---------------end about
  23.   var This = this;
  24.   
  25.   var Param = {};
  26.   
  27.    Param.Main = {};
  28.    Param.Main.Id = "StylerId";
  29.    Param.Main.Element = null;
  30.    
  31.    Param.Engine = null;
  32.    
  33.    Param.Inti = false;
  34.    
  35.    Param.GenreSelect = {};
  36.    Param.GenreSelect.Default = "CLike"; //CLike|BasicLike
  37.    Param.GenreSelect.Label= "<b>流派:</b> ";
  38.    fExtendElementBSE(Param.GenreSelect, true, "GenreSelectId", null);
  39.    
  40.    Param.Container = {};
  41.    Param.Container.OrderAr = [0, 1, 2, 3, 4];
  42.    Param.Container.Init = false;
  43.    Param.Container.Set = [];
  44.    Param.Container.Len = 5;
  45.    Param.Container.PrefixId = function(){return Param.Main.Id+"Container";};
  46.    
  47.    Param.InputTextarea = {};
  48.    fExtendTextareaIESSII
  49.     (Param.InputTextarea, "TextareaId", null, "", "输入: <br/>", 15, 100);

  50.    Param.ResultTextarea = {};
  51.    fExtendTextareaIESSII
  52.     (Param.ResultTextarea, "ResultTextarea", null, "", "结果: <br/>", 15, 100);
  53.    
  54.    Param.Button = {};
  55.    Param.Button.Label = "操作: ";
  56.    Param.Button.Submit = {};
  57.    fExtendButtonSES(Param.Button.Submit, "SubmitId", null, "执行");
  58.    
  59.    Param.Button.Reset = {};
  60.    fExtendButtonSES(Param.Button.Reset, "ResetId", null, "重置");
  61.      
  62.    Param.Genre = {};
  63.    
  64.    Param.Genre.CLike = {};
  65.    
  66.    Param.Genre.CLike.Indent = {};
  67.    Param.Genre.CLike.Indent.Default = 1;
  68.    Param.Genre.CLike.Indent.Min = 1;
  69.    Param.Genre.CLike.Indent.Max = 8;
  70.    fExtendElementBSE(Param.Genre.CLike.Indent, true, "CLikeIndentId", null);
  71.    
  72.    Param.Genre.CLike.Space = {};
  73.    Param.Genre.CLike.Space.Default = "Space"; // Enum{Space|Tab}
  74.    fExtendElementBSE(Param.Genre.CLike.Space, true, "CLikeSpaceId", null);
  75.    
  76.    Param.Genre.CLike.Paren = {};
  77.    fExtendElementBSE(Param.Genre.CLike.Paren, true, "CLikeParenIndent", null);
  78.    
  79.    Param.Genre.CLike.BreakEmptyBrace = {};
  80.    fExtendElementBSE(Param.Genre.CLike.BreakEmptyBrace, true, "CLikeBreakEmptyBrace", null);
  81.    
  82.    Param.Genre.CLike.LeftBraceBreakLeft = {};
  83.    fExtendElementBSE
  84.     (Param.Genre.CLike.LeftBraceBreakLeft, true, "CLikeLeftBraceBreakLeft", null);
  85.    
  86.    Param.Genre.CLike.LeftBraceBreakRight = {};
  87.    fExtendElementBSE
  88.     (Param.Genre.CLike.LeftBraceBreakRight, false, "CLikeLeftBraceBreakRight", null);
  89.    
  90.    Param.Genre.CLike.RightBraceBreakLeft = {};
  91.    fExtendElementBSE
  92.     (Param.Genre.CLike.RightBraceBreakLeft, true, "CLikeRightBraceBreakLeft", null);
  93.    
  94.    Param.Genre.CLike.RightBraceBreakRight = {};
  95.    fExtendElementBSE
  96.     (Param.Genre.CLike.RightBraceBreakRight, false, "CLikeRightBraceBreakRight", null);
  97.    
  98.    Param.Genre.CLike.BreakSuperBrace = {};
  99.    fExtendElementBSE(Param.Genre.CLike.BreakSuperBrace, true, "CLikeBreakSuperBrace", null);
  100.      
  101.    Param.Genre.CLike.BreakFunc = {};
  102.    fExtendElementBSE(Param.Genre.CLike.BreakFunc, true, "CLikeBreakFunc", null);
  103.    
  104.    Param.Genre.CLike.BreakAnnoFunc = {};
  105.    fExtendElementBSE(Param.Genre.CLike.BreakAnnoFunc, true, "CLikeBreakAnnoFunc", null);
  106.    
  107.    Param.Genre.CLike.FixOperator = {};
  108.    fExtendElementBSE(Param.Genre.CLike.FixOperator, true, "CLikeFixOperator", null);
  109.    
  110.    Param.Genre.CLike.Custom = {};
  111.    
  112.    Param.Genre.CLike.Custom.Before = {};
  113.    fExtendElementBSE(Param.Genre.CLike.Custom.Before, true, "CLikeCustomBeforeId", null);
  114.    
  115.    Param.Genre.CLike.Custom.Before.Paren = {};
  116.    fExtendElementBSE
  117.     (Param.Genre.CLike.Custom.Before.Paren, true, "CLikeCustomBeforeParenId", null);
  118.    
  119.    Param.Genre.CLike.Custom.Before.Brace = {};
  120.    fExtendElementBSE
  121.     (Param.Genre.CLike.Custom.Before.Brace, true, "CLikeCustomBeforeBraceId", null);
  122.    
  123.    Param.Genre.CLike.Custom.After = {};
  124.    fExtendElementBSE(Param.Genre.CLike.Custom.After, true, "CLikeCustomAfterId", null);
  125.    
  126.    Param.Genre.CLike.Custom.After.General = {};
  127.    fExtendElementBSE
  128.     (Param.Genre.CLike.Custom.After.General, true, "CLikeCustomAfterGeneralId", null);
  129.    
  130.    Param.Genre.CLike.DefaultSpace = {};
  131.    Param.Genre.CLike.DefaultSpace.Num = 1;
  132.    Param.Genre.CLike.DefaultSpace.Max = 80;
  133.    Param.Genre.CLike.DefaultSpace.Min = 0;
  134.    fExtendElementBSE(Param.Genre.CLike.DefaultSpace, true, "CLikeDefaultSpace", null);
  135.    
  136.   //------------------------------------end private variable
  137.   
  138.   //------------------------------------begin public method
  139.   this.Get = {};
  140.   this.Get.Au = fGetAu;
  141.   
  142.   this.Go = fGo;
  143.   this.SetContainer = fSetContainer;
  144.   //------------------------------------end public method
  145.  
  146.   //------------------------------------begin private method
  147.   function fGo(ConfigFunc)
  148.   {
  149.    if(ConfigFunc&&ConfigFunc.constructor==Function)
  150.    {
  151.     ConfigFunc(Param);
  152.    }
  153.    
  154.    if(!Param.Inti)
  155.    {
  156.     Param.Main.Element = fSetObj(Param.Main.Id);
  157.     fSetContainer();
  158.     fGenreSelect();
  159.     fSetButton();
  160.     fSetTextarea();
  161.     fSetResultTextarea();
  162.     fSetOptions();
  163.    }
  164.    
  165.    Param.Inti = true;
  166.   } // end function fGo(ConfigFunc)
  167.   
  168.   function fSetOptions()
  169.   {
  170.    var Sle = Param.GenreSelect.Element;
  171.    var sGenre = Sle.options[Sle.selectedIndex].value;
  172.    
  173.    switch(sGenre)
  174.    {
  175.     case "Tag":
  176.      fSetTagOptions();
  177.      break;
  178.      
  179.     case "Css":
  180.      fSetCssOptions();
  181.      break;
  182.     
  183.     case "BasicLike":
  184.      fSetBasicLikeOptions()
  185.      break;
  186.      
  187.     default:
  188.      fSetCLikeOptions();
  189.      break;
  190.    }
  191.   } // end function fSetOptions
  192.   
  193.   function fGenreSelect(sDefaultSelect)
  194.   {
  195.    var GenreSelect = Param.GenreSelect;
  196.    
  197.    var sId = GenreSelect.Id();
  198.    var sLbl = GenreSelect.Label;
  199.       
  200.    var Sle = document.createElement("select");  
  201.     Sle.id = sId;
  202.    
  203.    switch(GenreSelect.Default)
  204.    { 
  205.     case "Tag":
  206.      fAddOption(Sle, "Tag", "Tag", truetrue);
  207.      fAddOption(Sle, "Css", "Css", falsefalse);
  208.      fAddOption(Sle, "类C", "CLike", falsefalse);
  209.      fAddOption(Sle, "类Basic", "BasicLike", falsefalse);
  210.      break;
  211.      
  212.     case "Css":
  213.      fAddOption(Sle, "Css", "Css", truetrue);
  214.      fAddOption(Sle, "Tag", "Tag", falsefalse);
  215.      fAddOption(Sle, "类C", "CLike", falsefalse);
  216.      fAddOption(Sle, "类Basic", "BasicLike", falsefalse);
  217.      break;
  218.      
  219.     case "BasicLike":
  220.      fAddOption(Sle, "类Basic", "BasicLike", truetrue);
  221.      fAddOption(Sle, "类C", "CLike", falsefalse);
  222.      fAddOption(Sle, "Tag", "Tag", falsefalse);
  223.      fAddOption(Sle, "Css", "Css", falsefalse);
  224.      break;
  225.      
  226.     default:
  227.      fAddOption(Sle, "类C", "CLike", truetrue);
  228.      fAddOption(Sle, "类Basic", "BasicLike", falsefalse);
  229.      fAddOption(Sle, "Tag", "Tag", falsefalse);
  230.      fAddOption(Sle, "Css", "Css", falsefalse);
  231.      break;
  232.    }
  233.     
  234.    Param.Container.Set[0].innerHTML = sLbl;
  235.    Param.Container.Set[0].appendChild(Sle);
  236.    Param.GenreSelect.Element = document.getElementById(sId);
  237.    
  238.    Param.GenreSelect.Element.onchange =
  239.     function()
  240.     {
  241.      fSetOptions();
  242.     }
  243.    
  244.    Param.Container.Set[0].appendChild(document.createElement("hr"));
  245.   } // end function fGenreSelect
  246.   
  247.   function fSetCssOptions()
  248.   {
  249.    var Container = Param.Container;
  250.    var CLike = Param.Genre.CLike;
  251.    
  252.    var EgCLike = Param.Engine.Get.CLike();
  253.    
  254.    Container.Set[1].innerHTML = "<div><b>选项:</b> (打勾表示真, 不打表示假)</div>";
  255.    Container.Set[1].innerHTML += "<p style='color:red;'>本功能暂未实现!</p>";
  256.   }
  257.   
  258.   function fSetTagOptions()
  259.   {
  260.    var Container = Param.Container;
  261.    var CLike = Param.Genre.CLike;
  262.    
  263.    var EgCLike = Param.Engine.Get.CLike();
  264.    
  265.    Container.Set[1].innerHTML = "<div><b>选项:</b> (打勾表示真, 不打表示假)</div>";
  266.    Container.Set[1].innerHTML += "<p style='color:red;'>本功能暂未实现!</p>";
  267.   }
  268.   
  269.   function fSetBasicLikeOptions()
  270.   {
  271.    var Container = Param.Container;
  272.    var CLike = Param.Genre.CLike;
  273.    
  274.    var EgCLike = Param.Engine.Get.CLike();
  275.    
  276.    Container.Set[1].innerHTML = "<div><b>选项:</b> (打勾表示真, 不打表示假)</div>";
  277.    Container.Set[1].innerHTML += "<p style='color:red;'>本功能暂未实现!</p>";
  278.   }
  279.   
  280.   function fSetTextarea()
  281.   {
  282.    var Textarea = Param.InputTextarea;
  283.    var Container = Param.Container;
  284.    
  285.    if(Textarea.Element!=nullreturn;
  286.    
  287.    var sLbl = Textarea.Label;
  288.    
  289.    var sId = Textarea.Id();
  290.    var iRows = Textarea.Rows;
  291.    var iCols = Textarea.Cols;
  292.    
  293.    var Txa = document.createElement("textarea");
  294.    Txa.id = sId;
  295.    Txa.rows = iRows;
  296.    Txa.cols = iCols;
  297.    
  298.    Txa.value = Textarea.DefaultValue;
  299.    
  300.    Container.Set[3].innerHTML = sLbl;
  301.    Container.Set[3].appendChild(Txa);
  302.    Textarea.Element = document.getElementById(sId);
  303.    
  304.    Param.Container.Set[3].appendChild(document.createElement("hr"));
  305.   }
  306.   
  307.   function fSetResultTextarea()
  308.   {
  309.    var Textarea = Param.ResultTextarea;
  310.    var Container = Param.Container;
  311.    
  312.    if(Textarea.Element!=nullreturn;
  313.    
  314.    var sLbl = Textarea.Label;
  315.    
  316.    var sId = Textarea.Id();
  317.    var iRows = Textarea.Rows;
  318.    var iCols = Textarea.Cols;
  319.    
  320.    var Txa = document.createElement("textarea");
  321.    Txa.id = sId;
  322.    Txa.rows = iRows;
  323.    Txa.cols = iCols;
  324.    
  325.    Txa.value = Textarea.DefaultValue;
  326.    
  327.    Container.Set[4].innerHTML = sLbl;
  328.    Container.Set[4].appendChild(Txa);
  329.    Textarea.Element = document.getElementById(sId);
  330.    
  331.    Param.Container.Set[4].appendChild(document.createElement("hr"));
  332.   }
  333.   
  334.   function fSetButton()
  335.   {
  336.    var Button = Param.Button;
  337.    var Textarea = Param.InputTextarea;
  338.    var ResultTextarea = Param.ResultTextarea;
  339.    var Container = Param.Container;
  340.    
  341.    if(Button.Submit.Element==null)
  342.    {
  343.     var SubmitText = Button.Submit.Text;
  344.     var ResetText = Button.Reset.Text;
  345.     
  346.     Container.Set[2].innerHTML = Button.Label;
  347.     
  348.     var ExecBtn = document.createElement("input");
  349.      ExecBtn.type="button"
  350.      ExecBtn.id = Button.Submit.Id();
  351.      ExecBtn.value = SubmitText;
  352.      
  353.      ExecBtn.onclick = 
  354.       function ()
  355.       {
  356.        var Sle = Param.GenreSelect.Element;
  357.        var sGenre = Sle.options[Sle.selectedIndex].value;
  358.        
  359.        var TempFunc = 
  360.         function(CLike)
  361.         {
  362.          
  363.          switch(sGenre)
  364.          {
  365.           case "Tag":
  366.            break;
  367.            
  368.           case "Css":
  369.            break;
  370.           
  371.           case "BasicLike":
  372.            break;
  373.            
  374.           default:
  375.            //BreakEmptyBrace
  376.            CLike.Options.Space = Param.Genre.CLike.Space.Element.value;
  377.            CLike.Options.Indent = Param.Genre.CLike.Indent.Element.value-0;
  378.            CLike.Options.Parenthesis.Indent = Param.Genre.CLike.Paren.Element.checked;
  379.             
  380.            CLike.Options.Brace.Inline.Break = 
  381.             !Param.Genre.CLike.BreakEmptyBrace.Element.checked;
  382.               
  383.            CLike.Options.Brace.Left.BreakLeft = 
  384.             Param.Genre.CLike.LeftBraceBreakLeft.Element.checked;  
  385.               
  386.            CLike.Options.Brace.Left.BreakRight = 
  387.             Param.Genre.CLike.LeftBraceBreakRight.Element.checked;  
  388.               
  389.            CLike.Options.Brace.Right.BreakLeft = 
  390.             Param.Genre.CLike.RightBraceBreakLeft.Element.checked;  
  391.               
  392.            CLike.Options.Brace.Right.BreakRight = 
  393.             Param.Genre.CLike.RightBraceBreakRight.Element.checked; 
  394.               
  395.            CLike.Options.Brace.Super.Separate = 
  396.             Param.Genre.CLike.BreakSuperBrace.Element.checked;  
  397.               
  398.            CLike.Options.Func.Break = 
  399.             Param.Genre.CLike.BreakFunc.Element.checked;  
  400.               
  401.            CLike.Options.AnonFunc.Break = 
  402.             Param.Genre.CLike.BreakAnnoFunc.Element.checked;  
  403.               
  404.            CLike.Options.Operator.Fix = 
  405.             Param.Genre.CLike.FixOperator.Element.checked;  
  406.               
  407.            CLike.BreakLine.Before.Bool = 
  408.             Param.Genre.CLike.Custom.Before.Element.checked;  
  409.               
  410.            CLike.BreakLine.Before.ParenList = 
  411.             Param.Genre.CLike.Custom.Before.Paren.Element.value;  
  412.               
  413.            CLike.BreakLine.Before.BraceList = 
  414.             Param.Genre.CLike.Custom.Before.Brace.Element.value; 
  415.               
  416.            CLike.BreakLine.After.Bool = 
  417.             Param.Genre.CLike.Custom.After.Element.checked;   
  418.               
  419.            CLike.BreakLine.After.General = 
  420.             Param.Genre.CLike.Custom.After.General.Element.value;
  421.             
  422.            var TempNum = parseInt(Param.Genre.CLike.DefaultSpace.Element.value);
  423.            if(isNaN(TempNum)) TempNum= Param.Genre.CLike.DefaultSpace.Num;
  424.            
  425.            if(TempNum<Param.Genre.CLike.DefaultSpace.Min) 
  426.             TempNum = Param.Genre.CLike.DefaultSpace.Min;
  427.            
  428.            if(TempNum>Param.Genre.CLike.DefaultSpace.Max) 
  429.             TempNum = Param.Genre.CLike.DefaultSpace.Max;
  430.               
  431.            CLike.Options.DefaultSpace = TempNum;
  432.            break;
  433.          }
  434.         };
  435.             
  436.        Param.Engine.Config = TempFunc;
  437.        ResultTextarea.Element.value = Param.Engine.Go(Textarea.Element.value, sGenre);
  438.       }
  439.    }
  440.    
  441.    if(Button.Reset.Element==null)
  442.    {
  443.     var ResetIpt = document.createElement("input");
  444.      ResetIpt.id = Button.Reset.Id();
  445.      ResetIpt.type = "reset";
  446.      ResetIpt.value = ResetText;
  447.      
  448.      ResetIpt.onclick =
  449.       function()
  450.       {
  451.        Textarea.Element.value = Textarea.DefaultValue;
  452.        fSetOptions();
  453.        return false;
  454.       }
  455.      
  456.      Container.Set[2].appendChild(ExecBtn);
  457.      Container.Set[2].appendChild(document.createTextNode(" "));
  458.      Container.Set[2].appendChild(ResetIpt);
  459.      
  460.      Button.Submit.Element = document.getElementById(Button.Submit.Id);
  461.      Button.Reset.Element = document.getElementById(Button.Reset.Id);
  462.    }
  463.    
  464.    Param.Container.Set[2].appendChild(document.createElement("hr"));
  465.   } // end function fSetButton
  466.   
  467.   function fAddOption(sle, text, value, defaultSelected, selected)
  468.   {// shawl.qiu script
  469.    if(!defaultSelected) defaultSelected = false;
  470.    if(!selected) selected = false;
  471.    sle.options[sle.options.length] = new Option(text, value, defaultSelected, selected);
  472.   } // end function fAddOption
  473.   
  474.   function fSetContainer()
  475.   {
  476.    if(!Param.Container.Init)
  477.    {
  478.     var Count = 0;
  479.     var TempId = "";
  480.    
  481.     while(Count<Param.Container.Len)
  482.     {
  483.      TempId = Param.Container.PrefixId()+Count;
  484.      
  485.      var Div = document.createElement("div");
  486.      Div.id = TempId;
  487.      
  488.      Param.Main.Element.appendChild(Div);
  489.      
  490.      Param.Container.Set[Count] = document.getElementById(TempId);
  491.      
  492.      Count++;
  493.     }
  494.     Param.Container.Init = true;
  495.    } 
  496.    
  497.    if
  498.    (
  499.     Param.Container.OrderAr.constructor==Array
  500.     &&Param.Container.OrderAr.length==Param.Container.Len
  501.    )
  502.    {
  503.     var Len = Param.Container.OrderAr.length;
  504.     var Index = 0;
  505.     Param.Container.OrderAr.reverse();
  506.     
  507.     while(--Len>-1)
  508.     {
  509.      Index = Param.Container.OrderAr[Len];
  510.      
  511.      Param.Main.Element.removeChild(Param.Container.Set[Index]);
  512.      Param.Main.Element.appendChild(Param.Container.Set[Index]);
  513.     }
  514.    } // end if
  515.    
  516.    
  517.   } // end function fSetContainer
  518.   
  519.   function fSetObj(Obj, sMsg)
  520.   {// shawl.qiu code : void return
  521.    if(!sMsg) sMsg = "无法获得对象!";
  522.    
  523.    switch(Obj.constructor)
  524.    {
  525.     case String:
  526.      Obj = document.getElementById(Obj);
  527.      break;
  528.      
  529.     case Array
  530.      Obj = Obj[0];
  531.      break;
  532.    }
  533.    
  534.    if(Obj==null)
  535.    {
  536.     throw new Error(sMsg);
  537.    }
  538.    
  539.    return Obj;
  540.   } // end function fSetObj(OldObj, NewObj, sMsg)
  541.   
  542.   function fGetAu()
  543.   {
  544.    return Au;
  545.   }
  546.      
  547.   function fExtendTextareaIESSII(Obj, sId, Ele, sDefault, sLabel, iRows, iCols)
  548.   {
  549.    Obj.Id = function(){return Param.Main.Id+sId;};
  550.    Obj.Element = Ele;
  551.    Obj.DefaultValue = sDefault;
  552.    Obj.Label = sLabel;
  553.    Obj.Rows = iRows;
  554.    Obj.Cols = iCols;
  555.   }
  556.   
  557.   function fExtendButtonSES(Obj, sId, Ele, sText)
  558.   {
  559.    Obj.Id = function(){return Param.Main.Id+sId;};
  560.    Obj.Element = Ele;
  561.    Obj.Text = sText;
  562.   }
  563.      
  564.   function fExtendElementBSE(Obj, bBool, sId, Ele)
  565.   { 
  566.    Obj.Bool = bBool;
  567.    Obj.Id = function(){return Param.Main.Id+sId;};
  568.    Obj.Element = Ele;
  569.   }
  570.   
  571.   function fSetCLikeOptions()
  572.   {
  573.    var Container = Param.Container;
  574.    var CLike = Param.Genre.CLike;
  575.    
  576.    var EgCLike = Param.Engine.Get.CLike();
  577.    
  578.    Container.Set[1].innerHTML = "<div><b>选项:</b> (打勾表示真, 不打表示假)</div>";
  579.    
  580.    // list 1
  581.    var TempEle = document.createElement("div");
  582.    var TempTNode = document.createTextNode("缩进次数: ");
  583.    TempEle.appendChild(TempTNode);
  584.    
  585.    var TempSelect = document.createElement("select");
  586.     TempSelect.id = CLike.Indent.Id();
  587.     TempEle.appendChild(TempSelect);
  588.     
  589.    var TempTNode = document.createTextNode(" 空白字符: ");
  590.    TempEle.appendChild(TempTNode);
  591.    
  592.    var TempSelect = document.createElement("select");
  593.     TempSelect.id = CLike.Space.Id();
  594.     TempEle.appendChild(TempSelect);
  595.    
  596.    Container.Set[1].appendChild(TempEle);
  597.    
  598.    CLike.Indent.Element = document.getElementById(CLike.Indent.Id());
  599.    fAddOption(CLike.Indent.Element, CLike.Indent.Default, CLike.Indent.Default)
  600.    
  601.    var TempCount = CLike.Indent.Max - CLike.Indent.Min - 1;
  602.    for(var i=0; i<=TempCount; i++)
  603.    {
  604.     var Val = i + CLike.Indent.Max - TempCount;
  605.     if(Val === CLike.Indent.Default) continue;
  606.     fAddOption(CLike.Indent.Element, Val, Val)
  607.    } // end for
  608.    
  609.    CLike.Space.Element = document.getElementById(CLike.Space.Id());
  610.    
  611.    switch(Param.Genre.CLike.Space.Default)
  612.    {
  613.     case "Tab":
  614.      fAddOption(CLike.Space.Element, "Tab", "/t");
  615.      fAddOption(CLike.Space.Element, "Space", " ");
  616.      break
  617.       
  618.     default:
  619.      fAddOption(CLike.Space.Element, "Space", " ");
  620.      fAddOption(CLike.Space.Element, "Tab", "/t");
  621.      break;
  622.    }
  623.    
  624.    // list 2
  625.    var TempEle = document.createElement("div");
  626.    
  627.    var TempTNode = document.createTextNode("缩进多行括号()中的内容: ");
  628.    TempEle.appendChild(TempTNode);
  629.    
  630.    var TempCbx = document.createElement("input");
  631.    TempCbx.type = "checkbox";
  632.    TempCbx.id = Param.Genre.CLike.Paren.Id();
  633.    TempEle.appendChild(TempCbx);
  634.    
  635.    Container.Set[1].appendChild(TempEle);
  636.    
  637.    CLike.Paren.Element = document.getElementById(Param.Genre.CLike.Paren.Id());
  638.    CLike.Paren.Element.checked = Param.Genre.CLike.Paren.Bool;
  639.    
  640.    // list 3
  641.    var TempEle = document.createElement("div");
  642.    
  643.    var TempTNode = document.createTextNode("不换行空{}/域对象:");
  644.    TempEle.appendChild(TempTNode);
  645.    
  646.    var TempCbx = document.createElement("input");
  647.    TempCbx.type = "checkbox";
  648.    TempCbx.id = Param.Genre.CLike.BreakEmptyBrace.Id();
  649.    TempEle.appendChild(TempCbx);
  650.    
  651.    Container.Set[1].appendChild(TempEle);
  652.    
  653.    CLike.BreakEmptyBrace.Element = 
  654.     document.getElementById(Param.Genre.CLike.BreakEmptyBrace.Id());
  655.    CLike.BreakEmptyBrace.Element.checked = Param.Genre.CLike.BreakEmptyBrace.Bool;
  656.    
  657.    // list 4
  658.    var TempEle = document.createElement("div");
  659.    
  660.    var TempTNode = document.createTextNode("左花括号{: 左边添加换行符: ");
  661.    TempEle.appendChild(TempTNode);
  662.    
  663.    var TempCbx = document.createElement("input");
  664.    TempCbx.type = "checkbox";
  665.    TempCbx.id = Param.Genre.CLike.LeftBraceBreakLeft.Id();
  666.    TempEle.appendChild(TempCbx);
  667.    
  668.    var TempTNode = document.createTextNode(", 右边添加换行符: ");
  669.    TempEle.appendChild(TempTNode);
  670.    
  671.    var TempCbx = document.createElement("input");
  672.    TempCbx.type = "checkbox";
  673.    TempCbx.id = Param.Genre.CLike.LeftBraceBreakRight.Id();
  674.    TempEle.appendChild(TempCbx);
  675.    
  676.    Container.Set[1].appendChild(TempEle);
  677.    
  678.    CLike.LeftBraceBreakLeft.Element = document.getElementById(CLike.LeftBraceBreakLeft.Id());
  679.    CLike.LeftBraceBreakLeft.Element.checked = Param.Genre.CLike.LeftBraceBreakLeft.Bool;
  680.    
  681.    CLike.LeftBraceBreakRight.Element = document.getElementById(CLike.LeftBraceBreakRight.Id());
  682.    CLike.LeftBraceBreakRight.Element.checked = Param.Genre.CLike.LeftBraceBreakRight.Bool;
  683.    
  684.    // list 5
  685.    var TempEle = document.createElement("div");
  686.    
  687.    var TempTNode = document.createTextNode("右花括号}: 左边添加换行符: ");
  688.    TempEle.appendChild(TempTNode);
  689.    
  690.    var TempCbx = document.createElement("input");
  691.    TempCbx.type = "checkbox";
  692.    TempCbx.id = Param.Genre.CLike.RightBraceBreakLeft.Id();
  693.    TempEle.appendChild(TempCbx);
  694.    
  695.    var TempTNode = document.createTextNode(", 右边添加换行符: ");
  696.    TempEle.appendChild(TempTNode);
  697.    
  698.    var TempCbx = document.createElement("input");
  699.    TempCbx.type = "checkbox";
  700.    TempCbx.id = Param.Genre.CLike.RightBraceBreakRight.Id();
  701.    TempEle.appendChild(TempCbx);
  702.    
  703.    Container.Set[1].appendChild(TempEle);
  704.    
  705.    CLike.RightBraceBreakLeft.Element = document.getElementById(CLike.RightBraceBreakLeft.Id());
  706.    CLike.RightBraceBreakLeft.Element.checked = Param.Genre.CLike.RightBraceBreakLeft.Bool;
  707.    
  708.    CLike.RightBraceBreakRight.Element = document.getElementById(CLike.RightBraceBreakRight.Id());
  709.    CLike.RightBraceBreakRight.Element.checked = Param.Genre.CLike.RightBraceBreakRight.Bool;
  710.    
  711.    // list 6
  712.    var TempEle = document.createElement("div");
  713.    
  714.    var TempTNode = document.createTextNode("断行一级右花括号}: ");
  715.    TempEle.appendChild(TempTNode);
  716.    
  717.    var TempCbx = document.createElement("input");
  718.    TempCbx.type = "checkbox";
  719.    TempCbx.id = Param.Genre.CLike.BreakSuperBrace.Id();
  720.    TempEle.appendChild(TempCbx);
  721.    
  722.    Container.Set[1].appendChild(TempEle);
  723.    
  724.    CLike.BreakSuperBrace.Element = 
  725.     document.getElementById(Param.Genre.CLike.BreakSuperBrace.Id());
  726.    CLike.BreakSuperBrace.Element.checked = Param.Genre.CLike.BreakSuperBrace.Bool;
  727.    
  728.    // list 7
  729.    var TempEle = document.createElement("div");
  730.    
  731.    var TempTNode = document.createTextNode("断行函数: ");
  732.    TempEle.appendChild(TempTNode);
  733.    
  734.    var TempCbx = document.createElement("input");
  735.    TempCbx.type = "checkbox";
  736.    TempCbx.id = Param.Genre.CLike.BreakFunc.Id();
  737.    TempEle.appendChild(TempCbx);
  738.    
  739.    Container.Set[1].appendChild(TempEle);
  740.    
  741.    CLike.BreakFunc.Element = 
  742.     document.getElementById(Param.Genre.CLike.BreakFunc.Id());
  743.    CLike.BreakFunc.Element.checked = Param.Genre.CLike.BreakFunc.Bool;
  744.    
  745.    // list 8
  746.    var TempEle = document.createElement("div");
  747.    
  748.    var TempTNode = document.createTextNode("断行匿名函数: ");
  749.    TempEle.appendChild(TempTNode);
  750.    
  751.    var TempCbx = document.createElement("input");
  752.    TempCbx.type = "checkbox";
  753.    TempCbx.id = Param.Genre.CLike.BreakAnnoFunc.Id();
  754.    TempEle.appendChild(TempCbx);
  755.    
  756.    Container.Set[1].appendChild(TempEle);
  757.    
  758.    CLike.BreakAnnoFunc.Element = 
  759.     document.getElementById(Param.Genre.CLike.BreakAnnoFunc.Id());
  760.    CLike.BreakAnnoFunc.Element.checked = Param.Genre.CLike.BreakAnnoFunc.Bool;
  761.    
  762.    // list 9
  763.    var TempEle = document.createElement("div");
  764.    
  765.    var TempTNode = document.createTextNode("修整运算符对齐: ");
  766.    TempEle.appendChild(TempTNode);
  767.    
  768.    var TempCbx = document.createElement("input");
  769.    TempCbx.type = "checkbox";
  770.    TempCbx.id = Param.Genre.CLike.FixOperator.Id();
  771.    TempEle.appendChild(TempCbx);
  772.    
  773.    Container.Set[1].appendChild(TempEle);
  774.    
  775.    CLike.FixOperator.Element = 
  776.     document.getElementById(Param.Genre.CLike.FixOperator.Id());
  777.    CLike.FixOperator.Element.checked = Param.Genre.CLike.FixOperator.Bool;
  778.    
  779.    // list 9-1-10
  780.    var TempEle = document.createElement("div");
  781.    
  782.    var TempTNode = document.createTextNode("行默认空白: ");
  783.    TempEle.appendChild(TempTNode);
  784.    
  785.    var TempCbx = document.createElement("input");
  786.    TempCbx.type = "text";
  787.    TempCbx.size = 2;
  788.    TempCbx.id = CLike.DefaultSpace.Id();
  789.    TempEle.appendChild(TempCbx);
  790.    
  791.    Container.Set[1].appendChild(TempEle);
  792.    
  793.    CLike.DefaultSpace.Element = 
  794.     document.getElementById(CLike.DefaultSpace.Id());
  795.    
  796.    CLike.DefaultSpace.Element.value =
  797.     CLike.DefaultSpace.Num;
  798.    
  799.    var TempTNode = 
  800.     document.createTextNode
  801.     ([" (<=", CLike.DefaultSpace.Max, ", >="+CLike.DefaultSpace.Min, ")"].join(""));
  802.    TempEle.appendChild(TempTNode);
  803.    
  804.    // list 10
  805.    var TempEle = document.createElement("div");
  806.    
  807.    TempEle.appendChild(document.createElement("p"));
  808.    
  809.    var TempTNode = document.createTextNode("自定义前断行: ");
  810.    TempEle.appendChild(TempTNode);
  811.    
  812.    var TempCbx = document.createElement("input");
  813.    TempCbx.type = "checkbox";
  814.    TempCbx.id = Param.Genre.CLike.Custom.Before.Id();
  815.    TempEle.appendChild(TempCbx);
  816.    
  817.    Container.Set[1].appendChild(TempEle);
  818.    
  819.    CLike.Custom.Before.Element = 
  820.     document.getElementById(Param.Genre.CLike.Custom.Before.Id());
  821.    CLike.Custom.Before.Element.checked = Param.Genre.CLike.Custom.Before.Bool;
  822.    
  823.    // list 11
  824.    var TempEle = document.createElement("div");
  825.    
  826.    var TempTNode = document.createTextNode("括号()邻边: ");
  827.    TempEle.appendChild(TempTNode);
  828.    
  829.    var TempCbx = document.createElement("input");
  830.    TempCbx.type = "text";
  831.    TempCbx.size = 80;
  832.    TempCbx.id = Param.Genre.CLike.Custom.Before.Paren.Id();
  833.    TempEle.appendChild(TempCbx);
  834.    
  835.    Container.Set[1].appendChild(TempEle);
  836.    
  837.    CLike.Custom.Before.Paren.Element = 
  838.     document.getElementById(Param.Genre.CLike.Custom.Before.Paren.Id());
  839.     
  840.    Param.Genre.CLike.Custom.Before.Paren.Element.value =
  841.     EgCLike.BreakLine.Before.ParenList;
  842.    
  843.    var TempTNode = document.createTextNode(" (以|分隔多项)");
  844.    TempEle.appendChild(TempTNode);
  845.    
  846.    // list 12
  847.    var TempEle = document.createElement("div");
  848.    
  849.    var TempTNode = document.createTextNode("花括号{}邻边: ");
  850.    TempEle.appendChild(TempTNode);
  851.    
  852.    var TempCbx = document.createElement("input");
  853.    TempCbx.type = "text";
  854.    TempCbx.size = 80;
  855.    TempCbx.id = Param.Genre.CLike.Custom.Before.Brace.Id();
  856.    TempEle.appendChild(TempCbx);
  857.    
  858.    Container.Set[1].appendChild(TempEle);
  859.    
  860.    CLike.Custom.Before.Brace.Element = 
  861.     document.getElementById(Param.Genre.CLike.Custom.Before.Brace.Id());
  862.    
  863.    Param.Genre.CLike.Custom.Before.Brace.Element.value =
  864.     EgCLike.BreakLine.Before.BraceList;
  865.    
  866.    var TempTNode = document.createTextNode(" (以|分隔多项)");
  867.    TempEle.appendChild(TempTNode);
  868.    
  869.    // list 13
  870.    var TempEle = document.createElement("div");
  871.    
  872.    TempEle.appendChild(document.createElement("p"));
  873.    
  874.    var TempTNode = document.createTextNode("自定义后断行: ");
  875.    TempEle.appendChild(TempTNode);
  876.    
  877.    var TempCbx = document.createElement("input");
  878.    TempCbx.type = "checkbox";
  879.    TempCbx.id = Param.Genre.CLike.Custom.After.Id();
  880.    TempEle.appendChild(TempCbx);
  881.    
  882.    Container.Set[1].appendChild(TempEle);
  883.    
  884.    CLike.Custom.After.Element = 
  885.     document.getElementById(Param.Genre.CLike.Custom.After.Id());
  886.    CLike.Custom.After.Element.checked = Param.Genre.CLike.Custom.After.Bool;
  887.    
  888.    // list 14
  889.    var TempEle = document.createElement("div");
  890.    
  891.    var TempTNode = document.createTextNode("普通后断行语句: ");
  892.    TempEle.appendChild(TempTNode);
  893.    
  894.    var TempCbx = document.createElement("input");
  895.    TempCbx.type = "text";
  896.    TempCbx.size = 80;
  897.    TempCbx.id = CLike.Custom.After.General.Id();
  898.    TempEle.appendChild(TempCbx);
  899.    
  900.    Container.Set[1].appendChild(TempEle);
  901.    
  902.    CLike.Custom.After.General.Element = 
  903.     document.getElementById(CLike.Custom.After.General.Id());
  904.    
  905.    CLike.Custom.After.General.Element.value =
  906.     EgCLike.BreakLine.After.General;
  907.    
  908.    var TempTNode = document.createTextNode(" (以|分隔多项)");
  909.    TempEle.appendChild(TempTNode);

  910.    // hr bar
  911.    Param.Container.Set[1].appendChild(document.createElement("hr"));
  912.   } // end function fSetCLikeOptions 
  913.   //------------------------------------end private method
  914.  } // shawl.qiu code
  915.  //---------------------------------end class Styler()---------------------------------//


3. 类 StyleEngine(StyleEngine_v1-0.js)
  1.  // shawl.qiu JavaScript Document
  2.  /*-----------------------------------------------------------------------------------*/
  3.   * shawl.qiu StyleEngine class v1.0
  4.  /*-----------------------------------------------------------------------------------*/
  5.  //---------------------------------begin class StyleEngine()-------------------------------//
  6.  function StyleEngine()
  7.  { // shawl.qiu code
  8.   //------------------------------------begin public variable
  9.   //------------------------------------end public variable
  10.   
  11.   //------------------------------------begin private variable
  12.   //---------------begin about
  13.   var Au = {};
  14.    Au.Subject = "shawl.qiu StyleEngine class";
  15.    Au.Version = "v1.0";
  16.    Au.Name = "shawl.qiu";
  17.    Au.Email = "shawl.qiu@gmail.com";
  18.    Au.Blog = "http://blog.csdn.net/btbtd/";
  19.    Au.CreatedDate = "2007-7-31";
  20.    Au.Update = {};
  21.    Au.Update["1"] = "";
  22.   //---------------end about
  23.   
  24.   var This = this;
  25.   
  26.   var Genre ={};
  27.    Genre.CLike = {};
  28.    
  29.   var CLike = Genre.CLike; 
  30.    CLike.Escape = {};
  31.    fExtendObjASI(CLike.Escape, false, "SQCLIKEESCAPEMARKER", false);
  32.    
  33.    CLike.String = {};
  34.    fExtendObjASI(CLike.String, false, "SQCLIKESTRINGMARKER", false);
  35.    
  36.    CLike.CommentMultiline = {};
  37.    fExtendObjASI(CLike.CommentMultiline, false, "SQCLIKECOMMENTMULTILINEMARKER", false);
  38.    
  39.    CLike.CommentSingleline = {};
  40.    fExtendObjASI(CLike.CommentSingleline, false, "SQCLIKECOMMENTSINGLELINEMARKER", false);
  41.    
  42.    CLike.JsRegExp = {};
  43.    fExtendObjASI(CLike.JsRegExp, false, "SQCLIKEJSREGEXPMARKER", false);
  44.    
  45.    CLike.Options = {};
  46.    
  47.    CLike.Options.Indent = 1;
  48.    
  49.    CLike.Options.Space = " ";
  50.    CLike.Options.DefaultSpace = 1;
  51.    
  52.    CLike.Options.LevelCount = 0;
  53.    
  54.    CLike.Options.Parenthesis = {};
  55.    CLike.Options.Parenthesis.Indent = true;  
  56.    fExtendObjSSSA
  57.    (
  58.     CLike.Options.Parenthesis
  59.     , "SQCLIKEPARENTHESISBGEINMARKER"
  60.     , "SQCLIKEPARENTHESISENDMARKER"
  61.     , "x"
  62.     , [0]
  63.    );
  64.    
  65.    CLike.Options.Brace = {};
  66.    
  67.    CLike.Options.Brace.Inline = {};
  68.    CLike.Options.Brace.Inline.Break = false;
  69.    fExtendObjASI(CLike.Options.Brace.Inline, false, "SQCLIKEBRACEINLINEMARKER", false);
  70.    
  71.    CLike.Options.Brace.Left = {};
  72.    CLike.Options.Brace.Left.BreakLeft = true;
  73.    CLike.Options.Brace.Left.BreakRight = false;
  74.    
  75.    CLike.Options.Brace.Right = {};
  76.    CLike.Options.Brace.Right.BreakLeft = true;
  77.    CLike.Options.Brace.Right.BreakRight = false;
  78.      
  79.    fExtendObjSSSA
  80.    (
  81.     CLike.Options.Brace
  82.     , "SQCLIKEBRACEBGEINMARKER"
  83.     , "SQCLIKEBRACEENDMARKER"
  84.     , "x"
  85.     , [0]
  86.    );
  87.    
  88.    CLike.Options.Brace.Super = {};
  89.    CLike.Options.Brace.Super.Separate = true;
  90.    CLike.Options.Brace.Super.Separater = "/n";
  91.    CLike.Options.Brace.Super.Marker = "SQCLIKEBRACESUPERMARKER";
  92.    
  93.    CLike.Options.Operator = {};
  94.    CLike.Options.Operator.Fix = true;
  95.    CLike.Options.Operator.List = "//=//=//=|//>//>//>//=|//>//>//=|//<//<//=|//!//=//=|//>//>//=|//>//>//>|//+//+|//-//-|//<//<|//>//>|//<//=|//>//=|//=//=|//!//=|//&//&|//|//||//*//=|/=|//%//=|//+//=|//-//=|//&//=|//|//+|//^//=|//~|//=|//<|//>|//^|//?|//:|//-|//+|//||//%|//*|///";
  96.    
  97.    CLike.Options.Func = {};
  98.    CLike.Options.Func.Break = true;
  99.    CLike.Options.Func.Marker = "SQCLIKEFUNCMARKER";
  100.    
  101.    CLike.Options.AnonFunc = {};
  102.    CLike.Options.AnonFunc.Break = true;
  103.    CLike.Options.AnonFunc.Marker = "SQCLIKEANONFUNCMARKER";
  104.    
  105.    CLike.BreakLine = {};
  106.    
  107.    CLike.BreakLine.Before = {};
  108.    CLike.BreakLine.Before.Bool = true;
  109.    CLike.BreakLine.Before.Marker = "SQCLIKEBREAKLINEBEFOREMARKER";
  110.    CLike.BreakLine.Before.ParenList = "for|do|while|else if|switch|with|catch|if"; // x|y
  111.    CLike.BreakLine.Before.BraceList = "try|else"; // x|y
  112.    
  113.    CLike.BreakLine.After = {};
  114.    CLike.BreakLine.After.Bool = true;
  115.    CLike.BreakLine.After.Marker = "SQCLIKEBREAKLINEAFTERMARKER";
  116.    CLike.BreakLine.After.ParenList = ""; // x|y
  117.    CLike.BreakLine.After.BraceList = ""; // x|y
  118.    CLike.BreakLine.After.General = "break"; // x|y
  119.    //-----------------------end Clike
  120.    
  121.    Genre.BasicLike = null;
  122.    Genre.HtmlTag = null;
  123.    Genre.XmlTag = null;
  124.    
  125.   var Source = [""];
  126.   var Formated = "";
  127.   //------------------------------------end private variable
  128.   
  129.   //------------------------------------begin public method
  130.   //-------------------Begin this.Get
  131.   this.Get = {};
  132.   
  133.   this.Get.Au = fGetAu;
  134.   this.GetAu = this.Get.Au;
  135.   
  136.   this.Get.Genre = function(){return Genre;};
  137.   this.Get.CLike = function(){return Genre.CLike;};
  138.   //-------------------End this.Get
  139.   
  140.   //-------------------Begin this.Set
  141.   //-------------------End this.Set
  142.   this.Go = fGo;
  143.   
  144.   this.Genre = {};
  145.   
  146.   this.Config = null;
  147.   
  148.   
  149.   //------------------------------------end public method
  150.  
  151.   //------------------------------------begin private method
  152.   
  153.   function fGo(SourceText, sGenre)
  154.   {// return string 
  155.    var bIsString = false;
  156.    if(SourceText.constructor==String)
  157.    {
  158.     Source[0] = SourceText;
  159.     bIsString = true;
  160.    }
  161.    else
  162.    {
  163.     Source = SourceText;
  164.    }
  165.    
  166.    if(This.Config.constructor==Function)
  167.    {
  168.     This.Config(CLike);
  169.    }
  170.    
  171.    switch(sGenre)
  172.    {
  173.     case "BasicLike":
  174.      break;
  175.     
  176.     case "Tag":
  177.      break;
  178.     
  179.     case "Css":
  180.      break;
  181.      
  182.     default:
  183.      fGettingCLike(Source)
  184.      break;
  185.    };
  186.    
  187.    if(bIsString)
  188.    {
  189.     return Source[0];
  190.    }
  191.   } // end function fGo
  192.   
  193.   function fGettingCLike(Source)
  194.   {
  195.    var CLike = Genre.CLike;
  196.    
  197.    var TempSpace = fStringSpace(CLike.Options.Space, CLike.Options.Indent);
  198.    var DefaultSpace = fStringSpace(CLike.Options.Space, CLike.Options.DefaultSpace);
  199.   
  200.    fEncodeCode(Source, CLike.Escape, "(.)");
  201.    fEncodeCode(Source, CLike.String, "(///"[^//n]*?///")");
  202.    fEncodeCode(Source, CLike.String, "(//'[^//n]*?//')");
  203.    fEncodeCode(Source, CLike.CommentMultiline, "(/*[//s//S]*?//*///)");
  204.    fEncodeCode(Source, CLike.CommentSingleline, "(//.*)");
  205.    fEncodeCode(Source, CLike.JsRegExp, "(///[^///].*?///)");
  206.    
  207.    if(!CLike.Options.Brace.Left.BreakLeft)
  208.    {
  209.     Source[0] = Source[0].replace(//n([^/n/S]*?{)/, "$1");
  210.    }
  211.    
  212.    if(CLike.Options.Operator.Fix)
  213.    {
  214.     var TempRe = 
  215.      new RegExp(["[^//n//S]*(",CLike.Options.Operator.List, ")[^//n//S]*"].join(""), "g");
  216.     Source[0] = Source[0].replace(TempRe, TempSpace+"$1"+TempSpace);
  217.     Source[0] = Source[0].replace(/[^/n/S]*(,|/+/+|/-/-|/;)[^/n/S]*/g, "$1"+TempSpace);
  218.     Source[0] = Source[0].replace(//s*/-/s*(/d+)/g, TempSpace+"-$1");
  219.    }
  220.    
  221.    if(!CLike.Options.Brace.Inline.Break)
  222.    {
  223.     fEncodeCode(Source, CLike.Options.Brace.Inline, "(//=[^//n//S]*?{[^{//n]*?})");
  224.    }
  225.    
  226.    if(CLike.Options.AnonFunc.Break)
  227.    {
  228.     //SQCLIKEANONFUNCMARKER
  229.     Source[0] = Source[0].replace
  230.     (
  231.      /((?:/=|/:|,)[^/n/S]*?)(function[^/S]*?/()/gi
  232.      ,"$1/n$2"
  233.     );
  234.    }

  235.    // 是否断行左{
  236.    if(CLike.Options.Brace.Left.BreakLeft)
  237.    {
  238.     Source[0] = Source[0].replace(//{/g, "/n{");
  239.    }
  240.    if(CLike.Options.Brace.Left.BreakRight)
  241.    {
  242.     Source[0] = Source[0].replace(//{/g, "{/n");
  243.    }
  244.     
  245.    // 是否断行右}
  246.    if(CLike.Options.Brace.Right.BreakLeft)
  247.    {
  248.     Source[0] = Source[0].replace(//}/g, "/n}");
  249.    }
  250.    if(CLike.Options.Brace.Right.BreakRight)
  251.    {
  252.     Source[0] = Source[0].replace(//}/g, "}/n");
  253.    }
  254.     
  255.    // 清除空白
  256.    fClearSpace(Source);
  257.    
  258.    if(CLike.Options.Func.Break)
  259.    {
  260.     Source[0] = Source[0].replace(/((function|void)[/s]*?[a-z0-9_$]+)/gi
  261.     , CLike.Options.Func.Marker+"/n$1");
  262.    }
  263.    
  264.    if(CLike.BreakLine.Before.Bool)
  265.    {
  266.     if(CLike.BreakLine.Before.ParenList!="")
  267.     {
  268.      var TempStr = fGetPtnBySepItem(CLike.BreakLine.Before.ParenList, "|", "|", "//b");
  269.      var TempAr = ["((?:", TempStr, ")[//s]*?//()"];
  270.      var TempRe = new RegExp(TempAr.join(""), "gi");
  271.      
  272.      Source[0] = Source[0].replace(TempRe
  273.      , CLike.BreakLine.Before.Marker+"/n$1");
  274.     }
  275.     
  276.     if(CLike.BreakLine.Before.BraceList!="")
  277.     {
  278.      var TempStr = fGetPtnBySepItem(CLike.BreakLine.Before.BraceList, "|", "|", "//b");
  279.      var TempAr = ["((?:", TempStr, ")[//s]*?//{)"];
  280.      var TempRe = new RegExp(TempAr.join(""), "gi");
  281.      
  282.      Source[0] = Source[0].replace(TempRe
  283.      , CLike.BreakLine.Before.Marker+"/n$1");
  284.     }
  285.    }
  286.    
  287.    if(CLike.BreakLine.After.Bool)
  288.    {
  289.     
  290.     if(CLike.BreakLine.After.General!="")
  291.     {
  292.      var TempStr = fGetPtnBySepItem(CLike.BreakLine.After.General, "|", "|", "//b");
  293.      var TempAr = ["((?:", TempStr, ").*)"];
  294.      var TempRe = new RegExp(TempAr.join(""), "gi");
  295.      
  296.      Source[0] = Source[0].replace(TempRe
  297.      , "$1/n"+CLike.BreakLine.After.Marker);
  298.     }
  299.    }   
  300.    
  301.    if(CLike.Options.Parenthesis.Indent)
  302.    {
  303.     // 括号缩进
  304.     fMakeMarker
  305.     (
  306.      Source
  307.      , CLike.Options.Parenthesis.BeginMarker
  308.      , CLike.Options.Parenthesis.EndMarker
  309.      , CLike.Options.Parenthesis.LevelAr
  310.      , CLike.Options.Parenthesis.MarkerPostfix
  311.      , "/("
  312.      , "/)"
  313.      , false
  314.     );
  315.     
  316.     for(var i=0, j=CLike.Options.Parenthesis.LevelAr[0]; i<j; i++)
  317.     {
  318.      var PatternPostfix = i+CLike.Options.Parenthesis.MarkerPostfix;
  319.      var sBegin = CLike.Options.Parenthesis.BeginMarker + PatternPostfix;
  320.      var sEnd = CLike.Options.Parenthesis.EndMarker + PatternPostfix;
  321.      
  322.      var TempAr = ["(",sBegin,")","([//s//S]*?)","(",sEnd,")"];
  323.      //alert(TempAr.join(""));
  324.      
  325.      var Re = new RegExp(TempAr.join(""), "g");

  326.      var NoSpaceRe = 
  327.       new RegExp
  328.       (
  329.        [
  330.         "([^//n//S]*("
  331.         ,CLike.CommentSingleline.Marker
  332.         ,"//d+|"
  333.         ,CLike.CommentMultiline.Marker
  334.         ,"//d+"
  335.         ,")*//s*)"].join("")
  336.       );

  337.      
  338.      Source[0] = 
  339.       Source[0].replace
  340.       (
  341.        Re
  342.        ,function($0, $1, $2, $3)
  343.        {
  344.         //alert($0);
  345.         
  346.         var iLine = $2.split("/n").length;
  347.         
  348.         var Ar = [];
  349.         Ar.push("(");
  350.         
  351.         var sSpaceBegin="";
  352.         var sSpaceEnd="";
  353.         
  354.         $2 = $2.replace(NoSpaceRe, function($0, $1){sSpaceBegin=$1; return "";});
  355.         $2 = $2.replace(/(/s*$)/, function($0, $1){sSpaceEnd=$1; return "";});
  356.         
  357.         if(iLine>2)
  358.         {
  359.          $2 = fUnshiftString($2, TempSpace);
  360.         }
  361.         
  362.         Ar.push(sSpaceBegin);
  363.         Ar.push($2);
  364.         Ar.push(sSpaceEnd);
  365.         
  366.         Ar.push(")");
  367.         
  368.         return Ar.join("");
  369.        }
  370.       );
  371.     } // end for
  372.    }
  373.     
  374.    // 大括号块缩进
  375.     fMakeMarker
  376.     (
  377.      Source
  378.      , CLike.Options.Brace.BeginMarker
  379.      , CLike.Options.Brace.EndMarker
  380.      , CLike.Options.Brace.LevelAr
  381.      , CLike.Options.Brace.MarkerPostfix
  382.      , "{"
  383.      , "}"
  384.      , false
  385.     );
  386.     
  387.    // 断行一级 } 
  388.    if(CLike.Options.Brace.Super.Separate)
  389.    {
  390.     var TempReStr = 
  391.      ["(",CLike.Options.Brace.EndMarker, 0, CLike.Options.Brace.MarkerPostfix,")","(.*)"];
  392.      
  393.     var TempRe = new RegExp(TempReStr.join(""), "g");
  394.     
  395.     Source[0] = 
  396.      Source[0].replace
  397.      (
  398.       TempRe
  399.       , "$1$2"
  400.       +CLike.Options.Brace.Super.Separater
  401.       +CLike.Options.Brace.Super.Marker
  402.      );
  403.    }
  404.    
  405.    if(CLike.Options.AnonFunc.Break)
  406.    {
  407.     var TempAr = 
  408.     [
  409.      "([^//n//S]*?(?:function|arguments//.callee)[//s]*?//([//s//S]*?"
  410.      , CLike.Options.Brace.BeginMarker
  411.      //, "[//d]+"
  412.      , "(//d+)[//s//S]*?"
  413.      , CLike.Options.Brace.EndMarker
  414.      , "//2)"
  415.     ];
  416.     
  417.     var TempRe = new RegExp(TempAr.join(""), "g");
  418.     
  419.     Source[0] = Source[0].replace
  420.     (
  421.      TempRe,
  422.      function($0, $1)
  423.      {
  424.       return fUnshiftString($1, TempSpace);
  425.      }
  426.     )
  427.     
  428.     var TempAr = 
  429.     [
  430.      "(function[^//S]*?//([//s//S]*?"
  431.      ,CLike.Options.Brace.BeginMarker
  432.      ,"(//d+)[//s//S]*?"
  433.      ,CLike.Options.Brace.EndMarker
  434.      ,"//2.*)"
  435.     ];
  436.     
  437.     var TempRe = new RegExp(TempAr.join(""), "g");
  438.     
  439.     Source[0] = Source[0].replace
  440.     (
  441.      TempRe
  442.      ,"$1/n"+CLike.Options.AnonFunc.Marker
  443.     );
  444.    }
  445.     
  446.    // 还原并缩进 {}
  447.    for(var i=0, j=CLike.Options.Brace.LevelAr[0]; i<j; i++)
  448.    {
  449.     var PatternPostfix = i+CLike.Options.Brace.MarkerPostfix;
  450.     var sBegin = CLike.Options.Brace.BeginMarker + PatternPostfix;
  451.     var sEnd = CLike.Options.Brace.EndMarker + PatternPostfix;
  452.     
  453.     var TempAr = ["(",sBegin,")","([//s//S]*?)","(",sEnd,")"];
  454.     //alert(TempAr.join(""));
  455.     
  456.     var Re = new RegExp(TempAr.join(""), "g");
  457.     var NoSpaceRe = 
  458.      new RegExp
  459.      (
  460.       [
  461.        "([^//n//S]*("
  462.        ,CLike.CommentSingleline.Marker
  463.        ,"//d+|"
  464.        ,CLike.CommentMultiline.Marker
  465.        ,"//d+)*//s*)"].join("")
  466.      );
  467.     
  468.     Source[0] = 
  469.      Source[0].replace
  470.      (
  471.       Re
  472.       ,function($0, $1, $2, $3)
  473.       {
  474.        //alert($0);
  475.        
  476.        var Ar = [];
  477.        Ar.push("{");
  478.        
  479.        var sSpaceBegin="";
  480.        var sSpaceEnd="";
  481.        
  482.        //alert($2)
  483.        $2 = $2.replace(NoSpaceRe, function($0, $1){sSpaceBegin=$1; return "";});
  484.        $2 = $2.replace(/(/s*$)/, function($0, $1){sSpaceEnd=$1; return "";});
  485.        
  486.        $2 = fUnshiftString($2, TempSpace);
  487.        Ar.push(sSpaceBegin);
  488.        Ar.push($2);
  489.        Ar.push(sSpaceEnd);
  490.        Ar.push("}");
  491.        
  492.        return Ar.join("");
  493.       }
  494.      );
  495.    } // end for
  496.    
  497.    // 行默认空白字符
  498.    fUnshiftString(Source, DefaultSpace);
  499.    
  500.    var TempRe, TempAr;
  501.     
  502.     fRemoveMarker(Source, CLike.Options.Brace.Super.Marker, "g");
  503.     fRemoveMarker(Source, CLike.Options.Func.Marker, "g");
  504.     fRemoveMarker(Source, CLike.BreakLine.Before.Marker, "g");
  505.     fRemoveMarker(Source, CLike.BreakLine.After.Marker, "g");
  506.     fRemoveMarker(Source, CLike.Options.AnonFunc.Marker, "g");
  507.     
  508.     fRemoveMarker(Source, "{[^//n//S]*", "g", "{");
  509.     fRemoveMarker(Source, "//n[^//n//S]*//n([^//n//S]*})", "g", "/n$1");
  510.     fRemoveMarker
  511.      (
  512.       Source, "({.*?//n)[^//n//S]*//n(.*?(//bfor//b|//bif//b|//bswitch//b)//s*?//()"
  513.       , "g"
  514.       , "$1$2"
  515.      );
  516.     
  517.     // 清除 不必要的 断行
  518.     TempAr = 
  519.     [
  520.      "(//n[//s]*("
  521.      ,CLike.CommentSingleline.Marker
  522.      ,"|"
  523.      ,CLike.CommentMultiline.Marker
  524.      ,").*?//n)[^//n//S]*//n(.*?(//bfor//b|//bif//b|//bfunction//b)//s*[//w$]*?//()"
  525.     ];
  526.     
  527.     fRemoveMarker(Source, TempAr.join(""), "g", "$1$3");    
  528.     fRemoveMarker(Source, "(}.*?//n)[^//n//S]*//n(.*?(?://bcatch//b|//belse if//b)//s*?//()", "g", "$1$2");
  529.     fRemoveMarker(Source, "(}.*?//n)[^//n//S]*//n(.*?(?://belse//b)//s*?{)", "g", "$1$2");
  530.     fRemoveMarker(Source, "({.*?//n)[^//n//S]*//n(.*?(//btry//b)//s*?{)", "g", "$1$2");
  531.     fRemoveMarker(Source, "//n[^//n//S]*//n//s*//n", "g", "/n/n");
  532.             
  533.     TempAr = 
  534.     [
  535.      "(}.*//n)"
  536.      ,"[^//n//S]*?//n"
  537.      ,"([//s]*?"
  538.      ,CLike.CommentSingleline.Marker
  539.      ,"|"
  540.      ,CLike.CommentMultiline.Marker
  541.      ,")"
  542.     ];
  543.      
  544.     fRemoveMarker(Source, TempAr.join(""), "g", "$1$2");
  545.      
  546.     fRemoveMarker(Source, "//((?:[^//n//S]+)", "g", "(");
  547.    
  548.    //CLike.Options.Brace.Inline.Break
  549.        
  550.    fDecodeCode(Source, CLike.Options.Brace.Inline);
  551.    fDecodeCode(Source, CLike.JsRegExp);
  552.    fDecodeCode(Source, CLike.CommentSingleline);
  553.    
  554.    // 修正多行注释
  555.    var iTempLen = CLike.CommentMultiline.Set.length;
  556.    while(--iTempLen>-1)
  557.    {
  558.     var TempAr = ["//n([^//n//S]*)",CLike.CommentMultiline.Marker, iTempLen]; 
  559.     var TempRe = 
  560.      new RegExp
  561.       (TempAr.join(""), "g");
  562.       
  563.       //alert(TempAr.join(""))
  564.       
  565.      Source[0].replace
  566.      (
  567.       TempRe
  568.       , function($0, $1, $2)
  569.       {

  570.         //alert(CLike.CommentMultiline.Set[iTempLen])
  571.        var Ar = CLike.CommentMultiline.Set[iTempLen].split("/n");
  572.        var Len = Ar.length;
  573.        
  574.        var ArReplace = [];
  575.        
  576.        ArReplace.push(Ar[0]);
  577.        
  578.        if(Len>=2)
  579.        {
  580.         var Str2 = Ar.slice(1, Len-1).join("/n");
  581.          
  582.          Str2 = fClearSpace(Str2);
  583.          
  584.          Str2 = fUnshiftString(Str2, $1+CLike.Options.Space);
  585.          //alert(Str2)
  586.          ArReplace.push(Str2);
  587.        }
  588.        
  589.        if(Len>1)
  590.        ArReplace.push("/n"+fUnshiftString(fClearSpace(Ar[Len-1]), $1));
  591.        
  592.        CLike.CommentMultiline.Set[iTempLen] = ArReplace.join("");
  593.       }
  594.      );
  595.      
  596.    } // end while
  597.    
  598.    fDecodeCode(Source, CLike.CommentMultiline);
  599.    
  600.    fDecodeCode(Source, CLike.String);
  601.    fDecodeCode(Source, CLike.Escape);
  602.    
  603.    fStringTrim(Source, true);
  604.    
  605.   } // end function fGettingCLike(Source)
  606.   
  607.   function fGetPtnBySepItem(sSource, sSplit, sJoin, sAddiItem)
  608.   {
  609.    var Ar = sSource.split(sSplit);
  610.    var iTemp = Ar.length;
  611.    
  612.    while(--iTemp>-1)
  613.    {
  614.     Ar[iTemp] = sAddiItem+Ar[iTemp]+sAddiItem;
  615.    }
  616.    
  617.    return Ar.join(sJoin);
  618.   }
  619.   
  620.   function fRemoveMarker(Source, Re, sFlag, sReplace)
  621.   {
  622.    if(Re.constructor == String)
  623.    {
  624.     Re = new RegExp(Re, sFlag);
  625.    }
  626.    if(!sFlag) sFlag = "g";
  627.    if(!sReplace) sReplace = "";
  628.     
  629.     Source[0] = Source[0].replace(Re, sReplace);
  630.   }

  631.   function fExtendObjASI(Obj, Set, sPrefix, iCount)
  632.   {// shawl.qiu code : void return
  633.    if(!Set) Set = [];
  634.    if(!iCount) iCount = 0;
  635.    if(!sPrefix) throw new Error("参数出错!");
  636.    
  637.    Obj.Set = Set;
  638.    Obj.Marker = sPrefix;
  639.    Obj.Count = iCount;
  640.   } // end function fExtendObjASI(Obj, Set, sPrefix, iCount)

  641.   function fExtendObjSSSA(Obj, BeginMarker, EndMarker, MarkerPostfix, LevelAr)
  642.   {// shawl.qiu code : void return
  643.    Obj.BeginMarker = BeginMarker;
  644.    Obj.EndMarker = EndMarker;
  645.    Obj.MarkerPostfix = MarkerPostfix;
  646.    Obj.LevelAr = LevelAr;
  647.   } // end function fExtendObjSSSA(Obj, BeginMarker, EndMarker, MarkerPostfix, LevelAr)
  648.   
  649.   function fEncodeCode(Source, Obj, sPattern)
  650.   {
  651.    var Re = new RegExp(sPattern, "g");
  652.    
  653.    Source[0] = Source[0]
  654.     .replace
  655.     (
  656.      Re
  657.      ,function($0, $1)
  658.      {
  659.       Obj.Set.push($1);
  660.       //alert($1);
  661.       return Obj.Marker+(Obj.Count++);
  662.      }
  663.     );
  664.   } // end function fEncodeCode(Source, Obj, sPattern)
  665.   
  666.   function fDecodeCode(Source, Obj)
  667.   {
  668.    var iTemp = Obj.Set.length;
  669.    while(--iTemp>-1)
  670.    {
  671.     Source[0] = 
  672.      Source[0].replace
  673.      (Obj.Marker+iTemp, Obj.Set[iTemp]);
  674.    }
  675.   } // end function fDecode
  676.   
  677.   function fMakeMarker
  678.   (
  679.    Nodes
  680.    , PATTERNBEGIN
  681.    , PATTERNEND
  682.    , LevelAr
  683.    , sIdPostfix
  684.    , sLeft
  685.    , sRight
  686.    , bDebug
  687.   )
  688.   { // shawl.qiu code : return string
  689.    if(Nodes[0].indexOf(sLeft)<0||Nodes[0].indexOf(sRight)<0) return Nodes[0];
  690.    
  691.    var Debug = bDebug;
  692.    var Pos = [];
  693.    var iStart = 0;
  694.    var iOver = Nodes[0].length;
  695.    
  696.    var TempPostfix = LevelAr[0]+sIdPostfix;
  697.    
  698.    var TEMPPATTERNBEGIN = PATTERNBEGIN+TempPostfix;
  699.    var TEMPPATTERNEND = PATTERNEND+TempPostfix;
  700.    
  701.    if(Debug)
  702.    {
  703.     document.write("Nodes: ", Nodes, "<p/>");
  704.     document.write
  705.     (
  706.      "Nodes[0].indexOf(sLeft, iStart): "
  707.      , Nodes[0].indexOf(sLeft, iStart)
  708.      , "<br/>"
  709.     );
  710.    }
  711.    
  712.    while(iStart<iOver)
  713.    {
  714.     var LeftPos = Nodes[0].indexOf(sLeft, iStart);
  715.     if(LeftPos<0) break;
  716.     
  717.     var RightPos = Nodes[0].indexOf(sRight, LeftPos);
  718.     
  719.     var TempStr = Nodes[0].substring(LeftPos, RightPos+1);
  720.     var iLeftOccur = fStringGetTimes(TempStr, sLeft, true);
  721.     var iRightOccur = fStringGetTimes(TempStr, sRight, true);
  722.     
  723.     if(iLeftOccur-iRightOccur!==0)
  724.     {
  725.      var Times = iLeftOccur - iRightOccur;
  726.      
  727.      RightPos = fGetNextPos(Nodes, Times, LeftPos, RightPos+1, sLeft, sRight);
  728.     }
  729.     
  730.     if(RightPos<0) break;
  731.     
  732.     var TempNodes = [];
  733.      TempNodes.push(Nodes[0].substring(0, LeftPos));
  734.      TempNodes.push(TEMPPATTERNBEGIN);
  735.      TempNodes.push(Nodes[0].substring(LeftPos+1, RightPos));
  736.      TempNodes.push(TEMPPATTERNEND);
  737.      TempNodes.push(Nodes[0].slice(RightPos+1));
  738.      
  739.      Nodes[0] = TempNodes.join("");
  740.      var Span = TEMPPATTERNBEGIN.length + TEMPPATTERNBEGIN.length-2;
  741.      iOver+=Span;
  742.      RightPos+=Span-2;
  743.      
  744.     TempStr = Nodes[0].substring(LeftPos, RightPos+1);
  745.     iLeftOccur = fStringGetTimes(TempStr, sLeft, true);
  746.     iRightOccur = fStringGetTimes(TempStr, sRight, true);
  747.      
  748.     if(Debug)
  749.     { 
  750.      document.write("TempNodes: ", TempNodes, "<br/>");
  751.      document.write("LeftPos: ", LeftPos, "<br/>");
  752.      document.write("RightPos: ", RightPos, "<br/>");
  753.      document.write("TempStr: ", TempStr, "<br/>");
  754.      document.write("iLeftOccur: ", iLeftOccur, "<br/>");
  755.      document.write("iRightOccur: ", iRightOccur, "<br/>");
  756.      document.write("<p/>");
  757.     }
  758.     
  759.     iStart = RightPos+1;
  760.    }
  761.    
  762.    LevelAr[0] = LevelAr[0]+1;
  763.  
  764.    if(Nodes[0].indexOf(sLeft)>-1&&Nodes[0].indexOf(sRight)>-1)
  765.    {  
  766.      arguments.callee
  767.      (
  768.       Nodes
  769.       , PATTERNBEGIN
  770.       , PATTERNEND
  771.       , LevelAr
  772.       , sIdPostfix
  773.       , sLeft
  774.       , sRight
  775.       , bDebug
  776.      );
  777.    }
  778.   } // end function fMakeMarker
  779.   
  780.   function fGetNextPos(Nodes, Times, LeftPos, RightPos, sLeft, sRight)
  781.   {
  782.    if(Times<1) return RightPos;
  783.    for(var i=0; i<Times; i++)
  784.    {
  785.     RightPos = Nodes[0].indexOf(sRight, RightPos);
  786.    }
  787.    var TempStr = Nodes[0].substring(LeftPos, RightPos+1);
  788.    var iLeftOccur = fStringGetTimes(TempStr, sLeft, true);
  789.    var iRightOccur = fStringGetTimes(TempStr, sRight, true);
  790.    
  791.    Times = iLeftOccur-iRightOccur;
  792.    
  793.    if(Times>0)
  794.    {
  795.     RightPos = arguments.callee(Nodes, Times, LeftPos, RightPos+1, sLeft, sRight);
  796.    }
  797.    return RightPos;
  798.   }
  799.   
  800.   function fStringGetTimes(Source, sMatch, bCharacter)
  801.   {// shawl.qiu code : return integer
  802.    var iTime=0;
  803.    var Re = null;
  804.    
  805.    if(Source.constructor==String)
  806.    {
  807.     Source = [Source];
  808.    }
  809.    
  810.    if(!bCharacter)
  811.    {
  812.     Re = new RegExp('//b('+sMatch+')//b', 'gi');
  813.    }
  814.    else 
  815.    {
  816.     sMatch = "//"+sMatch;
  817.     Re = new RegExp('('+sMatch+')', 'gi');
  818.    }
  819.    Source[0].replace
  820.    (
  821.     Re
  822.     , function($0,$1)
  823.     {
  824.      if($1!='')iTime+=1;
  825.     }
  826.    );
  827.    return iTime;
  828.   } // end function fStringGetTimes 
  829.  
  830.   function fUnshiftString(Source, sForUnshift)
  831.   {// shawl.qiu code : return string
  832.    var bString = false;
  833.    if(Source.constructor==String)
  834.    {
  835.     Source = [Source];
  836.     bString = true;
  837.    }
  838.    Source[0] = Source[0]
  839.     .replace
  840.     (
  841.      /^([/s/S])/g
  842.      ,sForUnshift+"$1"
  843.     );
  844.    Source[0] = Source[0]
  845.     .replace
  846.     (
  847.      //n([/s/S])/g
  848.      ,"/n"+sForUnshift+"$1"
  849.     );
  850.     
  851.    if(bString)
  852.    {
  853.     return Source[0];
  854.    } 
  855.   } // end function fUnshiftString(Source, sForUnshift)
  856.   
  857.   function fClearSpace(Source)
  858.   {// shawl.qiu code : return string
  859.    var bString = false;
  860.    if(Source.constructor==String)
  861.    {
  862.     Source = [Source];
  863.     bString = true;
  864.    }
  865.    Source[0] = Source[0]
  866.     .replace
  867.     (
  868.      /^/s+|/s+$/g
  869.      ,""
  870.     );
  871.    Source[0] = Source[0]
  872.     .replace
  873.     (
  874.      //n/s+/g
  875.      ,"/n"
  876.     );
  877.    Source[0] = Source[0]
  878.     .replace
  879.     (
  880.      //s*?/n/g
  881.      ,"/n"
  882.     );
  883.     
  884.    if(bString)
  885.    {
  886.     return Source[0];
  887.    } 
  888.   } // end function fClearSpace
  889.   
  890.   function fStringSpace(nStr, nTime)
  891.   {
  892.    var nLen=arguments.length;
  893.    if(nLen===0)
  894.    {
  895.     nStr='&nbsp;'
  896.     nTime=2;
  897.    }
  898.    
  899.    if(nLen==1)
  900.    {
  901.     nStr+='&nbsp;';
  902.     nTime=2;
  903.    }
  904.    return new Array(nTime+1).join(nStr);
  905.   } // end function fStringSpace
  906.   
  907.   function fGetAu()
  908.   {
  909.    return Au;
  910.   }
  911.   
  912.   function fClearRepeatLine(sSource)
  913.   {// shawl.qiu code : return string
  914.    return sSource.replace(//n[/s]*/n/g, "/n");
  915.   } // end function fClearRepeatLine
  916.   
  917.   function fStringTrim(Source, bLine)
  918.   {// shawl.qiu code : return string
  919.    var bString = false;
  920.    if(Source.constructor==String)
  921.    {
  922.     Source = [Source];
  923.     bString = true;
  924.    }
  925.    
  926.    if(!bLine)
  927.    {
  928.     Source[0] = Source[0].replace(/^/s+|/s+$/g, '');
  929.    }
  930.    else
  931.    {
  932.     Source[0] = Source[0].replace(/^[^/n/S]*?/n|/s+$/g, '');
  933.    }

  934.    if(bString)
  935.    {
  936.     return Source[0];
  937.    } 
  938.   } // end function fStringTrim(Source)

  939.   //------------------------------------end private method
  940.  } // shawl.qiu code
  941.  //---------------------------------end class StyleEngine()---------------------------------//
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值