version 1.55, 2002/03/06 19:55:30
|
version 1.73, 2002/04/25 21:33:52
|
Line 91 my %linestyles =
|
Line 91 my %linestyles =
|
yerrorbars => [3,4], |
yerrorbars => [3,4], |
xyerrorbars => [4,6], |
xyerrorbars => [4,6], |
boxes => 3, |
boxes => 3, |
# boxerrorbars => [3,4,5], |
|
# boxxyerrorbars => [4,6,7], |
|
# financebars => 5, |
|
# candlesticks => 5, |
|
vector => 4 |
vector => 4 |
); |
); |
|
|
my $int_test = sub {$_[0]=~s/\s+//g;$_[0]=~/^\d+$/}; |
my $int_test = sub {$_[0]=~s/\s+//g;$_[0]=~/^\d+$/}; |
my $real_test = |
my $real_test = |
sub {$_[0]=~s/\s+//g;$_[0]=~/^[+-]?\d*\.?\d*([eE][+-]\d+)?$/}; |
sub {$_[0]=~s/\s+//g;$_[0]=~/^[+-]?\d*\.?\d*([eE][+-]\d+)?$/}; |
|
my $pos_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 $color_test = sub {$_[0]=~s/\s+//g;$_[0]=~/^x[\da-f]{6}$/}; |
my $onoff_test = sub {$_[0]=~/^(on|off)$/}; |
my $onoff_test = sub {$_[0]=~/^(on|off)$/}; |
my $key_pos_test = sub {$_[0]=~/^(top|bottom|right|left|outside|below| )+$/}; |
my $key_pos_test = sub {$_[0]=~/^(top|bottom|right|left|outside|below| )+$/}; |
my $sml_test = sub {$_[0]=~/^(small|medium|large)$/}; |
my $sml_test = sub {$_[0]=~/^(small|medium|large)$/}; |
my $linestyle_test = sub {exists($linestyles{$_[0]})}; |
my $linestyle_test = sub {exists($linestyles{$_[0]})}; |
my $words_test = sub {$_[0]=~s/\s+/ /g;$_[0]=~/^([\w\(\)]+ ?)+$/}; |
my $words_test = sub {$_[0]=~s/\s+/ /g;$_[0]=~/^([\w~!\@\#\$\%^&\*\(\)-=_\+\[\]\{\}:\;\'<>,\.\/\?\\]+ ?)+$/}; |
|
|
################################################################### |
################################################################### |
## ## |
## ## |
Line 114 my $words_test = sub {$_[0]=~s/\s+/
|
Line 112 my $words_test = sub {$_[0]=~s/\s+/
|
## ## |
## ## |
################################################################### |
################################################################### |
my @gnuplot_edit_order = |
my @gnuplot_edit_order = |
qw/bgcolor fgcolor height width font transparent grid border align/; |
qw/alttag bgcolor fgcolor height width font transparent grid border align/; |
|
|
my $gnuplot_help_text = <<"ENDPLOTHELP"; |
my $gnuplot_help_text = <<"ENDPLOTHELP"; |
<p> |
<p> |
Line 150 ENDPLOTHELP
|
Line 148 ENDPLOTHELP
|
|
|
my %gnuplot_defaults = |
my %gnuplot_defaults = |
( |
( |
|
alttag => { |
|
default => 'dynamically generated plot', |
|
test => $words_test, |
|
description => 'brief description of the plot', |
|
edit_type => 'entry', |
|
size => '40' |
|
}, |
height => { |
height => { |
default => 200, |
default => 300, |
test => $int_test, |
test => $int_test, |
description => 'height of image (pixels)', |
description => 'height of image (pixels)', |
edit_type => 'entry', |
edit_type => 'entry', |
size => '10' |
size => '10' |
}, |
}, |
width => { |
width => { |
default => 200, |
default => 400, |
test => $int_test, |
test => $int_test, |
description => 'width of image (pixels)', |
description => 'width of image (pixels)', |
edit_type => 'entry', |
edit_type => 'entry', |
Line 185 my %gnuplot_defaults =
|
Line 190 my %gnuplot_defaults =
|
edit_type => 'onoff' |
edit_type => 'onoff' |
}, |
}, |
grid => { |
grid => { |
default => 'off', |
default => 'on', |
test => $onoff_test, |
test => $onoff_test, |
description => 'Display grid', |
description => 'Display grid', |
edit_type => 'onoff' |
edit_type => 'onoff' |
Line 204 my %gnuplot_defaults =
|
Line 209 my %gnuplot_defaults =
|
choices => ['small','medium','large'] |
choices => ['small','medium','large'] |
}, |
}, |
align => { |
align => { |
default => 'left', |
default => 'center', |
test => sub {$_[0]=~/^(left|right|center)$/}, |
test => sub {$_[0]=~/^(left|right|center)$/}, |
description => 'alignment for image in html', |
description => 'alignment for image in html', |
edit_type => 'choice', |
edit_type => 'choice', |
Line 301 my %tic_defaults =
|
Line 306 my %tic_defaults =
|
}, |
}, |
); |
); |
|
|
|
my @axis_edit_order = ('color','xmin','xmax','ymin','ymax'); |
my %axis_defaults = |
my %axis_defaults = |
( |
( |
color => { |
color => { |
Line 362 first tag will be the X data and the sec
|
Line 368 first tag will be the X data and the sec
|
</p> |
</p> |
<dt> Curve Function |
<dt> Curve Function |
<dd> The <b>function</b> tag allows you to specify the curve to be |
<dd> The <b>function</b> tag allows you to specify the curve to be |
plotted as a formula that gnuplot can understand. Be careful using this |
plotted as a formula that gnuplot can understand. <b>Be careful using this |
tag - it is surprisingly easy to give gnuplot a function it cannot deal |
tag.</b> It is surprisingly easy to give gnuplot a function it cannot deal |
with properly. Be explicit: 2*sin(2*3.141592*x/4) will work but |
with properly. Be explicit: 2*sin(2*3.141592*x/4) will work but |
2sin(2*3.141592x/4) will not. If you do not receive any errors in the |
2sin(2*3.141592x/4) will not. If you do not receive any errors in the |
gnuplot data but still do not have an image produced, it is likely there |
gnuplot data but still do not have an image produced, it is likely there |
Line 371 is an error in your <b>function</b> tag.
|
Line 377 is an error in your <b>function</b> tag.
|
</dl> |
</dl> |
ENDCURVEHELP |
ENDCURVEHELP |
|
|
|
my @curve_edit_order = ('color','name','linestyle','pointtype','pointsize'); |
|
|
my %curve_defaults = |
my %curve_defaults = |
( |
( |
color => { |
color => { |
Line 393 my %curve_defaults =
|
Line 401 my %curve_defaults =
|
description => 'Line style', |
description => 'Line style', |
edit_type => 'choice', |
edit_type => 'choice', |
choices => [keys(%linestyles)] |
choices => [keys(%linestyles)] |
} |
}, |
|
# gnuplots term=gif driver does not handle linewidth :( |
|
# linewidth => { |
|
# default => 1, |
|
# test => $int_test, |
|
# description => 'Line width (may not apply to all line styles)', |
|
# edit_type => 'choice', |
|
# choices => [1,2,3,4,5,6,7,8,9,10] |
|
# }, |
|
pointsize => { |
|
default => 1, |
|
test => $pos_real_test, |
|
description => 'point size (may not apply to all line styles)', |
|
edit_type => 'entry', |
|
size => '5' |
|
}, |
|
pointtype => { |
|
default => 1, |
|
test => $int_test, |
|
description => 'point type (may not apply to all line styles)', |
|
edit_type => 'choice', |
|
choices => [0,1,2,3,4,5,6] |
|
} |
); |
); |
|
|
################################################################### |
################################################################### |
Line 416 sub start_gnuplot {
|
Line 446 sub start_gnuplot {
|
'xtics','ytics')); |
'xtics','ytics')); |
push (@Apache::lonxml::namespace,'lonplot'); |
push (@Apache::lonxml::namespace,'lonplot'); |
if ($target eq 'web' || $target eq 'tex') { |
if ($target eq 'web' || $target eq 'tex') { |
my $inside = &Apache::lonxml::get_all_text("/gnuplot",$$parser[-1]); |
|
$inside=&Apache::run::evaluate($inside,$safeeval,$$parstack[-1]); |
|
&Apache::lonxml::newparser($parser,\$inside); |
|
&get_attributes(\%plot,\%gnuplot_defaults,$parstack,$safeeval, |
&get_attributes(\%plot,\%gnuplot_defaults,$parstack,$safeeval, |
$tagstack->[-1]); |
$tagstack->[-1]); |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
Line 443 sub end_gnuplot {
|
Line 470 sub end_gnuplot {
|
&Apache::lonxml::deregister('Apache::lonplot', |
&Apache::lonxml::deregister('Apache::lonplot', |
('title','xlabel','ylabel','key','axis','label','curve')); |
('title','xlabel','ylabel','key','axis','label','curve')); |
my $result = ''; |
my $result = ''; |
|
my $randnumber; |
|
# need to call rand everytime start_script would evaluate, as the |
|
# safe space rand number generator and the global rand generator |
|
# are not seperate |
|
if ($target eq 'web' || $target eq 'tex' || $target eq 'grade' || |
|
$target eq 'answer') { |
|
$randnumber=int(rand(1000)); |
|
} |
if ($target eq 'web' || $target eq 'tex') { |
if ($target eq 'web' || $target eq 'tex') { |
&check_inputs(); # Make sure we have all the data we need |
&check_inputs(); # Make sure we have all the data we need |
## |
## |
## Determine filename |
## Determine filename |
my $tmpdir = '/home/httpd/perl/tmp/'; |
my $tmpdir = '/home/httpd/perl/tmp/'; |
my $filename = $ENV{'user.name'}.'_'.$ENV{'user.domain'}. |
my $filename = $ENV{'user.name'}.'_'.$ENV{'user.domain'}. |
'_'.time.'_'.$$.int(rand(1000)).'_plot.data'; |
'_'.time.'_'.$$.$randnumber.'_plot'; |
## Write the plot description to the file |
## Write the plot description to the file |
&write_gnuplot_file($tmpdir,$filename,$target); |
&write_gnuplot_file($tmpdir,$filename,$target); |
$filename = &Apache::lonnet::escape($filename); |
$filename = &Apache::lonnet::escape($filename); |
## return image tag for the plot |
## return image tag for the plot |
if ($target eq 'web') { |
if ($target eq 'web') { |
$result .= <<"ENDIMAGE"; |
$result .= <<"ENDIMAGE"; |
<img src = "/cgi-bin/plot.gif?file=$filename&output=gif" |
<img src = "/cgi-bin/plot.gif?file=$filename.data&output=gif" |
width = "$plot{'width'}" |
width = "$plot{'width'}" |
height = "$plot{'height'}" |
height = "$plot{'height'}" |
align = "$plot{'align'}" |
align = "$plot{'align'}" |
alt = "image should be /cgi-bin/plot.gif?$filename" /> |
alt = "$plot{'alttag'}" /> |
ENDIMAGE |
ENDIMAGE |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
&Apache::lonnet::ssi('cgi-bin/plot.gif?file=$filename'. |
&Apache::lonnet::ssi("/cgi-bin/plot.gif?file=$filename.data&output=eps"); |
'&output=eps'); |
$result = '\graphicspath{{/home/httpd/perl/tmp/}}\fbox{\includegraphics{'.&Apache::lonnet::unescape($filename).'.eps}}'; |
$result = "$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 573 sub start_title {
|
Line 607 sub start_title {
|
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[-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) { |
$title = substr($title,0,$max_str_len); |
$title = substr($title,0,$max_str_len); |
Line 582 sub start_title {
|
Line 617 sub start_title {
|
my $text=&Apache::lonxml::get_all_text("/title",$$parser[-1]); |
my $text=&Apache::lonxml::get_all_text("/title",$$parser[-1]); |
$result.=&Apache::edit::end_row(). |
$result.=&Apache::edit::end_row(). |
&Apache::edit::start_spanning_row(). |
&Apache::edit::start_spanning_row(). |
&Apache::edit::editfield('',$text,'',60,1); |
&Apache::edit::editline('',$text,'',60); |
} elsif ($target eq 'modified') { |
} elsif ($target eq 'modified') { |
my $text=$$parser[-1]->get_text("/title"); |
my $text=$$parser[-1]->get_text("/title"); |
$result.=&Apache::edit::rebuild_tag($token); |
$result.=&Apache::edit::rebuild_tag($token); |
Line 606 sub start_xlabel {
|
Line 641 sub start_xlabel {
|
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[-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) { |
$xlabel = substr($xlabel,0,$max_str_len); |
$xlabel = substr($xlabel,0,$max_str_len); |
Line 615 sub start_xlabel {
|
Line 651 sub start_xlabel {
|
my $text=&Apache::lonxml::get_all_text("/xlabel",$$parser[-1]); |
my $text=&Apache::lonxml::get_all_text("/xlabel",$$parser[-1]); |
$result.=&Apache::edit::end_row(). |
$result.=&Apache::edit::end_row(). |
&Apache::edit::start_spanning_row(). |
&Apache::edit::start_spanning_row(). |
&Apache::edit::editfield('',$text,'',60,1); |
&Apache::edit::editline('',$text,'',60); |
} elsif ($target eq 'modified') { |
} elsif ($target eq 'modified') { |
my $text=$$parser[-1]->get_text("/xlabel"); |
my $text=$$parser[-1]->get_text("/xlabel"); |
$result.=&Apache::edit::rebuild_tag($token); |
$result.=&Apache::edit::rebuild_tag($token); |
Line 640 sub start_ylabel {
|
Line 676 sub start_ylabel {
|
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[-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) { |
$ylabel = substr($ylabel,0,$max_str_len); |
$ylabel = substr($ylabel,0,$max_str_len); |
Line 649 sub start_ylabel {
|
Line 686 sub start_ylabel {
|
my $text = &Apache::lonxml::get_all_text("/ylabel",$$parser[-1]); |
my $text = &Apache::lonxml::get_all_text("/ylabel",$$parser[-1]); |
$result .= &Apache::edit::end_row(). |
$result .= &Apache::edit::end_row(). |
&Apache::edit::start_spanning_row(). |
&Apache::edit::start_spanning_row(). |
&Apache::edit::editfield('',$text,'',60,1); |
&Apache::edit::editline('',$text,'',60); |
} elsif ($target eq 'modified') { |
} elsif ($target eq 'modified') { |
my $text=$$parser[-1]->get_text("/ylabel"); |
my $text=$$parser[-1]->get_text("/ylabel"); |
$result.=&Apache::edit::rebuild_tag($token); |
$result.=&Apache::edit::rebuild_tag($token); |
Line 677 sub start_label {
|
Line 714 sub start_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[-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); |
$label{'text'} = $text; |
$label{'text'} = $text; |
Line 687 sub start_label {
|
Line 725 sub start_label {
|
my $text = &Apache::lonxml::get_all_text("/label",$$parser[-1]); |
my $text = &Apache::lonxml::get_all_text("/label",$$parser[-1]); |
$result .= &Apache::edit::end_row(). |
$result .= &Apache::edit::end_row(). |
&Apache::edit::start_spanning_row(). |
&Apache::edit::start_spanning_row(). |
&Apache::edit::editfield('',$text,'',60,1); |
&Apache::edit::editline('',$text,'',60); |
} elsif ($target eq 'modified') { |
} elsif ($target eq 'modified') { |
&Apache::edit::get_new_args |
&Apache::edit::get_new_args |
($token,$parstack,$safeeval,keys(%label_defaults)); |
($token,$parstack,$safeeval,keys(%label_defaults)); |
Line 722 sub start_curve {
|
Line 760 sub start_curve {
|
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
$result .= &Apache::edit::tag_start($target,$token,'Curve'); |
$result .= &Apache::edit::tag_start($target,$token,'Curve'); |
$result .= &help_win($curve_help_text); |
$result .= &help_win($curve_help_text); |
$result .= &edit_attributes($target,$token,\%curve_defaults); |
$result .= &edit_attributes($target,$token,\%curve_defaults, |
|
\@curve_edit_order); |
} elsif ($target eq 'modified') { |
} elsif ($target eq 'modified') { |
my $constructtag=&Apache::edit::get_new_args |
my $constructtag=&Apache::edit::get_new_args |
($token,$parstack,$safeeval,keys(%curve_defaults)); |
($token,$parstack,$safeeval,keys(%curve_defaults)); |
Line 755 sub start_function {
|
Line 794 sub start_function {
|
&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 <function> precludes use of <data>. The <data> will be omitted in favor of the <function> declaration.'); |
delete $curves[-1]->{'data'} ; |
delete $curves[-1]->{'data'} ; |
} |
} |
$curves[-1]->{'function'} = |
my $function = &Apache::lonxml::get_all_text("/function",$$parser[-1]); |
&Apache::lonxml::get_all_text("/function",$$parser[-1]); |
$function = &Apache::run::evaluate($function,$safeeval,$$parstack[-1]); |
|
$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[-1]); |
$result .= &Apache::edit::end_row(). |
$result .= &Apache::edit::end_row(). |
&Apache::edit::start_spanning_row(). |
&Apache::edit::start_spanning_row(). |
&Apache::edit::editfield('',$text,'',60,1); |
&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"); |
my $text=$$parser[-1]->get_text("/function"); |
Line 793 sub start_data {
|
Line 833 sub start_data {
|
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[-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 =~ /^\@/) { |
$datatext = &Apache::run::run('return "'.$datatext.'"', |
$datatext = &Apache::run::run('return "'.$datatext.'"', |
Line 837 sub start_data {
|
Line 878 sub start_data {
|
my $text = &Apache::lonxml::get_all_text("/data",$$parser[-1]); |
my $text = &Apache::lonxml::get_all_text("/data",$$parser[-1]); |
$result .= &Apache::edit::end_row(). |
$result .= &Apache::edit::end_row(). |
&Apache::edit::start_spanning_row(). |
&Apache::edit::start_spanning_row(). |
&Apache::edit::editfield('',$text,'',60,1); |
&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"); |
my $text=$$parser[-1]->get_text("/data"); |
Line 865 sub start_axis {
|
Line 906 sub start_axis {
|
$tagstack->[-1]); |
$tagstack->[-1]); |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
$result .= &Apache::edit::tag_start($target,$token,'Plot Axes'); |
$result .= &Apache::edit::tag_start($target,$token,'Plot Axes'); |
$result .= &edit_attributes($target,$token,\%axis_defaults); |
$result .= &edit_attributes($target,$token,\%axis_defaults, |
|
\@axis_edit_order); |
} elsif ($target eq 'modified') { |
} elsif ($target eq 'modified') { |
my $constructtag=&Apache::edit::get_new_args |
my $constructtag=&Apache::edit::get_new_args |
($token,$parstack,$safeeval,keys(%axis_defaults)); |
($token,$parstack,$safeeval,keys(%axis_defaults)); |
Line 949 sub write_gnuplot_file {
|
Line 991 sub write_gnuplot_file {
|
$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\n"; |
$gnuplot_input .= "set term postscript eps monochrome\n"; |
$gnuplot_input .= "set output \"$filename.eps\"\n"; |
$gnuplot_input .= "set output \"/home/httpd/perl/tmp/". |
|
&Apache::lonnet::unescape($filename).".eps\"\n"; |
} |
} |
# grid |
# grid |
$gnuplot_input .= 'set grid'.$/ if ($plot{'grid'} eq 'on'); |
$gnuplot_input .= 'set grid'.$/ if ($plot{'grid'} eq 'on'); |
# border |
# border |
$gnuplot_input .= ($plot{'border'} eq 'on'? |
$gnuplot_input .= ($plot{'border'} eq 'on'? |
'set border'.$/ : |
'set border'.$/ : |
'set noborder'.$/ ); # title, xlabel, ylabel |
'set noborder'.$/ ); |
|
# title, xlabel, ylabel |
# titles |
# titles |
$gnuplot_input .= "set title \"$title\"\n" if (defined($title)) ; |
$gnuplot_input .= "set title \"$title\"\n" if (defined($title)) ; |
$gnuplot_input .= "set xlabel \"$xlabel\"\n" if (defined($xlabel)); |
$gnuplot_input .= "set xlabel \"$xlabel\"\n" if (defined($xlabel)); |
Line 985 sub write_gnuplot_file {
|
Line 1029 sub write_gnuplot_file {
|
if (%key) { |
if (%key) { |
$gnuplot_input .= 'set key '.$key{'pos'}.' '; |
$gnuplot_input .= 'set key '.$key{'pos'}.' '; |
if ($key{'title'} ne '') { |
if ($key{'title'} ne '') { |
$gnuplot_input .= 'title " '.$key{'title'}.'" '; |
$gnuplot_input .= 'title "'.$key{'title'}.'" '; |
} |
} |
$gnuplot_input .= ($key{'box'} eq 'on' ? 'box ' : 'nobox ').$/; |
$gnuplot_input .= ($key{'box'} eq 'on' ? 'box ' : 'nobox ').$/; |
} else { |
} else { |
Line 1006 sub write_gnuplot_file {
|
Line 1050 sub write_gnuplot_file {
|
$gnuplot_input.= |
$gnuplot_input.= |
$curve->{'function'}.' title "'. |
$curve->{'function'}.' title "'. |
$curve->{'name'}.'" with '. |
$curve->{'name'}.'" with '. |
$curve->{'linestyle'}; |
$curve->{'linestyle'}; |
|
$gnuplot_input.= ' linewidth 4 ' if ($target eq 'tex'); |
|
if (($curve->{'linestyle'} eq 'points') || |
|
($curve->{'linestyle'} eq 'linespoints') || |
|
($curve->{'linestyle'} eq 'errorbars') || |
|
($curve->{'linestyle'} eq 'xerrorbars') || |
|
($curve->{'linestyle'} eq 'yerrorbars') || |
|
($curve->{'linestyle'} eq 'xyerrorbars')) { |
|
$gnuplot_input.=' pointtype '.$curve->{'pointtype'}; |
|
$gnuplot_input.=' pointsize '.$curve->{'pointsize'}; |
|
} |
} elsif (exists($curve->{'data'})) { |
} elsif (exists($curve->{'data'})) { |
# Store data values in $datatext |
# Store data values in $datatext |
my $datatext = ''; |
my $datatext = ''; |
# get new filename |
# get new filename |
my $datafilename = "$tmpdir/$filename.$i"; |
my $datafilename = "$tmpdir/$filename.data.$i"; |
my $fh=Apache::File->new(">$datafilename"); |
my $fh=Apache::File->new(">$datafilename"); |
# Compile data |
# Compile data |
my @Data = @{$curve->{'data'}}; |
my @Data = @{$curve->{'data'}}; |
Line 1030 sub write_gnuplot_file {
|
Line 1084 sub write_gnuplot_file {
|
$gnuplot_input.= '"'.$datafilename.'" title "'. |
$gnuplot_input.= '"'.$datafilename.'" title "'. |
$curve->{'name'}.'" with '. |
$curve->{'name'}.'" with '. |
$curve->{'linestyle'}; |
$curve->{'linestyle'}; |
|
$gnuplot_input.= ' linewidth 4 ' if ($target eq 'tex'); |
|
if (($curve->{'linestyle'} eq 'points') || |
|
($curve->{'linestyle'} eq 'linespoints') || |
|
($curve->{'linestyle'} eq 'errorbars') || |
|
($curve->{'linestyle'} eq 'xerrorbars') || |
|
($curve->{'linestyle'} eq 'yerrorbars') || |
|
($curve->{'linestyle'} eq 'xyerrorbars')) { |
|
$gnuplot_input.=' pointtype '.$curve->{'pointtype'}; |
|
$gnuplot_input.=' pointsize '.$curve->{'pointsize'}; |
|
} |
} |
} |
} |
} |
# Write the output to a file. |
# Write the output to a file. |
my $fh=Apache::File->new(">$tmpdir$filename"); |
my $fh=Apache::File->new(">$tmpdir$filename.data"); |
print $fh $gnuplot_input; |
print $fh $gnuplot_input; |
close($fh); |
close($fh); |
# That's all folks. |
# That's all folks. |
Line 1103 sub edit_attributes {
|
Line 1167 sub edit_attributes {
|
sub insert_gnuplot { |
sub insert_gnuplot { |
my $result = ''; |
my $result = ''; |
# plot attributes |
# plot attributes |
$result .= "<gnuplot \n"; |
$result .= "\n<gnuplot "; |
foreach my $attr (keys(%gnuplot_defaults)) { |
foreach my $attr (keys(%gnuplot_defaults)) { |
$result .= " $attr=\"$gnuplot_defaults{$attr}->{'default'}\"\n"; |
$result .= "\n $attr=\"$gnuplot_defaults{$attr}->{'default'}\""; |
} |
} |
$result .= ">\n"; |
$result .= ">"; |
# Add the components (most are commented out for simplicity) |
# Add the components (most are commented out for simplicity) |
# $result .= &insert_key(); |
# $result .= &insert_key(); |
# $result .= &insert_axis(); |
# $result .= &insert_axis(); |
Line 1116 sub insert_gnuplot {
|
Line 1180 sub insert_gnuplot {
|
# $result .= &insert_ylabel(); |
# $result .= &insert_ylabel(); |
$result .= &insert_curve(); |
$result .= &insert_curve(); |
# close up the <gnuplot> |
# close up the <gnuplot> |
$result .= "</gnuplot>\n"; |
$result .= "\n</gnuplot>"; |
return $result; |
return $result; |
} |
} |
|
|
Line 1130 sub insert_xtics {
|
Line 1194 sub insert_xtics {
|
my $result; |
my $result; |
$result .= "\n <xtics "; |
$result .= "\n <xtics "; |
foreach my $attr (keys(%tic_defaults)) { |
foreach my $attr (keys(%tic_defaults)) { |
$result .= "$attr=\"$tic_defaults{$attr}->{'default'}\" "; |
$result .= "\n $attr=\"$tic_defaults{$attr}->{'default'}\" "; |
} |
} |
$result .= "/>\n"; |
$result .= "/>"; |
return $result; |
return $result; |
} |
} |
|
|
Line 1140 sub insert_ytics {
|
Line 1204 sub insert_ytics {
|
my $result; |
my $result; |
$result .= "\n <ytics "; |
$result .= "\n <ytics "; |
foreach my $attr (keys(%tic_defaults)) { |
foreach my $attr (keys(%tic_defaults)) { |
$result .= "$attr=\"$tic_defaults{$attr}->{'default'}\" "; |
$result .= "\n $attr=\"$tic_defaults{$attr}->{'default'}\" "; |
} |
} |
$result .= "/>\n"; |
$result .= "/>"; |
return $result; |
return $result; |
} |
} |
|
|
sub insert_key { |
sub insert_key { |
my $result; |
my $result; |
$result .= "\n <key \n"; |
$result .= "\n <key "; |
foreach my $attr (keys(%key_defaults)) { |
foreach my $attr (keys(%key_defaults)) { |
$result .= " $attr=\"$key_defaults{$attr}->{'default'}\"\n"; |
$result .= "\n $attr=\"$key_defaults{$attr}->{'default'}\""; |
} |
} |
$result .= " />\n"; |
$result .= " />"; |
return $result; |
return $result; |
} |
} |
|
|
Line 1160 sub insert_axis{
|
Line 1224 sub insert_axis{
|
my $result; |
my $result; |
$result .= "\n <axis "; |
$result .= "\n <axis "; |
foreach my $attr (keys(%axis_defaults)) { |
foreach my $attr (keys(%axis_defaults)) { |
$result .= " $attr=\"$axis_defaults{$attr}->{'default'}\"\n"; |
$result .= "\n $attr=\"$axis_defaults{$attr}->{'default'}\""; |
} |
} |
$result .= " />\n"; |
$result .= " />"; |
return $result; |
return $result; |
} |
} |
|
|
sub insert_title { return "\n <title></title>\n"; } |
sub insert_title { return "\n <title></title>"; } |
sub insert_xlabel { return "\n <xlabel></xlabel>\n"; } |
sub insert_xlabel { return "\n <xlabel></xlabel>"; } |
sub insert_ylabel { return "\n <ylabel></ylabel>\n"; } |
sub insert_ylabel { return "\n <ylabel></ylabel>"; } |
|
|
sub insert_label { |
sub insert_label { |
my $result; |
my $result; |
$result .= "\n <label "; |
$result .= "\n <label "; |
foreach my $attr (keys(%label_defaults)) { |
foreach my $attr (keys(%label_defaults)) { |
$result .= ' '.$attr.'="'. |
$result .= "\n $attr=\"". |
$label_defaults{$attr}->{'default'}."\"\n"; |
$label_defaults{$attr}->{'default'}."\""; |
} |
} |
$result .= " ></label>\n"; |
$result .= "></label>"; |
return $result; |
return $result; |
} |
} |
|
|
Line 1185 sub insert_curve {
|
Line 1249 sub insert_curve {
|
my $result; |
my $result; |
$result .= "\n <curve "; |
$result .= "\n <curve "; |
foreach my $attr (keys(%curve_defaults)) { |
foreach my $attr (keys(%curve_defaults)) { |
$result .= ' '.$attr.'="'. |
$result .= "\n $attr=\"". |
$curve_defaults{$attr}->{'default'}."\"\n"; |
$curve_defaults{$attr}->{'default'}."\""; |
} |
} |
$result .= " >\n"; |
$result .= " >"; |
$result .= &insert_data().&insert_data()."</curve>\n"; |
$result .= &insert_data().&insert_data()."\n </curve>"; |
} |
} |
|
|
sub insert_function { |
sub insert_function { |
my $result; |
my $result; |
$result .= "<function></function>\n"; |
$result .= "\n <function></function>"; |
return $result; |
return $result; |
} |
} |
|
|
sub insert_data { |
sub insert_data { |
my $result; |
my $result; |
$result .= " <data></data>\n"; |
$result .= "\n <data></data>"; |
return $result; |
return $result; |
} |
} |
|
|