[LON-CAPA-cvs] cvs: doc /help rebuildLabelHash.pl

albertel lon-capa-cvs-allow@mail.lon-capa.org
Fri, 24 Aug 2007 23:50:28 -0000


albertel		Fri Aug 24 19:50:28 2007 EDT

  Modified files:              
    /doc/help	rebuildLabelHash.pl 
  Log:
  - validate the manual <file refs
  
  
Index: doc/help/rebuildLabelHash.pl
diff -u doc/help/rebuildLabelHash.pl:1.9 doc/help/rebuildLabelHash.pl:1.10
--- doc/help/rebuildLabelHash.pl:1.9	Tue Aug  7 18:46:20 2007
+++ doc/help/rebuildLabelHash.pl	Fri Aug 24 19:50:28 2007
@@ -31,6 +31,7 @@
 use GDBM_File;
 use File::Spec;
 
+my $path = '../../../../../doc/help';
 # I had to chdir, because neither glob nor bsd_glob accept globs
 # with ".." in them... sucky.
 chdir("../../loncom/html/adm/help/");
@@ -86,19 +87,20 @@
 
 my $found_ref=0;
 foreach my $file ( glob("*.tex") ) {
-    open(F, $file);
+    open(my $fh , '<', $file);
     if ( index($file, "/") != "/" ) {
 	$file = substr($file, index($file, "/") + 1);
     } 
     my $contents;
-    foreach my $line (<F>) {
+    foreach my $line (<$fh>) {
 	next if ($line =~ /^%/);
 	$contents .= $line;
     }
     my $label;
 
 
-    # Search for labels, of the form '\label{labelname}'
+    # Search for references, of the form '\ref{labelname}', and whether
+    # we have logged the associated \label before
     foreach my $ref ( $contents =~ /\\ref\{([^\}]*)\}/g ) {
 	if (!exists($fragmentLabels{$ref})
 	    && $ref ne 'course.manual.access.hlp'
@@ -111,6 +113,25 @@
     }
 }
 
+use HTML::TokeParser;
+foreach my $manual ('course.manual.texxml','author.manual.texxml') {
+    my $p = HTML::TokeParser->new($path.'/'.$manual);
+    if (!-e $path.'/'.$manual) {
+	$error++;
+	print("***ERROR: can't find manual $manual \n");
+    }
+    while (my $token = $p->get_token()) {
+	if ($token->[0] eq 'S' && $token->[1] eq 'file') {
+	    my $ref = $token->[2]{'name'};
+	    $ref =~ s/\.tex//;
+	    if (!exists($fragmentLabels{$ref})) {
+		$error++;
+		print("***ERROR: ref $ref in $manual doesn't exist in label hash. \n");
+	    }
+	}
+    }
+}
+
 if ($error == 0) {
     print("There were no dangling references. $found_ref were checked.\n");
 } else {