]> granicus.if.org Git - docbook-dsssl/commitdiff
Tool to check param files
authorNorman Walsh <ndw@nwalsh.com>
Tue, 4 Dec 2001 18:34:30 +0000 (18:34 +0000)
committerNorman Walsh <ndw@nwalsh.com>
Tue, 4 Dec 2001 18:34:30 +0000 (18:34 +0000)
cvstools/paramchk [new file with mode: 0755]

diff --git a/cvstools/paramchk b/cvstools/paramchk
new file mode 100755 (executable)
index 0000000..cadfc28
--- /dev/null
@@ -0,0 +1,118 @@
+#!/usr/bin/perl -- # -*- Perl -*-
+
+# This script checks the param.ent and param.xweb files for consistency
+
+use strict;
+use Getopt::Std;
+use vars qw($opt_m);
+
+my $usage = "$0 [-m makefrag ] param.xweb\n";
+
+die $usage if ! getopts('m:');
+
+my $file = shift @ARGV || die $usage;
+my $dir = ".";
+
+$dir = $1 if $file =~ /^(.*)\/[^\/]+$/;
+
+my $entfile = $file;
+$entfile =~ s/\.xweb$/.ent/;
+
+my $ok = 1;
+my %params = ();
+my %builtin = ("lt"=>1,"gt"=>1,"amp"=>1,"quot"=>1,"apos"=>1);
+my @paramfiles = ();
+
+open (F, $file) || die $usage;
+while (<F>) {
+    chop;
+    if (/&(.*?);/) {
+       my $param = $1;
+
+       if (!$builtin{$param}) {
+           if (defined $params{$param}) {
+               warn "Duplicate parameter: $param\n";
+               $ok = 0;
+           }
+           if (! -f "$dir/../params/$param.xml") {
+               warn "No parameter definition: $dir/../params/$param.xml\n";
+               $ok = 0;
+           }
+           $params{$param} = 0;
+       }
+    }
+
+    if (/<src:fragref\s+linkend=[\"\']([^\"\']+)\.frag[\"\']/) {
+       my $param = $1;
+       if ($params{$param} != 0) {
+           warn "Duplicate fragref: $param\n";
+           $ok = 0;
+       }
+       if (!defined $params{$param}) {
+           warn "Fragref for unused param: $param\n";
+           $ok = 0;
+       } else {
+           $params{$param} = 1;
+       }
+    }
+}
+close (F);
+
+foreach my $param (keys %params) {
+    if ($params{$param} == 0) {
+       warn "No fragref for param: $param\n";
+       $ok = 0;
+    }
+}
+
+if (open (F, $entfile)) {
+    while (<F>) {
+       next if ! /<!ENTITY\s+(\S+)\s+SYSTEM\s+[\"\']([^\"\']+)/;
+       my $param = $1;
+       my $pfile = $2;
+       if (!defined $params{$param}) {
+           warn "Extra entity declaration: $param\n";
+           $ok = 0;
+       }
+       if ($pfile !~ /^.*$param\.xml$/) {
+           warn "Incorrect system identifier for $param: $pfile\n";
+           $ok = 0;
+       }
+
+       if ($params{$param} == 2) {
+           warn "Duplicate entity declaration: $param\n";
+           $ok = 0;
+       } else {
+           push (@paramfiles, $pfile);
+       }
+
+       $params{$param} = 2;
+    }
+    close (F);
+
+    foreach my $param (keys %params) {
+       if ($params{$param} != 2) {
+           warn "No entity declaration for param: $param\n";
+           $ok = 0;
+       }
+    }
+} else {
+    warn "Failed to open entity file: $entfile\n";
+    $ok = 0;
+}
+
+if ($ok && $opt_m) {
+    my $param = shift @paramfiles;
+    open (F, ">$opt_m");
+    print F "PARAMS=$param";
+    while (@paramfiles) {
+       $param = shift @paramfiles;
+       print F " \\\n       $param";
+    }
+    print F "\n";
+    close (F);
+}
+
+exit 0 if $ok;
+exit 1;
+