他言語に対応する (VC++, C++Builder, Java, JavaScript)

これまで、「VC#」のソースを HTML化することを考えてきたが、
VC++」「C++Builder」「Java」「JavaScript」など、
「中括弧族」と呼ばれる言語は全て、予約語の定義ファイルを
変えるだけで対応できそうである。

そこで言語タイプを、実行時引数として、以下のように指定する。

VC#.NET "cs7"
VC++6 "vc6"
VC++.NET "vc7"
VJ++6 "vj6"
VJ#.NET "vj7"
Java "java"
JavaScript "js"
C++Builder "bcb"

前もって、それぞれの言語に対応した 予約語ファイル "key.txt" と
演算子ファイル "ope.txt" を、言語タイプごとのフォルダに
配置しておく。
つまり、VC#.NET用の予約語ファイルは、"\cs7\key.txt"、
演算子ファイルは、"\cs7\ope.txt"、
VC++6用の予約語ファイルは、"\vc6\key.txt"、
演算子ファイルは、"\vc6\ope.txt"。

「Token」を切り出すクラス「TokenRaeder」に言語タイプを
渡して初期化すると、「TokenRaeder」は、
"\言語タイプ\key.txt"、"\言語タイプ\ope.txt"を読んで、
予約語コレクション、演算子コレクションを生成する。


//ソースファイルを読んで、ソース部を出力する
Reader source = new Reader("Form1.cs");
tohtml(source, writer, args[0]);
source.Close();
source = null;


//*********************************************************************
// HTML に書式化して出力
//*********************************************************************
public void tohtml(Reader reader, Writer writer, string langType)
{
TokenReader tokenReader = new TokenReader(reader, langType);
TokenWriter tokenWriter = new TokenWriter(writer);

//ファイルの終わりまで、1区切りずつ読んで
Token token;
while((token = tokenReader.getToken()) != null)
{
//文字列の種類に応じた色指定タグで挟んで出力する
tokenWriter.putToken(token);
}

tokenReader = null;
tokenWriter = null;
}