--- loncom/xml/scripttag.pm 2000/11/22 21:13:35 1.25 +++ loncom/xml/scripttag.pm 2003/02/24 23:32:32 1.86 @@ -1,193 +1,441 @@ # The LearningOnline Network with CAPA # '; + } + return ('','no'); +} + +sub end_LONCAPA_INTERNAL_LONHTTPD_PORT { + return ('','no'); } sub start_script { - my ($target,$token,$parstack,$parser,$safeeval)=@_; - my $args =''; - if ( $#$parstack > -1 ) { - $args=$$parstack[$#$parstack]; - } - my $type = &Apache::run::run("{$args;".'return $type}',$safeeval); + my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; + @Apache::scripttag::parser_env = @_; my $result=''; - #&Apache::lonxml::debug("found type of $type"); + my $type= &Apache::lonxml::get_param('type',$parstack,$safeeval); + &Apache::lonxml::debug("found type of $type"); if ($type eq "loncapa/perl") { - my $bodytext=&Apache::lonxml::get_all_text("/script",$$parser[$#$parser]); - + my $bodytext=&Apache::lonxml::get_all_text("/script",$parser); if ( $target eq "modified" ) { - } - &Apache::run::run($bodytext,$safeeval); - - if ($target eq "edit" ) { - $result="
<$token->[1]> output:
$bodytext
Source:
"; - $result.=&editfield($token->[1],$bodytext); + $result=$token->[4].&Apache::edit::modifiedfield(); + } elsif ( $target eq 'web' || $target eq 'tex' || + $target eq 'grade' || $target eq 'answer' || + $target eq 'analyze' ) { + if (!$Apache::lonxml::default_homework_loaded) { + &Apache::lonxml::default_homework_load($safeeval); + } + &Apache::run::run($bodytext,$safeeval); + if (($target eq 'answer') && ($Apache::lonhomework::viewgrades == 'F')) { + $Apache::lonxml::evaluate--; + $result.="Script Vars
"; + } + } elsif ($target eq "edit" ) { + #&Apache::run::run($bodytext,$safeeval); + #$result="
<$token->[1]> output:
$bodytext
Source:
"; + $result=&Apache::edit::tag_start($target,$token,'Script'); + $result.=&Apache::edit::editfield($token->[1],$bodytext,'',80,4); } } else { - $result = $token->[4]; + if ($target ne "meta") { + $result = $token->[4]; + my $bodytext=&Apache::lonxml::get_all_text("/script",$parser); + $result.=$bodytext; + } } return $result; } sub end_script { - my ($target,$token,$parstack,$parser,$safeeval)=@_; -# return ''; - return $token->[2]; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; + if ( $target eq "meta" ) { return ''; } + my $type = &Apache::lonxml::get_param('type',$parstack,$safeeval); + my $result=''; + #other script blocks need to survive + if ($type ne "loncapa/perl") { + return $token->[2]; + } elsif ($target eq 'edit' ) { + return &Apache::edit::end_table(); + } elsif ($target eq 'answer') { + $Apache::lonxml::evaluate++; + } + return ''; } sub start_display { - my ($target,$token,$parstack,$parser,$safeeval)=@_; - my $args =''; - if ( $#$parstack > -1 ) { - $args=$$parstack[$#$parstack]; - } - my $bodytext=&Apache::lonxml::get_all_text("/display",$$parser[$#$parser]); - + my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; + + my $result; + my $bodytext=&Apache::lonxml::get_all_text("/display",$parser); + if ( $target eq "modified" ) { - } - my $result=&Apache::run::run($bodytext,$safeeval); - - if ($target eq "edit" ) { - $result = - "
<$token->[1]> output:
$bodytext
Source:
"; - $result.=&editfield($token->[1],$bodytext); + $result=$token->[4].&Apache::edit::modifiedfield(); + } elsif ( $target eq 'web' || $target eq 'tex' || + $target eq 'grade' || $target eq 'answer' || + $target eq 'analyze') { + 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') { + $result=''; # grade should produce no output + } + } elsif ($target eq "edit" ) { + #$result = + # "
<$token->[1]> output:
$bodytext
Source:
"; + #$result.=&Apache::edit::editfield($token->[1],$bodytext,'',40,1); + $result=&Apache::edit::tag_start($target,$token,'Script With Display'); + $result.=&Apache::edit::editfield($token->[1],$bodytext,'',80,1) } return $result; } sub end_display { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; + if ($target eq 'edit' ) { return &Apache::edit::end_table(); } + return ''; } sub start_scriptlib { - my ($target,$token,$parstack,$parser,$safeeval)=@_; - my $bodytext=$$parser[$#$parser]->get_text("/scriptlib"); - my $result =""; - - $bodytext=&Apache::run::evaluate($bodytext,$safeeval, - $$parstack[$#$parstack]); - my $location=&Apache::lonnet::filelocation($Apache::lonxml::pwd['-1'], - $bodytext); - my $script=&Apache::lonnet::getfile($location); - if ($script == -1) { - &Apache::lonxml::error(" Unable to find $location for scriptlib"); - return ""; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; + my $bodytext; + my $result =''; + my $error=''; + + if ($target eq 'web' || $target eq 'grade' || $target eq 'meta' || + $target eq 'edit' || $target eq 'answer' || $target eq 'analyze') { + $bodytext=$$parser[$#$parser]->get_text("/scriptlib"); + $bodytext=&Apache::run::evaluate($bodytext,$safeeval, + $$parstack[$#$parstack]); + my $location=&Apache::lonnet::filelocation($Apache::lonxml::pwd['-1'], + $bodytext); + my $script=&Apache::lonnet::getfile($location); + if ($script == -1) { + if ($target eq 'edit') { + $error='Errors Unable to find '.$location.''."\n"; + } else { + &Apache::lonxml::error(" Unable to find $location for scriptlib"); + return ""; + } + } + &Apache::run::run($script,$safeeval); + #&Apache::lonxml::debug("ran $bodytext:
".&Apache::lonnet::getfile($bodytext)."
"); } - &Apache::run::run($script,$safeeval); - #&Apache::lonxml::debug("ran $bodytext:
".&Apache::lonnet::getfile($bodytext)."
"); - if ($target eq "edit" ) { - $result.=&editfield($token->[1],$bodytext); + $result= + &Apache::edit::tag_start($target,$token,'New Script Functions'). + &Apache::edit::editline($token->[1],$bodytext,'scriptlib',40). + &Apache::edit::browse(undef,'textnode'). + $error.''. + &Apache::edit::end_table(); + } + if ($target eq "modified" ) { + $bodytext=$$parser[$#$parser]->get_text("/scriptlib"); + $result=$token->[4].&Apache::edit::modifiedfield($token); + &Apache::lonxml::debug($result); } return $result; } -sub end_scriptlib {} +sub end_scriptlib { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; + my @result; + if ($target eq "edit" ) { $result[1]='no'; } + return @result; +} sub start_parserlib { - my ($target,$token,$parstack,$parser,$safeeval,$style)=@_; - my $bodytext=$$parser[$#$parser]->get_text("/parserlib"); + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; + my $bodytext; my $result =""; - - $bodytext=&Apache::run::evaluate($bodytext,$safeeval, - $$parstack[$#$parstack]); - my $location=&Apache::lonnet::filelocation($Apache::lonxml::pwd['-1'], - $bodytext); - my $styletext=&Apache::lonnet::getfile($location); - if ($styletext == -1) { - &Apache::lonxml::error(" Unable to find $location for parserlib"); - return ""; + my $error=''; + if ($target eq 'web' || $target eq 'grade' || $target eq 'meta' || + $target eq 'edit' || $target eq 'answer' || $target eq 'analyze') { + $bodytext=$$parser[$#$parser]->get_text("/parserlib"); + $bodytext=&Apache::run::evaluate($bodytext,$safeeval, + $$parstack[$#$parstack]); + my $location=&Apache::lonnet::filelocation($Apache::lonxml::pwd['-1'], + $bodytext); + my $styletext=&Apache::lonnet::getfile($location); + #&Apache::lonxml::debug("found :$bodytext: in :$location: with :$styletext:"); + if ($styletext == -1) { + if ($target eq 'edit') { + $error='Errors Unable to find '.$location.''."\n"; + } else { + &Apache::lonxml::error(" Unable to find $location for parserlib"); + return ""; + } + } + %$style = ( %$style , &Apache::style::styleparser($target,$styletext)); } - %$style = ( %$style , &Apache::style::styleparser($target,$styletext)); - if ($target eq "edit" ) { - $result=&editfield($token->[1],$bodytext); + $result= + &Apache::edit::tag_start($target,$token,'New Tag Definitions'). + &Apache::edit::editline($token->[1],$bodytext,'',40). + $error.''. + &Apache::edit::end_table(); + } + if ($target eq "modified" ) { + $bodytext=$$parser[$#$parser]->get_text("/parserlib"); + $result=$token->[4].&Apache::edit::modifiedfield($token); + &Apache::lonxml::debug($result); } return $result; } sub end_parserlib { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; + my @result; + if ($target eq "edit" ) { $result[1]='no'; } + return @result; } -sub start_footnote { - my ($target,$token,$parstack,$parser,$safeeval,$style)=@_; +sub start_window { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result = ''; - $Apache::lonxml::redirection = 0; + if ($target eq 'web') { + &Apache::lonxml::startredirection; + } elsif ($target eq 'tex') { + $result = '\unskip\footnote{'; + } return $result; } -sub end_footnote { - my ($target,$token,$parstack,$parser,$safeeval,$style)=@_; - $Apache::lonxml::outputstack =~ s/\"/\"\;/g; - my $result = "newwindow $Apache::lonxml::outputstack \');newWindow.document.close();void(0);\">*"; - $Apache::lonxml::outputstack = ""; - $Apache::lonxml::redirection = 1; +sub end_window { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; + my $result; + if ($target eq 'web') { + my $output=&Apache::lonxml::endredirection; + $output =~ s/\"/\"\;/g; + $result = "newwindow $output \');newWindow.document.close();void(0);\">*"; + } elsif ($target eq 'tex') { + $result = '}'; + } else { + $result = ''; + } return $result; } sub start_import { - my ($target,$token,$parstack,$parser,$safeeval,$style)=@_; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $bodytext=$$parser[$#$parser]->get_text("/import"); my $result =""; $bodytext=Apache::run::evaluate($bodytext,$safeeval,$$parstack[$#$parstack]); - my $location=&Apache::lonnet::filelocation($Apache::lonxml::pwd['-1'],$bodytext); - my $file=&Apache::lonnet::getfile($location); - if ($file == -1) { - &Apache::lonxml::error(" Unable to find $bodytext $location for import"); - return ""; - } - my $dir=$location; - $dir=~s:/[^/]*$::; - &Apache::lonxml::newparser($parser,\$file,$dir); + if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || + $target eq 'tex' || $target eq 'analyze' ) { + # FIXME this probably needs to be smart about construction vs. + # non construction space. + my $location=&Apache::lonnet::filelocation($Apache::lonxml::pwd['-1'],$bodytext); + my $file=&Apache::lonnet::getfile($location); + if ($file == -1) { + &Apache::lonxml::error(" Unable to find $bodytext as $location for import"); + return ""; + } - if ($target eq "edit" ) { - $result.=&editfield($token->[1],$bodytext); - $result.="Clickhere to edit

