--- doc/help/rebuildLabelHash.pl 2007/08/07 22:46:20 1.9 +++ doc/help/rebuildLabelHash.pl 2007/08/24 23:50:28 1.10 @@ -31,6 +31,7 @@ use strict; 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 @@ if ($error == 0) { 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 () { + 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' @@ -110,6 +112,25 @@ foreach my $file ( glob("*.tex") ) { } } } + +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");