UI 文件雏形...Styler.js // shawl.qiu JavaScript Document
 /*-----------------------------------------------------------------------------------*\
  * shawl.qiu 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 Styler class ";
 Au.Version = "v1.0";
 Au.Name = "shawl.qiu";
 Au.Email = "[email protected]";
 Au.Blog = "http://blog.csdn.net/btbtd";
 Au.CreatedDate = "2007-7-31";
 Au.Update = {};
 Au.Update["1"] = "";
  //---------------end about
  
  var This = this;
  
  var Main = {};
   Main.Id = "StylerId";
   Main.Element = null;
   
  var Engine = null;
  
  var GenreSelect = {};
   GenreSelect.Id = Main.Id+"GenreSelect";
   GenreSelect.Element = null; 
   GenreSelect.Default = "CLike"; //CLike|BasicLike
   
  var Container = {};
   Container.Len = 4;
   Container.IdPrefix = Main.Id+"Container";
   Container.Set = [];
   Container.Init = false;
   
  var Textarea = {};
   Textarea.Id = Main.Id+"TextArea.Id";
  //------------------------------------end private variable
  
  //------------------------------------begin public method
  this.Get = {};
  this.Get.Au = fGetAu;
  
  this.Set = {};
  this.Set.Main = fSetMain;
  this.Set.Engine = fSetEngine;
  this.Set.Container = fSetContainer;
  this.Set.GenreSelect = fGenreSelect;
  
  this.Go = fGo;
  //------------------------------------end public method
 
  //------------------------------------begin private method
  function fGenreSelect(sId, sDefaultSelect, sLbl)
  {
   if(!sId) sId = GenreSelect.Id;
   if(!sLbl) sLbl = "<b>流派:</b> ";
   if(sDefaultSelect&&sDefaultSelect!="") GenreSelect.Default = sDefaultSelect;
   
   var Sle = document.createElement("select");  
    Sle.id = sId;
    
   
   switch(GenreSelect.Default)
   {
    case "CLike":
     fAddOption(Sle, "类C", "CLike", false, false);
     fAddOption(Sle, "类Basic", "BasicLike", false, false);
     break;
     
    case "BasicLike":
     fAddOption(Sle, "类Basic", "BasicLike", false, false);
     fAddOption(Sle, "类C", "CLike", false, false);
     break;
     
    default:
     fAddOption(Sle, "类C", "CLike", false, false);
     fAddOption(Sle, "类Basic", "BasicLike", false, false);
     break;
   }
    
   Container.Set[0].innerHTML = sLbl;
   Container.Set[0].appendChild(Sle);
   GenreSelect.Element = document.getElementById(sId);
  }
  
  function fAddOption(sle, text, value, defaultSelected, selected)
  {// shawl.qiu script
   if(!defaultSelected) defaultSelected = false;
   if(!selected) selected = false;
   sle.options[sle.options.length] = new Option(text, value, defaultSelected, selected);
  } // end function fAddOption
  
  function fSetContainer(OrderAr)
  {
   if(!Container.Init)
   {
    var Count = 0;
    var TempId = "";
   
    while(Count<Container.Len)
    {
     TempId = Container.IdPrefix+Count;
     
     var Div = document.createElement("div");
     Div.id = TempId;
     
     Main.Element.appendChild(Div);
     
     Container.Set[Count] = document.getElementById(TempId);
     
     Count++;
    }
    Container.Init = true;
   } 
   
   if(OrderAr.constructor==Array&&OrderAr.length==Container.Len)
   {
    var Len = OrderAr.length;
    var Index = 0;
    OrderAr.reverse();
    
    while(--Len>-1)
    {
     Index = OrderAr[Len];
     
     Main.Element.removeChild(Container.Set[Index]);
     Main.Element.appendChild(Container.Set[Index]);
    }
   }
  } // end function fSetContainer
  
  function fSetMain(sId)
  {
   Main.Element = fGetObj(sId, "无法获得主域!");
  }
  
  function fSetEngine(EngineClass)
  {
   Engine = EngineClass;
   if(Engine == null) throw new Error("风格引擎不能为空!");
  }
  
  function fGetObj(sId, sMsg)
  {// shawl.qiu code : return HTMLElement
   if(!sMsg) sMsg = "无法获得对象!";
   var Obj = null;
   
   switch(typeof(sId)+"")
   {
    case "string":
     Obj = document.getElementById(sId);
     break;
     
    case "object": 
     Obj = sId;
     break;
   }
   
   if(Obj==null)
   {
    throw new Error(sMsg);
   }
   
   return Obj;
  } // end function fGetObj(sId, sMsg)
  
  function fRandomLetter(iLen, sCase)
  {// shawl.qiu code : return strings
   var TextAr = [];
   var ReturnAr = [];
   var UpAr = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S',
    'T','U','V','W','X','Y','Z'];
   var LwAr = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t',
    'u','v','w','x','y','z'];
   var DigAr = [0,1,2,3,4,5,6,7,8,9];
   switch(sCase)
   {
    case 'upper': 
     TextAr=UpAr; 
     break;
     
    case 'lower': 
     TextAr=LwAr; 
     break;
     
    case 'letter': 
     TextAr=UpAr.concat(LwAr); 
     break;
     
    default:
     TextAr=UpAr.concat(LwAr, DigAr);
     break;
   }
   var Len = TextAr.length-1;
   
   while(--iLen>-1)
   {
    ReturnAr.push(TextAr[fRandomBy(0, Len)]);
   }
   
   return ReturnAr.join("");
   
  
   function fRandomBy(under, over)
   {// shawl.qiu script
    switch(arguments.length)
    {
     case 1: return parseInt(Math.random()*under+1);
     case 2: return parseInt(Math.random()*(over-under+1) + under);
     default: return 0;
    } // end switch
   } // end function fRandomBy
   
  } // end function fRandomLetter
  
  function fGo()
  {
   Container.Set[1].innerHTML = "选项:<br/> ";
   Container.Set[2].innerHTML = "2";
   Container.Set[3].innerHTML = "内容:<br/>";
  } // end function fGo
  
  function fGetAu()
  {
   return Au;
  }
  //------------------------------------end private method
 } // shawl.qiu code
//---------------------------------end class Styler()---------------------------------//

解决方案 »

  1.   

    调用文件雏形...<div id="StylerId">
    </div>
    <script type="text/javascript" src="Styler.js"></script>
    <script type="text/javascript" src="StyleEngine.js"></script>
    <script type="text/javascript">
    //<![CDATA[
     var ser = new Styler();
      
      //function fSetMain(sId)
      ser.Set.Main("StylerId");
      
      //function fSetEngine(EngineClass)
      ser.Set.Engine(new StyleEngine());
      
      //function fSetContainer(OrderAr)
      ser.Set.Container([0, 1, 2, 3]);
      
      //function fGenreSelect(sId, sDefaultSelect, sLbl)
      ser.Set.GenreSelect("StylerIdGenreSelect", "CLike", "<b>流派:</b> ")
      
      ser.Go();
      
      ser = null;
    //]]>
    </script>
      

  2.   

    代码风格排版引擎 没看明白,什么意思?我那个eval的贴,你还没回哪~呵呵
      

  3.   

    风格?
    嘿嘿。。我那个JS的转义注释正则引号处理的自我感觉还不错。。http://community.csdn.net/Expert/topic/5626/5626541.xml?temp=.859585
    因为不想在做具体的处理了。。效率很慢了已经。。T_T如果快的话还得改布局。。就没在写写去
      

  4.   

    曾经回复过一个。给你理论:D正则,引号,注释 三种情况这些只需要从开头分析出是哪类,然后一直匹配到结尾。。匹配过程中忽略所有有可能错误导致结束的东西。引号。。
    只需要判断结束前不是转义和双转义注释也类似引号
    然后就是正则。。正则稍微麻烦一些。。
    需要和注释和除号同时考虑。。从/开始判断。。下一个字符和前面的字符决定它是什么。。下把除号排除。。
    排除除号只需要分析前面字符是否是 /[\w\)\]]\s*$/ 如果匹配。则以除号罪判决死刑然后还剩单/多行注释这两个则判断第二个字符即可因为
    /*...
    //...这样则正则显然都是错误的式子所以这样分析就可以判断出这三种情况。。
      

  5.   

    eval的事不麻烦了,我基本搞定了,排版不一定要在web上做嘛,VIM几个键就搞定了呵呵。
      

  6.   

    晕...现在工具多的是, 要的是心得...唉....
    弄成UI和Engine 主要是想弄弄
    结构复杂度和算法复杂度...
    但要用现成工具倒是多的是...而且也不只是缩进那么简单....
    你自己弄一下就知道了...
      

  7.   

    对lz说的主题不感兴趣,但是斗地主却感兴趣,你在哪玩的?联众 or QQ
    切磋一下
    呵呵
      

  8.   

    楼上你小心哦.. 俺可是超级大负翁...
    中国在线(维基百科||btbtd)..........
      

  9.   

    还是忍不住问楼主,eval那事就FF和IE两解决方案,你说费时间,我找到的办法没发现费时间啊,加起来才两句话。
    难道楼主“另辟蹊径”?
      

  10.   

    哦...也许, 其实可以不用Eval就实现...
    你直接 document.write() 文件, 不过这涉及到优先级问题...所以说起来非常麻烦...
      

  11.   

    遇到问题了...见: 
    http://files.myopera.com/btbtd/javascript/class/Styler/Beta/Styler.htm如何解决 像 a1 与 a2 这样并列位置的显示?问题已知方法 为 递归再递归, 不过效率问题明显不乐观, 需要 n^n 次....
      

  12.   

    不知所云,帮你up下:D
    闪了。
      

  13.   

    天书解决法....{
    a
    {
    b
    {
    b0.1
    {
    b1
    }
    c
    }
    d
    }
    d1
    {
    a1
    }
    {
    a2
    }
    a0.1
    }{
    a
    {
    b
    {
    c
    {
    d
    }
    }
    }
    }
    0000111 01011 00001111
    node 1: 0+4 = &1;
    0 = 4 times
    4-1 = 3 times5 + x = &1
    5 + x + x1 = &1
    5 + x + x1 + x2 = &1node 1: 
    0 -- 5 + x + x1 + x2...
      

  14.   

    呵呵, 是的, 代码缩进....
    看起来很简单, 不过弄起来确实不容易...
    不过方法已经有了, 类似 huffman jpeg 算法....
      

  15.   

    这鬼东西真TM复杂...有得弄...<script type="text/javascript">
    //<![CDATA[
     var Nodes = "00001110101100001111";
     
     var Pos = [];
     var iStart = 0;
     var iOver = Nodes.length;
     
     var sLeft = "0";
     var sRight = "1";
     
     document.write("Nodes: ", Nodes, "<p/>");
     
     document.write("Nodes.indexOf(sLeft, iStart): ", Nodes.indexOf(sLeft, iStart), "<br/>");
      while(iStart<iOver)
     {
      var LeftPos = Nodes.indexOf(sLeft, iStart);
      if(LeftPos<0) break;
      
      var RightPos = Nodes.indexOf(sRight, LeftPos);
      
      var TempStr = Nodes.substring(LeftPos, RightPos+1);
      var iLeftOccur = fStrGetTimes(TempStr, sLeft, true);
      var iRightOccur = fStrGetTimes(TempStr, sRight, true);
      
      if(iLeftOccur-iRightOccur!==0)
      {
       var Times = iLeftOccur - iRightOccur;
       
       RightPos = fGetNextPos(Nodes, Times, LeftPos, RightPos+1, sLeft, sRight);
      }
      
      document.write("LeftPos: ", LeftPos, "<br/>");
      document.write("RightPos: ", RightPos, "<br/>");
      document.write("TempStr: ", TempStr, "<br/>");
      document.write("iLeftOccur: ", iLeftOccur, "<br/>");
      document.write("iRightOccur: ", iRightOccur, "<br/>");
      //document.write("MyTempTimes: ", MyTempTimes, "<br/>");
      //document.write("iOccur: ", iOccur, "<br/>");
      document.write("<p/>");
      
      iStart = RightPos+1;
     }
     
     function fGetNextPos(sNodes, Times, LeftPos, RightPos, sLeft, sRight)
     {
      if(Times<1) return RightPos;
      for(var i=0; i<Times; i++)
      {
       RightPos = sNodes.indexOf(sRight, RightPos);
       document.write(RightPos, "<br/>"); 
      }
      var TempStr = sNodes.substring(LeftPos, RightPos+1);
      var iLeftOccur = fStrGetTimes(TempStr, sLeft, true);
      var iRightOccur = fStrGetTimes(TempStr, sRight, true);
      
      Times = iLeftOccur-iRightOccur;
      
      if(Times!==0)
      {
       RightPos = arguments.callee(sNodes, Times, LeftPos, RightPos+1, sLeft, sRight);
      }
      return RightPos;
     }
     
      function fStrGetTimes(sSrc, sMatch, bCharacter){
      var iTime=0;
      if(!bCharacter)
       var re=new RegExp('\\b('+sMatch+')\\b', 'gi');
      else var re=new RegExp('('+sMatch+')', 'gi');
        sSrc.replace(re, function($0,$1){
       if($1!='')iTime+=1;
      });
        return iTime;
     } // end function fStrGetTimes // shawl.qiu code
    //]]>
    </script>
      

  16.   

    哈哈, 算法搞定...
    就差递归组合...
    <script type="text/javascript">
    //<![CDATA[
     var Nodes = "0000111010110000111101010101010011000111";
     
     var Pos = [];
     var iStart = 0;
     var iOver = Nodes.length;
     
     var sLeft = "0";
     var sRight = "1";
     
     document.write("Nodes: ", Nodes, "<p/>");
     
     document.write("Nodes.indexOf(sLeft, iStart): ", Nodes.indexOf(sLeft, iStart), "<br/>");
      while(iStart<iOver)
     {
      var LeftPos = Nodes.indexOf(sLeft, iStart);
      if(LeftPos<0) break;
      
      var RightPos = Nodes.indexOf(sRight, LeftPos);
      
      var TempStr = Nodes.substring(LeftPos, RightPos+1);
      var iLeftOccur = fStrGetTimes(TempStr, sLeft, true);
      var iRightOccur = fStrGetTimes(TempStr, sRight, true);
      
      if(iLeftOccur-iRightOccur!==0)
      {
       var Times = iLeftOccur - iRightOccur;
       
       RightPos = fGetNextPos(Nodes, Times, LeftPos, RightPos+1, sLeft, sRight);
      }
      TempStr = Nodes.substring(LeftPos, RightPos+1);
      iLeftOccur = fStrGetTimes(TempStr, sLeft, true);
      iRightOccur = fStrGetTimes(TempStr, sRight, true);
      document.write("LeftPos: ", LeftPos, "<br/>");
      document.write("RightPos: ", RightPos, "<br/>");
      document.write("TempStr: ", TempStr, "<br/>");
      document.write("iLeftOccur: ", iLeftOccur, "<br/>");
      document.write("iRightOccur: ", iRightOccur, "<br/>");
      //document.write("MyTempTimes: ", MyTempTimes, "<br/>");
      //document.write("iOccur: ", iOccur, "<br/>");
      document.write("<p/>");
      
      iStart = RightPos+1;
     }
     
     function fGetNextPos(sNodes, Times, LeftPos, RightPos, sLeft, sRight)
     {
      if(Times<1) return RightPos;
      for(var i=0; i<Times; i++)
      {
       RightPos = sNodes.indexOf(sRight, RightPos);
       document.write(RightPos, "<br/>"); 
      }
      var TempStr = sNodes.substring(LeftPos, RightPos+1);
      var iLeftOccur = fStrGetTimes(TempStr, sLeft, true);
      var iRightOccur = fStrGetTimes(TempStr, sRight, true);
      
      Times = iLeftOccur-iRightOccur;
      
      if(Times>0)
      {
       RightPos = arguments.callee(sNodes, Times, LeftPos, RightPos+1, sLeft, sRight);
      }
      return RightPos;
     }
     
      function fStrGetTimes(sSrc, sMatch, bCharacter){
      var iTime=0;
      if(!bCharacter)
       var re=new RegExp('\\b('+sMatch+')\\b', 'gi');
      else var re=new RegExp('('+sMatch+')', 'gi');
        sSrc.replace(re, function($0,$1){
       if($1!='')iTime+=1;
      });
        return iTime;
     } // end function fStrGetTimes // shawl.qiu code
    //]]>
    </script>
      

  17.   

    倒, 貌似就我一个对这个感兴趣....没关系..
    当笔记用...算法完全实现了...现在就差使用...
    <script type="text/javascript">
    //<![CDATA[
     var Nodes = "xxxxxx{{{{}}}{}{}}{{{{}}}}{}{}{}{}{}{{}}{{{}}}{";
      
     var PATTERNBEGIN= "PATTERNBEGIN";
     var PATTERNEND = "PATTERNEND"; 
     
     var LevelAr = [0];
      
      Nodes = fMakeMarker(Nodes, PATTERNBEGIN, PATTERNEND, LevelAr, "x", "{", "}", true);
      document.write("LevelAr: ", LevelAr, "<br/>");
      document.write("Nodes: ", Nodes, "<p/>");
      
     function fMakeMarker
     (
      Nodes
      , PATTERNBEGIN
      , PATTERNEND
      , LevelAr
      , sIdPostfix
      , sLeft
      , sRight
      , bDebug
     )
     { 
      if(Nodes.indexOf(sLeft)<0||Nodes.indexOf(sRight)<0) return Nodes;
      
      var Debug = bDebug;
      var Pos = [];
      var iStart = 0;
      var iOver = Nodes.length;
      
      var TEMPPATTERNBEGIN = PATTERNBEGIN+LevelAr[0]+sIdPostfix;
      var TEMPPATTERNEND = PATTERNEND+LevelAr[0]+sIdPostfix;
      
      if(Debug)
      {
       document.write("Nodes: ", Nodes, "<p/>");
       document.write("Nodes.indexOf(sLeft, iStart): ", Nodes.indexOf(sLeft, iStart), "<br/>");
      }
      
      while(iStart<iOver)
      {
       var LeftPos = Nodes.indexOf(sLeft, iStart);
       if(LeftPos<0) break;
       
       var RightPos = Nodes.indexOf(sRight, LeftPos);
       
       var TempStr = Nodes.substring(LeftPos, RightPos+1);
       var iLeftOccur = fStrGetTimes(TempStr, sLeft, true);
       var iRightOccur = fStrGetTimes(TempStr, sRight, true);
       
       if(iLeftOccur-iRightOccur!==0)
       {
        var Times = iLeftOccur - iRightOccur;
        
        RightPos = fGetNextPos(Nodes, Times, LeftPos, RightPos+1, sLeft, sRight);
       }
       
       if(RightPos<0) break;
       
       var TempNodes = [];
        TempNodes.push(Nodes.substring(0, LeftPos));
        TempNodes.push(TEMPPATTERNBEGIN);
        TempNodes.push(Nodes.substring(LeftPos+1, RightPos));
        TempNodes.push(TEMPPATTERNEND);
        TempNodes.push(Nodes.slice(RightPos+1));
        
        Nodes = TempNodes.join("");
        var Span = TEMPPATTERNBEGIN.length + TEMPPATTERNBEGIN.length-2;
        iOver+=Span;
        RightPos+=Span-2;
        
       TempStr = Nodes.substring(LeftPos, RightPos+1);
       iLeftOccur = fStrGetTimes(TempStr, sLeft, true);
       iRightOccur = fStrGetTimes(TempStr, sRight, true);
        
       if(Debug)
       { 
        document.write("TempNodes: ", TempNodes, "<br/>");
        document.write("LeftPos: ", LeftPos, "<br/>");
        document.write("RightPos: ", RightPos, "<br/>");
        document.write("TempStr: ", TempStr, "<br/>");
        document.write("iLeftOccur: ", iLeftOccur, "<br/>");
        document.write("iRightOccur: ", iRightOccur, "<br/>");
        document.write("<p/>");
       }
       
       iStart = RightPos+1;
      }
      
      LevelAr[0] = LevelAr[0]+1;  if(Nodes.indexOf(sLeft)>-1&&Nodes.indexOf(sRight)>-1)
      {  
       Nodes = 
        arguments.callee
        (
         Nodes
         , PATTERNBEGIN
         , PATTERNEND
         , LevelAr
         , sIdPostfix
         , sLeft
         , sRight
         , bDebug
        );
      }
      
      return Nodes;
     }
     
     function fFatalError(sMsg)
     {
      if(!sMsg) sMsg = "发重致命错误.";
      throw new Error(sMsg);
     }
     
     function fGetNextPos(sNodes, Times, LeftPos, RightPos, sLeft, sRight)
     {
      if(Times<1) return RightPos;
      for(var i=0; i<Times; i++)
      {
       RightPos = sNodes.indexOf(sRight, RightPos);
      }
      var TempStr = sNodes.substring(LeftPos, RightPos+1);
      var iLeftOccur = fStrGetTimes(TempStr, sLeft, true);
      var iRightOccur = fStrGetTimes(TempStr, sRight, true);
      
      Times = iLeftOccur-iRightOccur;
      
      if(Times>0)
      {
       RightPos = arguments.callee(sNodes, Times, LeftPos, RightPos+1, sLeft, sRight);
      }
      return RightPos;
     }
     
      function fStrGetTimes(sSrc, sMatch, bCharacter){
      var iTime=0;
      if(!bCharacter)
       var re=new RegExp('\\b('+sMatch+')\\b', 'gi');
      else var re=new RegExp('('+sMatch+')', 'gi');
        sSrc.replace(re, function($0,$1){
       if($1!='')iTime+=1;
      });
        return iTime;
     } // end function fStrGetTimes // shawl.qiu code
    //]]>
    </script>
      

  18.   

    我还是没看懂。。这个意思?<script type="text/javascript">
    var parse = function (str, obj) {
    var wc = { val : [], num : [] }, value, i;
    for (i = 0 ; i < str.length ; i ++) {
    value = wc.val[i] = str.charAt(i);
    if (value == "{") {
    wc.num.push(i);
    } else if (value == "}") {
    obj.innerHTML += wc.val.slice(wc.num.pop()).join("") + "<br \/>";
    }
    }
    };
    window.onload = function () {
    parse("xxxxxx{{{{}}}{}{}}{{{{}}}}{}{}{}{}{}{{}}{{{}}}{", wc);
    };
    </script>
    <div id="wc"></div>
      

  19.   

    /tx
    是你总弄大一大大大堆的code压人谁敢看啊。
      

  20.   

    哈哈...我可没这意思, 不过要解决某种特殊问题还是要使用特殊方法...这不...实现了..
    http://shawl.qiu.googlepages.com/Styler.htm而且效率也很X比...
    后面的事情现在应该跟切菜一样容易了...
      

  21.   

    发现问题:原代码
    function ChangeSel()
    {
    var chk = document.getElementById("chkSelAll");
    var table = document.getElementById("dgFreeUpload");
    var all = true;chk.checked = all;
    }
    执行后
     function ChangeSel()
     {
      var chk = document.getElementById(SQCLIKESTRINGMARKER0);
      var table = document.getElementById(SQCLIKESTRINGMARKER1);
      var all = true;
      chk.checked = all;
     }"chkSelAll" 怎么变成 SQCLIKESTRINGMARKER0了
      

  22.   

    ...好了, 弄了个体验版...
    http://shawl.qiu.googlepages.com/Styler.htm
      

  23.   

    呼呼 ....v1.0 预览版完成...
    http://files.myopera.com/btbtd/javascript/class/Styler/Beta/Styler_v1-0.htm1.0 完全版这一两天内完成...
    1.1 实现 css
    1.2 实现 xml
    1.3 实现 为 basic
      

  24.   

    v1.0 完全版完成提供下载:
    http://files.myopera.com/btbtd/javascript/class/Styler/Styler_v1-0.7z预览:
    http://files.myopera.com/btbtd/javascript/class/Styler/Styler_v1-0.htm
      

  25.   

    楼主说的,是不是“源代码高亮”?
    源代码高亮,我最喜欢Editplus的,认为比其他编辑器实现的都要更好、更漂亮,只是不支持折叠。