Diff for /loncom/xml/lonplot.pm between versions 1.96 and 1.104

version 1.96, 2004/05/26 19:44:20 version 1.104, 2004/12/02 15:38:11
Line 36  use Apache::response; Line 36  use Apache::response;
 use Apache::lonxml;  use Apache::lonxml;
 use Apache::edit;  use Apache::edit;
   
   use vars qw/$weboutputformat $versionstring/;
   
 BEGIN {  BEGIN {
   &Apache::lonxml::register('Apache::lonplot',('gnuplot'));      &Apache::lonxml::register('Apache::lonplot',('gnuplot'));
       #
       # Determine the version of GNUPLOT
       $weboutputformat = 'gif';
       $versionstring = `gnuplot --version 2>/dev/null`;
       if ($versionstring =~ /^gnuplot 4/) {
           $weboutputformat = 'png';
       }
 }  }
   
 ##   ## 
Line 110  my $words_test     = sub {$_[0]=~s/\s+/ Line 119  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       qw/alttag bgcolor fgcolor height width font transparent grid samples 
     border align texwidth texfont plottype/;      border align texwidth texfont plottype lmargin rmargin tmargin bmargin 
       major_ticscale minor_ticscale/;
   
   my $margin_choices = ['default',
                         qw{0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20}];
   
 my %gnuplot_defaults =   my %gnuplot_defaults = 
     (      (
Line 209  my %gnuplot_defaults = Line 222  my %gnuplot_defaults =
  edit_type   => 'choice',   edit_type   => 'choice',
          choices     => ['Cartesian','Polar']           choices     => ['Cartesian','Polar']
          },           },
        lmargin   => {
    default     => 'default',
    test        => sub {$_[0]=~/^(default|\d+)$/},
    description => 'Left margin width (pts):',
    edit_type   => 'choice',
            choices     => $margin_choices,
            },
        rmargin   => {
    default     => 'default',
    test        => sub {$_[0]=~/^(default|\d+)$/},
    description => 'Right margin width (pts):',
    edit_type   => 'choice',
            choices     => $margin_choices,
            },
        tmargin   => {
    default     => 'default',
    test        => sub {$_[0]=~/^(default|\d+)$/},
    description => 'Top margin width (pts):',
    edit_type   => 'choice',
            choices     => $margin_choices,
            },
        bmargin   => {
    default     => 'default',
    test        => sub {$_[0]=~/^(default|\d+)$/},
    description => 'Bottom margin width (pts):',
    edit_type   => 'choice',
            choices     => $margin_choices,
            },
        major_ticscale  => {
            default     => '1',
            test        => $real_test,
            description => 'Size of major tic marks (plot coordinates)',
            edit_type   => 'entry',
            size        => '5'
            },
        minor_ticscale  => {
            default     => '0.5',
            test        => $real_test,
            description => 'Size of minor tic mark (plot coordinates)',
            edit_type   => 'entry',
            size        => '5'
            },
      );       );
   
 my %key_defaults =   my %key_defaults = 
Line 302  my %tic_defaults = Line 357  my %tic_defaults =
      minorfreq => {       minorfreq => {
  default => '0',   default => '0',
  test => $int_test,   test => $int_test,
  description => 'Number of minor tics between major tic marks',   description => 'Number of minor tics per major tic mark',
  edit_type   => 'entry',   edit_type   => 'entry',
  size        => '10'   size        => '10'
  },            },         
