Diff for /loncom/xml/lonxml.pm between versions 1.147 and 1.153

version 1.147, 2002/01/08 21:11:13 version 1.153, 2002/02/21 04:18:59
Line 463  sub xmlparse { Line 463  sub xmlparse {
   
  ($target, my @tenta) = split('&&',$target);   ($target, my @tenta) = split('&&',$target);
   
  my @stack = ();    my @stack = ();
  my @parstack = ();   my @parstack = ();
  &initdepth;   &initdepth;
   
Line 533  sub inner_xmlparse { Line 533  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 613  sub recurse { Line 619  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 677  sub callsub { Line 689  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 885  sub get_all_text { Line 897  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 903  sub get_all_text { Line 915  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 936  sub parstring { Line 948  sub parstring {
   foreach (@{$token->[3]}) {    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\";"
     }      }
Line 1016  sub storefile { Line 1028  sub storefile {
     }      }
 }  }
   
 sub inserteditinfo {  sub createnewhtml {
       my ($result,$filecontents)=@_;    my $filecontents=(<<SIMPLECONTENT);
       unless ($filecontents) {  
   $filecontents=(<<SIMPLECONTENT);  
 <html>  <html>
 <head>  <head>
 <title>  <title>
Line 1033  sub inserteditinfo { Line 1043  sub inserteditinfo {
 </body>  </body>
 </html>  </html>
 SIMPLECONTENT  SIMPLECONTENT
       }    return $filecontents;
   }
   
   
       $filecontents =~ s:</textarea>:&lt;/textarea&gt;:g;  sub inserteditinfo {
         my ($result,$filecontents)=@_;
         $filecontents =~ s:</textarea>:&lt;/textarea&gt;:ig;
 #      my $editheader='<a href="#editsection">Edit below</a><hr />';  #      my $editheader='<a href="#editsection">Edit below</a><hr />';
       my $editfooter=(<<ENDFOOTER);        my $editfooter=(<<ENDFOOTER);
 <hr />  <hr />
Line 1055  ENDFOOTER Line 1069  ENDFOOTER
       return $result;        return $result;
 }  }
   
 sub editbutton {  sub get_target {
   my ($result) = @_;    my $viewgrades=&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'});
   my $button=(<<EDITBUTTON);    if ( $ENV{'request.state'} eq 'published') {
 <form method="post">      if ( defined($ENV{'form.grade_target'})
 <input type="submit" name="showmode" value="Edit" />   && ($viewgrades == 'F' )) {
 </form>        return ($ENV{'form.grade_target'});
 EDITBUTTON      } elsif (defined($ENV{'form.grade_target'})) {
   $result=~s/(\<\/body\>)/$button/is;        if (($ENV{'form.grade_target'} eq 'web') ||
   return $result;    ($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 1108  sub handler { Line 1138  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'}) {
Line 1126  ENDNOTFOUND Line 1160  ENDNOTFOUND
     if ($ENV{'form.showmode'} eq 'Edit') {      if ($ENV{'form.showmode'} eq 'Edit') {
       $result='<html><body bgcolor="#FFFFFF"></body></html>';        $result='<html><body bgcolor="#FFFFFF"></body></html>';
       $result=&inserteditinfo($result,$filecontents);        $result=&inserteditinfo($result,$filecontents);
     } else {  
       $result = &editbutton($result);  
     }      }
   }    }
   

Removed from v.1.147  
changed lines
  Added in v.1.153


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>