" + my $dir=$location; + $dir=~s:/[^/]*$::; + # &Apache::lonxml::debug("directory $dir $location file $file \nEND\n"); + my $id= &Apache::lonxml::get_param('id',$parstack,$safeeval); + if (!$id) { $id=$Apache::lonxml::curdepth; } + push(@Apache::inputtags::import,$id); + &Apache::lonxml::newparser($parser,\$file,$dir); + } elsif ($target eq "edit" ) { + $result.=&Apache::edit::tag_start($target,$token); + $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 + #my $location=&Apache::lonnet::filelocation($Apache::lonxml::pwd['-1'],$bodytext); + #$result.="Clickhere to edit
" + } elsif ($target eq 'modified') { + $bodytext=$$parser[$#$parser]->get_text("/import"); + $result=$token->[4].&Apache::edit::modifiedfield($token); + &Apache::lonxml::debug($result); + } elsif ($target eq 'meta') { + my $id= &Apache::lonxml::get_param('id',$parstack,$safeeval); + $result.=''; + $result.=$bodytext; + $result.=''; } + return $result; } sub end_import { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; + pop(@Apache::inputtags::import); + my $result; + if ($target eq 'edit' ) { $result=&Apache::edit::end_table(); } + return $result; } -sub editfield { - my ($tag,$data)=@_; - - my $count=0; - my $maxlength=-1; - map { $count++; - if (length($_) > $maxlength) { $maxlength = length ($_); } - } split ("\n", $data); - - return "

