--- loncom/xml/lonplot.pm 2003/08/28 20:38:25 1.87 +++ loncom/xml/lonplot.pm 2004/01/07 18:16:02 1.94 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Dynamic plot # -# $Id: lonplot.pm,v 1.87 2003/08/28 20:38:25 matthew Exp $ +# $Id: lonplot.pm,v 1.94 2004/01/07 18:16:02 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -34,6 +34,8 @@ package Apache::lonplot; use strict; +use warnings FATAL=>'all'; +no warnings 'uninitialized'; use Apache::File; use Apache::response; use Apache::lonxml; @@ -113,7 +115,7 @@ my $words_test = sub {$_[0]=~s/\s+/ ################################################################### my @gnuplot_edit_order = qw/alttag bgcolor fgcolor height width font transparent grid samples - border align texwidth plottype/; + border align texwidth texfont plottype/; my $gnuplot_help_text = <<"ENDPLOTHELP";

@@ -230,12 +232,19 @@ my %gnuplot_defaults = edit_type => 'entry', size => '5' }, + texfont => { + default => '22', + test => $int_test, + description => 'Font size to use in TeX output (pts):', + edit_type => 'choice', + choices => [qw/10 12 14 16 18 20 22 24 26 28 30 32 34 36/], + }, plottype => { default => 'Cartesian', test => sub {$_[0]=~/^(Polar|Cartesian)$/}, description => 'Plot type:', edit_type => 'choice', - choices => ['Polar','Cartesian'] + choices => ['Cartesian','Polar'] }, ); @@ -289,43 +298,51 @@ my %label_defaults = } ); -my @tic_edit_order = ('location','mirror','start','increment','end'); +my @tic_edit_order = ('location','mirror','start','increment','end', + 'minorfreq'); my %tic_defaults = ( location => { default => 'border', test => sub {$_[0]=~/^(border|axis)$/}, - description => 'Location of tick marks', + description => 'Location of major tic marks', edit_type => 'choice', choices => ['border','axis'] }, mirror => { default => 'on', test => $onoff_test, - description => 'mirror ticks on opposite axis?', + description => 'mirror tics on opposite axis?', edit_type => 'onoff' }, start => { default => '-10.0', test => $real_test, - description => 'Start ticks at', + description => 'Start major tics at', edit_type => 'entry', size => '10' }, increment => { default => '1.0', test => $real_test, - description => 'Place a tick every', + description => 'Place a major tic every', edit_type => 'entry', size => '10' }, end => { default => ' 10.0', test => $real_test, - description => 'Stop ticks at ', + description => 'Stop major tics at ', edit_type => 'entry', size => '10' }, + minorfreq => { + default => '0', + test => $int_test, + description => 'Number of minor tics between major tic marks', + edit_type => 'entry', + size => '10' + }, ); my @axis_edit_order = ('color','xmin','xmax','ymin','ymax'); @@ -456,10 +473,10 @@ my %curve_defaults = my (%plot,%key,%axis,$title,$xlabel,$ylabel,@labels,@curves,%xtics,%ytics); sub start_gnuplot { - %plot = (); %key = (); %axis = (); - $title = undef; $xlabel = undef; $ylabel = undef; - $#labels = -1; $#curves = -1; - %xtics = (); %ytics = (); + undef(%plot); undef(%key); undef(%axis); + undef($title); undef($xlabel); undef($ylabel); + undef(@labels); undef(@curves); + undef(%xtics); undef(%ytics); # my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result=''; @@ -520,8 +537,8 @@ sub end_gnuplot { alt = "$plot{'alttag'}" /> ENDIMAGE } elsif ($target eq 'tex') { - &Apache::lonnet::ssi("/cgi-bin/plot.gif?file=$filename.data&output=eps"); - + #might be inside the safe space, register the URL for later + &Apache::lonxml::register_ssi("/cgi-bin/plot.gif?file=$filename.data&output=eps"); $result = '\graphicspath{{/home/httpd/perl/tmp/}}\includegraphics[width='.$plot{'texwidth'}.' mm]{'.&Apache::lonnet::unescape($filename).'.eps}'; } } elsif ($target eq 'edit') { @@ -642,9 +659,8 @@ sub start_title { &Apache::edit::start_spanning_row(). &Apache::edit::editline('',$text,'',60); } elsif ($target eq 'modified') { - my $text=$$parser[-1]->get_text("/title"); $result.=&Apache::edit::rebuild_tag($token); - $result.=&Apache::edit::modifiedfield($token); + $result.=&Apache::edit::modifiedfield("/title",$parser); } return $result; } @@ -676,9 +692,8 @@ sub start_xlabel { &Apache::edit::start_spanning_row(). &Apache::edit::editline('',$text,'',60); } elsif ($target eq 'modified') { - my $text=$$parser[-1]->get_text("/xlabel"); $result.=&Apache::edit::rebuild_tag($token); - $result.=&Apache::edit::modifiedfield($token); + $result.=&Apache::edit::modifiedfield("/xlabel",$parser); } return $result; } @@ -711,9 +726,8 @@ sub start_ylabel { &Apache::edit::start_spanning_row(). &Apache::edit::editline('',$text,'',60); } elsif ($target eq 'modified') { - my $text=$$parser[-1]->get_text("/ylabel"); $result.=&Apache::edit::rebuild_tag($token); - $result.=&Apache::edit::modifiedfield($token); + $result.=&Apache::edit::modifiedfield("/ylabel",$parser); } return $result; } @@ -753,8 +767,7 @@ sub start_label { &Apache::edit::get_new_args ($token,$parstack,$safeeval,keys(%label_defaults)); $result.=&Apache::edit::rebuild_tag($token); - my $text=$$parser[-1]->get_text("/label"); - $result.=&Apache::edit::modifiedfield($token); + $result.=&Apache::edit::modifiedfield("/label",$parser); } return $result; } @@ -832,8 +845,7 @@ sub start_function { &Apache::edit::editline('',$text,'',60); } elsif ($target eq 'modified') { $result.=&Apache::edit::rebuild_tag($token); - my $text=$$parser[-1]->get_text("/function"); - $result.=&Apache::edit::modifiedfield($token); + $result.=&Apache::edit::modifiedfield("/function",$parser); } return $result; } @@ -910,8 +922,7 @@ sub start_data { &Apache::edit::editline('',$text,'',60); } elsif ($target eq 'modified') { $result.=&Apache::edit::rebuild_tag($token); - my $text=$$parser[-1]->get_text("/data"); - $result.=&Apache::edit::modifiedfield($token); + $result.=&Apache::edit::modifiedfield("/data",$parser); } return $result; } @@ -977,7 +988,7 @@ sub set_defaults { sub get_attributes{ my ($values,$defaults,$parstack,$safeeval,$tag) = @_; foreach my $attr (keys(%{$defaults})) { - if ($attr eq 'texwidth') { + if ($attr eq 'texwidth' || $attr eq 'texfont') { $values->{$attr} = &Apache::lonxml::get_param($attr,$parstack,$safeeval,undef,1); } else { @@ -1004,6 +1015,7 @@ sub write_gnuplot_file { my ($tmpdir,$filename,$target)= @_; my $gnuplot_input = ''; my $curve; + my $pt = $plot{'texfont'}; # Collect all the colors my @Colors; push @Colors, $plot{'bgcolor'}; @@ -1024,7 +1036,7 @@ sub write_gnuplot_file { # set output $gnuplot_input .= "set output\n"; } elsif ($target eq 'tex') { - $gnuplot_input .= "set term postscript eps monochrome solid\n"; + $gnuplot_input .= "set term postscript eps monochrome solid \"Helvetica\" $pt \n"; $gnuplot_input .= "set output \"/home/httpd/perl/tmp/". &Apache::lonnet::unescape($filename).".eps\"\n"; } @@ -1044,9 +1056,15 @@ sub write_gnuplot_file { $gnuplot_input .= "set samples $plot{'samples'}\n"; # title, xlabel, ylabel # titles - $gnuplot_input .= "set title \"$title\"\n" if (defined($title)) ; - $gnuplot_input .= "set xlabel \"$xlabel\"\n" if (defined($xlabel)); - $gnuplot_input .= "set ylabel \"$ylabel\"\n" if (defined($ylabel)); + if ($target eq 'tex') { + $gnuplot_input .= "set title \"$title\" font \"Helvetica,".$pt."pt\"\n" if (defined($title)) ; + $gnuplot_input .= "set xlabel \"$xlabel\" font \"Helvetica,".$pt."pt\" \n" if (defined($xlabel)); + $gnuplot_input .= "set ylabel \"$ylabel\" font \"Helvetica,".$pt."pt\"\n" if (defined($ylabel)); + } else { + $gnuplot_input .= "set title \"$title\" \n" if (defined($title)) ; + $gnuplot_input .= "set xlabel \"$xlabel\" \n" if (defined($xlabel)); + $gnuplot_input .= "set ylabel \"$ylabel\" \n" if (defined($ylabel)); + } # tics if (%xtics) { $gnuplot_input .= "set xtics $xtics{'location'} "; @@ -1054,6 +1072,9 @@ sub write_gnuplot_file { $gnuplot_input .= "$xtics{'start'}, "; $gnuplot_input .= "$xtics{'increment'}, "; $gnuplot_input .= "$xtics{'end'}\n"; + if ($xtics{'minorfreq'} != 0) { + $gnuplot_input .= "set mxtics ".$xtics{'minorfreq'}."\n"; + } } if (%ytics) { $gnuplot_input .= "set ytics $ytics{'location'} "; @@ -1061,6 +1082,9 @@ sub write_gnuplot_file { $gnuplot_input .= "$ytics{'start'}, "; $gnuplot_input .= "$ytics{'increment'}, "; $gnuplot_input .= "$ytics{'end'}\n"; + if ($ytics{'minorfreq'} != 0) { + $gnuplot_input .= "set mytics ".$ytics{'minorfreq'}."\n"; + } } # axis if (%axis) { @@ -1081,7 +1105,7 @@ sub write_gnuplot_file { my $label; foreach $label (@labels) { $gnuplot_input .= 'set label "'.$label->{'text'}.'" at '. - $label->{'xpos'}.','.$label->{'ypos'}.' '.$label->{'justify'}.$/ ; + $label->{'xpos'}.','.$label->{'ypos'}.' '.$label->{'justify'}.' font "Helvetica,'.$pt.'pt"'.$/ ; } if ($target eq 'tex') { $gnuplot_input .="set size 1,".$plot{'height'}/$plot{'width'}*1.38;