version 1.79, 2002/10/15 18:42:41
|
version 1.95, 2004/03/08 17:31:37
|
Line 34
|
Line 34
|
package Apache::lonplot; |
package Apache::lonplot; |
|
|
use strict; |
use strict; |
|
use warnings FATAL=>'all'; |
|
no warnings 'uninitialized'; |
use Apache::File; |
use Apache::File; |
use Apache::response; |
use Apache::response; |
use Apache::lonxml; |
use Apache::lonxml; |
Line 112 my $words_test = sub {$_[0]=~s/\s+/
|
Line 114 my $words_test = sub {$_[0]=~s/\s+/
|
## ## |
## ## |
################################################################### |
################################################################### |
my @gnuplot_edit_order = |
my @gnuplot_edit_order = |
qw/alttag bgcolor fgcolor height width font transparent grid samples border align/; |
qw/alttag bgcolor fgcolor height width font transparent grid samples |
|
border align texwidth texfont plottype/; |
|
|
my $gnuplot_help_text = <<"ENDPLOTHELP"; |
my $gnuplot_help_text = <<"ENDPLOTHELP"; |
<p> |
<p> |
Line 221 my %gnuplot_defaults =
|
Line 224 my %gnuplot_defaults =
|
description => 'alignment for image in html', |
description => 'alignment for image in html', |
edit_type => 'choice', |
edit_type => 'choice', |
choices => ['left','right','center'] |
choices => ['left','right','center'] |
} |
}, |
|
texwidth => { |
|
default => '93', |
|
test => $int_test, |
|
description => 'Width of plot when printed (mm)', |
|
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 => ['Cartesian','Polar'] |
|
}, |
); |
); |
|
|
my %key_defaults = |
my %key_defaults = |
Line 274 my %label_defaults =
|
Line 298 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 = |
my %tic_defaults = |
( |
( |
location => { |
location => { |
default => 'border', |
default => 'border', |
test => sub {$_[0]=~/^(border|axis)$/}, |
test => sub {$_[0]=~/^(border|axis)$/}, |
description => 'Location of tick marks', |
description => 'Location of major tic marks', |
edit_type => 'choice', |
edit_type => 'choice', |
choices => ['border','axis'] |
choices => ['border','axis'] |
}, |
}, |
mirror => { |
mirror => { |
default => 'on', |
default => 'on', |
test => $onoff_test, |
test => $onoff_test, |
description => 'mirror ticks on opposite axis?', |
description => 'mirror tics on opposite axis?', |
edit_type => 'onoff' |
edit_type => 'onoff' |
}, |
}, |
start => { |
start => { |
default => '-10.0', |
default => '-10.0', |
test => $real_test, |
test => $real_test, |
description => 'Start ticks at', |
description => 'Start major tics at', |
edit_type => 'entry', |
edit_type => 'entry', |
size => '10' |
size => '10' |
}, |
}, |
increment => { |
increment => { |
default => '1.0', |
default => '1.0', |
test => $real_test, |
test => $real_test, |
description => 'Place a tick every', |
description => 'Place a major tic every', |
edit_type => 'entry', |
edit_type => 'entry', |
size => '10' |
size => '10' |
}, |
}, |
end => { |
end => { |
default => ' 10.0', |
default => ' 10.0', |
test => $real_test, |
test => $real_test, |
description => 'Stop ticks at ', |
description => 'Stop major tics at ', |
edit_type => 'entry', |
edit_type => 'entry', |
size => '10' |
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'); |
my @axis_edit_order = ('color','xmin','xmax','ymin','ymax'); |
Line 369 required. Unfortunately, you must make
|
Line 401 required. Unfortunately, you must make
|
in the order gnuplot expects the data. |
in the order gnuplot expects the data. |
</p><p> |
</p><p> |
Specifying the data should usually be done with a perl variable or array, |
Specifying the data should usually be done with a perl variable or array, |
such as \@Xdata and \@Ydata. You may also specify numerical data seperated |
such as \@Xdata and \@Ydata. You may also specify numerical data separated |
by commas. Again, the order of the <b>data</b> tags is important. The |
by commas. Again, the order of the <b>data</b> tags is important. The |
first tag will be the X data and the second will be the Y data. |
first tag will be the X data and the second will be the Y data. |
</p> |
</p> |
Line 441 my %curve_defaults =
|
Line 473 my %curve_defaults =
|
my (%plot,%key,%axis,$title,$xlabel,$ylabel,@labels,@curves,%xtics,%ytics); |
my (%plot,%key,%axis,$title,$xlabel,$ylabel,@labels,@curves,%xtics,%ytics); |
|
|
sub start_gnuplot { |
sub start_gnuplot { |
%plot = (); %key = (); %axis = (); |
undef(%plot); undef(%key); undef(%axis); |
$title = undef; $xlabel = undef; $ylabel = undef; |
undef($title); undef($xlabel); undef($ylabel); |
$#labels = -1; $#curves = -1; |
undef(@labels); undef(@curves); |
%xtics = (); %ytics = (); |
undef(%xtics); undef(%ytics); |
# |
# |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result=''; |
my $result=''; |
Line 480 sub end_gnuplot {
|
Line 512 sub end_gnuplot {
|
my $randnumber; |
my $randnumber; |
# need to call rand everytime start_script would evaluate, as the |
# need to call rand everytime start_script would evaluate, as the |
# safe space rand number generator and the global rand generator |
# safe space rand number generator and the global rand generator |
# are not seperate |
# are not separate |
if ($target eq 'web' || $target eq 'tex' || $target eq 'grade' || |
if ($target eq 'web' || $target eq 'tex' || $target eq 'grade' || |
$target eq 'answer') { |
$target eq 'answer') { |
$randnumber=int(rand(1000)); |
$randnumber=int(rand(1000)); |
Line 505 sub end_gnuplot {
|
Line 537 sub end_gnuplot {
|
alt = "$plot{'alttag'}" /> |
alt = "$plot{'alttag'}" /> |
ENDIMAGE |
ENDIMAGE |
} elsif ($target eq 'tex') { |
} 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 |
$result = '\graphicspath{{/home/httpd/perl/tmp/}}\fbox{\includegraphics{'.&Apache::lonnet::unescape($filename).'.eps}}'; |
&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') { |
} elsif ($target eq 'edit') { |
$result.=&Apache::edit::tag_end($target,$token); |
$result.=&Apache::edit::tag_end($target,$token); |
Line 613 sub start_title {
|
Line 646 sub start_title {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result=''; |
my $result=''; |
if ($target eq 'web' || $target eq 'tex') { |
if ($target eq 'web' || $target eq 'tex') { |
$title = &Apache::lonxml::get_all_text("/title",$$parser[-1]); |
$title = &Apache::lonxml::get_all_text("/title",$parser); |
$title=&Apache::run::evaluate($title,$safeeval,$$parstack[-1]); |
$title=&Apache::run::evaluate($title,$safeeval,$$parstack[-1]); |
$title =~ s/\n/ /g; |
$title =~ s/\n/ /g; |
if (length($title) > $max_str_len) { |
if (length($title) > $max_str_len) { |
Line 621 sub start_title {
|
Line 654 sub start_title {
|
} |
} |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
$result.=&Apache::edit::tag_start($target,$token,'Plot Title'); |
$result.=&Apache::edit::tag_start($target,$token,'Plot Title'); |
my $text=&Apache::lonxml::get_all_text("/title",$$parser[-1]); |
my $text=&Apache::lonxml::get_all_text("/title",$parser); |
$result.=&Apache::edit::end_row(). |
$result.=&Apache::edit::end_row(). |
&Apache::edit::start_spanning_row(). |
&Apache::edit::start_spanning_row(). |
&Apache::edit::editline('',$text,'',60); |
&Apache::edit::editline('',$text,'',60); |
} elsif ($target eq 'modified') { |
} elsif ($target eq 'modified') { |
my $text=$$parser[-1]->get_text("/title"); |
|
$result.=&Apache::edit::rebuild_tag($token); |
$result.=&Apache::edit::rebuild_tag($token); |
$result.=&Apache::edit::modifiedfield($token); |
$result.=&Apache::edit::modifiedfield("/title",$parser); |
} |
} |
return $result; |
return $result; |
} |
} |
Line 647 sub start_xlabel {
|
Line 679 sub start_xlabel {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result=''; |
my $result=''; |
if ($target eq 'web' || $target eq 'tex') { |
if ($target eq 'web' || $target eq 'tex') { |
$xlabel = &Apache::lonxml::get_all_text("/xlabel",$$parser[-1]); |
$xlabel = &Apache::lonxml::get_all_text("/xlabel",$parser); |
$xlabel=&Apache::run::evaluate($xlabel,$safeeval,$$parstack[-1]); |
$xlabel=&Apache::run::evaluate($xlabel,$safeeval,$$parstack[-1]); |
$xlabel =~ s/\n/ /g; |
$xlabel =~ s/\n/ /g; |
if (length($xlabel) > $max_str_len) { |
if (length($xlabel) > $max_str_len) { |
Line 655 sub start_xlabel {
|
Line 687 sub start_xlabel {
|
} |
} |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
$result.=&Apache::edit::tag_start($target,$token,'Plot Xlabel'); |
$result.=&Apache::edit::tag_start($target,$token,'Plot Xlabel'); |
my $text=&Apache::lonxml::get_all_text("/xlabel",$$parser[-1]); |
my $text=&Apache::lonxml::get_all_text("/xlabel",$parser); |
$result.=&Apache::edit::end_row(). |
$result.=&Apache::edit::end_row(). |
&Apache::edit::start_spanning_row(). |
&Apache::edit::start_spanning_row(). |
&Apache::edit::editline('',$text,'',60); |
&Apache::edit::editline('',$text,'',60); |
} elsif ($target eq 'modified') { |
} elsif ($target eq 'modified') { |
my $text=$$parser[-1]->get_text("/xlabel"); |
|
$result.=&Apache::edit::rebuild_tag($token); |
$result.=&Apache::edit::rebuild_tag($token); |
$result.=&Apache::edit::modifiedfield($token); |
$result.=&Apache::edit::modifiedfield("/xlabel",$parser); |
} |
} |
return $result; |
return $result; |
} |
} |
Line 682 sub start_ylabel {
|
Line 713 sub start_ylabel {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result=''; |
my $result=''; |
if ($target eq 'web' || $target eq 'tex') { |
if ($target eq 'web' || $target eq 'tex') { |
$ylabel = &Apache::lonxml::get_all_text("/ylabel",$$parser[-1]); |
$ylabel = &Apache::lonxml::get_all_text("/ylabel",$parser); |
$ylabel = &Apache::run::evaluate($ylabel,$safeeval,$$parstack[-1]); |
$ylabel = &Apache::run::evaluate($ylabel,$safeeval,$$parstack[-1]); |
$ylabel =~ s/\n/ /g; |
$ylabel =~ s/\n/ /g; |
if (length($ylabel) > $max_str_len) { |
if (length($ylabel) > $max_str_len) { |
Line 690 sub start_ylabel {
|
Line 721 sub start_ylabel {
|
} |
} |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
$result .= &Apache::edit::tag_start($target,$token,'Plot Ylabel'); |
$result .= &Apache::edit::tag_start($target,$token,'Plot Ylabel'); |
my $text = &Apache::lonxml::get_all_text("/ylabel",$$parser[-1]); |
my $text = &Apache::lonxml::get_all_text("/ylabel",$parser); |
$result .= &Apache::edit::end_row(). |
$result .= &Apache::edit::end_row(). |
&Apache::edit::start_spanning_row(). |
&Apache::edit::start_spanning_row(). |
&Apache::edit::editline('',$text,'',60); |
&Apache::edit::editline('',$text,'',60); |
} elsif ($target eq 'modified') { |
} elsif ($target eq 'modified') { |
my $text=$$parser[-1]->get_text("/ylabel"); |
|
$result.=&Apache::edit::rebuild_tag($token); |
$result.=&Apache::edit::rebuild_tag($token); |
$result.=&Apache::edit::modifiedfield($token); |
$result.=&Apache::edit::modifiedfield("/ylabel",$parser); |
} |
} |
return $result; |
return $result; |
} |
} |
Line 720 sub start_label {
|
Line 750 sub start_label {
|
my %label; |
my %label; |
&get_attributes(\%label,\%label_defaults,$parstack,$safeeval, |
&get_attributes(\%label,\%label_defaults,$parstack,$safeeval, |
$tagstack->[-1]); |
$tagstack->[-1]); |
my $text = &Apache::lonxml::get_all_text("/label",$$parser[-1]); |
my $text = &Apache::lonxml::get_all_text("/label",$parser); |
$text = &Apache::run::evaluate($text,$safeeval,$$parstack[-1]); |
$text = &Apache::run::evaluate($text,$safeeval,$$parstack[-1]); |
$text =~ s/\n/ /g; |
$text =~ s/\n/ /g; |
$text = substr($text,0,$max_str_len) if (length($text) > $max_str_len); |
$text = substr($text,0,$max_str_len) if (length($text) > $max_str_len); |
Line 729 sub start_label {
|
Line 759 sub start_label {
|
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
$result .= &Apache::edit::tag_start($target,$token,'Plot Label'); |
$result .= &Apache::edit::tag_start($target,$token,'Plot Label'); |
$result .= &edit_attributes($target,$token,\%label_defaults); |
$result .= &edit_attributes($target,$token,\%label_defaults); |
my $text = &Apache::lonxml::get_all_text("/label",$$parser[-1]); |
my $text = &Apache::lonxml::get_all_text("/label",$parser); |
$result .= &Apache::edit::end_row(). |
$result .= &Apache::edit::end_row(). |
&Apache::edit::start_spanning_row(). |
&Apache::edit::start_spanning_row(). |
&Apache::edit::editline('',$text,'',60); |
&Apache::edit::editline('',$text,'',60); |
Line 737 sub start_label {
|
Line 767 sub start_label {
|
&Apache::edit::get_new_args |
&Apache::edit::get_new_args |
($token,$parstack,$safeeval,keys(%label_defaults)); |
($token,$parstack,$safeeval,keys(%label_defaults)); |
$result.=&Apache::edit::rebuild_tag($token); |
$result.=&Apache::edit::rebuild_tag($token); |
my $text=$$parser[-1]->get_text("/label"); |
$result.=&Apache::edit::modifiedfield("/label",$parser); |
$result.=&Apache::edit::modifiedfield($token); |
|
} |
} |
return $result; |
return $result; |
} |
} |
Line 798 sub start_function {
|
Line 827 sub start_function {
|
my $result=''; |
my $result=''; |
if ($target eq 'web' || $target eq 'tex') { |
if ($target eq 'web' || $target eq 'tex') { |
if (exists($curves[-1]->{'data'})) { |
if (exists($curves[-1]->{'data'})) { |
&Apache::lonxml::warning('Use of <function> precludes use of <data>. The <data> will be omitted in favor of the <function> declaration.'); |
&Apache::lonxml::warning |
|
('Use of the <b>curve function</b> tag precludes use of '. |
|
' the <b>curve data</b> tag. '. |
|
'The curve data tag will be omitted in favor of the '. |
|
'curve function declaration.'); |
delete $curves[-1]->{'data'} ; |
delete $curves[-1]->{'data'} ; |
} |
} |
my $function = &Apache::lonxml::get_all_text("/function",$$parser[-1]); |
my $function = &Apache::lonxml::get_all_text("/function",$parser); |
$function = &Apache::run::evaluate($function,$safeeval,$$parstack[-1]); |
$function = &Apache::run::evaluate($function,$safeeval,$$parstack[-1]); |
$curves[-1]->{'function'} = $function; |
$curves[-1]->{'function'} = $function; |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
$result .= &Apache::edit::tag_start($target,$token,'Gnuplot compatible curve function'); |
$result .= &Apache::edit::tag_start($target,$token,'Gnuplot compatible curve function'); |
my $text = &Apache::lonxml::get_all_text("/function",$$parser[-1]); |
my $text = &Apache::lonxml::get_all_text("/function",$parser); |
$result .= &Apache::edit::end_row(). |
$result .= &Apache::edit::end_row(). |
&Apache::edit::start_spanning_row(). |
&Apache::edit::start_spanning_row(). |
&Apache::edit::editline('',$text,'',60); |
&Apache::edit::editline('',$text,'',60); |
} elsif ($target eq 'modified') { |
} elsif ($target eq 'modified') { |
$result.=&Apache::edit::rebuild_tag($token); |
$result.=&Apache::edit::rebuild_tag($token); |
my $text=$$parser[-1]->get_text("/function"); |
$result.=&Apache::edit::modifiedfield("/function",$parser); |
$result.=&Apache::edit::modifiedfield($token); |
|
} |
} |
return $result; |
return $result; |
} |
} |
Line 834 sub start_data {
|
Line 866 sub start_data {
|
my $result=''; |
my $result=''; |
if ($target eq 'web' || $target eq 'tex') { |
if ($target eq 'web' || $target eq 'tex') { |
if (exists($curves[-1]->{'function'})) { |
if (exists($curves[-1]->{'function'})) { |
&Apache::lonxml::warning('Use of <data> precludes use of .'. |
&Apache::lonxml::warning |
'<function>. The <function> will be omitted in favor of '. |
('Use of the <b>curve function</b> tag precludes use of '. |
'the <data> declaration.'); |
' the <b>curve data</b> tag. '. |
|
'The curve function tag will be omitted in favor of the '. |
|
'curve data declaration.'); |
delete($curves[-1]->{'function'}); |
delete($curves[-1]->{'function'}); |
} |
} |
my $datatext = &Apache::lonxml::get_all_text("/data",$$parser[-1]); |
my $datatext = &Apache::lonxml::get_all_text("/data",$parser); |
$datatext=&Apache::run::evaluate($datatext,$safeeval,$$parstack[-1]); |
$datatext=&Apache::run::evaluate($datatext,$safeeval,$$parstack[-1]); |
# Deal with cases where we're given an array... |
# Deal with cases where we're given an array... |
if ($datatext =~ /^\@/) { |
if ($datatext =~ /^\@/) { |
Line 853 sub start_data {
|
Line 887 sub start_data {
|
my @data; |
my @data; |
if ($datatext =~ /,/) { # comma deliminated |
if ($datatext =~ /,/) { # comma deliminated |
@data = split /,/,$datatext; |
@data = split /,/,$datatext; |
} else { # Assume it's space seperated. |
} else { # Assume it's space separated. |
@data = split / /,$datatext; |
@data = split / /,$datatext; |
} |
} |
for (my $i=0;$i<=$#data;$i++) { |
for (my $i=0;$i<=$#data;$i++) { |
# Check that it's non-empty |
# Check that it's non-empty |
if (! defined($data[$i])) { |
if (! defined($data[$i])) { |
&Apache::lonxml::warning( |
&Apache::lonxml::warning( |
'undefined <data> value. Replacing with '. |
'undefined curve data value. Replacing with '. |
' pi/e = 1.15572734979092'); |
' pi/e = 1.15572734979092'); |
$data[$i] = 1.15572734979092; |
$data[$i] = 1.15572734979092; |
} |
} |
# Check that it's a number |
# Check that it's a number |
if (! &$real_test($data[$i]) & ! &$int_test($data[$i])) { |
if (! &$real_test($data[$i]) & ! &$int_test($data[$i])) { |
&Apache::lonxml::warning( |
&Apache::lonxml::warning( |
'Bad <data> value of '.$data[$i].' Replacing with '. |
'Bad curve data value of '.$data[$i].' Replacing with '. |
' pi/e = 1.15572734979092'); |
' pi/e = 1.15572734979092'); |
$data[$i] = 1.15572734979092; |
$data[$i] = 1.15572734979092; |
} |
} |
Line 882 sub start_data {
|
Line 916 sub start_data {
|
push @{$curves[-1]->{'data'}},\@data; |
push @{$curves[-1]->{'data'}},\@data; |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
$result .= &Apache::edit::tag_start($target,$token,'Comma or space deliminated curve data'); |
$result .= &Apache::edit::tag_start($target,$token,'Comma or space deliminated curve data'); |
my $text = &Apache::lonxml::get_all_text("/data",$$parser[-1]); |
my $text = &Apache::lonxml::get_all_text("/data",$parser); |
$result .= &Apache::edit::end_row(). |
$result .= &Apache::edit::end_row(). |
&Apache::edit::start_spanning_row(). |
&Apache::edit::start_spanning_row(). |
&Apache::edit::editline('',$text,'',60); |
&Apache::edit::editline('',$text,'',60); |
} elsif ($target eq 'modified') { |
} elsif ($target eq 'modified') { |
$result.=&Apache::edit::rebuild_tag($token); |
$result.=&Apache::edit::rebuild_tag($token); |
my $text=$$parser[-1]->get_text("/data"); |
$result.=&Apache::edit::modifiedfield("/data",$parser); |
$result.=&Apache::edit::modifiedfield($token); |
|
} |
} |
return $result; |
return $result; |
} |
} |
Line 955 sub set_defaults {
|
Line 988 sub set_defaults {
|
sub get_attributes{ |
sub get_attributes{ |
my ($values,$defaults,$parstack,$safeeval,$tag) = @_; |
my ($values,$defaults,$parstack,$safeeval,$tag) = @_; |
foreach my $attr (keys(%{$defaults})) { |
foreach my $attr (keys(%{$defaults})) { |
$values->{$attr} = |
if ($attr eq 'texwidth' || $attr eq 'texfont') { |
&Apache::lonxml::get_param($attr,$parstack,$safeeval); |
$values->{$attr} = |
|
&Apache::lonxml::get_param($attr,$parstack,$safeeval,undef,1); |
|
} else { |
|
$values->{$attr} = |
|
&Apache::lonxml::get_param($attr,$parstack,$safeeval); |
|
} |
if ($values->{$attr} eq '' | !defined($values->{$attr})) { |
if ($values->{$attr} eq '' | !defined($values->{$attr})) { |
$values->{$attr} = $defaults->{$attr}->{'default'}; |
$values->{$attr} = $defaults->{$attr}->{'default'}; |
next; |
next; |
Line 977 sub write_gnuplot_file {
|
Line 1015 sub write_gnuplot_file {
|
my ($tmpdir,$filename,$target)= @_; |
my ($tmpdir,$filename,$target)= @_; |
my $gnuplot_input = ''; |
my $gnuplot_input = ''; |
my $curve; |
my $curve; |
|
my $pt = $plot{'texfont'}; |
# Collect all the colors |
# Collect all the colors |
my @Colors; |
my @Colors; |
push @Colors, $plot{'bgcolor'}; |
push @Colors, $plot{'bgcolor'}; |
Line 997 sub write_gnuplot_file {
|
Line 1036 sub write_gnuplot_file {
|
# set output |
# set output |
$gnuplot_input .= "set output\n"; |
$gnuplot_input .= "set output\n"; |
} elsif ($target eq 'tex') { |
} 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/". |
$gnuplot_input .= "set output \"/home/httpd/perl/tmp/". |
&Apache::lonnet::unescape($filename).".eps\"\n"; |
&Apache::lonnet::unescape($filename).".eps\"\n"; |
} |
} |
|
# cartesian or polar? |
|
if (lc($plot{'plottype'}) eq 'polar') { |
|
$gnuplot_input .= 'set polar'.$/; |
|
} else { |
|
# Assume Cartesian |
|
} |
# grid |
# grid |
$gnuplot_input .= 'set grid'.$/ if ($plot{'grid'} eq 'on'); |
$gnuplot_input .= 'set grid'.$/ if ($plot{'grid'} eq 'on'); |
# border |
# border |
Line 1011 sub write_gnuplot_file {
|
Line 1056 sub write_gnuplot_file {
|
$gnuplot_input .= "set samples $plot{'samples'}\n"; |
$gnuplot_input .= "set samples $plot{'samples'}\n"; |
# title, xlabel, ylabel |
# title, xlabel, ylabel |
# titles |
# titles |
$gnuplot_input .= "set title \"$title\"\n" if (defined($title)) ; |
if ($target eq 'tex') { |
$gnuplot_input .= "set xlabel \"$xlabel\"\n" if (defined($xlabel)); |
$gnuplot_input .= "set title \"$title\" font \"Helvetica,".$pt."pt\"\n" if (defined($title)) ; |
$gnuplot_input .= "set ylabel \"$ylabel\"\n" if (defined($ylabel)); |
$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 |
# tics |
if (%xtics) { |
if (%xtics) { |
$gnuplot_input .= "set xtics $xtics{'location'} "; |
$gnuplot_input .= "set xtics $xtics{'location'} "; |
Line 1021 sub write_gnuplot_file {
|
Line 1072 sub write_gnuplot_file {
|
$gnuplot_input .= "$xtics{'start'}, "; |
$gnuplot_input .= "$xtics{'start'}, "; |
$gnuplot_input .= "$xtics{'increment'}, "; |
$gnuplot_input .= "$xtics{'increment'}, "; |
$gnuplot_input .= "$xtics{'end'}\n"; |
$gnuplot_input .= "$xtics{'end'}\n"; |
|
if ($xtics{'minorfreq'} != 0) { |
|
$gnuplot_input .= "set mxtics ".$xtics{'minorfreq'}."\n"; |
|
} |
} |
} |
if (%ytics) { |
if (%ytics) { |
$gnuplot_input .= "set ytics $ytics{'location'} "; |
$gnuplot_input .= "set ytics $ytics{'location'} "; |
Line 1028 sub write_gnuplot_file {
|
Line 1082 sub write_gnuplot_file {
|
$gnuplot_input .= "$ytics{'start'}, "; |
$gnuplot_input .= "$ytics{'start'}, "; |
$gnuplot_input .= "$ytics{'increment'}, "; |
$gnuplot_input .= "$ytics{'increment'}, "; |
$gnuplot_input .= "$ytics{'end'}\n"; |
$gnuplot_input .= "$ytics{'end'}\n"; |
|
if ($ytics{'minorfreq'} != 0) { |
|
$gnuplot_input .= "set mytics ".$ytics{'minorfreq'}."\n"; |
|
} |
} |
} |
# axis |
# axis |
if (%axis) { |
if (%axis) { |
Line 1048 sub write_gnuplot_file {
|
Line 1105 sub write_gnuplot_file {
|
my $label; |
my $label; |
foreach $label (@labels) { |
foreach $label (@labels) { |
$gnuplot_input .= 'set label "'.$label->{'text'}.'" at '. |
$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') { |
if ($target eq 'tex') { |
$gnuplot_input .="set size 1,".$plot{'height'}/$plot{'width'}*1.38; |
$gnuplot_input .="set size 1,".$plot{'height'}/$plot{'width'}*1.38; |
Line 1135 sub check_inputs {
|
Line 1192 sub check_inputs {
|
my $curve; |
my $curve; |
foreach $curve (@curves) { |
foreach $curve (@curves) { |
if (!defined($curve->{'function'})&&!defined($curve->{'data'})){ |
if (!defined($curve->{'function'})&&!defined($curve->{'data'})){ |
&Apache::lonxml::warning("One of the curves specified did not contain any <data> or <function> declarations\n"); |
&Apache::lonxml::warning("One of the curves specified did not contain any curve data or curve function declarations\n"); |
return ''; |
return ''; |
} |
} |
} |
} |