--- loncom/xml/scripttag.pm 2000/10/02 22:22:25 1.17 +++ loncom/xml/scripttag.pm 2000/10/05 19:31:54 1.18 @@ -12,6 +12,7 @@ sub BEGIN { 'parserlib','import')); } +$Apache::scripttag::SCRIPT_RESULT=''; sub start_script { my ($target,$token,$parstack,$parser,$safeeval)=@_; my $args =''; @@ -19,27 +20,25 @@ sub start_script { $args=$$parstack[$#$parstack]; } my $type = &Apache::run::run("{$args;".'return $type}',$safeeval); - &Apache::lonxml::debug("found type of $type"); - my $result=""; + #&Apache::lonxml::debug("found type of $type"); + $Apache::scripttag::SCRIPT_RESULT=''; if ($type eq "loncapa/perl") { - $safeeval->share('$Apache::scripttag::start_script::result'); - # my $bodytext=$$parser[$#$parser]->get_text("/script"); + $safeeval->share('$SCRIPT_RESULT'); my $bodytext=&Apache::lonxml::get_all_text("script",$$parser[$#$parser]); if ( $target eq "modified" ) { - } - - # print "
script runs $bodytext
"; &Apache::run::run($bodytext,$safeeval); if ($target eq "edit" ) { - $result= "
<$token->[1]> output:
$bodytext
Source:
"; - $result.=&editfield($token->[1],$bodytext); + $Apache::scripttag::SCRIPT_RESULT = + "
<$token->[1]> output:
$bodytext
Source:
"; + $Apache::scripttag::SCRIPT_RESULT.=&editfield($token->[1],$bodytext); } } else { - $result = $token->[4]; + $Apache::scripttag::SCRIPT_RESULT = $token->[4]; } + return $Apache::scripttag::SCRIPT_RESULT; } sub end_script { @@ -52,9 +51,17 @@ sub start_scriptlib { my $bodytext=$$parser[$#$parser]->get_text("/scriptlib"); my $result =""; - $bodytext=Apache::run::evaluate($bodytext,$safeeval,$$parstack[$#$parstack]); - &Apache::run::run(&getfile($bodytext),$safeeval); - #print "ran $bodytext:
".&getfile($bodytext)."
"; + $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 ""; + } + &Apache::run::run($script,$safeeval); + #&Apache::lonxml::debug("ran $bodytext:
".&Apache::lonnet::getfile($bodytext)."
"); if ($target eq "edit" ) { $result.=&editfield($token->[1],$bodytext); @@ -69,9 +76,16 @@ sub start_parserlib { my $bodytext=$$parser[$#$parser]->get_text("/parserlib"); my $result =""; - $bodytext=Apache::run::evaluate($bodytext,$safeeval,$$parstack[$#$parstack]); - %$style = ( %$style , &Apache::style::styleparser($target, - &getfile($bodytext))); + $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 ""; + } + %$style = ( %$style , &Apache::style::styleparser($target,$styletext)); if ($target eq "edit" ) { $result=&editfield($token->[1],$bodytext); @@ -88,13 +102,16 @@ sub start_import { my $result =""; $bodytext=Apache::run::evaluate($bodytext,$safeeval,$$parstack[$#$parstack]); - my $file=&getfile($bodytext); - if ($file eq -1) { - return " Unable to find $bodytext for import"; + 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 $tempparser=HTML::TokeParser->new(\$file); - push (@$parser,$tempparser); + my $dir=$location; + $dir=~s:/[^/]*$::; + &Apache::lonxml::newparser($parser,\$file,$dir); if ($target eq "edit" ) { $result.=&editfield($token->[1],$bodytext); @@ -117,7 +134,7 @@ sub editfield { return "

\n<$tag>

\n   

\n</$tag>

\n"; } -sub getfile { +sub getfilenothere { my ($filename) = @_; my $a="";