他言語に対応する (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;
}