Diff for /loncom/xml/scripttag.pm between versions 1.110 and 1.126

version 1.110, 2004/02/24 21:12:48 version 1.126, 2005/04/07 06:56:27
Line 25 Line 25
 #  #
 # http://www.lon-capa.org/  # http://www.lon-capa.org/
 #  #
 # 2/21 Guy  
 # 8/20 Gerd Kortemeyer  
   
 package Apache::scripttag;  package Apache::scripttag;
   
Line 43  BEGIN { Line 41  BEGIN {
   &Apache::lonxml::register('Apache::scripttag',    &Apache::lonxml::register('Apache::scripttag',
     ('script','scriptlib','parserlib','import',      ('script','scriptlib','parserlib','import',
      'window','display','storetc','physnet',       'window','display','storetc','physnet',
      'standalone','comment',       'standalone','comment','num','parse','algebra',
      'LONCAPA_INTERNAL_TURN_STYLE_ON',       'LONCAPA_INTERNAL_TURN_STYLE_ON',
      'LONCAPA_INTERNAL_TURN_STYLE_OFF',       'LONCAPA_INTERNAL_TURN_STYLE_OFF',
      'LONCAPA_INTERNAL_LONHTTPD_PORT'));       'LONCAPA_INTERNAL_LONHTTPD_PORT'));
Line 115  sub start_script { Line 113  sub start_script {
  }   }
  &Apache::run::run($bodytext,$safeeval);   &Apache::run::run($bodytext,$safeeval);
  if (($target eq 'answer') &&   if (($target eq 'answer') &&
     ($ENV{'form.answer_output_mode'} ne 'tex') &&      ($env{'form.answer_output_mode'} ne 'tex') &&
     ($Apache::lonhomework::viewgrades == 'F')) {      ($Apache::lonhomework::viewgrades == 'F')) {
     $Apache::lonxml::evaluate--;      $Apache::lonxml::evaluate--;
     my (undef,undef,$udom,$uname)=&Apache::lonxml::whichuser();      my (undef,undef,$udom,$uname)=&Apache::lonxml::whichuser();
     $result.="<script type=\"text/javascript\"> function LONCAPA_scriptvars_".$uname."_".$udom."_"."$Apache::lonxml::curdepth() {newWindow=open('','new_W','width=500,height=500,scrollbars=1,resizable=yes');newWindow.document.open('text/html','replace');newWindow.document.writeln('<html><head><title>Script Vars</title></head><body bgcolor=\"#FFFFFF\"><pre>";      my $windowopen=&Apache::lonhtmlcommon::javascript_docopen();
       $result.="<script type=\"text/javascript\">
   // <![CDATA[
       function LONCAPA_scriptvars_".$uname."_".$udom."_"."$Apache::lonxml::curdepth() {newWindow=open('','new_W','width=500,height=500,scrollbars=1,resizable=yes');newWindow.$windowopen;newWindow.document.writeln('<html><head><title>Script Vars</title></head><body bgcolor=\"#FFFFFF\"><pre>";
     my $listing=&Apache::run::dump($target,$safeeval);      my $listing=&Apache::run::dump($target,$safeeval);
     $listing=~s/\'/\\\'/g;      $listing=~s/\'/\\\'/g;
     $listing=~s/\n/\\n/g;      $listing=~s/\n/\\n/g;
     $listing=~s/\r/\\r/g;      $listing=~s/\r/\\r/g;
     $result.=$listing;      $result.=$listing;
     $result.= "</pre></body></html>');newWindow.document.close();}</script><a href=\"javascript:LONCAPA_scriptvars_".$uname."_".$udom."_$Apache::lonxml::curdepth();void(0);\">Script Vars</a><br />";      $result.= "</pre></body></html>');newWindow.document.close();}
   // ]]>
   </script><a href=\"javascript:LONCAPA_scriptvars_".$uname."_".$udom."_$Apache::lonxml::curdepth();void(0);\">Script Vars</a><br />";
  }   }
     } elsif ($target eq "edit" ) {      } elsif ($target eq "edit" ) {
       #&Apache::run::run($bodytext,$safeeval);        #&Apache::run::run($bodytext,$safeeval);
Line 137  sub start_script { Line 140  sub start_script {
  my $bodytext=&Apache::lonxml::get_all_text_unbalanced("/script",$parser);   my $bodytext=&Apache::lonxml::get_all_text_unbalanced("/script",$parser);
     }      }
   } else {    } else {
     if ($target ne "meta") {  
       $result = $token->[4];  
       my $bodytext=&Apache::lonxml::get_all_text_unbalanced("/script",$parser);        my $bodytext=&Apache::lonxml::get_all_text_unbalanced("/script",$parser);
       $result.=$bodytext;        if ($target ne "meta" && $target ne 'tex') {
     }    $result = $token->[4];
     $result.=$bodytext;
         }
   }    }
   return $result;    return $result;
 }  }