\n<$tag>

\n   

\n</$tag>

\n"; -} - -sub getfilenothere { - my ($filename) = @_; - my $a=""; - - $filename=~ s/^\s*(\S+)\s*$/$1/; ## strip off leading and trailing spaces - $filename="/home/httpd/html/res".$filename; - if (! -e $filename ) { - &Apache::lonnet::subscribe($filename); - &Apache::lonnet::repcopy($filename); - } - if (! -e $filename ) { return -1; }; - my $fh=Apache::File->new($filename); - while (<$fh>) { - $a .=$_; +sub start_storetc { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; + my $result = ''; + &Apache::lonxml::startredirection; + return $result; +} + +sub end_storetc { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; + my $result; + my $output=&Apache::lonxml::endredirection; + $output =~ s/\"/\"\;/g; + $result = '{\bf '.$output.'.}}\write\tcfile{\protect\tcpc{ '.$output.'.}{\the\value{relpage}}}'; + return $result; +} + + +sub start_physnet { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; + my $bodytext = '/adm/includes/physnet.sty'; + my $location=&Apache::lonnet::filelocation($Apache::lonxml::pwd['-1'],$bodytext); + my $cbistyletext=&Apache::lonnet::getfile($location); + + %$style = (%$style,&Apache::style::styleparser($target,$cbistyletext)); + $$parser['-1']->unget_token($token); +# if ( defined($$style{'physnet'}) ) { +# &Apache::lonxml::newparser($parser,\$$style{'physnet'}); +# } + return ""; +} + +sub end_physnet { + return ''; +} + +sub start_standalone { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; + my $result=''; + if ($target eq 'web' ) { + if ( $ENV{'request.course.id'} ) { + my $inside = &Apache::lonxml::get_all_text("/standalone",$parser); + } else { + $result='
'; + } + } + return $result; +} + +sub end_standalone { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; + my $result=''; + if ($target eq 'web' ) { + if ( $ENV{'request.course.id'} ) { + } else { + $result='
'; + } + } + 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); + $result.=&Apache::edit::editfield($token->[1],$bodytext,'',80,4) + } elsif ( $target eq 'modified') { + $result=$token->[4].&Apache::edit::modifiedfield($token); + } elsif ( $target eq 'web' || $target eq 'tex' || $target eq 'grade' || + $target eq 'answer' || $target eq 'meta' || $target eq 'analyze') { + #normally throw away comments + my $bodytext=&Apache::lonxml::get_all_text("/comment",$parser); } - return $a + return $result; +} + +sub end_comment { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; + if ($target eq 'edit' ) { return &Apache::edit::end_table(); } + return ''; +} + + +sub xmlparse { + my ($string) = @_; + &Apache::lonxml::debug("Got $string"); + my ($target,$token,$tagstack,$parstack,$oldparser,$safeeval,$style)= + @Apache::scripttag::parser_env; + my @parser; + &Apache::lonxml::newparser(\@parser,\$string); + my $result=&Apache::lonxml::inner_xmlparse($target,$tagstack, + $parstack,\@parser, + $safeeval,$style); + return $result; } 1; 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.