Diff for /loncom/xml/lonxml.pm between versions 1.285 and 1.309

version 1.285, 2003/10/11 21:06:11 version 1.309, 2004/03/09 20:37:58
Line 167  $Apache::lonxml::style_end_values=''; Line 167  $Apache::lonxml::style_end_values='';
 #should we do the postag variable interpolation  #should we do the postag variable interpolation
 $Apache::lonxml::post_evaluate=1;  $Apache::lonxml::post_evaluate=1;
   
   #a header message to emit in the case of any generated warning or errors
   $Apache::lonxml::warnings_error_header='';
   
 sub xmlbegin {  sub xmlbegin {
   my $output='';    my $output='';
   if ($ENV{'browser.mathml'}) {    if ($ENV{'browser.mathml'}) {
Line 189  sub xmlend { Line 192  sub xmlend {
  $mode='problem';   $mode='problem';
  $status=$Apache::inputtags::status[-1];    $status=$Apache::inputtags::status[-1]; 
     }      }
     return &Apache::lonfeedback::list_discussion().'</html>';      return &Apache::lonfeedback::list_discussion($mode,$status).'</html>';
 }  }
   
 sub tokeninputfield {  sub tokeninputfield {
Line 320  sub xmlparse { Line 323  sub xmlparse {
  &Apache::inputtags::initialize_inputtags();   &Apache::inputtags::initialize_inputtags();
  &Apache::outputtags::initialize_outputtags();   &Apache::outputtags::initialize_outputtags();
  &Apache::edit::initialize_edit();   &Apache::edit::initialize_edit();
    &Apache::londefdef::initialize_londefdef();
   
 #  #
 # do we have a course style file?  # do we have a course style file?
Line 336  sub xmlparse { Line 340  sub xmlparse {
                           &Apache::style::styleparser($target,$styletext));                            &Apache::style::styleparser($target,$styletext));
        }         }
     }      }
    } elsif ($ENV{'construct.style'} && ($ENV{'request.state'} eq 'construct')) {
        my $location=&Apache::lonnet::filelocation('',$ENV{'construct.style'});
        my $styletext=&Apache::lonnet::getfile($location);
          if ($styletext ne '-1') {
             %style_for_target = (%style_for_target,
                             &Apache::style::styleparser($target,$styletext));
         }
  }   }
 #&printalltags();  #&printalltags();
  my @pars = ();   my @pars = ();
