--- loncom/xml/lonplot.pm 2001/12/31 19:02:00 1.28 +++ loncom/xml/lonplot.pm 2002/01/01 19:34:25 1.29 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Dynamic plot # -# $Id: lonplot.pm,v 1.28 2001/12/31 19:02:00 matthew Exp $ +# $Id: lonplot.pm,v 1.29 2002/01/01 19:34:25 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -69,6 +69,28 @@ sub BEGIN { ## Tests used in checking the validitity of input ## ## ## ################################################################### + +my %linestyles = + ( + lines => 2, # Maybe this will be used in the future + linespoints => 2, # to check on whether or not they have + dots => 2, # supplied enough fields + points => 2, # to use the given line style. But for + steps => 2, # now there are more important things + fsteps => 2, # for me to deal with. + histeps => 2, + errorbars => 2, + xerrorbars => 2, + yerrorbars => 2, + xyerrorbars => 2, + boxes => 2, + boxerrorbars => 2, + boxxyerrorbars => 2, + financebars => 2, + candlesticks => 2, + vector => 2 + ); + my $int_test = sub {$_[0]=~s/\s+//g;$_[0]=~/^\d+$/}; my $real_test = sub {$_[0]=~s/\s+//g;$_[0]=~/^[+-]?\d*\.?\d*([eE][+-]\d+)?$/}; @@ -76,7 +98,7 @@ my $color_test = sub {$_[0]=~s/\s+// my $onoff_test = sub {$_[0]=~/^(on|off)$/}; my $key_pos_test = sub {$_[0]=~/^(top|bottom|right|left|outside|below| )+$/}; my $sml_test = sub {$_[0]=~/^(small|medium|large)$/}; -my $linestyle_test = sub {$_[0]=~/^(lines|linespoints|dots|points|steps)$/}; +my $linestyle_test = sub {exists($linestyles{$_[0]})}; my $words_test = sub {$_[0]=~s/\s+/ /g;$_[0]=~/^([\w\(\)]+ ?)+$/}; ################################################################### @@ -89,13 +111,13 @@ my %plot_defaults = height => { default => 200, test => $int_test, - description => 'vertical size of image (pixels)', + description => 'height of image (pixels)', edit_type => 'entry' }, width => { default => 200, test => $int_test, - description => 'horizontal size of image (pixels)', + description => 'width of image (pixels)', edit_type => 'entry' }, bgcolor => { @@ -244,7 +266,11 @@ my %curve_defaults = test => $linestyle_test, description => 'Style of the axis lines', edit_type => 'choice', - choices => ['lines','linespoints','dots','points','steps'] + choices => ['lines','linespoints','dots','points','steps', + 'fsteps','histeps','errorbars','xerrorbars', + 'yerrorbars','xyerrorbars','boxes','boxerrorbars', + 'boxxyerrorbars','financebars','candlesticks', + 'vector'] } ); @@ -264,13 +290,11 @@ sub start_plot { my $result=''; &Apache::lonxml::register('Apache::lonplot', ('title','xlabel','ylabel','key','axis','label','curve')); - push (@Apache::lonxml::namespace,'plot'); - my $inside = &Apache::lonxml::get_all_text("/plot",$$parser[-1]); + push (@Apache::lonxml::namespace,'lonplot'); if ($target eq 'web') { + my $inside = &Apache::lonxml::get_all_text("/plot",$$parser[-1]); $inside=&Apache::run::evaluate($inside,$safeeval,$$parstack[-1]); - } - &Apache::lonxml::newparser($parser,\$inside); - if ($target eq 'web') { + &Apache::lonxml::newparser($parser,\$inside); &get_attributes(\%plot,\%plot_defaults,$parstack,$safeeval, $tagstack->[-1]); } elsif ($target eq 'edit') { @@ -300,7 +324,7 @@ sub end_plot { ## Determine filename my $tmpdir = '/home/httpd/perl/tmp/'; my $filename = $ENV{'user.name'}.'_'.$ENV{'user.domain'}. - '_'.time.'_'.$$.'_plot.data'; + '_'.time.'_'.$$.int(rand(1000)).'_plot.data'; ## Write the plot description to the file my $fh=Apache::File->new(">$tmpdir$filename"); print $fh &write_gnuplot_file(); @@ -362,7 +386,7 @@ sub start_title { $result.='