function join(c){
var ret = new Array();
for(var i = 1;i < arguments.length;i++){
ret.push(arguments[i]);
}
return ret.join(c);
}
var args = WScript.Arguments;
if(args.length < 1){
WScript.Echo("Error!");
WScript.Quit();
}
var FS = new ActiveXObject("Scripting.FileSystemObject");
// オープンモード
var FORREADING = 1; // 読み取り専用
var FORWRITING = 2; // 書き込み専用
var FORAPPENDING = 8; // 追加書き込み
// 開くファイルの形式
var TRISTATE_TRUE = -1; // Unicode
var TRISTATE_FALSE = 0; // ASCII
var TRISTATE_USEDEFAULT = -2; // システムデフォルト
for(var arg_index = 0;arg_index < args.length;arg_index++){
var fname = args(arg_index);
var infile = FS.OpenTextFile(fname, FORREADING, false, TRISTATE_FALSE);
var outfile = FS.OpenTextFile(fname + "_out.txt", FORWRITING, true, TRISTATE_FALSE);
var visibility = "-";
var classname = "";
var fields = new Array();
var methods = new Array();
while(!infile.AtEndOfStream){
var line = infile.ReadLine();
var fixes = {"virtual " : "/", "static " : "_", "" : ""};
var tokens;
if(tokens = line.match(/class (\w+)/)){
classname = tokens[1];
}
//private
else if(line.indexOf("private:") != -1){
visibility = "-";
}
//public
else if(line.indexOf("public:") != -1){
visibility = "+";
}
//protected
else if(line.indexOf("protected:") != -1){
visibility = "#";
}
//method
else if(tokens = line.match(/(virtual |static |)(\w+) (\w+)\(([\w, ]*)\);/)){
var fix = fixes[tokens[1]];
var ret_type = tokens[2];
var name = tokens[3];
var arg = tokens[4].replace(/(\w+) (\w+)/g, function($1, $2, $3){ return $3 + " : " + $2; });
var s = join(" ", fix, visibility, name + "(" + arg + ")", ":", ret_type, fix);
methods.push(s);
}
//field
else if(tokens = line.match(/(|static |)(\w+) (\w+);/)){
var fix = fixes[tokens[1]];
var type = tokens[2];
var name = tokens[3];
var s = join(" ", fix, visibility, name, ":", type, fix);
fields.push(s);
}
else{
//WScript.Echo("no matches");
}
}
outfile.WriteLine(classname);
if(fields.length > 0) outfile.WriteLine("--");
for(var i = 0;i < fields.length;i++) outfile.WriteLine(fields[i]);
if(methods.length > 0) outfile.WriteLine("--");
for(var i = 0;i < methods.length;i++) outfile.WriteLine(methods[i]);
infile.Close();
infile = null;
outfile.Close();
outfile = null;
}
WScript.Echo("finish");
手で書き写した方が速いとわかってたがプログラムの練習のために…
他の人も使ってくれるみたいだし。