version 1.50, 2002/02/27 16:54:58
|
version 1.51, 2002/02/27 22:10:23
|
Line 413 sub start_gnuplot {
|
Line 413 sub start_gnuplot {
|
('title','xlabel','ylabel','key','axis','label','curve', |
('title','xlabel','ylabel','key','axis','label','curve', |
'xtics','ytics')); |
'xtics','ytics')); |
push (@Apache::lonxml::namespace,'lonplot'); |
push (@Apache::lonxml::namespace,'lonplot'); |
if ($target eq 'web') { |
if ($target eq 'web' || $target eq 'tex') { |
my $inside = &Apache::lonxml::get_all_text("/gnuplot",$$parser[-1]); |
my $inside = &Apache::lonxml::get_all_text("/gnuplot",$$parser[-1]); |
$inside=&Apache::run::evaluate($inside,$safeeval,$$parstack[-1]); |
$inside=&Apache::run::evaluate($inside,$safeeval,$$parstack[-1]); |
&Apache::lonxml::newparser($parser,\$inside); |
&Apache::lonxml::newparser($parser,\$inside); |
Line 441 sub end_gnuplot {
|
Line 441 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 = ''; |
if ($target eq 'web') { |
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 |
Line 449 sub end_gnuplot {
|
Line 449 sub end_gnuplot {
|
my $filename = $ENV{'user.name'}.'_'.$ENV{'user.domain'}. |
my $filename = $ENV{'user.name'}.'_'.$ENV{'user.domain'}. |
'_'.time.'_'.$$.int(rand(1000)).'_plot.data'; |
'_'.time.'_'.$$.int(rand(1000)).'_plot.data'; |
## Write the plot description to the file |
## Write the plot description to the file |
&write_gnuplot_file($tmpdir,$filename); |
&write_gnuplot_file($tmpdir,$filename,$target); |
## return image tag for the plot |
## return image tag for the plot |
$result .= <<"ENDIMAGE"; |
if ($target eq 'web') { |
|
$result .= <<"ENDIMAGE"; |
<img src = "/cgi-bin/plot.gif?$filename" |
<img src = "/cgi-bin/plot.gif?$filename" |
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 = "image should be /cgi-bin/plot.gif?$filename" /> |
ENDIMAGE |
ENDIMAGE |
|
} elsif ($target eq 'tex') { |
|
$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 469 ENDIMAGE
|
Line 473 ENDIMAGE
|
sub start_xtics { |
sub start_xtics { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result=''; |
my $result=''; |
if ($target eq 'web') { |
if ($target eq 'web' || $target eq 'tex') { |
&get_attributes(\%xtics,\%tic_defaults,$parstack,$safeeval, |
&get_attributes(\%xtics,\%tic_defaults,$parstack,$safeeval, |
$tagstack->[-1]); |
$tagstack->[-1]); |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
Line 489 sub start_xtics {
|
Line 493 sub start_xtics {
|
sub end_xtics { |
sub end_xtics { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result = ''; |
my $result = ''; |
if ($target eq 'web') { |
if ($target eq 'web' || $target eq 'tex') { |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
$result.=&Apache::edit::tag_end($target,$token); |
$result.=&Apache::edit::tag_end($target,$token); |
} |
} |
Line 500 sub end_xtics {
|
Line 504 sub end_xtics {
|
sub start_ytics { |
sub start_ytics { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result=''; |
my $result=''; |
if ($target eq 'web') { |
if ($target eq 'web' || $target eq 'tex') { |
&get_attributes(\%ytics,\%tic_defaults,$parstack,$safeeval, |
&get_attributes(\%ytics,\%tic_defaults,$parstack,$safeeval, |
$tagstack->[-1]); |
$tagstack->[-1]); |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
Line 520 sub start_ytics {
|
Line 524 sub start_ytics {
|
sub end_ytics { |
sub end_ytics { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result = ''; |
my $result = ''; |
if ($target eq 'web') { |
if ($target eq 'web' || $target eq 'tex') { |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
$result.=&Apache::edit::tag_end($target,$token); |
$result.=&Apache::edit::tag_end($target,$token); |
} |
} |
Line 532 sub end_ytics {
|
Line 536 sub end_ytics {
|
sub start_key { |
sub start_key { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result=''; |
my $result=''; |
if ($target eq 'web') { |
if ($target eq 'web' || $target eq 'tex') { |
&get_attributes(\%key,\%key_defaults,$parstack,$safeeval, |
&get_attributes(\%key,\%key_defaults,$parstack,$safeeval, |
$tagstack->[-1]); |
$tagstack->[-1]); |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
Line 551 sub start_key {
|
Line 555 sub start_key {
|
sub end_key { |
sub end_key { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result = ''; |
my $result = ''; |
if ($target eq 'web') { |
if ($target eq 'web' || $target eq 'tex') { |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
$result.=&Apache::edit::tag_end($target,$token); |
$result.=&Apache::edit::tag_end($target,$token); |
} |
} |
Line 562 sub end_key {
|
Line 566 sub end_key {
|
sub start_title { |
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') { |
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 =~ s/\n/ /g; |
$title =~ s/\n/ /g; |
if (length($title) > $max_str_len) { |
if (length($title) > $max_str_len) { |
Line 585 sub start_title {
|
Line 589 sub start_title {
|
sub end_title { |
sub end_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') { |
if ($target eq 'web' || $target eq 'tex') { |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
$result.=&Apache::edit::tag_end($target,$token); |
$result.=&Apache::edit::tag_end($target,$token); |
} |
} |
Line 595 sub end_title {
|
Line 599 sub end_title {
|
sub start_xlabel { |
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') { |
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 =~ s/\n/ /g; |
$xlabel =~ s/\n/ /g; |
if (length($xlabel) > $max_str_len) { |
if (length($xlabel) > $max_str_len) { |
Line 618 sub start_xlabel {
|
Line 622 sub start_xlabel {
|
sub end_xlabel { |
sub end_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') { |
if ($target eq 'web' || $target eq 'tex') { |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
$result.=&Apache::edit::tag_end($target,$token); |
$result.=&Apache::edit::tag_end($target,$token); |
} |
} |
Line 629 sub end_xlabel {
|
Line 633 sub end_xlabel {
|
sub start_ylabel { |
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') { |
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 =~ s/\n/ /g; |
$ylabel =~ s/\n/ /g; |
if (length($ylabel) > $max_str_len) { |
if (length($ylabel) > $max_str_len) { |
Line 652 sub start_ylabel {
|
Line 656 sub start_ylabel {
|
sub end_ylabel { |
sub end_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') { |
if ($target eq 'web' || $target eq 'tex') { |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
$result.=&Apache::edit::tag_end($target,$token); |
$result.=&Apache::edit::tag_end($target,$token); |
} |
} |
Line 663 sub end_ylabel {
|
Line 667 sub end_ylabel {
|
sub start_label { |
sub start_label { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result=''; |
my $result=''; |
if ($target eq 'web') { |
if ($target eq 'web' || $target eq 'tex') { |
my %label; |
my %label; |
&get_attributes(\%label,\%label_defaults,$parstack,$safeeval, |
&get_attributes(\%label,\%label_defaults,$parstack,$safeeval, |
$tagstack->[-1]); |
$tagstack->[-1]); |
Line 692 sub start_label {
|
Line 696 sub start_label {
|
sub end_label { |
sub end_label { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result = ''; |
my $result = ''; |
if ($target eq 'web') { |
if ($target eq 'web' || $target eq 'tex') { |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
$result.=&Apache::edit::tag_end($target,$token); |
$result.=&Apache::edit::tag_end($target,$token); |
} |
} |
Line 705 sub start_curve {
|
Line 709 sub start_curve {
|
my $result=''; |
my $result=''; |
&Apache::lonxml::register('Apache::lonplot',('function','data')); |
&Apache::lonxml::register('Apache::lonplot',('function','data')); |
push (@Apache::lonxml::namespace,'curve'); |
push (@Apache::lonxml::namespace,'curve'); |
if ($target eq 'web') { |
if ($target eq 'web' || $target eq 'tex') { |
my %curve; |
my %curve; |
&get_attributes(\%curve,\%curve_defaults,$parstack,$safeeval, |
&get_attributes(\%curve,\%curve_defaults,$parstack,$safeeval, |
$tagstack->[-1]); |
$tagstack->[-1]); |
Line 730 sub end_curve {
|
Line 734 sub end_curve {
|
my $result = ''; |
my $result = ''; |
pop @Apache::lonxml::namespace; |
pop @Apache::lonxml::namespace; |
&Apache::lonxml::deregister('Apache::lonplot',('function','data')); |
&Apache::lonxml::deregister('Apache::lonplot',('function','data')); |
if ($target eq 'web') { |
if ($target eq 'web' || $target eq 'tex') { |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
$result.=&Apache::edit::tag_end($target,$token); |
$result.=&Apache::edit::tag_end($target,$token); |
} |
} |
Line 741 sub end_curve {
|
Line 745 sub end_curve {
|
sub start_function { |
sub start_function { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result=''; |
my $result=''; |
if ($target eq 'web') { |
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 <function> precludes use of <data>. The <data> will be omitted in favor of the <function> declaration.'); |
delete $curves[-1]->{'data'} ; |
delete $curves[-1]->{'data'} ; |
Line 765 sub start_function {
|
Line 769 sub start_function {
|
sub end_function { |
sub end_function { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result = ''; |
my $result = ''; |
if ($target eq 'web') { |
if ($target eq 'web' || $target eq 'tex') { |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
$result .= &Apache::edit::end_table(); |
$result .= &Apache::edit::end_table(); |
} |
} |
Line 776 sub end_function {
|
Line 780 sub end_function {
|
sub start_data { |
sub start_data { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result=''; |
my $result=''; |
if ($target eq 'web') { |
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('Use of <data> precludes use of .'. |
'<function>. The <function> will be omitted in favor of '. |
'<function>. The <function> will be omitted in favor of '. |
Line 840 sub start_data {
|
Line 844 sub start_data {
|
sub end_data { |
sub end_data { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result = ''; |
my $result = ''; |
if ($target eq 'web') { |
if ($target eq 'web' || $target eq 'tex') { |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
$result .= &Apache::edit::end_table(); |
$result .= &Apache::edit::end_table(); |
} |
} |
Line 851 sub end_data {
|
Line 855 sub end_data {
|
sub start_axis { |
sub start_axis { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result=''; |
my $result=''; |
if ($target eq 'web') { |
if ($target eq 'web' || $target eq 'tex') { |
&get_attributes(\%axis,\%axis_defaults,$parstack,$safeeval, |
&get_attributes(\%axis,\%axis_defaults,$parstack,$safeeval, |
$tagstack->[-1]); |
$tagstack->[-1]); |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
Line 870 sub start_axis {
|
Line 874 sub start_axis {
|
sub end_axis { |
sub end_axis { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result = ''; |
my $result = ''; |
if ($target eq 'web') { |
if ($target eq 'web' || $target eq 'tex') { |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
$result.=&Apache::edit::tag_end($target,$token); |
$result.=&Apache::edit::tag_end($target,$token); |
} elsif ($target eq 'modified') { |
} elsif ($target eq 'modified') { |
Line 916 sub get_attributes{
|
Line 920 sub get_attributes{
|
|
|
##------------------------------------------------------- write_gnuplot_file |
##------------------------------------------------------- write_gnuplot_file |
sub write_gnuplot_file { |
sub write_gnuplot_file { |
my ($tmpdir,$filename)= @_; |
my ($tmpdir,$filename,$target)= @_; |
my $gnuplot_input = ''; |
my $gnuplot_input = ''; |
my $curve; |
my $curve; |
# Collect all the colors |
# Collect all the colors |
Line 930 sub write_gnuplot_file {
|
Line 934 sub write_gnuplot_file {
|
$plot{'fgcolor'} ); |
$plot{'fgcolor'} ); |
} |
} |
# set term |
# set term |
$gnuplot_input .= 'set term gif '; |
if ($target eq 'web') { |
$gnuplot_input .= 'transparent ' if ($plot{'transparent'} eq 'on'); |
$gnuplot_input .= 'set term gif '; |
$gnuplot_input .= $plot{'font'} . ' '; |
$gnuplot_input .= 'transparent ' if ($plot{'transparent'} eq 'on'); |
$gnuplot_input .= 'size '.$plot{'width'}.','.$plot{'height'}.' '; |
$gnuplot_input .= $plot{'font'} . ' '; |
$gnuplot_input .= "@Colors\n"; |
$gnuplot_input .= 'size '.$plot{'width'}.','.$plot{'height'}.' '; |
# set output |
$gnuplot_input .= "@Colors\n"; |
$gnuplot_input .= "set output\n"; |
# set output |
|
$gnuplot_input .= "set output\n"; |
|
} elsif ($target eq 'tex') { |
|
$gnuplot_input .= "set term postscript eps monochrome\n"; |
|
$gnuplot_input .= "set output \"$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 |