Diff for /loncom/xml/scripttag.pm between versions 1.48 and 1.149

version 1.48, 2001/07/30 22:24:56 version 1.149, 2008/11/24 18:55:01
Line 1 Line 1
 # The LearningOnline Network with CAPA  # The LearningOnline Network with CAPA
 # <script> definiton  # <script> definiton
 # 2/21 Guy  #
   # $Id$
   #
   # Copyright Michigan State University Board of Trustees
   #
   # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
   #
   # LON-CAPA is free software; you can redistribute it and/or modify
   # it under the terms of the GNU General Public License as published by
   # the Free Software Foundation; either version 2 of the License, or
   # (at your option) any later version.
   #
   # LON-CAPA is distributed in the hope that it will be useful,
   # but WITHOUT ANY WARRANTY; without even the implied warranty of
   # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   # GNU General Public License for more details.
   #
   # You should have received a copy of the GNU General Public License
   # along with LON-CAPA; if not, write to the Free Software
   # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   #
   # /home/httpd/html/adm/gpl.txt
   #
   # http://www.lon-capa.org/
   #
   
 package Apache::scripttag;  package Apache::scripttag;
   
 use strict;  use strict;
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::style;  use Apache::lonlocal;
   use Apache::style();
   
 #Globals  #Globals
 # this used to pass around the standard callsub arguments to a tag func  # this used to pass around the standard callsub arguments to a tag func
 # so xmlparse can reenter the inner_xmlparse loop.  # so xmlparse can reenter the inner_xmlparse loop.
   
 @Apache::scripttag::parser_env = ();  @Apache::scripttag::parser_env = ();
 sub BEGIN {  BEGIN {
   &Apache::lonxml::register('Apache::scripttag',('script','scriptlib',    &Apache::lonxml::register('Apache::scripttag',
  'parserlib','import',      ('script','scriptlib','parserlib','import',
                                                  'window','display',       'window','display','storetc','physnet',
                                                  'storetc','physnet'));       'standalone','comment','num','parse','algebra',
        'LONCAPA_INTERNAL_TURN_STYLE_ON',
        'LONCAPA_INTERNAL_TURN_STYLE_OFF',
        'LONCAPA_INTERNAL_LONHTTPD_PORT'));
   }
   
   sub start_LONCAPA_INTERNAL_TURN_STYLE_ON {
       $Apache::lonxml::usestyle=1;
       $Apache::lonxml::style_values='';
       return ('','no');
   }
   
   sub end_LONCAPA_INTERNAL_TURN_STYLE_ON {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
       my $end=&Apache::lonxml::get_param('end',$parstack,$safeeval);
       if (defined($end)) {
    &Apache::lonxml::end_tag($tagstack,$parstack,$token);
       }
       return ('','no');
   }
   
   sub start_LONCAPA_INTERNAL_TURN_STYLE_OFF {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
       $Apache::lonxml::usestyle=0;
       my $end=&Apache::lonxml::get_param('end',$parstack,$safeeval);
       if (!$end) {
    $Apache::lonxml::style_values=$$parstack[-1];
    $Apache::lonxml::style_end_values=$$parstack[-1];
       } else {
    $Apache::lonxml::style_values=$Apache::lonxml::style_end_values;
    $Apache::lonxml::style_end_values='';
       }
       return ('','no');
   }
   
   sub end_LONCAPA_INTERNAL_TURN_STYLE_OFF {
       return ('','no');
   }
   
   sub start_LONCAPA_INTERNAL_LONHTTPD_PORT {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
       if ($target eq 'web' || $target eq 'webgrade') {
    return '<script type="text/javascript">var lonhttpdport=\''.
       &Apache::loncommon::lonhttpd_port().'\';</script>';
       }
       return ('','no');
   }
   
   sub end_LONCAPA_INTERNAL_LONHTTPD_PORT {
       return ('','no');
 }  }
   
 sub start_script {  sub start_script {
Line 27  sub start_script { Line 101  sub start_script {
   my $type= &Apache::lonxml::get_param('type',$parstack,$safeeval);    my $type= &Apache::lonxml::get_param('type',$parstack,$safeeval);
   &Apache::lonxml::debug("found type of $type");    &Apache::lonxml::debug("found type of $type");
   if ($type eq "loncapa/perl") {    if ($type eq "loncapa/perl") {
     my $bodytext=&Apache::lonxml::get_all_text("/script",$$parser[$#$parser]);  
     if ( $target eq "modified" ) {      if ( $target eq "modified" ) {
       $result=$token->[4].&Apache::edit::modifiedfield();   $result=$token->[4].&Apache::edit::modifiedfield('/script',$parser);
     } elsif ( $target eq "web" || $target eq "grade" ) {      } elsif ( $target eq 'web' || $target eq 'tex' ||
       &Apache::run::run($bodytext,$safeeval);        $target eq 'grade' || $target eq 'webgrade' ||
         $target eq 'answer' || $target eq 'analyze' ) {
    my $bodytext=&Apache::lonxml::get_all_text_unbalanced("/script",$parser);
    if (!$Apache::lonxml::default_homework_loaded) {
       &Apache::lonxml::default_homework_load($safeeval);
    }
    &Apache::run::run($bodytext,$safeeval);
    if (($target eq 'answer') &&
       ($env{'form.answer_output_mode'} ne 'tex') &&
       ($Apache::lonhomework::viewgrades == 'F')) {
       $Apache::lonxml::evaluate--;
       my (undef,undef,$udom,$uname)=&Apache::lonnet::whichuser();
       my $windowopen=&Apache::lonhtmlcommon::javascript_docopen();
       my $start_page =
    &Apache::loncommon::start_page('Script Vars', undef,
          {'only_body' => 1,
    'bgcolor'   => '#FFFFFF',
    'js_ready'  => 1,});
       my $end_page =
    &Apache::loncommon::end_page({'js_ready' => 1,});
   
       $uname =~s/\W//g;
       $udom  =~s/\W//g;
       my $function_name = 
    join('_','LONCAPA_scriptvars',$uname,$udom,
        $env{'form.counter'},$Apache::lonxml::curdepth);
       my $script_var ="<script type=\"text/javascript\">
   // <![CDATA[
       function $function_name() {newWindow=open('','new_W','width=500,height=500,scrollbars=1,resizable=yes');newWindow.$windowopen;newWindow.document.writeln('$start_page<pre>";
       my $listing=&Apache::run::dump($target,$safeeval);
       $listing=~s/\\/\\\\/g;
       $listing=~s/\'/\\\'/g;
       $script_var.=$listing;
       $script_var.= "<\\/pre>$end_page');newWindow.document.close();newWindow.focus()}
   // ]]>
   </script><a href=\"javascript:$function_name();void(0);\">".&mt('Script Vars')."</a><br />";
       &Apache::lonxml::add_script_result($script_var);
    }
     } elsif ($target eq "edit" ) {      } elsif ($target eq "edit" ) {
       #&Apache::run::run($bodytext,$safeeval);        #&Apache::run::run($bodytext,$safeeval);
       #$result="<br /> &lt;$token->[1]&gt; output: <br />$bodytext<br />Source:<br />";        #$result="<br /> &lt;$token->[1]&gt; output: <br />$bodytext<br />Source:<br />";
       $result=&Apache::edit::tag_start($target,$token,'Script');   my $bodytext=&Apache::lonxml::get_all_text_unbalanced("/script",$parser);
       $result.=&Apache::edit::editfield($token->[1],$bodytext,'',50,4);   $result=&Apache::edit::tag_start($target,$token,'Script');
    $result.=&Apache::edit::editfield($token->[1],$bodytext,'',80,4);
       } elsif ($target eq 'meta') {
    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);
         if ($target ne "meta" && $target ne 'tex' && $target ne 'answer') {
     $result = $token->[4];
     $result.=$bodytext;
         }
   }    }
   return $result;    return $result;
 }  }
Line 50  sub end_script { Line 167  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") { return $token->[2]; }    if ($type ne "loncapa/perl" && $target ne 'tex') {
   if ($target eq 'edit' ) { return &Apache::edit::end_table(); }      return $token->[2];
     } elsif ($target eq 'edit' ) {
       return &Apache::edit::end_table();
     } elsif ($target eq 'answer') {
       $Apache::lonxml::evaluate++;
     }
   return '';    return '';
 }  }
   
 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;
   my $bodytext=&Apache::lonxml::get_all_text("/display",$$parser[$#$parser]);  
   
   if ( $target eq "modified" ) {    if ( $target eq "modified" ) {
     $result=$token->[4].&Apache::edit::modifiedfield();        $result=$token->[4].&Apache::edit::modifiedfield("/display",$parser);
   } elsif ( $target eq "web" || $target eq "grade" ) {    } elsif ( $target eq 'web' || $target eq 'tex' ||
     $result=&Apache::run::run($bodytext,$safeeval);      $target eq 'grade' || $target eq 'webgrade' ||
     if ($target eq 'grade' ) {      $target eq 'answer' || $target eq 'analyze') {
       $result=''; # grade should produce no output        my $bodytext=&Apache::lonxml::get_all_text_unbalanced("/display",$parser);
     }        if (!$Apache::lonxml::default_homework_loaded) {
     &Apache::lonxml::default_homework_load($safeeval);
         }
         $result=&Apache::run::run($bodytext,$safeeval);
         if ($target eq 'grade' || $target eq 'answer' ||
     $target eq 'analyze') {
     # 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;
   } elsif ($target eq "edit" ) {    } elsif ($target eq "edit" ) {
       my $bodytext=&Apache::lonxml::get_all_text_unbalanced("/display",$parser);
     #$result =       #$result = 
     #  "<br /> &lt;$token->[1]&gt; output: <br />$bodytext<br />Source:<br />";      #  "<br /> &lt;$token->[1]&gt; output: <br />$bodytext<br />Source:<br />";
     #$result.=&Apache::edit::editfield($token->[1],$bodytext,'',40,1);      #$result.=&Apache::edit::editfield($token->[1],$bodytext,'',40,1);
     $result=&Apache::edit::tag_start($target,$token,'Script With Display');      $result=&Apache::edit::tag_start($target,$token,'Script With Display');
     $result.=&Apache::edit::editfield($token->[1],$bodytext,'',40,1)      $result.=&Apache::edit::editfield($token->[1],$bodytext,'',80,1)
     } elsif ($target eq 'meta') {
         my $bodytext=&Apache::lonxml::get_all_text_unbalanced("/display",$parser);
   }    }
   return $result;    return $result;
 }  }
Line 90  sub start_scriptlib { Line 225  sub start_scriptlib {
   my $result ='';    my $result ='';
   my $error='';    my $error='';
   
   if ($target eq 'web' || $target eq 'grade' || $target eq 'meta' || $target eq 'edit') {    if ($target eq 'web' || $target eq 'tex' || $target eq 'grade' ||
         $target eq 'meta' || $target eq 'edit' || $target eq 'answer' ||
         $target eq 'analyze' || $target eq 'webgrade') {
     $bodytext=$$parser[$#$parser]->get_text("/scriptlib");      $bodytext=$$parser[$#$parser]->get_text("/scriptlib");
     $bodytext=&Apache::run::evaluate($bodytext,$safeeval,      $bodytext=&Apache::run::evaluate($bodytext,$safeeval,
      $$parstack[$#$parstack]);       $$parstack[$#$parstack]);
Line 99  sub start_scriptlib { Line 236  sub start_scriptlib {
     my $script=&Apache::lonnet::getfile($location);      my $script=&Apache::lonnet::getfile($location);
     if ($script == -1) {      if ($script == -1) {
       if ($target eq 'edit') {        if ($target eq 'edit') {
         $error='</tr><tr><td>Errors</td><td colspan="2"><b> Unable to find <i>'.$location.'</i></b></td>'."\n";          $error='</tr><tr><td>'.&mt('Errors').'</td><td colspan="2"><b>'.&mt(' Unable to find [_1]','<span class="LC_filename">'.$location.'</span>').'</b></td>'."\n";
       } else {        } else {
  &Apache::lonxml::error("<b> Unable to find <i>$location</i> for scriptlib</b>");   &Apache::lonxml::error("<b> Unable to find <i>$location</i> for scriptlib</b>");
  return "";   return "";
Line 110  sub start_scriptlib { Line 247  sub start_scriptlib {
   }    }
   if ($target eq "edit" ) {    if ($target eq "edit" ) {
     $result=      $result=
       &Apache::edit::tag_start($target,$token).        &Apache::edit::tag_start($target,$token,'New Script Functions').
  &Apache::edit::editfield($token->[1],$bodytext,'New Script Functions',40,1).   &Apache::edit::editline($token->[1],$bodytext,'scriptlib',40).
   $error;              &Apache::edit::browse(undef,'textnode').
     $error.'</td></tr>'.
       &Apache::edit::end_table();
   }    }
   if ($target eq "modified" ) {    if ($target eq "modified" ) {
     $bodytext=$$parser[$#$parser]->get_text("/scriptlib");        $result=$token->[4].&Apache::edit::modifiedfield("/scriptlib",$parser);
     $result=&Apache::edit::modifiedfield($token);  
     &Apache::lonxml::debug($result);  
   }    }
   return $result;    return $result;
 }  }
   
 sub end_scriptlib {  sub end_scriptlib {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
   my $result='';    my @result;
 #  if ($target eq "edit" ) { $result=" "; }    if ($target eq "edit" ) { $result[1]='no'; }
   return $result;    return @result;
 }  }
   
 sub start_parserlib {  sub start_parserlib {
Line 134  sub start_parserlib { Line 271  sub start_parserlib {
   my $bodytext;    my $bodytext;
   my $result ="";    my $result ="";
   my $error='';    my $error='';
   if ($target eq 'web' || $target eq 'grade' || $target eq 'meta' || $target eq 'edit') {    if ($target eq 'web' || $target eq 'tex' || $target eq 'grade' ||
         $target eq 'meta' || $target eq 'edit' || $target eq 'answer' ||
         $target eq 'analyze' || $target eq 'webgrade') {
     $bodytext=$$parser[$#$parser]->get_text("/parserlib");      $bodytext=$$parser[$#$parser]->get_text("/parserlib");
     $bodytext=&Apache::run::evaluate($bodytext,$safeeval,      $bodytext=&Apache::run::evaluate($bodytext,$safeeval,
      $$parstack[$#$parstack]);       $$parstack[$#$parstack]);
Line 154  sub start_parserlib { Line 293  sub start_parserlib {
   }    }
   if ($target eq "edit" ) {    if ($target eq "edit" ) {
     $result=      $result=
       &Apache::edit::tag_start($target,$token).        &Apache::edit::tag_start($target,$token,'New Tag Definitions').
  &Apache::edit::editfield($token->[1],$bodytext,"New Tag Definitions",40,1).   &Apache::edit::editline($token->[1],$bodytext,'',40).
   $error;    $error.'</td></tr>'.
       &Apache::edit::end_table();
   }    }
   if ($target eq "modified" ) {    if ($target eq "modified" ) {
     $bodytext=$$parser[$#$parser]->get_text("/parserlib");        $result=$token->[4].&Apache::edit::modifiedfield("/parserlib",$parser);
     $result=&Apache::edit::modifiedfield($token);  
     &Apache::lonxml::debug($result);  
   }    }
   return $result;    return $result;
 }  }
   
 sub end_parserlib {  sub end_parserlib {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
   my $result='';    my @result;
 #  if ($target eq "edit" ) {     if ($target eq "edit" ) { $result[1]='no'; }
 #    $result=&Apache::edit::tag_end($target,$token);    return @result;
 #  }  
   return $result;  
 }  }
   
 sub start_window {  sub start_window {
   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' || $target eq 'webgrade') {
     &Apache::lonxml::startredirection;   &Apache::lonxml::startredirection;
   }  elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
        $result = '\unskip\footnote{';   $result = '\unskip\footnote{';
    }      } elsif ($target eq 'edit') {
   return $result;     $result.=&Apache::edit::tag_start($target,$token);
    $result.=&Apache::edit::text_arg('Text of Link:','linktext',$token,70);
    $result.=&Apache::edit::text_arg('Height:','height',$token,5);
    $result.=&Apache::edit::text_arg('Width:','width',$token,5);
    $result.=&Apache::edit::text_arg('Mime Type:','mimetype',$token,5);
    $result .=&Apache::edit::end_row().&Apache::edit::start_spanning_row();
       } elsif ($target eq 'modified') {
    my $constructtag=&Apache::edit::get_new_args($token,$parstack,
        $safeeval,'linktext',
        'width','height',
        'mimetype');
    if ($constructtag) { $result=&Apache::edit::rebuild_tag($token); }
       }
       return $result;  
 }  }
   
 sub end_window {  sub end_window {
   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' || $target eq 'webgrade') {
     my $output=&Apache::lonxml::endredirection;      my $output=&Apache::lonxml::endredirection;
     $output =~ s/\"/\&quot\;/g;      $output =~ s/[\n\r]/ /g;
     $result = "<a href=\"javascript:newWindow=open(\'\',\'new_W\',\'width=500,height=200,scrollbars=1\');newWindow.document.open(\'text/html\',\'replace\');newWindow.document.writeln(\'<html><head><title>newwindow</title></head><body bgcolor=&quot;#FFFFFF&quot;> $output </body></html>\');newWindow.document.close();void(0);\"><sup>*</sup></a>";  #    $output = &HTML::Entities::encode($output,'<>&"\'');
       $output =~ s/\'/\\\'/g;
       my $linktext= &Apache::lonxml::get_param('linktext',$parstack,$safeeval);
       if (!$linktext) { $linktext='<sup>*</sup>'; }
       my $width= &Apache::lonxml::get_param('width',$parstack,$safeeval);
       if (!$width) { $width='500'; }
       my $height= &Apache::lonxml::get_param('height',$parstack,$safeeval);
       if (!$height) { $height='200'; }
       my $mimetype= &Apache::lonxml::get_param('mimetype',$parstack,$safeeval)
             || 'text/html';
   
       my ($start_page,$end_page);
       if ($mimetype eq 'text/html') {
    $start_page =
       &Apache::loncommon::start_page($linktext, undef,
      {'only_body' => 1,
       'bgcolor'   => '#FFFFFF',
       'js_ready'  => 1,});
    $end_page =
       &Apache::loncommon::end_page({'js_ready' => 1,});
       }
       $result = "<script type=\"text/javascript\">
   //<!--
    function LONCAPA_newwindow_$Apache::lonxml::curdepth() {
   newWindow=open(".&Apache::lonhtmlcommon::javascript_nothing().",'new_W');
   newWindow.close();
   newWindow=open(".&Apache::lonhtmlcommon::javascript_nothing().",'new_W','width=$width,height=$height,scrollbars=1');
   newWindow.".&Apache::lonhtmlcommon::javascript_docopen($mimetype).";
   newWindow.document.writeln('$start_page $output $end_page');
   newWindow.document.close();}
   //-->
   </script><a href=\"javascript:LONCAPA_newwindow_$Apache::lonxml::curdepth();void(0);\">$linktext</a>";
   } elsif ($target eq 'tex') {    } elsif ($target eq 'tex') {
       $result = '}';        $result = '}';
   } else {    } else {
Line 208  sub start_import { Line 388  sub start_import {
   
   $bodytext=Apache::run::evaluate($bodytext,$safeeval,$$parstack[$#$parstack]);    $bodytext=Apache::run::evaluate($bodytext,$safeeval,$$parstack[$#$parstack]);
   
   if ($target eq 'web' || $target eq 'grade') {    if ($target eq 'web' ||  $target eq 'webgrade' || $target eq 'grade' 
         || $target eq 'answer' || $target eq 'tex' || $target eq 'analyze' ) {
     # FIXME this probably needs to be smart about construction vs.      # FIXME this probably needs to be smart about construction vs.
     # non construction space.      # non construction space.
     my $location=&Apache::lonnet::filelocation($Apache::lonxml::pwd['-1'],$bodytext);      my $location=&Apache::lonnet::filelocation($Apache::lonxml::pwd['-1'],$bodytext);
Line 221  sub start_import { Line 402  sub start_import {
     my $dir=$location;      my $dir=$location;
     $dir=~s:/[^/]*$::;      $dir=~s:/[^/]*$::;
     #  &Apache::lonxml::debug("directory $dir $location file $file \n<b>END</b>\n");      #  &Apache::lonxml::debug("directory $dir $location file $file \n<b>END</b>\n");
       my $id= &Apache::lonxml::get_id($parstack,$safeeval);
       if (!$id) { $id=$Apache::lonxml::curdepth; }
       push(@Apache::inputtags::import,$id);
       push(@Apache::inputtags::importlist,$id);
   
     &Apache::lonxml::newparser($parser,\$file,$dir);      &Apache::lonxml::newparser($parser,\$file,$dir);
   }  
   if ($target eq "edit" ) {    } elsif ($target eq "edit" ) {
     $result.=&Apache::edit::tag_start($target,$token);      $result.=&Apache::edit::tag_start($target,$token);
     $result.=&Apache::edit::editfield($token->[1],$bodytext,'',40,1);      $result.=&Apache::edit::editline($token->[1],$bodytext,'',40);
       $result.=&Apache::edit::browse(undef,'textnode');
     #FIXME this need to convert $bodytext to be a contruction space reference      #FIXME this need to convert $bodytext to be a contruction space reference
     #my $location=&Apache::lonnet::filelocation($Apache::lonxml::pwd['-1'],$bodytext);      #my $location=&Apache::lonnet::filelocation($Apache::lonxml::pwd['-1'],$bodytext);
     #$result.="Click<a href=\"$location\">here</a> to edit<br />"      #$result.="Click<a href=\"$location\">here</a> to edit<br />"
   }    } elsif ($target eq 'modified') {
   if ($target eq 'modified') {        $result=$token->[4].&Apache::edit::modifiedfield("/import",$parser);
     $bodytext=$$parser[$#$parser]->get_text("/import");    } elsif ($target eq 'meta') {
     $result=&Apache::edit::modifiedfield($token);      my $id= &Apache::lonxml::get_id($parstack,$safeeval);
     &Apache::lonxml::debug($result);      $result.='<import part="'.$Apache::inputtags::part;
       if ($id) {
         $result.='" id="'.$id;
       }
       $result.='">';
       $result.=$bodytext;
       $result.='</import>';
   }    }
   return $result;    return $result;
 }  }
   
 sub end_import {  sub end_import {
   return '';    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     pop(@Apache::inputtags::import);
     my $result;
     if ($target eq 'edit' ) { $result=&Apache::edit::end_row.
    &Apache::edit::end_table(); }
     return $result;
 }  }
   
 sub start_storetc {  sub start_storetc {
Line 254  sub end_storetc { Line 452  sub end_storetc {
     my $result;      my $result;
     my $output=&Apache::lonxml::endredirection;      my $output=&Apache::lonxml::endredirection;
     $output =~ s/\"/\&quot\;/g;      $output =~ s/\"/\&quot\;/g;
     $result = "{\bf $output.}}\write\tcfile{\protect\tcpc{ $output.}{\the\value{relpage}}}";      $result = '{\bf '.$output.'.}}\write\tcfile{\protect\tcpc{ '.$output.'.}{\the\value{relpage}}}';
     return $result;       return $result;
 }  }
   
   
 sub start_physnet {  sub start_physnet {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     my $bodytext = '/msu/physnet/cbi.sty';      my $bodytext = '/adm/includes/physnet.sty';
     my $location=&Apache::lonnet::filelocation($Apache::lonxml::pwd['-1'],$bodytext);      my $location=&Apache::lonnet::filelocation($Apache::lonxml::pwd['-1'],$bodytext);
     my $cbistyletext=&Apache::lonnet::getfile($location);      my $cbistyletext=&Apache::lonnet::getfile($location);
   
     %$style = (%$style,&Apache::style::styleparser($target,$cbistyletext));      %$style = (%$style,&Apache::style::styleparser($target,$cbistyletext));
     if ( defined($$style{'physnet'}) ) {      $$parser['-1']->unget_token($token);
         &Apache::lonxml::newparser($parser,\$$style{'physnet'});  #    if ( defined($$style{'physnet'}) ) {
     }  #        &Apache::lonxml::newparser($parser,\$$style{'physnet'});
   #    }
     return "";      return "";
 }  }
   
Line 276  sub end_physnet { Line 475  sub end_physnet {
   return '';    return '';
 }  }
   
   sub start_standalone {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     my $result='';
     if ($target eq 'web' || $target eq 'webgrade') {
       if ( $env{'request.course.id'} ) {
         my $inside = &Apache::lonxml::get_all_text("/standalone",$parser,$style);
       } else {
         $result='<table bgcolor="#E1E1E1" border="2"><tr><td>';
       }
     }
     return $result;
   }
   
   sub end_standalone {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     my $result='';
     if ($target eq 'web' || $target eq 'webgrade' ) {
       if ( $env{'request.course.id'} ) {
       } else {
         $result='</td></tr></table>';
       }
     }
     return $result;
   }
   
   sub start_comment {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     my $result='';
     if ($target eq 'edit') {
       $result=&Apache::edit::tag_start($target,$token);
       my $bodytext=&Apache::lonxml::get_all_text("/comment",$parser,$style);
       $result.=&Apache::edit::editfield($token->[1],$bodytext,'',80,4)
     } elsif ( $target eq 'modified') {
       $result=$token->[4].&Apache::edit::modifiedfield("/comment",$parser);
     } elsif ( $target eq 'web'    || $target eq 'tex'  || $target eq 'grade'   ||
       $target eq 'answer' || $target eq 'meta' || $target eq 'analyze' ||
       $target eq 'webgrade') {
       #normally throw away comments
       my $bodytext=&Apache::lonxml::get_all_text("/comment",$parser,$style);
     }
     return $result;
   }
   
   sub end_comment {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
     if ($target eq 'edit' ) { return &Apache::edit::end_table(); }
     return '';
   }
   
   
 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;
   &Apache::lonxml::newparser(\@parser,\$string);    &Apache::lonxml::newparser(\@parser,\$string);
     &Apache::lonxml::startredirection();
   my $result=&Apache::lonxml::inner_xmlparse($target,$tagstack,    my $result=&Apache::lonxml::inner_xmlparse($target,$tagstack,
      $parstack,\@parser,       $parstack,\@parser,
      $safeeval,$style);       $safeeval,$style);
     $result.=&Apache::lonxml::endredirection();
     &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' || $target eq 'webgrade') {
    $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'|| $target eq 'webgrade') {
    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);
    if ($target eq 'grade' || $target eq 'answer' ||
       $target eq 'analyze') {
       # 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=''; }
    }
       }
       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' || $target eq 'webgrade') {
    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,$parstack,$safeeval);
    }
    $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__
   
   =pod
   
   =head1 NAME
   
   Apache::scripttag.pm
   
   =head1 SYNOPSIS
   
   implements <script>, <scriptlib>, <parserlib>,
   and <import>
   
   This is part of the LearningOnline Network with CAPA project
   described at http://www.lon-capa.org.
   
   
   =head1 NOTABLE SUBROUTINES
   
   =over
   
   =item start_LONCAPA_INTERNAL_LONHTTPD_PORT()
   
   emits a pice of javascript that says a global js variable to the
   current lonhttp port, currently used by the remote control to find out
   where to load images from
   
   =back
   
   =cut
   

Removed from v.1.48  
changed lines
  Added in v.1.149


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.