#!/usr/bin/perl --
# use strict;
use warnings;
use XML::Simple;
use XML::Twig;
use Data::Dump qw' dd ';
my @panapi;
my @allclasses;
my @allfiles;
my @allnsp;
my %elements;
# require "DoxyDocs.pm";
# our $doxydocs;
#########################################
# Script takes DoxyDocs.pm converts to xml
# then filters out unneeded tags from xml
# then lists all classes, files, namespaces
# and separates each class, file, and namespace
# in hash on line with its related properties
#
# usage: apixml.pl xml1.xml xml2.xml > out.txt
#
#########################################
# my $fh = 'xmlout.xml';
# my $xs = new XML::Simple(RootName => "panoply");
# add the NoAttr => 1, option to convert attributes to elements
# $xs->XMLout($doxydocs, XMLDecl => 1, OutputFile => $fh);
Main( @ARGV );
exit( 0 );
sub Main {
my %oldfile;
my %newfile;
my %class;
my $filename;
my $ssprint = sub {
my( $twig, $_ ) = @_;
push @{ $oldfile{ $filename }{ $_->path } }, $_->sprint; #store in hash
# push (@panapi, $_->sprint); # store in array instead
return;
};
my $s2sprint = sub {
my( $twig1, $_ ) = @_;
push @{ $newfile{ $filename }{ $_->path } }, $_->sprint; #store in hash
# push (@panapi, $_->sprint); # store in array instead
return;
};
my $twig = XML::Twig->new(
ignore_elts => { brief => 'discard', detailed => 'discard', includes => 'discard', included_by => 'discard', reimplemented_by => 'discard' },
pretty_print => 'indented',
TwigHandlers => {
'panoply/classes' => $ssprint,
'panoply/files' => $ssprint,
'panoply/namespaces' => $ssprint,
},
);
my $twig1 = XML::Twig->new(
ignore_elts => { brief => 'discard', detailed => 'discard', includes => 'discard', included_by => 'discard', reimplemented_by => 'discard' },
pretty_print => 'indented',
TwigHandlers => {
'panoply/classes' => $s2sprint,
'panoply/files' => $s2sprint,
'panoply/namespaces' => $s2sprint,
},
);
for my $file( $_[0] ){
# dd
$filename = $file; ##
eval {
$twig->parsefile( $file );
1;
} or warn "ERROR parsefile($file): $@ ";
my $root = $twig->root;
my @class = $root->children( 'classes' );
print "Previous version of API\n";
foreach my $cls (@class) {
my $clsname = $cls->{'att'}->{'name'};
print "classes: $clsname\n";
push (@allclasses, $clsname);
}
my @files = $root->children( 'files' );
foreach my $file (@files) {
my $filename = $file->{'att'}->{'name'};
print "files: $filename\n";
push (@allfiles, $filename);
}
my @namesp = $root->children( 'namespaces' );
foreach my $nsp (@namesp) {
my $name = $nsp->{'att'}->{'name'};
print "namespaces: $name\n";
push (@allnsp, $name);
}
$twig->purge;
}
dd \%oldfile;
# dd \@panapi; # store in array instead
for my $file1( $_[1] ){
# dd
$filename = $file1; ##
eval {
$twig1->parsefile( $file1 );
1;
} or warn "ERROR parsefile($file1): $@ ";
my $root = $twig1->root;
my @class = $root->children( 'classes' );
print "\n\nNew version of API\n";
foreach my $cls (@class) {
my $clsname = $cls->{'att'}->{'name'};
print "classes: $clsname\n";
push (@allclasses, $clsname);
}
my @files = $root->children( 'files' );
foreach my $file (@files) {
my $filename = $file->{'att'}->{'name'};
print "files: $filename\n";
push (@allfiles, $filename);
}
my @namesp = $root->children( 'namespaces' );
foreach my $nsp (@namesp) {
my $name = $nsp->{'att'}->{'name'};
print "namespaces: $name\n";
push (@allnsp, $name);
}
$twig1->purge;
}
dd \%newfile;
}
####
Models the access logic
####
Models the access logic