Line 394  sub latex_special_symbols { Line 405  sub latex_special_symbols {
  $string =~ s/_/ /g;   $string =~ s/_/ /g;
     } else {      } else {
  $string=~s/\\ /\\char92 /g;   $string=~s/\\ /\\char92 /g;
  $string=~s/\^/\\char94 /g;   $string=~s/\^/\\\^\\strut /g;
  $string=~s/\~/\\char126 /g;   $string=~s/\~/\\char126 /g;
  $string=~s/(&[^A-Za-z\#])/\\$1/g;   #fixup & if it doesn't look like
  $string=~s/([^&])\#/$1\\#/g;          # &#123; or &alpha;
    $string=~s/(&(?!((\#[0-9]+)|([a-z][a-z0-9]*));))/\\$1/gi;
           $string=~s/([^&\\])\#/$1\\#/g;
    $string=~s/\#\#/\#\\#/g;
  $string=~s/(\$|_|{|})/\\$1/g;   $string=~s/(\$|_|{|})/\\$1/g;
  $string=~s/\\char92 /\\texttt{\\char92}/g;   $string=~s/\\char92 /\\texttt{\\char92}/g;
  $string=~s/(>|<)/\$$1\$/g; #more or less   $string=~s/(>|<)/\$$1\$/g; #more or less
Line 615  sub setup_globals { Line 629  sub setup_globals {
   @Apache::lonxml::extlinks=();    @Apache::lonxml::extlinks=();
   @Apache::lonxml::ssi_info=();    @Apache::lonxml::ssi_info=();
   $Apache::lonxml::post_evaluate=1;    $Apache::lonxml::post_evaluate=1;
     $Apache::lonxml::warnings_error_header='';
   if ($target eq 'meta') {    if ($target eq 'meta') {
     $Apache::lonxml::redirection = 0;      $Apache::lonxml::redirection = 0;
     $Apache::lonxml::metamode = 1;      $Apache::lonxml::metamode = 1;
Line 658  sub init_safespace { Line 673  sub init_safespace {
   $safeeval->permit("entereval");    $safeeval->permit("entereval");
   $safeeval->permit(":base_math");    $safeeval->permit(":base_math");
   $safeeval->permit("sort");    $safeeval->permit("sort");
     $safeeval->permit("time");
   $safeeval->deny(":base_io");    $safeeval->deny(":base_io");
   $safehole->wrap(\&Apache::scripttag::xmlparse,$safeeval,'&xmlparse');    $safehole->wrap(\&Apache::scripttag::xmlparse,$safeeval,'&xmlparse');
   $safehole->wrap(\&Apache::outputtags::multipart,$safeeval,'&multipart');    $safehole->wrap(\&Apache::outputtags::multipart,$safeeval,'&multipart');
Line 734  sub init_safespace { Line 750  sub init_safespace {
   $safehole->wrap(\&Math::Random::random_set_seed_from_phrase,$safeeval,'&random_set_seed_from_phrase');    $safehole->wrap(\&Math::Random::random_set_seed_from_phrase,$safeeval,'&random_set_seed_from_phrase');
   $safehole->wrap(\&Math::Random::random_get_seed,$safeeval,'&random_get_seed');    $safehole->wrap(\&Math::Random::random_get_seed,$safeeval,'&random_get_seed');
   $safehole->wrap(\&Math::Random::random_set_seed,$safeeval,'&random_set_seed');    $safehole->wrap(\&Math::Random::random_set_seed,$safeeval,'&random_set_seed');
     $safehole->wrap(\&Apache::lonxml::error,$safeeval,'&LONCAPA_INTERNAL_ERROR');
   
 #need to inspect this class of ops  #need to inspect this class of ops
 # $safeeval->deny(":base_orig");  # $safeeval->deny(":base_orig");
Line 744  sub init_safespace { Line 761  sub init_safespace {
   $safeinit .= ';$external::randomseed='.$rndseed.';';    $safeinit .= ';$external::randomseed='.$rndseed.';';
   &Apache::lonxml::debug("Setting rndseed to $rndseed");    &Apache::lonxml::debug("Setting rndseed to $rndseed");
   &Apache::run::run($safeinit,$safeeval);    &Apache::run::run($safeinit,$safeeval);
   
     my $subroutine=<<'EVALUATESUB';
   sub __LC_INTERNAL_EVALUATE__ {
       my ($__LC__a,$__LC__b,$__LC__c)=@_;
       my $__LC__prefix;
       while(1){
    { 
       use strict;
       no strict "vars";
       if (eval(defined(eval($__LC__a.$__LC__b)))) {
    return $__LC__prefix.eval($__LC__a.$__LC__b.$__LC__c);
       }
    }
    $__LC__prefix.=substr($__LC__a,0,1,"");
    if ($__LC__a!~/^(\$|&|\#)/) { last; }
       }
       return $__LC__prefix.$__LC__a.$__LC__b.$__LC__c;
   }
   EVALUATESUB
       $safeeval->permit("require");
       $safeeval->reval($subroutine);
       $safeeval->deny("require");
 }  }
   
 sub default_homework_load {  sub default_homework_load {
Line 1058  ENDSCRIPT Line 1097  ENDSCRIPT
   
 sub storefile {  sub storefile {
     my ($file,$contents)=@_;      my ($file,$contents)=@_;
       &Apache::lonnet::correct_line_ends(\$contents);
     if (my $fh=Apache::File->new('>'.$file)) {      if (my $fh=Apache::File->new('>'.$file)) {
  print $fh $contents;   print $fh $contents;
         $fh->close();          $fh->close();
Line 1118  sub inserteditinfo { Line 1158  sub inserteditinfo {
  'ed' => 'Edit');   'ed' => 'Edit');
       my $buttons=(<<BUTTONS);        my $buttons=(<<BUTTONS);
 $cleanbut  $cleanbut
 <input type="submit" name="savethisfile" value="$lt{'st'}" />  <input type="submit" name="savethisfile" accesskey="s"  value="$lt{'st'}" />
 <input type="submit" name="viewmode" value="$lt{'vi'}" />  <input type="submit" name="viewmode" accesskey="v" value="$lt{'vi'}" />
 BUTTONS  BUTTONS
       my $editfooter=(<<ENDFOOTER);        my $editfooter=(<<ENDFOOTER);
 <hr />  <hr />
Line 1197  sub handler { Line 1237  sub handler {
     unless ($ENV{'request.state'} eq 'published') {      unless ($ENV{'request.state'} eq 'published') {
  if (($ENV{'form.savethisfile'}) || ($ENV{'form.attemptclean'})) {   if (($ENV{'form.savethisfile'}) || ($ENV{'form.attemptclean'})) {
     if (&storefile($file,$ENV{'form.filecont'})) {      if (&storefile($file,$ENV{'form.filecont'})) {
  $request->print("<font COLOR=\"#0000FF\">".&mt('Updated').": ".   &Apache::lonxml::info("<font COLOR=\"#0000FF\">".
 &Apache::lonlocal::locallocaltime(time)." </font>");        &mt('Updated').": ".
         &Apache::lonlocal::locallocaltime(time).
         " </font>");
     }       } 
  }   }
     }      }
Line 1250  ENDNOTFOUND Line 1292  ENDNOTFOUND
  if ($ENV{'form.editmode'} && (!($ENV{'form.viewmode'}))) {   if ($ENV{'form.editmode'} && (!($ENV{'form.viewmode'}))) {
     my $displayfile=$request->uri;      my $displayfile=$request->uri;
     $displayfile=~s/^\/[^\/]*//;      $displayfile=~s/^\/[^\/]*//;
     $result='<html><body bgcolor="#FFFFFF"><h3>'.$displayfile.      $result='<html><body bgcolor="#FFFFFF">'.
    &Apache::lonxml::message_location().'<h3>'.
    $displayfile.
  '</h3></body></html>';   '</h3></body></html>';
     $result=&inserteditinfo($result,$filecontents,$filetype);      $result=&inserteditinfo($result,$filecontents,$filetype);
  }   }
Line 1258  ENDNOTFOUND Line 1302  ENDNOTFOUND
     if ($filetype eq 'html') { writeallows($request->uri); }      if ($filetype eq 'html') { writeallows($request->uri); }
   
           
       &Apache::lonxml::add_messages(\$result);
     $request->print($result);      $request->print($result);
           
     return OK;      return OK;
Line 1278  sub display_title { Line 1322  sub display_title {
 }  }
   
 sub debug {  sub debug {
   if ($Apache::lonxml::debug eq 1) {      if ($Apache::lonxml::debug eq "1") {
     $|=1;   $|=1;
     print('<font size="-2"<pre>DEBUG:'.&HTML::Entities::encode($_[0])."</pre></font>\n");   my $request=$Apache::lonxml::request;
   }   if (!$request) { $request=Apache->request; }
    $request->print('<font size="-2"><pre>DEBUG:'.&HTML::Entities::encode($_[0])."</pre></font>\n");
       }
 }  }
   
 sub error {  sub error {
   $errorcount++;    $errorcount++;
     my $request=$Apache::lonxml::request;
     if (!$request) { $request=Apache->request; }
   if (($Apache::lonxml::debug eq 1) || ($ENV{'request.state'} eq 'construct') ) {    if (($Apache::lonxml::debug eq 1) || ($ENV{'request.state'} eq 'construct') ) {
     # If printing in construction space, put the error inside <pre></pre>      # If printing in construction space, put the error inside <pre></pre>
     print "<b>ERROR:</b>".join("\n",@_)."\n";        push(@Apache::lonxml::error_messages,
      $Apache::lonxml::warnings_error_header.
      "<b>ERROR:</b>".join("<br />\n",@_)."<br />\n");
         $Apache::lonxml::warnings_error_header='';
   } else {    } else {
     print "<b>An Error occured while processing this resource. The instructor has been notified.</b> <br />";        push(@Apache::lonxml::error_messages,
      "<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'},join('<br />',@_));      &Apache::lonmsg::author_res_msg($ENV{'request.filename'},join('<br />',@_));
     #notify course      #notify course
Line 1303  sub error { Line 1355  sub error {
         "Error [$declutter]",join('<br />',@_));          "Error [$declutter]",join('<br />',@_));
       }        }
     }      }
   
     #FIXME probably shouldn't have me get everything forever.  
     &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]);  
   }    }
 }  }
   
 sub warning {  sub warning {
   $warningcount++;      $warningcount++;
       
   if ($ENV{'form.grade_target'} ne 'tex') {      if ($ENV{'form.grade_target'} ne 'tex') {
       if ($ENV{'request.state'} eq 'construct' || $Apache::lonxml::debug) {   if ($ENV{'request.state'} eq 'construct' || $Apache::lonxml::debug) {
         print "<b>W</b>ARNING<b>:</b>".join('<br />',@_)."<br />\n";      my $request=$Apache::lonxml::request;
       }      if (!$request) { $request=Apache->request; }
   }      push(@Apache::lonxml::warning_messages,
    $Apache::lonxml::warnings_error_header.
    "<b>W</b>ARNING<b>:</b>".join('<br />',@_)."<br />\n");
       $Apache::lonxml::warnings_error_header='';
    }
       }
   }
   
   sub info {
       if ($ENV{'form.grade_target'} ne 'tex' 
    && $ENV{'request.state'} eq 'construct') {
    push(@Apache::lonxml::info_messages,join('<br />',@_)."<br />\n");
       }
   }
   
   sub message_location {
       return '__LONCAPA_INTERNAL_MESSAGE_LOCATION__';
   }
   
   sub add_messages {
       my ($msg)=@_;
       my $result=join(' ',
       @Apache::lonxml::info_messages,
       @Apache::lonxml::error_messages,
       @Apache::lonxml::warning_messages);
       undef(@Apache::lonxml::info_messages);
       undef(@Apache::lonxml::error_messages);
       undef(@Apache::lonxml::warning_messages);
       $$msg=~s/__LONCAPA_INTERNAL_MESSAGE_LOCATION__/$result/;
       $$msg=~s/__LONCAPA_INTERNAL_MESSAGE_LOCATION__//g;
 }  }
   
 sub get_param {  sub get_param {
Line 1325  sub get_param { Line 1402  sub get_param {
     if ( ! $context ) { $context = -1; }      if ( ! $context ) { $context = -1; }
     my $args ='';      my $args ='';
     if ( $#$parstack > (-2-$context) ) { $args=$$parstack[$context]; }      if ( $#$parstack > (-2-$context) ) { $args=$$parstack[$context]; }
       if ( ! $Apache::lonxml::usestyle ) {
    $args=$Apache::lonxml::style_values.$args;
       }
     if ( ! $args ) { return undef; }      if ( ! $args ) { return undef; }
     if ( $case_insensitive ) {      if ( $case_insensitive ) {
  if ($args =~ s/(my \$)(\Q$param\E)(=\")/$1.lc($2).$3/ei) {   if ($args =~ s/(my \$)(\Q$param\E)(=\")/$1.lc($2).$3/ei) {
Line 1348  sub get_param_var { Line 1428  sub get_param_var {
   if ( ! $context ) { $context = -1; }    if ( ! $context ) { $context = -1; }
   my $args ='';    my $args ='';
   if ( $#$parstack > (-2-$context) ) { $args=$$parstack[$context]; }    if ( $#$parstack > (-2-$context) ) { $args=$$parstack[$context]; }
     if ( ! $Apache::lonxml::usestyle ) {
         $args=$Apache::lonxml::style_values.$args;
     }
   &Apache::lonxml::debug("Args are $args param is $param");    &Apache::lonxml::debug("Args are $args param is $param");
   if ($case_insensitive) {    if ($case_insensitive) {
       if (! ($args=~s/(my \$)(\Q$param\E)(=\")/$1.lc($2).$3/ei)) {        if (! ($args=~s/(my \$)(\Q$param\E)(=\")/$1.lc($2).$3/ei)) {

Removed from v.1.285  
changed lines
  Added in v.1.309


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