git-svn-id: https://scorched3d.svn.sourceforge.net/svnroot/scorched3d/trunk/scorched...
[scorched3d/parasti.git] / scripts / weaponDocs.pl
bloba979ca47b2a9fc674daa3d5dff311eca28b0159c
1 #!/usr/local/bin/perl
3 use strict;
5 opendir(DIR, ".") || die "ERROR: Cannot open dir";
6 my @files = grep { /cpp$/ } readdir(DIR);
7 closedir(DIR);
9 foreach my $file (@files)
11 my %result = parseFile($file);
12 if (defined $result{"Class"})
14 #print "----------\n";
15 print "<accessoryaction type=\"".$result{"Class"}."\">\n";
17 #if ($result{"Extends"} ne "AccessoryPart")
18 if (($result{"Extends"} ne "") & ($result{"Extends"} ne "AccessoryPart"))
20 print "Extends - ".$result{"Extends"}."\n";
23 if (defined $result{"Attribute"})
25 my @attrs = @{$result{"Attribute"}};
26 foreach my $attr (@attrs)
28 my %attrh = %{$attr};
29 print "=========" if ($attrh{"Type"} eq "");
30 #print "Attribute : ".$attrh{"Type"}." ".$attrh{"Name"}." ".$attrh{"Rest"}."\n";
31 print "\t<".$attrh{"Name"}.">".$attrh{"Type"}."</".$attrh{"Name"}.">\n";
34 print "</accessory>\n\n"
38 sub parseFile
40 my ($file) = @_;
42 open (FILE, "$file") || die "ERROR: Cannot open file $file";
43 my @fileconts = <FILE>;
44 close (FILE);
46 my @fns = grep { /\s+(\w+)::(parse|read)XML/ } @fileconts;
47 return if ($#fns == -1);
49 my %result = ();
51 $fns[0] =~ /\s+(\w+)::(parse|read)XML/ or die "ERROR1";
52 my $class = $1;
53 $result{"Class"} = $class;
55 my $fileh = $file;
56 $fileh =~ s/cpp$/h/;
58 my $extends = getExtends($fileh);
59 $result{"Extends"} = $extends;
60 if ($extends ne "")
62 if ($extends eq "PlacementModelDefinition")
64 $extends = "../placement/PlacementModelDefinition";
66 my %newResult = parseFile($extends.".cpp");
67 $result{"Attribute"} = $newResult{"Attribute"};
69 if ($newResult{"Extends"} ne "")
71 $result{"Extends"} = $newResult{"Extends"};
75 my @nodes = grep { /getNamedChild/ } @fileconts;
76 foreach my $node (@nodes)
78 if ($node =~ /getNamedChild\(\"(\w+)\"\s*,\s*([\w_]+)(\s*,\s*false|)/)
80 my ($nodename, $var, $rest) = ($1, $2, $3);
82 my $type = getType($fileh, $nodename);
83 $type = getType($fileh, $var) if ($type eq "");
84 $type = getType($file, $var) if ($type eq "");
86 $rest = "(optional)" if ($rest ne "");
88 my %attr = ();
89 $attr{"Name"} = $nodename;
90 $attr{"Type"} = $type;
91 $attr{"Rest"} = $rest;
93 push @{$result{"Attribute"}}, { %attr };
96 @nodes = grep { /\.readXML\(/ } @fileconts;
97 foreach my $node (@nodes)
99 if ($node =~ /(\w+)\.readXML\(/)
101 my $var = ($1);
102 my $type = getType($fileh, $var);
104 if ($type eq "TargetDefinition")
106 my %newResult = parseFile("../target/TargetDefinition.cpp");
107 push @{$result{"Attribute"}}, @{$newResult{"Attribute"}};
112 return %result;
115 sub getExtends
117 my ($file) = @_;
119 open (FILE, "$file") || die "ERROR: Cannot open file $file";
120 my @fileconts = <FILE>;
121 close (FILE);
123 my @extends = grep { /public \w+/i } @fileconts;
124 foreach (@extends)
126 if (/public (\w+)/)
128 my $extend = $1;
129 $extend =~ s/Callback//;
131 return $extend;
134 return "";
137 sub getType
139 my ($file, $var) = @_;
141 return "float" if (length($var) == 1);
143 open (FILE, "$file") || die "ERROR: Cannot open file $file";
144 my @fileconts = <FILE>;
145 close (FILE);
147 my @types = grep { /$var[_,\s;]+/i } @fileconts;
148 foreach (@types)
150 if (/^\s*([_\*\w:]+)/i)
152 return $1 if ($1 eq "float");
153 return $1 if ($1 eq "bool");
154 return $1 if ($1 eq "Explosion::DeformType");
155 return $1 if ($1 eq "std::string");
156 return $1 if ($1 eq "Vector");
157 return $1 if ($1 eq "int");
158 return $1 if ($1 eq "Weapon");
159 return $1 if ($1 eq "TargetDefinition");
160 return $1 if ($1 eq "AccessoryPart");
161 return $1 if ($1 eq "XMLNode");
164 return "ModelID" if ($var =~/model/);
166 return "";