--- loncom/xml/lonplot.pm 2001/12/31 17:30:09 1.27 +++ 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.27 2001/12/31 17:30:09 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 => { @@ -193,7 +215,7 @@ my %label_defaults = my %axis_defaults = ( - color => { + color => { default => 'x000000', test => $color_test, description => 'color of axes (x000000)', @@ -222,13 +244,6 @@ my %axis_defaults = test => $real_test, description => 'maximum y-value shown in plot', edit_type => 'entry' - }, - linestyle => { - default => 'points', - test => $linestyle_test, - description => 'Style of the axis lines', - edit_type => 'choice', - choices => ['lines','linespoints','dots','points'] } ); @@ -251,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'] } ); @@ -271,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') { @@ -307,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(); @@ -369,7 +386,7 @@ sub start_title { $result.='