Diff for /loncom/xml/lonplot.pm between versions 1.162 and 1.163

version 1.162, 2012/07/17 10:49:53 version 1.163, 2012/07/24 10:50:54
Line 537  my %axis_defaults = Line 537  my %axis_defaults =
       },        },
      );       );
   
   
 my @curve_edit_order = ('color','name','linestyle','linewidth','linetype',  my @curve_edit_order = ('color','name','linestyle','linewidth','linetype',
  'pointtype','pointsize','limit', 'arrowhead', 'arrowstyle',    'pointtype','pointsize','limit', 'arrowhead', 'arrowstyle', 
  'arrowlength', 'arrowangle', 'arrowbackangle'   'arrowlength', 'arrowangle', 'arrowbackangle'
Line 649  my %curve_defaults = Line 650  my %curve_defaults =
 undef %Apache::lonplot::plot;  undef %Apache::lonplot::plot;
 my (%key,%axis,$title,$xlabel,$ylabel,@labels,@curves,%xtics,%ytics);  my (%key,%axis,$title,$xlabel,$ylabel,@labels,@curves,%xtics,%ytics);
   
   my $current_tics; # Reference to the current tick hash
   
 sub start_gnuplot {  sub start_gnuplot {
     undef(%Apache::lonplot::plot);   undef(%key);    undef(%axis);      undef(%Apache::lonplot::plot);   undef(%key);    undef(%axis);
     undef($title);  undef($xlabel); undef($ylabel);      undef($title);  undef($xlabel); undef($ylabel);
Line 748  sub start_xtics { Line 751  sub start_xtics {
     if ($target eq 'web' || $target eq 'tex') {      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]);
    $current_tics = \%xtics;
    &Apache::lonxml::register('Apache::lonplot', 'tic');
     } elsif ($target eq 'edit') {      } elsif ($target eq 'edit') {
  $result .= &Apache::edit::tag_start($target,$token,'xtics');   $result .= &Apache::edit::tag_start($target,$token,'xtics');
  $result .= &edit_attributes($target,$token,\%tic_defaults,   $result .= &edit_attributes($target,$token,\%tic_defaults,
Line 766  sub end_xtics { Line 771  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' || $target eq 'tex') {      if ($target eq 'web' || $target eq 'tex') {
    &Apache::lonxml::deregister('Apache::lonplot', 'tic');
     } elsif ($target eq 'edit') {      } elsif ($target eq 'edit') {
  $result.=&Apache::edit::tag_end($target,$token);   $result.=&Apache::edit::tag_end($target,$token);
     }      }
Line 779  sub start_ytics { Line 785  sub start_ytics {
     if ($target eq 'web' || $target eq 'tex') {      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]);
    $current_tics = \%ytics;
    &Apache::lonxml::register('Apache::lonplot', 'tic');
     } elsif ($target eq 'edit') {      } elsif ($target eq 'edit') {
  $result .= &Apache::edit::tag_start($target,$token,'ytics');   $result .= &Apache::edit::tag_start($target,$token,'ytics');
  $result .= &edit_attributes($target,$token,\%tic_defaults,   $result .= &edit_attributes($target,$token,\%tic_defaults,
Line 797  sub end_ytics { Line 805  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' || $target eq 'tex') {      if ($target eq 'web' || $target eq 'tex') {
    &Apache::lonxml::deregister('Apache::lonplot', 'tic');
     } elsif ($target eq 'edit') {      } elsif ($target eq 'edit') {
  $result.=&Apache::edit::tag_end($target,$token);   $result.=&Apache::edit::tag_end($target,$token);
     }      }
     return $result;      return $result;
 }  }
   
   
   ##----------------------------------------------------------------
   #
   #  Tic handling:
   #   The <tic> tag allows users to specify exact Tic positions and labels
   #   for each axis.  In this version we only support level 0 tics (major tic).
   #   Each tic has associated with it a position and a label
   #   $current_tics is a reference to the current tick description hash.
   #   We add elements to an array  in that has: ticspecs whose elements
   #   are 'pos' - the tick position and 'label' - the tic label.
   #
   
   
   sub start_tic {
       my ($target, $token, $tagstack, $parstack, $parser, $safeeval, $style)  = @_;
   
       my $result = '';
       if ($target eq 'web' || $target eq 'tex') {
    my $tic_location = &Apache::lonxml::get_param('location', $parstack, $safeeval);
    my $tic_label    = &Apache::lonxml::get_all_text('/tic', $parser);
   
    # Tic location must e a real:
   
    if (!&$real_test($tic_location)) {
       &Apache::lonxml::warning("Tic location: $tic_location must be a real number");
    } else {
   
       if (!defined  $current_tics->{'ticspecs'}) {
    $current_tics->{'ticspecs'} = [];
       }
       my $ticspecs = $current_tics->{'ticspecs'};
       push (@$ticspecs, {'pos' => $tic_location, 'label' => $tic_label});
    }
       }
   
       return $result;
   }
   
   sub end_tic {
       return '';
   }
   
 ##-----------------------------------------------------------------font  ##-----------------------------------------------------------------font
 my %font_properties =  my %font_properties =
     (      (
Line 1457  sub start_function { Line 1508  sub start_function {
      $style);       $style);
  $function = &Apache::run::evaluate($function,$safeeval,$$parstack[-1]);   $function = &Apache::run::evaluate($function,$safeeval,$$parstack[-1]);
         $function=~s/\^/\*\*/gs;          $function=~s/\^/\*\*/gs;
    $function=~ s/^\s+//; # Trim leading
    $function=~ s/\s+$//;   # And trailing whitespace.
  $curves[-1]->{'function'} = $function;    $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');
Line 1652  sub generate_tics { Line 1705  sub generate_tics {
   
     if (defined %$spec) {      if (defined %$spec) {
   
   
   
    # Major tics: - If there are 'ticspecs' these override any other
    #               specifications:
   
  # Major tics:  
   
  $result .= "set $type $spec->{'location'}  ";   $result .= "set $type $spec->{'location'}  ";
  $result .= ($spec->{'mirror'} eq 'on') ? 'mirror ' : 'nomirror ';   $result .= ($spec->{'mirror'} eq 'on') ? 'mirror ' : 'nomirror ';
  $result .= "$spec->{'start'}, ";   if (defined $spec->{'ticspecs'}) {
  $result .= "$spec->{'increment'}, ";      $result .= '( ';
  $result .= "$spec->{'end'} ";      my @ticspecs;
       my $ticinfo = $spec->{'ticspecs'};
       foreach my $tic (@$ticinfo) {
    push(@ticspecs,  '"' . $tic->{'label'} . '" ' . $tic->{'pos'} );
       }
       $result .= join(', ', (@ticspecs));
       $result .= ' )';
    } else {
       $result .= "$spec->{'start'}, ";
       $result .= "$spec->{'increment'}, ";
       $result .= "$spec->{'end'} ";
    }
  if ($target eq 'tex' ) {   if ($target eq 'tex' ) {
     $result .= 'font "Helvetica,22"';      $result .= 'font "Helvetica,22"';
  }   }
  $result .= "\n";   $result .= "\n";
   
  # minor frequency:   # minor frequency:
   
  if ($spec->{'minorfreq'} != 0) {   if ($spec->{'minorfreq'} != 0) {
     $result .= "set m$type $spec->{'minorfreq'}\n";      $result .= "set m$type $spec->{'minorfreq'}\n";
  }   }
     } else {      } else {
  $result .= "set $type font " . '"Helvetica,22"' ."\n";   $result .= "set $type font " . '"Helvetica,22"' ."\n";
     }      }
       
       
     return $result;      return $result;
 }  }
   
Line 2014  sub write_gnuplot_file { Line 2081  sub write_gnuplot_file {
  $linestyle_index++; # Each curve get a unique linestyle.   $linestyle_index++; # Each curve get a unique linestyle.
     }      }
     # Write the output to a file.      # Write the output to a file.
     &Apache::lonnet::logthis($gnuplot_input);      # &Apache::lonnet::logthis($gnuplot_input); # uncomment to log the gnuplot input.
     open (my $fh, "> $tmpdir$filename.data");      open (my $fh, "> $tmpdir$filename.data");
     binmode($fh, ':utf8');      binmode($fh, ':utf8');
     print $fh $gnuplot_input;      print $fh $gnuplot_input;

Removed from v.1.162  
changed lines
  Added in v.1.163


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