seni_chu.htmlのソース色分け表示

<!DOCTYPE HTML PUBLIC "-//W3C/DTD HTML 4.0 Frameset//EN">
<HTML>

<META HTTP-EQUIV="content-type" CONTENT="text/html;charset=SHIFT_JIS" >
<HEAD>
<TITLE>;と{}</TITLE>
<META NAME="robots" CONTENT="all">
<STYLE>

</STYLE>
</HEAD>
<SCRIPT language="JavaScript">
<!--
    var win1;

function sele(){
    win1 = window.open('','winnew','');
    win1.focus();
    win1.document.write('<!DOCTYPE HTML PUBLIC "-//W3C/DTD HTML 4.0 Frameset//EN">\n');
    win1.document.write('<HTML><BODY STYLE="font-family:\'MS ゴシック\'\" BGCOLOR=\"#ffffff\">\n');

    var rline="";
    var rlen=0;
    var chu_no=0;
    var lastsp=-1;
    var moji="";
    var moji_old="";

    // 階層による色の指定
    col = new Array("red","#ffbb00","yellow","lime","cyan","#bbbbff","#da70d6","#87ceeb","#ffa500","yellow","lime","cyan","#bbbbff");

    window.document.form1.indat.value;
    fname=window.document.form1.filename.value;
    win1.document.write('<FONT COLOR="#ef0000" SIZE="large"><B>');
    
    idata=window.document.form1.indat.value;
    cginame=window.document.form1.filename.value;

    if(cginame==""){cginame="(ファイル名は未入力です)";}

    win1.document.write(cginame+'のソース色分け表示<BR>');
    win1.document.write('</B></FONT><HR>\n');
    datlen=idata.length;

    if(idata.charAt(datlen-1)!="\n"){
        idata=idata+"\r\n";
    }

    datlen=idata.length;

    for(i=0;i<datlen;i++){
        moji=idata.charAt(i);


        //一行取り出し
        if(moji != "\n"&& moji != "\r"){
            rline=rline+moji;
            rlen++;
        }else if(moji != '\r'){

            //取り出した行の処理
            //行末のスペースをトリムする
            for(j=rlen-1;j>-1;j--){
                if(rline.charAt(j) != " "){
                    rlen=j+1;
                    rline=rline.substring(0,j+1);
                    break;
                }
            }

            //表示のための作業をする
            rline=tagress(rline,rlen);
            rlen=rline.length;
            moji=rline.charAt(rlen-1);

            if(moji=="{"||moji=="}"||moji==";"){
                //黒文字のグループ

                //行頭から"}"を検索する
                changed=rline.indexOf("}");
                if(changed != -1){

                    rline_new="";
                    for(j=0;j<rlen;j++){
                        moji2=rline.charAt(j);

                        if(moji2=="}"){
                            chu_no--;
                            if(chu_no<0){chu_no=0;}
                            rline_new=rline_new+BG(moji2,col[chu_no]);

                        }else if(moji2=="\t"){
                            rline_new=rline_new+moji2;

                        }else if(rline.substring(j,j+5)=="&nbsp"){
                            rline_new=rline_new+"&nbsp";
                            j=j+4;

                        }else{
                            break;
                        }
                    }
                    rline=rline_new+rline.substring(j,rlen);
                    rlen=rline.length;
                    moji=rline.charAt(rlen-1);
                }

                //行末の"{"をチェックする
                if(moji=="{"){
                    rline=rline.substring(0,rlen-1)+BG(moji,col[chu_no]);
                    chu_no++;
                }
                //行末の"}"をチェックする
                else if(moji=="}"){
                    changed=rline.indexOf("{");
                    if(changed != -1){
                        rline=rline.substring(0,changed) + BG("{",col[chu_no]) + rline.substring(changed+1,rlen-1) + BG(moji,col[chu_no]);

                    }else{
                        chu_no--;
                        if(chu_no<0){chu_no=0;}
                        rline=rline.substring(0,rlen-1)+BG(moji,col[chu_no]);
                    }
                }

            }else{
                //青文字グループ
                    rline='<FONT COLOR="blue">'+rline+'</FONT>';
            }
            //画面出力
            win1.document.write(rline+"<BR>\n");

            //行データのイニシャライズ
            rline="";
            lastsp=-1;
            rlen=0;
        }
    moji_old=moji;
    //fornextループ閉じ
    }
    idata="";
    win1.document.write("<HR>");
}
//===========================================================================================================
function tagress(x,rlen){
//&、<,>を表示できる形に整える。
var i=0;
var moji="";
var y="";
    for(i=0;i<rlen;i++){
        moji=x.charAt(i);
        if(moji=='&'){moji='&amp';}
        else if(moji=="<"){moji='&lt';}
        else if(moji==">"){moji='&gt';}
        else if(moji==' '){moji='&nbsp';}
        y=y+moji;
    }
    return y;
}
//===========================================================================================================
function BG(x,colset){
   //文字列xの背景色をcolsetに指定する
    return '<SPAN  STYLE="background-color:'+colset+'">'+x+'</SPAN>';;
}
//===========================================================================================================
function WinClose(){
    //出力用画面を閉じる
    win1.close();
}
//-->
</SCRIPT>
<!---------------------------------------------------------------------------------------------->
<BODY BGCOLOR="#FFFFC0" STYLE="line-height:170% padding:4mm; BGPROPERTIES="fixed"">
<DIV ALIGN="right" STYLE="font:normal normal bold small normal normal">
<A HREF="../index.html" TARGET="_top">HOMEに戻る</A></DIV>
<!---------------------------------------------------------------->
<H4 STYLE="color:#0000ef;border:thin #ff0000 solid">セミコロンと注括弧 (JavaScriptのページ)</H4>
C++,JAVA,JavaScript,Perlなど行末がセミコロンや中括弧で終わるプログラム言語のソースを読み込んで、
セミコロン&中括弧意外で終わる行と、中括弧の色分け表示をするツールです。
<BR><BR>
<A HREF="out_sampl1.html" TARGET="new_win">出力例(このファイルのソースの自己チェックです!)</A><BR><BR>
<FORM NAME="form1">
ファイルの名前
<INPUT TYPE="text" NAME="filename"><BR>
ソースのペースト<BR>
<TEXTAREA WRAP=VIRTUAL COLS=80 ROWS=15 NAME="indat" >
</TEXTAREA><BR>
<INPUT TYPE="button" VALUE="色分け表示" onClick="sele()"> 出力用Windowの一番下に追加されます。<BR><BR>
<INPUT TYPE="button" VALUE="出力用Windowを一旦閉じる" onClick="WinClose()"><BR>
</FORM><HR>
<使い方><BR>
上の段の枠内に、JavaScriptやPerlで書かれたソースをコピー&ペーストして、読み込みボタンをクリックしてください。
出力用のWindowが開いて、セミコロンや注括弧で終わっていない行を青で表示します。
<BR><BR><BR>
中括弧が認識できるのは、
<UL>
1.行末にある"{"または"}"<BR>
2.行末に"}"が有った場合は先頭から"{"を一つだけ検索して、見つかった場合ペアとみなします。<BR>
3."}else{" 等行頭の"}"<BR>
4."}}}}"など、一行でいくつかの括弧をまとめて閉じている場合。<BR>
</UL>
認識できないものは、
<UL>
1.if(……){……; など、行の中間に入ってしまった中括弧<BR>
2.……};#…… など、コードの後ろに注釈文が付く場合
</UL>
などです。このツールを使用する場合は改行などをいれて、このような記述を避けるようにして下さい。
<BR><BR><BR>
尚、色分けしたソースをそのまま印刷したい場合は、インターネットエクスプローラーの場合は、<BR>
[ツール]→[インターネットオプション]→[詳細設定]→[印刷]→[背景の色とイメージを印刷する]、をチェック<BR>
すれば文字の背景色まで印刷できます。終了後には元に戻して置いてくださいませ。<BR><BR>
<FONT COLOR="ef0000"><B>※ アクセス拒否のエラーが出た場合、前回このプログラムから開いた出力用Windowに別のURLが表示されている可能性が有ります。
そのWindowを閉じても問題がなければ、[出力用Windowを一旦閉じる]をクリックしてから[サブルーチン抜書き]をクリックしてみてください。</B></FONT><BR><BR>

<FONT COLOR="ef0000"><B>※ 大きなファイルをコピー&ペーストしようとすると、コピー&ペーストに時間がかかることがあります。
</B></FONT>
</BODY>
</HTML>