--- loncom/xml/lonplot.pm 2001/12/27 15:00:45 1.18 +++ loncom/xml/lonplot.pm 2001/12/27 19:47:02 1.19 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Dynamic plot # -# $Id: lonplot.pm,v 1.18 2001/12/27 15:00:45 matthew Exp $ +# $Id: lonplot.pm,v 1.19 2001/12/27 19:47:02 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -34,8 +34,6 @@ use Apache::File; use Apache::response; use Apache::lonxml; -use Digest::MD5 qw(md5_base64); - sub BEGIN { &Apache::lonxml::register('Apache::lonplot',('plot')); } @@ -53,6 +51,7 @@ sub BEGIN { ## grid ## border ## font +## align ## ## @labels: $labels[$i] = \%label ## %label: text, xpos, ypos, justify @@ -68,7 +67,8 @@ sub BEGIN { ## Tests used in checking the validitity of input ## my $int_test = sub {$_[0]=~s/\s+//g;$_[0]=~/^\d+$/}; -my $real_test = sub {$_[0]=~s/\s+//g;$_[0]=~/^[+-]?\d*\.?\d*$/}; +my $real_test = + sub {$_[0]=~s/\s+//g;$_[0]=~/^[+-]?\d*\.?\d*([eE][+-]\d+)?$/}; my $color_test = sub {$_[0]=~s/\s+//g;$_[0]=~/^x[\da-f]{6}$/}; my $onoff_test = sub {$_[0]=~/^(on|off)$/}; my $key_pos_test = sub {$_[0]=~/^(top|bottom|right|left|outside|below| )+$/}; @@ -88,7 +88,8 @@ my %plot_defaults = grid => {default => 'off', test => $onoff_test }, border => {default => 'on', test => $onoff_test }, font => {default => 'medium', test => $sml_test }, - align => {default => 'left', test => $words_test } + align => {default => 'left', test => + sub {$_[0]=~/^(left|right|center)$/} } ); my %key_defaults = @@ -365,8 +366,6 @@ sub start_data { delete($curves[-1]->{'function'}); } my $datatext = &Apache::lonxml::get_all_text("/data",$$parser[-1]); - &Apache::lonxml::warning( - ' Length of data string: '.length($datatext)); $datatext =~ s/\s+/ /g; # Need to do some error checking on the @data array - # make sure it's all numbers and make sure each array @@ -377,12 +376,21 @@ sub start_data { } else { # Assume it's space seperated. @data = split / /,$datatext; } - &Apache::lonxml::warning(' Data Points: '.$#data); for (my $i=0;$i<=$#data;$i++) { # Check that it's non-empty + if (! defined($data[$i])) { + &Apache::lonxml::warning( + 'undefined value. Replacing with '. + ' pi/e = 1.15572734979092'); + $data[$i] = 1.15572734979092; + } # Check that it's a number - # Maybe I need a 'debug=on' switch to list the data set - # out in a warning? + if (! &$real_test($data[$i]) & ! &$int_test($data[$i])) { + &Apache::lonxml::warning( + 'Bad value of '.$data[$i].' Replacing with '. + ' pi/e = 1.15572734979092'); + $data[$i] = 1.15572734979092; + } } push @{$curves[-1]->{'data'}},\@data; # This routine should never return anything. @@ -437,8 +445,7 @@ sub get_attributes{ my $parstack = shift; my $safeeval = shift; my $tag = shift; - my $attr; - foreach $attr (keys %{$defaults}) { + foreach my $attr (keys %{$defaults}) { $values->{$attr} = &Apache::lonxml::get_param($attr,$parstack,$safeeval); if ($values->{$attr} eq '' | !defined($values->{$attr})) {