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");
手で書き写した方が速いとわかってたがプログラムの練習のために…
他の人も使ってくれるみたいだし。