version 1.81, 2003/02/07 22:03:21
|
version 1.88, 2003/09/10 13:50:29
|
Line 112 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/alttag bgcolor fgcolor height width font transparent grid samples border align/; |
qw/alttag bgcolor fgcolor height width font transparent grid samples |
|
border align texwidth plottype/; |
|
|
my $gnuplot_help_text = <<"ENDPLOTHELP"; |
my $gnuplot_help_text = <<"ENDPLOTHELP"; |
<p> |
<p> |
Line 221 my %gnuplot_defaults =
|
Line 222 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' |
|
}, |
|
plottype => { |
|
default => 'Cartesian', |
|
test => sub {$_[0]=~/^(Polar|Cartesian)$/}, |
|
description => 'Plot type:', |
|
edit_type => 'choice', |
|
choices => ['Polar','Cartesian'] |
|
}, |
); |
); |
|
|
my %key_defaults = |
my %key_defaults = |
Line 506 sub end_gnuplot {
|
Line 521 sub end_gnuplot {
|
ENDIMAGE |
ENDIMAGE |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
&Apache::lonnet::ssi("/cgi-bin/plot.gif?file=$filename.data&output=eps"); |
&Apache::lonnet::ssi("/cgi-bin/plot.gif?file=$filename.data&output=eps"); |
$result = '\graphicspath{{/home/httpd/perl/tmp/}}\includegraphics{'.&Apache::lonnet::unescape($filename).'.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 798 sub start_function {
|
Line 814 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); |
my $function = &Apache::lonxml::get_all_text("/function",$parser); |
Line 834 sub start_data {
|
Line 854 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); |
my $datatext = &Apache::lonxml::get_all_text("/data",$parser); |
Line 860 sub start_data {
|
Line 882 sub start_data {
|
# 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 955 sub set_defaults {
|
Line 977 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') { |
&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 997 sub write_gnuplot_file {
|
Line 1024 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\" 25 \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 1044 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)) ; |
$gnuplot_input .= "set title \"$title\" font \"Helvetica,25pt\"\n" if (defined($title)) ; |
$gnuplot_input .= "set xlabel \"$xlabel\"\n" if (defined($xlabel)); |
$gnuplot_input .= "set xlabel \"$xlabel\" font \"Helvetica,25pt\" \n" if (defined($xlabel)); |
$gnuplot_input .= "set ylabel \"$ylabel\"\n" if (defined($ylabel)); |
$gnuplot_input .= "set ylabel \"$ylabel\" font \"Helvetica,25pt\"\n" if (defined($ylabel)); |
# tics |
# tics |
if (%xtics) { |
if (%xtics) { |
$gnuplot_input .= "set xtics $xtics{'location'} "; |
$gnuplot_input .= "set xtics $xtics{'location'} "; |
Line 1048 sub write_gnuplot_file {
|
Line 1081 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,25pt"'.$/ ; |
} |
} |
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 1168 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 ''; |
} |
} |
} |
} |