version 1.54, 2002/03/01 14:03:50
|
version 1.59, 2002/03/22 14:48:00
|
Line 144 A <b>gnuplot</b> tag can contain the fol
|
Line 144 A <b>gnuplot</b> tag can contain the fol
|
<dd> Allows specification of the x and y coordinate 'tics' on the axes. |
<dd> Allows specification of the x and y coordinate 'tics' on the axes. |
This is mostly used to adjust the grid lines when a grid is displayed. |
This is mostly used to adjust the grid lines when a grid is displayed. |
</dl> |
</dl> |
|
If you are having trouble with your plot, please read the help |
|
available on Plot Curve. |
ENDPLOTHELP |
ENDPLOTHELP |
|
|
my %gnuplot_defaults = |
my %gnuplot_defaults = |
Line 360 first tag will be the X data and the sec
|
Line 362 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 414 sub start_gnuplot {
|
Line 416 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 441 sub end_gnuplot {
|
Line 440 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.data'; |
## 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); |
Line 571 sub start_title {
|
Line 578 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 580 sub start_title {
|
Line 588 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::textfield('',$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 604 sub start_xlabel {
|
Line 612 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 613 sub start_xlabel {
|
Line 622 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::textfield('',$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 638 sub start_ylabel {
|
Line 647 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 647 sub start_ylabel {
|
Line 657 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::textfield('',$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 675 sub start_label {
|
Line 685 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 685 sub start_label {
|
Line 696 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::textfield('',$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 753 sub start_function {
|
Line 764 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::textfield('',$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 791 sub start_data {
|
Line 803 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 835 sub start_data {
|
Line 848 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::textfield('',$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"); |