Home > JS Code | Javascript AJAX CSS > Javascript Code Prettifier (Google Gadget)

Javascript Code Prettifier (Google Gadget)


this gadget highlights syntax code of javascript just copy and paste. no necessary to set up js file. it's easy to use.

ガジェットの貼り付けコード(Upgraded version)


Javascript の Syntax Highlighter ガジェットが完成しました。

このツールの特徴は、外部 js ファイルなどのセッティングなどを必要とせず、Javascript のコードをコピーして貼り付けるだけです。グローバル変数、ファンクション名、CSSのクラス名なども毎回違う名前になるようにしてますので、ブログなどに何ヶ所もソースコードを貼り付けても名前がかぶることがありません。

正規表現がなければ大きな問題もなくソースコードはもっとコンパクトで解りやすく書けたのですが、複雑で少々粗めになってしまいました。いろんなタイプの正規表現が見られる prototype.js , jQuery.js でテストしてクリアしましたので綺麗に使えると思います。(下にサンプルページのリンクがあります)

Scroll Width & Height の初期設定値は600px、250px になっています。これはスクロールさせる範囲の大きさです。ページのサイズに合わせて変更できます。使用できる単位は、px, in, %, cm, mm, pc, pt です。

font ボタンで以下のfont-family に変更できます。
  1. "Arial,Helvetica,sans-serif"
  2. "Comic Sans MS"
  3. "Trebuchet MS,sans-serif"
  4. "Georgia,Times,sans-serif"


prototype.js(1.5.1)

jQuery.js(1.2.6)

ソースコードは「CONTINUE READING」の下に紹介しています。このソースコードはこのガジェットで作ったものです。スクロールサイズは、Scroll Width = 850px Height = 400px で設定しています。

