#!/local/bin/perl5 ############################################################################## # $Id: search_acronyms.pl,v 1.1 2010/09/07 14:20:14 unrz59 Exp $ ############################################################################## # Acronym-Suche - # Suche von HTML-Acronym-Tags und Indizierung der enthaltenen Angaben # Copyright (C) 2004 Wolfgang Wiese # # search_acronyms.pl ist freie Software; Sie dürfen sie unter den Bedingungen der # GNU Lesser General Public License, wie von der Free Software Foundation # veröffentlicht, weiterverteilen und/oder modifizieren; entweder gemäß # Version 2.1 der Lizenz oder (nach Ihrer Option) jeder späteren Version. # # search_acronyms.pl wird in der Hoffnung weiterverbreitet, daß sie nützlich # sein wird, jedoch OHNE IRGENDEINE GARANTIE, auch ohne die implizierte Garantie # der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK. Mehr Details # finden Sie in der GNU Lesser General Public License. # # Sie sollten eine Kopie der GNU Lesser General Public License zusammen mit # dieser Bibliothek/diesem Programm erhalten haben; falls nicht, schreiben Sie # an die Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, # MA 02111-1307, USA. # # Das Regionale Rechenzentrum Erlangen (http://www.rrze.uni-erlangen.de) # erhebt keinen urheberechtlichen Anspruch auf das von # Wolfgang Wiese # geschrieben Programm. ############################################################################## # Last Modified on: $Date: 2010/09/07 14:20:14 $ # By: $Author: unrz59 $ # Version: $Revision: 1.1 $ ############################################################################# use strict; ############################################################################## my $startverzeichnis="/proj/websource/docs/RRZEWeb/www.rrze.uni-erlangen.de"; # Unterhalb dieses lokalen Verzeichnisses beginnt die Suche my $webverzeichnis = 'http://www.rrze.uni-erlangen.de'; my @filesuffix = ("shtml"); # Nur Dateien mit den angegebenen Suffixes my @IGNOREDIR = ("/navigation", "/css", "/img"); # Diese Verzeichnisse werden ignoriert my $DEFAULTLANG = "de"; my $outputfile = "/proj/webbin/cgi-bin/www.rrze.uni-erlangen.de/glossar.txt"; my $outputfiletmp = "/proj/webbin/cgi-bin/www.rrze.uni-erlangen.de/newglossar.txt"; ##################################################################### # Main programm after this point ##################################################################### my @files = GetDirEntries($startverzeichnis); my @liste = FindeAcronyme(@files); UpdateGlossar(@liste); exit(0); ##################################################################### # Subroutinen ##################################################################### sub UpdateGlossar { my @liste = @_; if (not @liste) { return; } my %hash; my $i; my ($acro,$lang,$title,$file,$seitentitel); my $num; for ($i=0; $i<=$#liste; $i++) { ($acro,$lang,$title,$file,$seitentitel) = split(/\t/,$liste[$i],5); if ($hash{$acro}) { $num = $hash{$acro}{'num'}; } else { $num =0; } $num++; $file =~ s/^$startverzeichnis/$webverzeichnis/gi; $hash{$acro}{$num} = "$lang\t$title\t$file\t$seitentitel"; $hash{$acro}{'title'} = $title; $hash{$acro}{'lang'} = $lang; $hash{$acro}{'num'} = $num; } my $key; open(f1,">$outputfiletmp"); foreach $key (sort keys %hash) { print f1 "Glossar $key\t$hash{$key}{'title'}\n"; for ($i=1; $i<=$hash{$key}{'num'}; $i++) { print f1 "#\t$hash{$key}{$i}\n"; } # print "$key \t $hash{$key}{'title'}\n"; } close f1; system("mv $outputfiletmp $outputfile"); } ##################################################################### sub FindeAcronyme { my @fileliste = @_; if (not @fileliste) { return; } my $i; my $content; my $text; my $acro; my $args; my $title; my $lang; my @glossar; my $seitentitel; for ($i=0; $i<=$#fileliste; $i++) { $content = ""; open(f1,"<$fileliste[$i]"); while() { chomp($_); $content .= $_; } close f1; if ($content =~ /([^<>]+)<\/title>/i) { $seitentitel = $1; } $text = $content; while ($text =~ /]+)>([^<>]+)<\/acronym>/i) { $text = $'; $acro = $2; $args = $1; $lang = $DEFAULTLANG; $title = ""; if ($args =~ /title\s*=\s*[\'\"]*([^\"\']+)[\'\"]*/) { $title = $1; } if ($args =~ /lang\s*=\s*[\'\"]*([^\"\']+)[\'\"]*/) { $lang = $1; } if (($acro) && ($title)) { push(@glossar,"$acro\t$lang\t$title\t$fileliste[$i]\t$seitentitel"); } } } } return @glossar; } ##################################################################### sub GetDirEntries { my($nonono)=0; my $start = shift; if (not $start) { return; } my @startdir; push(@startdir,$start); my $vollname; my $i=0; my @direct; my $ignore; my $datei; my $z; my $l; my @dlist; my @result; my $relative; while ($startdir[$i]) { @direct = (); @direct = Getdir($startdir[$i]); if (length($direct[0]) > 0) { foreach $datei (@direct) { $vollname=$startdir[$i]."/".$datei; if ((-d $vollname) && (!(-l $vollname)) && ($datei ne '..') && ($datei ne '.') && (-x $vollname)) { $ignore =0; $relative = $vollname; $relative =~ s/^$startverzeichnis//gi; for ($z=0; $z<=$#IGNOREDIR; $z++) { if ($relative eq $IGNOREDIR[$z]) { $ignore = 1; } } if (not $ignore) { push(@startdir,$vollname); } } elsif (-r $vollname) { # Datei ist lesbar for ($l=0;$l<=$#filesuffix;$l++) { @dlist = split(/\./,$vollname); if (lc($dlist[$#dlist]) eq lc($filesuffix[$l])) { push(@result,$vollname); } } } } } $i++; } return @result; } ##################################################################### sub Getdir { my $verzeichnissname = shift; my @dirent; if (-d $verzeichnissname) { if (!(-r $verzeichnissname)) {return "";} if (-l $verzeichnissname) {return "";} opendir(DH,$verzeichnissname) || return ""; @dirent = sort grep(!/^\./, readdir(DH)); closedir DH; return @dirent; } else { return ""; } } ##################################################################### # EOF #####################################################################