Diff for /loncom/xml/lonxml.pm between versions 1.45 and 1.53

version 1.45, 2001/01/06 15:31:27 version 1.53, 2001/02/14 02:57:02
Line 13  use HTML::TokeParser; Line 13  use HTML::TokeParser;
 use Safe;  use Safe;
 use Safe::Hole;  use Safe::Hole;
 use Opcode;  use Opcode;
 use Apache::Constants(:common);  use Apache::Constants qw(:common);
   
 sub register {  sub register {
   my $space;    my $space;
Line 24  sub register { Line 24  sub register {
     $Apache::lonxml::alltags{$temptag}=$space;      $Apache::lonxml::alltags{$temptag}=$space;
   }    }
 }  }
                                        
   sub printalltags {
     my $temp;
     foreach $temp (sort keys %Apache::lonxml::alltags) {
       &Apache::lonxml::debug("$temp -- $Apache::lonxml::alltags{$temp}");
     }
   }
 use Apache::style;  use Apache::style;
 use Apache::lontexconvert;  use Apache::lontexconvert;
 use Apache::run;  use Apache::run;
Line 44  sub xmlparse { Line 50  sub xmlparse {
  if ($target eq 'meta') {   if ($target eq 'meta') {
    $Apache::lonxml::textredirection = 0;     $Apache::lonxml::textredirection = 0;
    $Apache::lonxml::on_offimport = 1;     $Apache::lonxml::on_offimport = 1;
    } elsif ($target eq 'grade') {
      $Apache::lonxml::textredirection = 0;
      $Apache::lonxml::on_offimport = 0;
  } else {   } else {
    $Apache::lonxml::textredirection = 1;     $Apache::lonxml::textredirection = 1;
    $Apache::lonxml::on_offimport = 0;     $Apache::lonxml::on_offimport = 0;
  }   }
    #&printalltags();
  my @pars = ();   my @pars = ();
  @Apache::lonxml::pwd=();   @Apache::lonxml::pwd=();
  my $pwd=$ENV{'request.filename'};   my $pwd=$ENV{'request.filename'};
Line 110  sub xmlparse { Line 120  sub xmlparse {
        #clear out any tags that didn't end         #clear out any tags that didn't end
        while ($token->[1] ne $stack[$#stack]          while ($token->[1] ne $stack[$#stack] 
       && ($#stack > -1)) {        && ($#stack > -1)) {
  &Apache::lonxml::error("Unbalanced tags in resource $stack['-1']");      &Apache::lonxml::warning("Unbalanced tags in resource $stack['-1']");   
  pop @stack;pop @parstack;&decreasedepth($token);   pop @stack;pop @parstack;&decreasedepth($token);
        }         }
                 
Line 184  sub recurse { Line 194  sub recurse {
  #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::error("Unbalanced tags in resource $innerstack['-1']");    &Apache::lonxml::warning("Unbalanced tags in resource $innerstack['-1']");
   pop @innerstack;pop @innerparstack;&decreasedepth($tokenpat);    pop @innerstack;pop @innerparstack;&decreasedepth($tokenpat);
  }   }
  $partstring = &callsub("end_$tokenpat->[1]",   $partstring = &callsub("end_$tokenpat->[1]",
Line 270  sub decreasedepth { Line 280  sub decreasedepth {
     $Apache::lonxml::olddepth=$Apache::lonxml::depth+1;      $Apache::lonxml::olddepth=$Apache::lonxml::depth+1;
   }    }
   if (  $Apache::lonxml::depth < -1) {    if (  $Apache::lonxml::depth < -1) {
     &Apache::lonxml::error("Unbalanced tags in resource");         &Apache::lonxml::warning("Unbalanced tags in resource");   
     $Apache::lonxml::depth='-1';      $Apache::lonxml::depth='-1';
   }    }
   my $curdepth=join('_',@Apache::lonxml::depthcounter);    my $curdepth=join('_',@Apache::lonxml::depthcounter);
Line 285  sub get_all_text { Line 295  sub get_all_text {
  my $token;   my $token;
  my $result='';   my $result='';
  my $tag=substr($tag,1); #strip the / off the tag   my $tag=substr($tag,1); #strip the / off the tag
 # &Apache::lonxml::debug("have:$tag:");   #&Apache::lonxml::debug("have:$tag:");
  while (($depth >=0) && ($token = $pars->get_token)) {   while (($depth >=0) && ($token = $pars->get_token)) {
      #&Apache::lonxml::debug("token:$token->[0]:$depth:$token->[1]");
    if ($token->[0] eq 'T') {     if ($token->[0] eq 'T') {
      $result.=$token->[1];       $result.=$token->[1];
    } elsif ($token->[0] eq 'S') {     } elsif ($token->[0] eq 'S') {
Line 300  sub get_all_text { Line 311  sub get_all_text {
      }       }
    }     }
  }   }
   # &Apache::lonxml::debug("Exit:$result:");
  return $result   return $result
 }  }
   
Line 321  sub parstring { Line 333  sub parstring {
   map {    map {
     unless ($_=~/\W/) {      unless ($_=~/\W/) {
       my $val=$token->[2]->{$_};        my $val=$token->[2]->{$_};
       if ($val =~ m/^[\%\@]/) { $val="\\".$val; }        $val =~ s/([\%\@\\])/\\$1/g;
         #if ($val =~ m/^[\%\@]/) { $val="\\".$val; }
       $temp .= "my \$$_=\"$val\";"        $temp .= "my \$$_=\"$val\";"
     }      }
   } @{$token->[3]};    } @{$token->[3]};
Line 343  sub handler { Line 356  sub handler {
   my $request=shift;    my $request=shift;
       
   my $target='web';    my $target='web';
 #  $Apache::lonxml::debug=1;    $Apache::lonxml::debug=0;
   if ($ENV{'browser.mathml'}) {    if ($ENV{'browser.mathml'}) {
     $request->content_type('text/xml');      $request->content_type('text/xml');
   } else {    } else {
Line 366  sub handler { Line 379  sub handler {
   
   $request->print('<body bgcolor="#FFFFFF">'."\n");    $request->print('<body bgcolor="#FFFFFF">'."\n");
   
   my $file = "/home/httpd/html".$request->uri;    my $file=&Apache::lonnet::filelocation("",$request->uri);
   my %mystyle;    my %mystyle;
   my $result = '';    my $result = ''; 
   $result = Apache::lonxml::xmlparse($target, &Apache::lonnet::getfile($file),'',%mystyle);    my $filecontents=&Apache::lonnet::getfile($file);
     if ($filecontents == -1) {
       &Apache::lonxml::error("<b> Unable to find <i>$file</i></b>");
       $filecontents='';
     } else {
       $result = &Apache::lonxml::xmlparse($target,$filecontents,'',%mystyle);
     }
   $request->print($result);    $request->print($result);
   
   
   $request->print('</body>');    $request->print('</body>');
   $request->print(&Apache::lontexconvert::footer());    $request->print(&Apache::lontexconvert::footer());
   writeallows($request->uri);    writeallows($request->uri);
Line 384  sub debug { Line 404  sub debug {
     print "DEBUG:".$_[0]."<br>\n";      print "DEBUG:".$_[0]."<br>\n";
   }    }
 }  }
   
 sub error {  sub error {
 #  print "ERROR:".$_[0]."<br>\n";    if ($Apache::lonxml::debug eq 1) {
       print "ERROR:".$_[0]."<br>\n";
     } else {
       print "<b>An Error occured while processing this resource. The instructor has been notified.</b> <br />";
       #notify author
       &Apache::lonmsg::author_res_msg($ENV{'request.filename'},$_[0]);
       #notify course
       if ( $ENV{'request.course.id'} ) {
         my $users=$ENV{'course.'.$ENV{'request.course.id'}.'.comment.email'};
         foreach my $user (split /\,/, $users) {
    ($user,my $domain) = split /:/, $user;
    &Apache::lonmsg::user_crit_msg($user,$domain,"Error in $ENV{'request.filename'}",$_[0]);
         }
       }
       
       #FIXME probably shouldn't have me get everything forever.
       &Apache::lonmsg::user_crit_msg('albertel','msu',"Error in $ENV{'request.filename'}",$_[0]);
       #&Apache::lonmsg::user_crit_msg('albertel','103',"Error in $ENV{'request.filename'}",$_[0]);   
     }
 }  }
   
 sub warning {  sub warning {
   if ($Apache::lonxml::debug eq 1) {    if ($Apache::lonxml::debug eq 1) {
     print "WARNING:".$_[0]."<br>\n";      print "WARNING:".$_[0]."<br>\n";
Line 395  sub warning { Line 435  sub warning {
   
 1;  1;
 __END__  __END__
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   

Removed from v.1.45  
changed lines
  Added in v.1.53


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