Документ взят из кэша поисковой машины. Адрес оригинального документа : http://hea-www.harvard.edu/~fine/Tech/mkwebtree
Дата изменения: Fri Jun 2 22:36:35 2000
Дата индексирования: Mon Oct 1 23:19:12 2012
Кодировка:

Поисковые слова: trees
#!/usr/bin/perl

$IMGDIR="images";

&do_tree($cvsroot);

print "\n";

#
# END OF MAIN
#

sub do_tree {
local($search)=$_[0];
local($dir,$user,$group,$wd,$d,$f,$initdepth,$depth);
local(@curdirs);
local(@curfils);

#
# FORMAT:
#
# INDENT=2
#
# http://foo.bar.com/blah Link Text | nonlink text
# http://foo.bar.com/blah/subdir Link Text | with a pipe
# * Text without a link
#

$indentsize=0; #autodetect
$odepth=0;
@parlist=("root");
$tree{"root","kidcount"}=0;
$tree{"root","depth"}=0;
$tree{"root","parent"}="root";
$tree{"root","text"}="fictitious entry";
while(<>) {
next if (/^\s*#/); #skip comment lines
next if (/^$/); #skip blank lines
if (/^INDENT=/) {
chop;
s/INDENT=//;
$indentsize=$_;
} else {
chop;
++$key;
($url,$text)=split(' ',$_,2);
($text,$othertext)=split(/\|/,$text,2);
push(@keylist,$key);
$spaces=$_;
$spaces =~ s/[^ ].*$//;
if (length($spaces)) {
#set indent if not set (first spaces guaranteed to be single indent)
if ($indentsize == 0) { $indentsize=length($spaces); }
$depth=length($spaces)/$indentsize;
} else {
$depth=0;
}
if ($depth > $odepth) {
if (($depth-$odepth)>1) {
print "error in input file -- too much indenting -- no parent\n";
print " $url\n";
print " $depth, $odepth\n";
exit(0);
}
push(@parlist,$oldkey);
} elsif ($depth < $odepth) {
for ($i=0; $i<($odepth-$depth); ++$i) { pop(@parlist); }
}
$parent=$parlist[$#parlist];
$tree{$key,"depth"}=$depth;
$tree{$key,"kidcount"}=0;
$tree{$key,"parent"}=$parent;
$tree{$key,"text"}=$text;
$tree{$key,"url"}=$url;
$tree{$key,"othertext"}=$othertext;
++$tree{$parent,"kidcount"};
$odepth=$depth;
$oldkey=$key;
}
}

foreach $key (@keylist) {
for ($i=0; $i<$tree{$key,"depth"}; ++$i) {
$currlevel=&getparent($key,$tree{$key,"depth"}-$i);
#print STDERR "$tree{$key,\"url\"}\n";
#print STDERR " for $key, currlevel is $currlevel\n";
#print STDERR " i=$i; depth is $tree{$key,'depth'}\n";
if ($i == $tree{$key,"depth"}-1) {
if (--$tree{$currlevel,"kidcount"}) {
print "";
} else {
print "";
}
} else {
if ($tree{$currlevel,"kidcount"}) {
print "";
} else {
print "";
}
}
}
if ($tree{$key,'url'} eq "*") {
print $tree{$key,'text'};
} else {
print "$tree{$key,'text'}";
}
print " ", $tree{$key,'othertext'};
print "
\n";
}
}

sub getparent {
local($start,$num)=($_[0],$_[1]);
local($i);
local($parent)=$start;
for ($i=0; $i<$num; ++$i) {
$parent=$tree{$parent,"parent"};
}
return($parent);
}