diff options
Diffstat (limited to 'tools/HPMHookGen/HPMHookGen.pl')
-rwxr-xr-x | tools/HPMHookGen/HPMHookGen.pl | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/tools/HPMHookGen/HPMHookGen.pl b/tools/HPMHookGen/HPMHookGen.pl index 71bd8f245..3daf742bc 100755 --- a/tools/HPMHookGen/HPMHookGen.pl +++ b/tools/HPMHookGen/HPMHookGen.pl @@ -258,13 +258,14 @@ my %keys = ( foreach my $file (@files) { # Loop through the xml files my $xml = new XML::Simple; - my $data = $xml->XMLin($file); + my $data = $xml->XMLin($file, ForceArray => 1); - my $loc = $data->{compounddef}->{location}; + my $filekey = (keys $data->{compounddef})[0]; + my $loc = $data->{compounddef}->{$filekey}->{location}->[0]; next unless $loc->{file} =~ /src\/(map|char|login)\//; my $servertype = $1; - my $key = $data->{compounddef}->{compoundname}; + my $key = $data->{compounddef}->{$filekey}->{compoundname}->[0]; my $original = $key; # Some known interfaces with different names @@ -272,6 +273,8 @@ foreach my $file (@files) { # Loop through the xml files $key = "bg"; } elsif ($key =~ /guild_storage/) { $key = "gstorage"; + } elsif ($key =~ /inter_homunculus/) { # to avoid replace to homun + $key = "inter_homunculus"; } elsif ($key =~ /homunculus/) { $key = "homun"; } elsif ($key =~ /irc_bot/) { @@ -280,23 +283,23 @@ foreach my $file (@files) { # Loop through the xml files $key = "logs"; } elsif ($key =~ /pc_groups_interface/) { $key = "pcg"; + } elsif ($key =~ /char_interface/) { + $key = "chr"; } else { $key =~ s/_interface//; } - foreach my $v ($data->{compounddef}->{sectiondef}) { # Loop through the sections + foreach my $v ($data->{compounddef}->{$filekey}->{sectiondef}->[0]) { # Loop through the sections my $memberdef = $v->{memberdef}; - foreach my $fk (sort { # Sort the members in declaration order according to what the xml says - my $astart = $memberdef->{$a}->{location}->{bodystart} || $memberdef->{$a}->{location}->{line}; - my $bstart = $memberdef->{$b}->{location}->{bodystart} || $memberdef->{$b}->{location}->{line}; + foreach my $f (sort { # Sort the members in declaration order according to what the xml says + my $astart = $a->{location}->[0]->{bodystart} || $a->{location}->[0]->{line}; + my $bstart = $b->{location}->[0]->{bodystart} || $b->{location}->[0]->{line}; $astart <=> $bstart - } keys %$memberdef) { # Loop through the members - my $f = $memberdef->{$fk}; - - my $t = $f->{argsstring}; + } @$memberdef) { # Loop through the members + my $t = $f->{argsstring}->[0]; next unless ref $t ne 'HASH' and $t =~ /^[^\[]/; # If it's not a string, or if it starts with an array subscript, we can skip it - my $if = parse($t, $f->{definition}); + my $if = parse($t, $f->{definition}->[0]); next unless scalar keys %$if; # If it returns an empty hash reference, an error must've occurred # Skip variadic functions, we only allow hooks on their arglist equivalents. |