Line 152  sub end_script { Line 155  sub end_script {
   my $type = &Apache::lonxml::get_param('type',$parstack,$safeeval);    my $type = &Apache::lonxml::get_param('type',$parstack,$safeeval);
   my $result='';    my $result='';
   #other script blocks need to survive    #other script blocks need to survive
   if ($type ne "loncapa/perl") {    if ($type ne "loncapa/perl" && $target ne 'tex') {
     return $token->[2];      return $token->[2];
   } elsif ($target eq 'edit' ) {    } elsif ($target eq 'edit' ) {
     return &Apache::edit::end_table();      return &Apache::edit::end_table();
Line 164  sub end_script { Line 167  sub end_script {
   
 sub start_display {  sub start_display {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
     @Apache::scripttag::parser_env = @_;
   my $result;    my $result;
   
   if ( $target eq "modified" ) {    if ( $target eq "modified" ) {
Line 179  sub start_display { Line 182  sub start_display {
       $result=&Apache::run::run($bodytext,$safeeval);        $result=&Apache::run::run($bodytext,$safeeval);
       if ($target eq 'grade' || $target eq 'answer' ||        if ($target eq 'grade' || $target eq 'answer' ||
   $target eq 'analyze') {    $target eq 'analyze') {
   $result=''; # grade should produce no output    # grade/answer/analyxe should produce no output but if we
     # are redirecting, the redirecter should know what to do
     # with the output
     if (!$Apache::lonxml::redirection) { $result=''; }
       }        }
       $Apache::lonxml::post_evaluate=0;        $Apache::lonxml::post_evaluate=0;
   } elsif ($target eq "edit" ) {    } elsif ($target eq "edit" ) {
Line 392  sub end_import { Line 398  sub end_import {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
   pop(@Apache::inputtags::import);    pop(@Apache::inputtags::import);
   my $result;    my $result;
   if ($target eq 'edit' ) { $result=&Apache::edit::end_table(); }    if ($target eq 'edit' ) { $result=&Apache::edit::end_row.
    &Apache::edit::end_table(); }
   return $result;    return $result;
 }  }
   
Line 435  sub start_standalone { Line 442  sub start_standalone {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
   my $result='';    my $result='';
   if ($target eq 'web' ) {    if ($target eq 'web' ) {
     if ( $ENV{'request.course.id'} ) {      if ( $env{'request.course.id'} ) {
       my $inside = &Apache::lonxml::get_all_text("/standalone",$parser);        my $inside = &Apache::lonxml::get_all_text("/standalone",$parser);
     } else {      } else {
       $result='<table bgcolor="#E1E1E1" border="2"><tr><td>';        $result='<table bgcolor="#E1E1E1" border="2"><tr><td>';
Line 448  sub end_standalone { Line 455  sub end_standalone {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
   my $result='';    my $result='';
   if ($target eq 'web' ) {    if ($target eq 'web' ) {
     if ( $ENV{'request.course.id'} ) {      if ( $env{'request.course.id'} ) {
     } else {      } else {
       $result='</td></tr></table>';        $result='</td></tr></table>';
     }      }
Line 482  sub end_comment { Line 489  sub end_comment {
   
 sub xmlparse {  sub xmlparse {
   my ($string) = @_;    my ($string) = @_;
 #  &Apache::lonxml::debug("Got $string");    &Apache::lonxml::debug("xmlparse recursion starting with $string");
     # Apache::run::evaluate does an 'eval' on the name of the subroutine
     # if it detects something that looks like a subroutine, this ends up calling
     # things without any arguments and since perl is nice enough to pass
     # along the default arguments when you don't explicitly say no arguments
     # if you call &xmlparse, it gets &xmlparse passed as it argument.
     # Same thing soccurs with &chemparse.
     if ($string eq '&xmlparse') { return '&xmlparse'; }
     if ($string eq '&chemparse') { return '&chemparse'; }
   my ($target,$token,$tagstack,$parstack,$oldparser,$safeeval,$style)=    my ($target,$token,$tagstack,$parstack,$oldparser,$safeeval,$style)=
     @Apache::scripttag::parser_env;      @Apache::scripttag::parser_env;
   my @parser;    my @parser;
Line 490  sub xmlparse { Line 505  sub xmlparse {
   my $result=&Apache::lonxml::inner_xmlparse($target,$tagstack,    my $result=&Apache::lonxml::inner_xmlparse($target,$tagstack,
      $parstack,\@parser,       $parstack,\@parser,
      $safeeval,$style);       $safeeval,$style);
     &Apache::lonxml::debug("target is $target xmlparse recursion ending with $result");
   return $result;    return $result;
 }  }
   
   sub start_num {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_;
       my $result = '';
       my $inside = &Apache::lonxml::get_all_text_unbalanced("/num",$parser);
       if ($target eq 'tex' || $target eq 'web') {
    $inside=&Apache::run::evaluate($inside,$safeeval,$$parstack[-1]);
    if (!$Apache::lonxml::default_homework_loaded) {
       &Apache::lonxml::default_homework_load($safeeval);
    }
    @Apache::scripttag::parser_env = @_;
    my $format=&Apache::lonxml::get_param('format',$parstack,$safeeval);
    $result=&Apache::run::run("return &prettyprint(q\0$inside\0,q\0$format\0);",$safeeval);
       }    
       return $result;
   }
   
   sub end_num {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_;
       my $result = '';
       return $result;
   }
   
   sub start_parse {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_;
       my $result = '';
       if ( $target eq 'web' || $target eq 'tex' ||
    $target eq 'grade' || $target eq 'answer' ||
    $target eq 'analyze') {
    my $inside = &Apache::lonxml::get_all_text_unbalanced("/parse",$parser);
    $inside=&Apache::run::evaluate($inside,$safeeval,$$parstack[-1]);
    if (!$Apache::lonxml::default_homework_loaded) {
       &Apache::lonxml::default_homework_load($safeeval);
    }
    @Apache::scripttag::parser_env = @_;
    $result=&Apache::run::run("return &xmlparse(q\0$inside\0);",$safeeval);
       }
       return $result;
   }
   
   sub end_parse {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_;
       my $result = '';
       return $result;
   }
   
   sub start_algebra {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_;
       my $result = '';
       if ( $target eq 'web' || $target eq 'tex' ||
    $target eq 'grade' || $target eq 'answer' ||
    $target eq 'analyze') {
    my $inside = &Apache::lonxml::get_all_text_unbalanced("/algebra",$parser);
    $inside = &Apache::run::evaluate($inside,$safeeval,$$parstack[-1]);
    if ($target eq 'web' || $target eq 'tex' || $target eq 'analyze') {
       my $style=&Apache::lonxml::get_param('style',$parstack,$safeeval);
       $result=&Apache::lontexconvert::algebra($inside,$target,$style);
    }
    $Apache::lonxml::post_evaluate=0;
       }
       return $result;
   }
   
   sub end_algebra {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_;
       my $result = '';
       return $result;
   }
   
 1;  1;
 __END__  __END__

Removed from v.1.110  
changed lines
  Added in v.1.126


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