Line 460  sub end_gnuplot { Line 515  sub end_gnuplot {
  ## 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.data&output=gif"   <img src    = "/cgi-bin/plot.gif?file=$filename.data&output=$weboutputformat" 
      width  = "$plot{'width'}"       width  = "$plot{'width'}"
      height = "$plot{'height'}"       height = "$plot{'height'}"
      align  = "$plot{'align'}"       align  = "$plot{'align'}"
Line 945  sub write_gnuplot_file { Line 1000  sub write_gnuplot_file {
     my $gnuplot_input = '';      my $gnuplot_input = '';
     my $curve;      my $curve;
     my $pt = $plot{'texfont'};      my $pt = $plot{'texfont'};
       #
       # Check to be sure we do not have any empty curves
       my @curvescopy;
       foreach my $curve (@curves) {
           if (exists($curve->{'function'})) {
               if ($curve->{'function'} !~ /^\s*$/) {
                   push(@curvescopy,$curve);
               }
           } elsif (exists($curve->{'data'})) {
               foreach my $data (@{$curve->{'data'}}) {
                   if (scalar(@$data) > 0) {
                       push(@curvescopy,$curve);
                       last;
                   }
               }
           }
       }
       @curves = @curvescopy;
     # Collect all the colors      # Collect all the colors
     my @Colors;      my @Colors;
     push @Colors, $plot{'bgcolor'};      push @Colors, $plot{'bgcolor'};
Line 957  sub write_gnuplot_file { Line 1030  sub write_gnuplot_file {
     }      }
     # set term      # set term
     if ($target eq 'web') {      if ($target eq 'web') {
  $gnuplot_input .= 'set term gif ';   $gnuplot_input .= 'set term '.$weboutputformat .' ';
  $gnuplot_input .= 'transparent ' if ($plot{'transparent'} eq 'on');   $gnuplot_input .= 'transparent ' if ($plot{'transparent'} eq 'on');
  $gnuplot_input .= $plot{'font'} . ' ';   $gnuplot_input .= $plot{'font'} . ' ';
  $gnuplot_input .= 'size '.$plot{'width'}.','.$plot{'height'}.' ';   $gnuplot_input .= 'size '.$plot{'width'}.','.$plot{'height'}.' ';
Line 975  sub write_gnuplot_file { Line 1048  sub write_gnuplot_file {
     } else {      } else {
         # Assume Cartesian          # Assume Cartesian
     }      }
       # margin
       if (lc($plot{'lmargin'}) ne 'default') {
           $gnuplot_input .= 'set lmargin '.$plot{'lmargin'}.$/;
       }
       if (lc($plot{'rmargin'}) ne 'default') {
           $gnuplot_input .= 'set rmargin '.$plot{'rmargin'}.$/;
       }
       if (lc($plot{'tmargin'}) ne 'default') {
           $gnuplot_input .= 'set tmargin '.$plot{'tmargin'}.$/;
       }
       if (lc($plot{'bmargin'}) ne 'default') {
           $gnuplot_input .= 'set bmargin '.$plot{'bmargin'}.$/;
       }
       # tic scales
       $gnuplot_input .= 'set ticscale '.
           $plot{'major_ticscale'}.' '.$plot{'minor_ticscale'}.$/;
     # grid      # grid
     $gnuplot_input .= 'set grid'.$/ if ($plot{'grid'} eq 'on');      $gnuplot_input .= 'set grid'.$/ if ($plot{'grid'} eq 'on');
     # border      # border
Line 1034  sub write_gnuplot_file { Line 1123  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'}.' font "Helvetica,'.$pt.'pt"'.$/ ;      $label->{'xpos'}.','.$label->{'ypos'}.' '.$label->{'justify'};
           if ($target eq 'tex') {
               $gnuplot_input .=' font "Helvetica,'.$pt.'pt"' ;
           }
           $gnuplot_input .= $/;
     }      }
     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 1145  sub edit_attributes { Line 1238  sub edit_attributes {
  ($description,$attr,$token,   ($description,$attr,$token,
  $defaults->{$attr}->{'size'});   $defaults->{$attr}->{'size'});
  } elsif ($defaults->{$attr}->{'edit_type'} eq 'choice') {   } elsif ($defaults->{$attr}->{'edit_type'} eq 'choice') {
     $result .= &Apache::edit::select_arg      $result .= &Apache::edit::select_or_text_arg
  ($description,$attr,$defaults->{$attr}->{'choices'},$token);   ($description,$attr,$defaults->{$attr}->{'choices'},$token);
  } elsif ($defaults->{$attr}->{'edit_type'} eq 'onoff') {   } elsif ($defaults->{$attr}->{'edit_type'} eq 'onoff') {
     $result .= &Apache::edit::select_arg      $result .= &Apache::edit::select_or_text_arg
  ($description,$attr,['on','off'],$token);   ($description,$attr,['on','off'],$token);
  }   }
  $result .= '<br />';   $result .= '<br />';

Removed from v.1.96  
changed lines
  Added in v.1.104


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>