1    
2    function $run(){
3    
4    var out=$id("D");            //output tab 
5    
6    var exp=$id("regular").value;      //select tag match, search, replace  
7    
8    var temp=newString(tt[N]);      // "A" to "D" tabs 
9    
10   var data=$id(temp).value;      // data is code in textarea 
11   
12   if(data=="") {out.value="no data"+parseInt(N+1); $cc(4); return;}
13   
14   var result="";
15   
16     switch(exp){
17         case"tag" : result=data.replace(/<\/?[^>]+>/gi," ").replace(/\n\s*/g,"\n")
18                           .replace(/^\s+|\s+$|\s+(?!\S)/g,"");  
19                    break;
20   
21         case"escape"  : result=data.replace(/&/g,"&amp;").replace(/</g,"&lt;")
22                               .replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039");
23                    break;
24   
25         case"unescape": result=data.replace(/&amp;/g,"&").replace(/&lt;/g,"<")
26                               .replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#039/g,"'");
27                    break;
28   
29         case"code": var Rnd=newString((Math.random().toFixed(5)).replace(/0\./,""));
30   
31               var SW=($id("wt").value).replace(/[\s\n]*/g,""); //scroll width 
32               var SH=($id("ht").value).replace(/[\s\n]*/g,""); //scroll height 
33   
34               // check start from integer and end with unit(px,%,in etc) 
35               if(!(/^\d+(px|%|in|cm|mm|pc|pt)$/.test(SW))) SW="600px"; 
36               if(!(/^\d+(px|%|in|cm|mm|pc|pt)$/.test(SH))) SH="250px";
37   
38               try{ var result=$code(data,Rnd);} catch(e){ out.value=e; $cc_n(4); return;} 
39   
40               var lines=result.split("\n"); 
41   
42                result='<div class="c2'+Rnd+'">';
43   
44               var code_1='<br /></div><div class="c1'+Rnd+'">';
45               var code_2='<br /></div><div class="c2'+Rnd+'">';
46               var code_s=code_1;
47   
48               var spaces="&ensp;&ensp;&ensp;&ensp;";
49   
50               for (var i=1; i<=lines.length; i++) { 
51                if(i==lines.length) {result+="<small>"+i+"</small>"+spaces+lines[i-1]+'<br /></div>'; break;}
52   
53                  result+="<small>"+i+"</small>"+spaces+lines[i-1]+code_s;
54   
55                  if((i+2)%2==1) code_s=code_2; else code_s=code_1;
56   
57                 if((i==9) || (i==99) || (i==999)) spaces=spaces.replace(/\&ensp\;/,"");
58               }
59   
60                var js=$id("js").value; //textarea 
61   
62                result=(js.replace(/<\<\<\!\-\-\>\>\>/g,Rnd).replace(/<<\!--w>>/,SW)
63                        .replace(/<<\!--h>>/,SH))+result.replace(/^\d/,'<div class="c2'+Rnd+'">1')+"</div>";
64                break;
65   
66         default: break;
67     }
68   out.value=result;
69   
70   if (data.length>=2000) { large=true; $cc_n(4); }
71   else $cc(4);
72   
73   delete data; delete result; //don't need this 
74   }
75   
76   /****************************************************************
77   
78    23 Sep. 2008 (C)samurai-logic.com
79   
80   
81    Code Prettifier
82   
83   ****************************************************************/
84   
85   function $code(str,rnd){
86   
87   /*--------------------------------------------------------------
88    str = string of javascript code
89    rnd = random 5 digits number for
90    name of temporary var, class,id and function name
91   ---------------------------------------------------------------*/
92   
93   js_key=/\b(?=(alert|array|arguments|Boolean|break|caller|callee|case|catch|class|confirm|const|constructor|continue|Date|default|delete|do|else|eval|false|final|finally|for|function|if|isFinite|isNaN|Math|NaN|new|null|Number|Object|parseFloat|parseInt|prompt|prototype|return|String|switch|this|throw|throws|toString|toExponential|toFixed|toPrecision|true|try|typeof|value|valueOf|var|void|while|with)(\W))/g;
94   
95   var key="<!-->>>";
96   
97   //replace \b to key(<!-->>>)just before keywords of javascript 
98   
99   str=str.replace(/\t/g,"      ").replace(js_key,key).replace(/&/g,"&amp;")+"\n";
100  
101  //.replace(/&ensp;/g,"&amp;ensp;").replace(/&gt;/g,"&amp;gt;").replace(/&lt;/g,"&amp;lt;")+"\n"; 
102  
103  var CODE  = '';            //CODE is string to modify code 
104  var arg   = -1;            //arg is selectors of key 
105  var pos = end = 0;      //pos = end = position of slice str 
106  var last=" ";            //last is char. before pos 
107  var temp="";            //temp 
108  
109  var spn ="<span style='color:";
110  var spn_c="<span class='";
111  var _col = "green;'>";
112  
113  var code_e='<br /></span>';
114  
115  var retrn = false; // for regexp "return /pat/.test()" 
116  
117  chr=/(\(|\=|\[|\:|\||\&|\!|\,)/;
118  
119  Exp=/\/[^\/]*([\s\,\;]*)((\,\s*(\"|\')|(e|h|t)\s*\(\s*\/)[\s\S]+|\/\/[\s\S]+|\/\*[\s\S]+|\s{2,}[\s\S]+|\s)\n*/;
120  
121      while (pos >= 0){
122        var cls = "</span>";
123        var key_q = str.charAt(pos);
124        var key_c = str.substr(pos,2);
125        var key_r = last + key_c;
126        var key_w = str.substr(pos,7);
127        
128        if (key_q=="'")            { arg = 0; pos++; }     //find pos of keyword ' 
129        elseif (key_q=='"')  { arg = 1; pos++; }     //find pos of keyword " 
130        elseif ((key_q=='/') && (key_c!="//") && (key_c!="/*") && ((chr.test(last) || (retrn))))
131                          { arg = 4; pos++; }     //find pos of keyword / 
132        elseif (key_c=="//") { arg = 2; pos+=2; }    //find pos of keyword // 
133        elseif (key_c=="/*") { arg = 3; pos+=2; }    //find pos of keyword /* 
134        elseif (key_w==key)  { arg = 5; pos+=8; }    // find pos of js_key (/<!-->>>/.test(key_w)) 
135        else                   { arg =-1; pos++; }
136  
137        if (arg>=0){      //if keyword is found 
138           if (arg==0)      { end = str.indexOf("'", pos); _col = spn+"#DC143C;'>"; }
139           elseif (arg==1) { end = str.indexOf('"', pos); _col = spn+"#DC143C;'>";}
140           elseif (arg==4) { end = str.indexOf("\n", pos);            // find end of line 
141                          temp=(str.substring(pos,end+2));      //temp start from pos to EOL 
142                          end = temp.search(Exp)+pos;  _col = spn+"#0000CD;'>"; //midnightblue 
143                          retrn=false;      //set retrn false 
144                         }
145           elseif (arg==2) { end = str.indexOf("\n", pos); pos--; 
146                         _col = spn+"green;'><small>";
147                           cls+="</small>\n";
148                        }
149           else      if (arg==3) { end = str.indexOf("*/", pos); pos--; end++; _col = spn+"green;'><small>";
150                          /*if(end==0)*/ cls+="</small>";
151                        }
152           else      /*if(arg==5)*/{ end = str.indexOf("\n", pos);            //find EOL 
153                          temp=str.substring(pos,end+2);            //+"\n"; 
154                          end = eval(temp.search(/[^\w\d]/)+pos-1); //search \W 
155                         _col = spn_c+"c5"+rnd+"'>"; 
156                          retrn = ((/return/.test(str.substring(pos-1,end+1))))? true:false;      
157                          } //if found keyword "return" then retrn is true 
158  
159           if (end <= 0) end=str.length-1;  end++; //in case end=-1 : end is length of str 
160  
161           var tmp=str.charAt(end-1); // store last char if code is not comments (except comments from code) 
162  
163           if((/[^\s\n]/.test(tmp)) && (arg>=5 || arg<=1)) { last=tmp;}
164  
165           if ((arg==3)) CODE+=_col + (str.substring(pos-1,end).replace(/<!-->>>/g,"").replace(/\n/g,"</small></span>\n<span style='color:green;'><small>"))+cls;
166  
167           else CODE += _col + (str.substring(pos-1,end).replace(/<!-->>>/g,"")
168  .replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\s/g,"&ensp;")) + cls;
169  
170           pos=end; cmt=false;  //at last, end up with pos=0 
171  
172        }else{ // else keyword is not found  
173  
174            if      (/\n/.test(key_q)) CODE += "\n"; 
175            elseif (/\s/.test(key_q)) CODE += "&ensp;";
176            elseif (/\t/.test(key_q)) CODE += "&ensp;&ensp;&ensp;&ensp;";
177            elseif (/\</.test(key_q)) CODE += "&lt;";
178            elseif (/\>/.test(key_q)) CODE += "&gt;";
179            else CODE += key_q; 
180  
181            if(/[^\s\n]/.test(key_q))last=key_q; //if key_q isn't \s nor \n then last=key_q 
182  
183            if(pos>=str.length) pos=-1; //if pos rearch eof 
184        }
185     }
186  
187    delete str;
188  
189    return(CODE);
190  }
191  

Comments:0

Comment Form

Home > JS Code | Javascript AJAX CSS > Javascript Code Prettifier (Google Gadget)

Return to page top