1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
|
#!/usr/bin/perl -w
use English;
$installdir = "/usr/local";
%acdtypes = ();
%defattr = (
"default" => "",
"information" => "",
"prompt" => "Y",
"code" => "Y",
"help" => "",
"parameter" => "",
"standard" => "",
"additional" => "",
"missing" => "",
"valid" => "",
"expected" => "",
"needed" => "Y",
"knowntype" => "",
"relations" => "",
"style" => "Y",
"qualifier" => "Y",
"template" => "Y",
"comment" => "Y"
);
sub numerically { $acdtypes{$ty}{$b} <=> $acdtypes{$ty}{$a} }
sub acdparse ($$) {
my ($name, $file) = @_;
open (FILE, $file) || die "Cannot open ACD file $file";
my $acd = "";
while (<FILE>) {
s/[\n]/ /;
s/[ \\ ]/ /;
$acd .= $_;
}
close FILE;
while ($acd =~ /(\S+): +(\S+) +([^\[ ]+ +)?[\[]([^\]]+)[\]]/gs) {
$acdtype = $1;
$acdname = $2;
$attr = $4;
$acd = $POSTMATCH;
if (!defined($acdtypes{$acdtype})) {
$acdtypes{$acdtype} = {};
}
$acdcount{$acdtype}++;
# print "$acdtype: $acdname\n";
while ($attr =~ /([a-z]+): (\"[^\"]*(\"\S[^\"]*)*\"|\S+)/gs) {
# print "attr=$1\n";
$aname = $1;
$acdtypes{$acdtype}{$aname}++;
if ($aname eq "prompt") {
print "+++prompt+++ $aname $name $acdname\n";
}
if ($aname eq "missing") {
print "+++missing+++ $aname $name $acdname\n";
}
$attr = $POSTMATCH;
}
}
}
open (EMBOSSVERSION, "embossversion -full -auto -filter|") ||
die "Cannot run embossversion";
while (<EMBOSSVERSION>) {
if (/InstallDirectory: +(\S+)/) { $installdir = $1 }
}
close EMBOSSVERSION;
$installdir .= "/share/EMBOSS/acd";
opendir(ACDDIR, $installdir);
@acdfiles = readdir(ACDDIR);
foreach $file (@acdfiles) {
if ($file !~ /^([^.]+)[.]acd$/) {next}
$name = $1;
# print "++ $name $file\n";
acdparse($name, "$installdir/$file");
}
closedir ACDDIR;
foreach $ty (sort (keys ( %acdtypes ) ) ) {
print "$ty $acdcount{$ty}\n";
foreach $at (sort numerically keys (%{$acdtypes{$ty}}) ) {
if (defined($defattr{$at})) {
if ($defattr{$at} eq "Y") {
print " ** $at $acdtypes{$ty}{$at}\n";
}
else {
# print ". $at $acdtypes{$ty}{$at}\n";
}
}
else {
print " $at $acdtypes{$ty}{$at}\n";
}
}
}
|