version 1.1, 2002/07/05 16:12:30
|
version 1.10, 2007/08/24 23:50:28
|
Line 1
|
Line 1
|
#!/usr/bin/perl |
#!/usr/bin/perl |
|
|
|
# The LearningOnline Network with CAPA |
|
# Perl script to rebuild the topic->tex file hash |
|
# |
|
# Copyright Michigan State University Board of Trustees |
|
# |
|
# This file is part of the LearningOnline Network with CAPA (LON-CAPA). |
|
# |
|
# LON-CAPA is free software; you can redistribute it and/or modify |
|
# it under the terms of the GNU General Public License as published by |
|
# the Free Software Foundation; either version 2 of the License, or |
|
# (at your option) any later version. |
|
# |
|
# LON-CAPA is distributed in the hope that it will be useful, |
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
# GNU General Public License for more details. |
|
# |
|
# You should have received a copy of the GNU General Public License |
|
# along with LON-CAPA; if not, write to the Free Software |
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
# |
|
# /home/httpd/html/adm/gpl.txt |
|
# |
|
# http://www.lon-capa.org/ |
|
# |
|
# 7-16-2002 Jeremy Bowers |
|
|
use strict; |
use strict; |
use GDBM_File; |
use GDBM_File; |
|
use File::Spec; |
|
|
my $dirprefix = "/home/httpd/html/adm/help/"; |
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/"); |
|
|
# if the topic hash exists, kill it |
# if the topic hash exists, kill it |
unlink 'fragmentLabels.gdbm' if ( -e $dirprefix . 'fragmentTopics.gdbm' ); |
unlink('fragmentLabels.gdbm') if ( -e 'fragmentLabels.gdbm' ); |
|
print("Wiped old fragmentLabels.gdbm.\n"); |
|
|
tie (my %fragmentLabels, 'GDBM_File', $dirprefix . 'fragmentLabels.gdbm', 1, 0); |
tie (my %fragmentLabels, 'GDBM_File', 'fragmentLabels.gdbm', &GDBM_WRCREAT(), 0660); |
my $error = 0; |
my $error = 0; |
|
|
chdir $dirprefix; |
chdir("tex"); |
|
|
while (<*.tex>) |
foreach my $file ( glob("*.tex") ) { |
{ |
open(F, $file); |
my $file; |
if ( index($file, "/") != "/" ) { |
$file = $_; |
$file = substr($file, index($file, "/") + 1); |
open F, $file; |
} |
my $contents = join("\n", <F>); |
my $contents = join("\n", <F>); |
my $label; |
|
|
my $found=0; |
|
my $found_me=0; |
# Search for labels, of the form '\label{labelname}' |
# Search for labels, of the form '\label{labelname}' |
foreach $label ( $contents =~ /\\label\{([^}]*)\}/g ) |
foreach my $label ( $contents =~ /\\label\{([^\}]*)\}/g ) { |
{ |
$found = 1; |
if (exists $fragmentLabels{$label} ) |
if ($file eq "$label.tex") { |
{ |
$found_me = 1; |
print "***ERROR: '$label' in both $fragmentLabels{$label} " . |
} |
"and $file. \n"; |
if (exists($fragmentLabels{$label}) ) { |
$error = 1; |
print("***ERROR: '$label' in both $fragmentLabels{$label} " . |
|
"and $file. \n"); |
|
$error++; |
} |
} |
$fragmentLabels{$label} = $file; |
$fragmentLabels{$label} = $file; |
} |
} |
|
if (!$found) { |
|
$error++; |
|
print("***ERROR: no labels in '$file'. \n"); |
|
} |
|
if (!$found_me) { |
|
$error++; |
|
my ($needed_label) = ($file =~ m/(.*)\.tex/); |
|
print("***ERROR: no labels for $needed_label in '$file'. \n"); |
|
} |
} |
} |
|
|
if ($error == 0) |
if ($error == 0) { |
{ |
print("There were no duplicate labels. Database rebuilt.\n"); |
print "There were no duplicate labels. Database rebuilt.\n"; |
} else { |
|
print("There were $error errors. You must correct the labels.\n"); |
|
exit(-1); |
} |
} |
else |
|
{ |
my $found_ref=0; |
print "There were errors. You must correct the duplicate labels.\n"; |
foreach my $file ( glob("*.tex") ) { |
|
open(my $fh , '<', $file); |
|
if ( index($file, "/") != "/" ) { |
|
$file = substr($file, index($file, "/") + 1); |
|
} |
|
my $contents; |
|
foreach my $line (<$fh>) { |
|
next if ($line =~ /^%/); |
|
$contents .= $line; |
|
} |
|
my $label; |
|
|
|
|
|
# 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' |
|
&& $ref ne 'author.manual.access.hlp') { |
|
$error++; |
|
print("***ERROR: ref $ref in $file doesn't exist in label hash. \n"); |
|
} else { |
|
$found_ref++; |
|
} |
|
} |
|
} |
|
|
|
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"); |
|
} |
|
} |
|
} |
} |
} |
|
|
untie %fragmentLabels; |
if ($error == 0) { |
|
print("There were no dangling references. $found_ref were checked.\n"); |
|
} else { |
|
print("There were $error errors. You must correct the dangling references.\n"); |
|
exit(-1); |
|
} |
|
|
|
|
|
untie(%fragmentLabels); |