version 1.141, 2001/12/14 22:59:34
|
version 1.155, 2002/03/06 20:28:19
|
Line 51
|
Line 51
|
# 8/7,8/9,8/10,8/11,8/15,8/16,8/17,8/18,8/20,8/23,8/24 Gerd Kortemeyer |
# 8/7,8/9,8/10,8/11,8/15,8/16,8/17,8/18,8/20,8/23,8/24 Gerd Kortemeyer |
# Guy Albertelli |
# Guy Albertelli |
# 9/26 Gerd Kortemeyer |
# 9/26 Gerd Kortemeyer |
|
# Dec Guy Albertelli |
|
# YEAR=2002 |
|
# 1/1 Gerd Kortemeyer |
|
# 1/2 Matthew Hall |
|
# 1/3 Gerd Kortemeyer |
|
# |
|
|
package Apache::lonxml; |
package Apache::lonxml; |
use vars |
use vars |
Line 74 sub register {
|
Line 79 sub register {
|
|
|
sub deregister { |
sub deregister { |
my ($space,@taglist) = @_; |
my ($space,@taglist) = @_; |
&printalltags(); |
|
foreach my $temptag (@taglist) { |
foreach my $temptag (@taglist) { |
my $tempspace = $Apache::lonxml::alltags{$temptag}[-1]; |
my $tempspace = $Apache::lonxml::alltags{$temptag}[-1]; |
if ($tempspace eq $space) { |
if ($tempspace eq $space) { |
pop(@{ $Apache::lonxml::alltags{$temptag} }); |
pop(@{ $Apache::lonxml::alltags{$temptag} }); |
} |
} |
} |
} |
&printalltags(); |
#&printalltags(); |
} |
} |
|
|
use Apache::Constants qw(:common); |
use Apache::Constants qw(:common); |
Line 286 sub printtokenheader {
|
Line 290 sub printtokenheader {
|
$reply{'generation'}; |
$reply{'generation'}; |
|
|
if ($target eq 'web') { |
if ($target eq 'web') { |
|
my %idhash=&Apache::lonnet::idrget($tudom,($tuname)); |
return |
return |
'<img align="right" src="/cgi-bin/barcode.gif?encode='.$token.'" />'. |
'<img align="right" src="/cgi-bin/barcode.gif?encode='.$token.'" />'. |
'Checked out for '.$plainname. |
'Checked out for '.$plainname. |
'<br />User: '.$tuname.' at '.$tudom. |
'<br />User: '.$tuname.' at '.$tudom. |
|
'<br />ID: '.$idhash{$tuname}. |
'<br />CourseID: '.$tcrsid. |
'<br />CourseID: '.$tcrsid. |
|
'<br />Course: '.$ENV{'course.'.$tcrsid.'.description'}. |
'<br />DocID: '.$token. |
'<br />DocID: '.$token. |
'<br />Time: '.localtime().'<hr />'; |
'<br />Time: '.localtime().'<hr />'; |
} else { |
} else { |
Line 309 sub fontsettings() {
|
Line 316 sub fontsettings() {
|
|
|
sub registerurl { |
sub registerurl { |
my $forcereg=shift; |
my $forcereg=shift; |
|
my $target = shift; |
|
my $result = ''; |
if ($ENV{'request.publicaccess'}) { |
if ($ENV{'request.publicaccess'}) { |
return |
return |
'<script>function LONCAPAreg(){} function LONCAPAstale(){}</script>'; |
'<script>function LONCAPAreg(){} function LONCAPAstale(){}</script>'; |
Line 340 ENDGRDS
|
Line 349 ENDGRDS
|
ENDPARM |
ENDPARM |
} |
} |
} |
} |
return (<<ENDREGTHIS); |
$result = (<<ENDREGTHIS); |
|
|
<script language="JavaScript"> |
<script language="JavaScript"> |
// BEGIN LON-CAPA Internal |
// BEGIN LON-CAPA Internal |
Line 392 ENDPARM
|
Line 401 ENDPARM
|
ENDREGTHIS |
ENDREGTHIS |
|
|
} else { |
} else { |
return (<<ENDDONOTREGTHIS); |
$result = (<<ENDDONOTREGTHIS); |
|
|
<script language="JavaScript"> |
<script language="JavaScript"> |
// BEGIN LON-CAPA Internal |
// BEGIN LON-CAPA Internal |
Line 419 ENDREGTHIS
|
Line 428 ENDREGTHIS
|
// END LON-CAPA Internal |
// END LON-CAPA Internal |
</script> |
</script> |
ENDDONOTREGTHIS |
ENDDONOTREGTHIS |
|
|
} |
} |
|
if ($target eq 'edit') { |
|
$result .=<<"ENDBROWSERSCRIPT"; |
|
<script> |
|
var editform; |
|
function openbrowser(formname,elementname) { |
|
var url = '/res/?'; |
|
if (editform == null) { |
|
url += 'launch=1&'; |
|
} |
|
url += 'catalogmode=interactive&'; |
|
url += 'mode=edit&'; |
|
url += 'form=' + formname + '&'; |
|
url += 'element=' + elementname + ''; |
|
var title = 'Browser'; |
|
var options = 'scrollbars=1,resizable=1,menubar=0'; |
|
options += ',width=700,height=600'; |
|
editform = open(url,title,options,'1'); |
|
editform.focus(); |
|
} |
|
</script> |
|
ENDBROWSERSCRIPT |
|
} |
|
return $result; |
} |
} |
|
|
sub loadevents() { |
sub loadevents() { |
Line 456 sub xmlparse {
|
Line 487 sub xmlparse {
|
|
|
($target, my @tenta) = split('&&',$target); |
($target, my @tenta) = split('&&',$target); |
|
|
my @stack = (); |
my @stack = (); |
my @parstack = (); |
my @parstack = (); |
&initdepth; |
&initdepth; |
|
|
Line 526 sub inner_xmlparse {
|
Line 557 sub inner_xmlparse {
|
} elsif ($token->[0] eq 'E') { |
} elsif ($token->[0] eq 'E') { |
#clear out any tags that didn't end |
#clear out any tags that didn't end |
while ($token->[1] ne $$stack['-1'] && ($#$stack > -1)) { |
while ($token->[1] ne $$stack['-1'] && ($#$stack > -1)) { |
&Apache::lonxml::warning('Missing tag </'.$$stack['-1'].'> in file'); |
my $lasttag=$$stack[-1]; |
&end_tag($stack,$parstack,$token); |
if ($token->[1] =~ /^$lasttag$/i) { |
|
&Apache::lonxml::warning('Using tag </'.$token->[1].'> as end tag to <'.$$stack[-1].'>'); |
|
last; |
|
} else { |
|
&Apache::lonxml::warning('Found tag </'.$token->[1].'> when looking for </'.$$stack[-1].'> in file'); |
|
&end_tag($stack,$parstack,$token); |
|
} |
} |
} |
|
|
if (exists($$style_for_target{'/'."$token->[1]"})) { |
if (exists($$style_for_target{'/'."$token->[1]"})) { |
Line 606 sub recurse {
|
Line 643 sub recurse {
|
$safeeval, $style_for_target); |
$safeeval, $style_for_target); |
} elsif ($tokenpat->[0] eq 'E') { |
} elsif ($tokenpat->[0] eq 'E') { |
#clear out any tags that didn't end |
#clear out any tags that didn't end |
while ($tokenpat->[1] ne $innerstack[$#innerstack] |
while ($tokenpat->[1] ne $innerstack[$#innerstack] |
&& ($#innerstack > -1)) { |
&& ($#innerstack > -1)) { |
&Apache::lonxml::warning('Missing tag </'.$innerstack['-1'].'> in style'); |
my $lasttag=$innerstack[-1]; |
&end_tag(\@innerstack,\@innerparstack,$tokenpat); |
if ($tokenpat->[1] =~ /^$lasttag$/i) { |
|
&Apache::lonxml::warning('Using tag </'.$tokenpat->[1].'> as end tag to <'.$innerstack[-1].'>'); |
|
last; |
|
} else { |
|
&Apache::lonxml::warning('Found tag </'.$tokenpat->[1].'> when looking for </'.$innerstack[-1].'> in file'); |
|
&end_tag(\@innerstack,\@innerparstack,$tokenpat); |
|
} |
} |
} |
$partstring = &callsub("end_$tokenpat->[1]", $target, $tokenpat, |
$partstring = &callsub("end_$tokenpat->[1]", $target, $tokenpat, |
\@innerstack, \@innerparstack, \@pat, |
\@innerstack, \@innerparstack, \@pat, |
Line 670 sub callsub {
|
Line 713 sub callsub {
|
} |
} |
if (!$deleted) { |
if (!$deleted) { |
if ($space) { |
if ($space) { |
#&Apache::lonxml::debug("Calling sub $sub in $space $metamode<br />\n"); |
#&Apache::lonxml::debug("Calling sub $sub in $space $metamode"); |
$sub1="$space\:\:$sub"; |
$sub1="$space\:\:$sub"; |
($currentstring,$nodefault) = &$sub1($target,$token,$tagstack, |
($currentstring,$nodefault) = &$sub1($target,$token,$tagstack, |
$parstack,$parser,$safeeval, |
$parstack,$parser,$safeeval, |
$style); |
$style); |
} else { |
} else { |
#&Apache::lonxml::debug("NOT Calling sub $sub in $space $metamode<br />\n"); |
#&Apache::lonxml::debug("NOT Calling sub $sub in $space $metamode"); |
if ($metamode <1) { |
if ($metamode <1) { |
if (defined($token->[4]) && ($metamode < 1)) { |
if (defined($token->[4]) && ($metamode < 1)) { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
Line 878 sub get_all_text {
|
Line 921 sub get_all_text {
|
} elsif ($token->[0] eq 'PI') { |
} elsif ($token->[0] eq 'PI') { |
$result.=$token->[2]; |
$result.=$token->[2]; |
} elsif ($token->[0] eq 'S') { |
} elsif ($token->[0] eq 'S') { |
if ($token->[1] eq $tag) { $depth++; } |
if ($token->[1] =~ /^$tag$/i) { $depth++; } |
$result.=$token->[4]; |
$result.=$token->[4]; |
} elsif ($token->[0] eq 'E') { |
} elsif ($token->[0] eq 'E') { |
if ( $token->[1] eq $tag) { $depth--; } |
if ( $token->[1] =~ /^$tag$/i) { $depth--; } |
#skip sending back the last end tag |
#skip sending back the last end tag |
if ($depth > -1) { $result.=$token->[2]; } else { |
if ($depth > -1) { $result.=$token->[2]; } else { |
$pars->unget_token($token); |
$pars->unget_token($token); |
Line 896 sub get_all_text {
|
Line 939 sub get_all_text {
|
} elsif ($token->[0] eq 'PI') { |
} elsif ($token->[0] eq 'PI') { |
$result.=$token->[2]; |
$result.=$token->[2]; |
} elsif ($token->[0] eq 'S') { |
} elsif ($token->[0] eq 'S') { |
if ( $token->[1] eq $tag) { |
if ( $token->[1] =~ /^$tag$/i) { |
$pars->unget_token($token); last; |
$pars->unget_token($token); last; |
} else { |
} else { |
$result.=$token->[4]; |
$result.=$token->[4]; |
Line 926 sub newparser {
|
Line 969 sub newparser {
|
sub parstring { |
sub parstring { |
my ($token) = @_; |
my ($token) = @_; |
my $temp=''; |
my $temp=''; |
map { |
foreach (@{$token->[3]}) { |
unless ($_=~/\W/) { |
unless ($_=~/\W/) { |
my $val=$token->[2]->{$_}; |
my $val=$token->[2]->{$_}; |
$val =~ s/([\%\@\\])/\\$1/g; |
$val =~ s/([\%\@\\\"])/\\$1/g; |
#if ($val =~ m/^[\%\@]/) { $val="\\".$val; } |
#if ($val =~ m/^[\%\@]/) { $val="\\".$val; } |
$temp .= "my \$$_=\"$val\";" |
$temp .= "my \$$_=\"$val\";" |
} |
} |
} @{$token->[3]}; |
} |
return $temp; |
return $temp; |
} |
} |
|
|
Line 946 sub writeallows {
|
Line 989 sub writeallows {
|
my $thisdir=$thisurl; |
my $thisdir=$thisurl; |
$thisdir=~s/\/[^\/]+$//; |
$thisdir=~s/\/[^\/]+$//; |
my %httpref=(); |
my %httpref=(); |
map { |
foreach (@extlinks) { |
$httpref{'httpref.'. |
$httpref{'httpref.'. |
&Apache::lonnet::hreflocation($thisdir,$_)}=$thisurl; |
&Apache::lonnet::hreflocation($thisdir,$_)}=$thisurl; |
} @extlinks; |
} |
@extlinks=(); |
@extlinks=(); |
&Apache::lonnet::appenv(%httpref); |
&Apache::lonnet::appenv(%httpref); |
} |
} |
Line 959 sub writeallows {
|
Line 1002 sub writeallows {
|
# |
# |
sub afterburn { |
sub afterburn { |
my $result=shift; |
my $result=shift; |
map { |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
my ($name, $value) = split(/=/,$_); |
['highlight','anchor','link']); |
$value =~ tr/+/ /; |
|
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; |
|
if (($name eq 'highlight')||($name eq 'anchor')||($name eq 'link')) { |
|
unless ($ENV{'form.'.$name}) { |
|
$ENV{'form.'.$name}=$value; |
|
} |
|
} |
|
} (split(/&/,$ENV{'QUERY_STRING'})); |
|
if ($ENV{'form.highlight'}) { |
if ($ENV{'form.highlight'}) { |
map { |
foreach (split(/\,/,$ENV{'form.highlight'})) { |
my $anchorname=$_; |
my $anchorname=$_; |
my $matchthis=$anchorname; |
my $matchthis=$anchorname; |
$matchthis=~s/\_+/\\s\+/g; |
$matchthis=~s/\_+/\\s\+/g; |
$result=~s/($matchthis)/\<font color=\"red\"\>$1\<\/font\>/gs; |
$result=~s/($matchthis)/\<font color=\"red\"\>$1\<\/font\>/gs; |
} split(/\,/,$ENV{'form.highlight'}); |
} |
} |
} |
if ($ENV{'form.link'}) { |
if ($ENV{'form.link'}) { |
map { |
foreach (split(/\,/,$ENV{'form.link'})) { |
my ($anchorname,$linkurl)=split(/\>/,$_); |
my ($anchorname,$linkurl)=split(/\>/,$_); |
my $matchthis=$anchorname; |
my $matchthis=$anchorname; |
$matchthis=~s/\_+/\\s\+/g; |
$matchthis=~s/\_+/\\s\+/g; |
$result=~s/($matchthis)/\<a href=\"$linkurl\"\>$1\<\/a\>/gs; |
$result=~s/($matchthis)/\<a href=\"$linkurl\"\>$1\<\/a\>/gs; |
} split(/\,/,$ENV{'form.link'}); |
} |
} |
} |
if ($ENV{'form.anchor'}) { |
if ($ENV{'form.anchor'}) { |
my $anchorname=$ENV{'form.anchor'}; |
my $anchorname=$ENV{'form.anchor'}; |
Line 1004 sub storefile {
|
Line 1039 sub storefile {
|
if (my $fh=Apache::File->new('>'.$file)) { |
if (my $fh=Apache::File->new('>'.$file)) { |
print $fh $contents; |
print $fh $contents; |
$fh->close(); |
$fh->close(); |
|
} else { |
|
&warning("Unable to save file $file"); |
} |
} |
} |
} |
|
|
sub inserteditinfo { |
sub createnewhtml { |
my ($result,$filecontents)=@_; |
my $filecontents=(<<SIMPLECONTENT); |
unless ($filecontents) { |
|
$filecontents=(<<SIMPLECONTENT); |
|
<html> |
<html> |
<head> |
<head> |
<title> |
<title> |
Line 1024 sub inserteditinfo {
|
Line 1059 sub inserteditinfo {
|
</body> |
</body> |
</html> |
</html> |
SIMPLECONTENT |
SIMPLECONTENT |
} |
return $filecontents; |
my $editheader='<a href="#editsection">Edit below</a><hr />'; |
} |
|
|
|
|
|
sub inserteditinfo { |
|
my ($result,$filecontents)=@_; |
|
$filecontents =~ s:</textarea>:</textarea>:ig; |
|
# my $editheader='<a href="#editsection">Edit below</a><hr />'; |
my $editfooter=(<<ENDFOOTER); |
my $editfooter=(<<ENDFOOTER); |
<hr /> |
<hr /> |
<a name="editsection" /> |
<a name="editsection" /> |
<form method="post"> |
<form method="post"> |
<textarea cols="80" rows="40" name="filecont">$filecontents</textarea> |
<textarea cols="80" rows="40" name="filecont">$filecontents</textarea> |
<br /> |
<br /> |
|
<input type="hidden" name="showmode" value="Edit" /> |
<input type="submit" name="attemptclean" |
<input type="submit" name="attemptclean" |
value="Save and then attempt to clean HTML" /> |
value="Save and then attempt to clean HTML" /> |
<input type="submit" name="savethisfile" value="Save this" /> |
<input type="submit" name="savethisfile" value="Save this" /> |
|
<input type="submit" name="showmode" value="View" /> |
</form> |
</form> |
ENDFOOTER |
ENDFOOTER |
$result=~s/(\<body[^\>]*\>)/$1$editheader/is; |
# $result=~s/(\<body[^\>]*\>)/$1$editheader/is; |
$result=~s/(\<\/body\>)/$editfooter/is; |
$result=~s/(\<\/body\>)/$editfooter/is; |
return $result; |
return $result; |
} |
} |
|
|
|
sub get_target { |
|
my $viewgrades=&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'}); |
|
if ( $ENV{'request.state'} eq 'published') { |
|
if ( defined($ENV{'form.grade_target'}) |
|
&& ($viewgrades == 'F' )) { |
|
return ($ENV{'form.grade_target'}); |
|
} elsif (defined($ENV{'form.grade_target'})) { |
|
if (($ENV{'form.grade_target'} eq 'web') || |
|
($ENV{'form.grade_target'} eq 'tex') ) { |
|
return $ENV{'form.grade_target'} |
|
} else { |
|
return 'web'; |
|
} |
|
} else { |
|
return 'web'; |
|
} |
|
} elsif ($ENV{'request.state'} eq 'construct') { |
|
if ( defined($ENV{'form.grade_target'})) { |
|
return ($ENV{'form.grade_target'}); |
|
} else { |
|
return 'web'; |
|
} |
|
} else { |
|
return 'web'; |
|
} |
|
} |
|
|
sub handler { |
sub handler { |
my $request=shift; |
my $request=shift; |
|
|
my $target='web'; |
my $target=&get_target(); |
|
|
$Apache::lonxml::debug=0; |
$Apache::lonxml::debug=0; |
|
|
Line 1070 sub handler {
|
Line 1140 sub handler {
|
} |
} |
} |
} |
my %mystyle; |
my %mystyle; |
my $result = ''; |
my $result = ''; |
my $filecontents=&Apache::lonnet::getfile($file); |
my $filecontents=&Apache::lonnet::getfile($file); |
if ($filecontents == -1) { |
if ($filecontents == -1) { |
$result=(<<ENDNOTFOUND); |
$result=(<<ENDNOTFOUND); |
Line 1084 sub handler {
|
Line 1154 sub handler {
|
</html> |
</html> |
ENDNOTFOUND |
ENDNOTFOUND |
$filecontents=''; |
$filecontents=''; |
|
if ($ENV{'request.state'} ne 'published') { |
|
$filecontents=&createnewhtml(); |
|
$ENV{'form.showmode'}='Edit'; #force edit mode |
|
} |
} else { |
} else { |
unless ($ENV{'request.state'} eq 'published') { |
unless ($ENV{'request.state'} eq 'published') { |
if ($ENV{'form.attemptclean'}) { |
if ($ENV{'form.attemptclean'}) { |
$filecontents=&htmlclean($filecontents,1); |
$filecontents=&htmlclean($filecontents,1); |
} |
|
} |
} |
$result = &Apache::lonxml::xmlparse($target,$filecontents,'',%mystyle); |
} |
|
if ($ENV{'form.showmode'} ne 'Edit') { |
|
$result = &Apache::lonxml::xmlparse($target,$filecontents,'',%mystyle); |
|
} |
} |
} |
|
|
# |
# |
# Edit action? Insert editing commands |
# Edit action? Insert editing commands |
# |
# |
unless ($ENV{'request.state'} eq 'published') { |
unless ($ENV{'request.state'} eq 'published') { |
|
if ($ENV{'form.showmode'} eq 'Edit') { |
|
$result='<html><body bgcolor="#FFFFFF"></body></html>'; |
$result=&inserteditinfo($result,$filecontents); |
$result=&inserteditinfo($result,$filecontents); |
|
} |
} |
} |
|
|
writeallows($request->uri); |
writeallows($request->uri); |
|
|
$request->print($result); |
$request->print($result); |
|
|
return OK; |
return OK; |
} |
} |
|
|
sub debug { |
sub debug { |
if ($Apache::lonxml::debug eq 1) { |
if ($Apache::lonxml::debug eq 1) { |
print("DEBUG:".$_[0]."<br />\n"); |
$|=1; |
|
print("DEBUG:".join('<br />',@_)."<br />\n"); |
} |
} |
} |
} |
|
|
sub error { |
sub error { |
if (($Apache::lonxml::debug eq 1) || ($ENV{'request.state'} eq 'construct') ) { |
if (($Apache::lonxml::debug eq 1) || ($ENV{'request.state'} eq 'construct') ) { |
print "<b>ERROR:</b>".$_[0]."<br />\n"; |
print "<b>ERROR:</b>".join('<br />',@_)."<br />\n"; |
} else { |
} else { |
print "<b>An Error occured while processing this resource. The instructor has been notified.</b> <br />"; |
print "<b>An Error occured while processing this resource. The instructor has been notified.</b> <br />"; |
#notify author |
#notify author |
&Apache::lonmsg::author_res_msg($ENV{'request.filename'},$_[0]); |
&Apache::lonmsg::author_res_msg($ENV{'request.filename'},join('<br />',@_)); |
#notify course |
#notify course |
if ( $ENV{'request.course.id'} ) { |
if ( $ENV{'request.course.id'} ) { |
my $users=$ENV{'course.'.$ENV{'request.course.id'}.'.comment.email'}; |
my $users=$ENV{'course.'.$ENV{'request.course.id'}.'.comment.email'}; |
|
my $declutter=&Apache::lonnet::declutter($ENV{'request.filename'}); |
foreach my $user (split /\,/, $users) { |
foreach my $user (split /\,/, $users) { |
($user,my $domain) = split /:/, $user; |
($user,my $domain) = split /:/, $user; |
&Apache::lonmsg::user_normal_msg($user,$domain,"Error in $ENV{'request.filename'}",$_[0]); |
&Apache::lonmsg::user_normal_msg($user,$domain, |
|
"Error [$declutter]",join('<br />',@_)); |
} |
} |
} |
} |
|
|
#FIXME probably shouldn't have me get everything forever. |
#FIXME probably shouldn't have me get everything forever. |
&Apache::lonmsg::user_normal_msg('albertel','msu',"Error in $ENV{'request.filename'}",$_[0]); |
&Apache::lonmsg::user_normal_msg('albertel','msu',"Error in $ENV{'request.filename'}",join('<br />',@_)); |
#&Apache::lonmsg::user_normal_msg('albertel','103',"Error in $ENV{'request.filename'}",$_[0]); |
#&Apache::lonmsg::user_normal_msg('albertel','103',"Error in $ENV{'request.filename'}",$_[0]); |
} |
} |
} |
} |
|
|
sub warning { |
sub warning { |
if ($ENV{'request.state'} eq 'construct') { |
if ($ENV{'request.state'} eq 'construct') { |
print "<b>W</b>ARNING<b>:</b>".$_[0]."<br />\n"; |
print "<b>W</b>ARNING<b>:</b>".join('<br />',@_)."<br />\n"; |
} |
} |
} |
} |
|
|
Line 1194 sub register_insert {
|
Line 1276 sub register_insert {
|
my $line = $data[$i]; |
my $line = $data[$i]; |
my ($mnemonic,@which) = split(/ +/,$line); |
my ($mnemonic,@which) = split(/ +/,$line); |
my $tag = $insertlist{"$tagnum.tag"}; |
my $tag = $insertlist{"$tagnum.tag"}; |
for (my $j=0;$j <$#which;$j++) { |
for (my $j=0;$j <=$#which;$j++) { |
if ( $which[$j] eq 'Y' ) { |
if ( $which[$j] eq 'Y' ) { |
if ($insertlist{"$j.show"} ne 'no') { |
if ($insertlist{"$j.show"} ne 'no') { |
push(@{ $insertlist{"$tag.which"} },$j); |
push(@{ $insertlist{"$tag.which"} },$j); |