--- loncom/xml/lonplot.pm 2001/12/18 16:06:01 1.3 +++ loncom/xml/lonplot.pm 2001/12/18 20:34:58 1.4 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Dynamic plot # -# $Id: lonplot.pm,v 1.3 2001/12/18 16:06:01 matthew Exp $ +# $Id: lonplot.pm,v 1.4 2001/12/18 20:34:58 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -112,36 +112,42 @@ sub start_plot { &Apache::lonxml::register('Apache::plot', ('title','xlabel','ylabel','key','axis','label','curve')); push (@Apache::lonxml::namespace,'plot'); - ##------------------------------------------------------- - ## How do I do this? I need to "eval" and I need to keep the info - ## available for the parser. - ## + ## Always evaluate the insides of the tags my $inside = &Apache::lonxml::get_all_text("/plot",$$parser[-1]); - my $eval=&Apache::lonxml::get_param('eval',$parstack,$safeeval); - if ($eval eq 'on') { - $inside=&Apache::run::evaluate($inside,$safeeval,$$parstack[-1]); - #&Apache::lonxml::debug("M is evaulated to:$inside:"); - } + $inside=&Apache::run::evaluate($inside,$safeeval,$$parstack[-1]); + &Apache::lonxml::newparser($parser,\$inside); ##------------------------------------------------------- &get_attributes(\%plot,\%plot_defaults,$parstack,$safeeval,'plot'); + if ($target eq 'web') { + } return ''; } sub end_plot { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; pop @Apache::lonxml::namespace; - my $result; - ## Determine filename - my $tmpdir = '/home/httpd/perl/tmp/'; - my $filename = $tmpdir.$ENV{'user.name'}.'_'.$ENV{'user.domain'}. - '_plot.data'; - my $usersees=md5_base64($filename.'_'.$ENV{'REMOTE_ADDR'}); - - ## Write the plot description to the file - my $fh=&Apache::File->new('/home/httpd/perl/tmp/'.$realname); - ## Ack! - ## return image tag for the plot - $result = 'new('/home/httpd/perl/tmp/'.$realname); + # write plot values + # write title, xlabel, ylabel + # write key values + # write axis values + # write label values + # write curve values + ## Ack! + ## return image tag for the plot + $result = '{'text'} = &Apache::lonxml::get_all_text("/label",$$parser[-1]); push(@labels,\%label); + if ($target eq 'web') { + # This routine should never return anything. + } return $result; } sub end_label { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result = ''; + if ($target eq 'web') { + # This routine should never return anything. + } return $result; } @@ -221,16 +257,22 @@ sub start_curve { my %curve; &get_attributes($curve,\%curve_defaults,$parstack,$safeeval,$tagstack); push (@curves,$curve); - - &Apache::lonxml::register('Apache::plot',('function','data')); + &Apache::lonxml::register('Apache::lonplot',('function','data')); push (@Apache::lonxml::namespace,'curve'); - + if ($target eq 'web') { + # This routine should never return anything. + } return $result; } sub end_curve { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result = ''; + pop @Apache::lonxml::namespace; + &Apache::lonxml::deregister('Apache::lonplot',('function','data')); + if ($target eq 'web') { + # This routine should never return anything. + } return $result; } @@ -238,15 +280,24 @@ sub end_curve { sub start_function { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result=''; - + if (exists($curves[-1]->{'data'}) { + &Apache::lonxml::warning('Use of precludes use of . The will be omitted in favor of the declaration.'); + delete($curves[-1]->{'data'}); + } $curves[-1]->{'function'} = &Apache::lonxml::get_all_text("/function",$$parser[-1]); + if ($target eq 'web') { + # This routine should never return anything. + } return $result; } sub end_function { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result = ''; + if ($target eq 'web') { + # This routine should never return anything. + } return $result; } @@ -254,14 +305,30 @@ sub end_function { sub start_data { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result=''; - push( @{$curves[-1]->{'data'}}, - &Apache::lonxml::get_all_text("/data",$$parser[-1])); + if (exists($curves[-1]->{'function'})) { + &Apache::lonxml::warning('Use of precludes use of . The will be omitted in favor of the declaration.'); + delete($curves[-1]->{'function'}); + } + my $datatext = &Apache::lonxml::get_all_text("/data",$$parser[-1]); + $datatext =~ s/(\s+$|^\s+)//g; + $datatext =~ s/\s+/ /g; + if ($datatext !~ /^(([+-]?\d*\.?\d*)[, ]?)+$/) { + &Apache::lonxml::warning('Malformed data: '.$datatext); + $datatext = ''; + } + push( @{$curves[-1]->{'data'}},$datatext; + if ($target eq 'web') { + # This routine should never return anything. + } return $result; } sub end_data { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result = ''; + if ($target eq 'web') { + # This routine should never return anything. + } return $result; } @@ -270,12 +337,18 @@ sub start_axis { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result=''; &get_attributes(\%axis,\%label_defaults,$parstack,$safeeval,$tagstack); + if ($target eq 'web') { + # This routine should never return anything. + } return $result; } sub end_axis { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result = ''; + if ($target eq 'web') { + # This routine should never return anything. + } return $result; } @@ -299,3 +372,8 @@ sub get_attributes{ 1; __END__ + + + + +