Skip to content

Instantly share code, notes, and snippets.

@long-long-float
Created January 7, 2014 17:33
Show Gist options
  • Save long-long-float/8303087 to your computer and use it in GitHub Desktop.
Save long-long-float/8303087 to your computer and use it in GitHub Desktop.
convert C++ to UMLet
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");
//Open Mode
var FORREADING = 1;
var FORWRITING = 2;
var FORAPPENDING = 8;
//File Type
var TRISTATE_TRUE = -1;
var TRISTATE_FALSE = 0;
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");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment