Diff for /loncom/xml/londefdef.pm between versions 1.335 and 1.344

version 1.335, 2006/09/02 18:49:37 version 1.344, 2006/11/07 02:39:39
Line 561  sub end_body { Line 561  sub end_body {
 }  }
   
 # \begin{center} causes a new paragprah spacing that looks odd inside   # \begin{center} causes a new paragprah spacing that looks odd inside 
 # of a table cell  # of a table cell.  Same at the end of a \center but with a slightly
 sub center_correction { return '\vspace*{-6 mm}'; }  # larger space .. hence center_correction and center_end_correction.
   #
   sub center_correction { return '\vspace*{-6 mm}'; } 
   sub center_end_correction { return '\vspace*{-7 mm}'; }
   
 #-- <center> tag (end tag required)  #-- <center> tag (end tag required)
 sub start_center {  sub start_center {
     my ($target,$token,$tagstack) = @_;      my ($target,$token,$tagstack) = @_;
Line 585  sub end_center { Line 589  sub end_center {
  $currentstring = $token->[2];        $currentstring = $token->[2];     
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  $currentstring = '\end{center}';     $currentstring = '\end{center}';  
    if (&is_inside_of($tagstack, "table")) {
       $currentstring .= &center_end_correction();
    }
     }      }
     return $currentstring;      return $currentstring;
 }  }
Line 1214  sub start_br { Line 1221  sub start_br {
  $signal=1;   $signal=1;
     }      }
     if (($tempo[$i] eq 'td') || ($tempo[$i] eq 'th')) {      if (($tempo[$i] eq 'td') || ($tempo[$i] eq 'th')) {
  my $colspan =    $signal = 1;
     &Apache::lonxml::get_param('colspan', $parstack,  
        $safeeval, $i, 0);  
  if ($colspan) {  
     $signal = 2;  
  } else {  
     $signal = 1;  
  }  
     }      }
  }   }
  if ($signal eq 1) {   if ($signal eq 1) {
     $currentstring .= ' \vskip 0 mm ';      $currentstring .= ' \vskip 0 mm ';
  } elsif ($signal eq '2') {  
     # multicol doesn't like blank lines  
  } elsif ($$tagstack[-2] ne 'sub' && $$tagstack[-2] ne 'sup') {   } elsif ($$tagstack[-2] ne 'sub' && $$tagstack[-2] ne 'sup') {
     $currentstring .= '\strut \\\\ \strut ';      $currentstring .= '\strut \\\\ \strut ';
    } else {                   # Honor break in simple <sup></sup>
       $currentstring .= '}} \strut \\\\ \strut \ensuremath{^{'; 
  }   }
     }      }
     return $currentstring;      return $currentstring;
Line 1916  sub start_table { Line 1916  sub start_table {
     if ($target eq 'web' || $target eq 'webgrade') {      if ($target eq 'web' || $target eq 'webgrade') {
  $currentstring .= $token->[4];        $currentstring .= $token->[4];     
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  my $aa = {};   push(@Apache::londefdef::table, {}); 
  push @Apache::londefdef::table, $aa;   
  $Apache::londefdef::table[-1]{'row_number'} = -1;   $Apache::londefdef::table[-1]{'row_number'} = -1;
         #maximum table's width (default coincides with text line length)          #maximum table's width (default coincides with text line length)
  if ($#Apache::londefdef::table==0) {   if ($#Apache::londefdef::table==0) {
Line 1991  sub start_table { Line 1990  sub start_table {
         $Apache::londefdef::table[-1]{'minlen'}=[];          $Apache::londefdef::table[-1]{'minlen'}=[];
         $Apache::londefdef::table[-1]{'content'}=[];          $Apache::londefdef::table[-1]{'content'}=[];
         $Apache::londefdef::table[-1]{'align'}=[];          $Apache::londefdef::table[-1]{'align'}=[];
         $currentstring.='\keephidden{NEW TABLE ENTRY}';   if (&is_inside_of($tagstack, 'sup')) {
       $currentstring .= '}} \\\\ \ensuremath{^{ ';
    }
    if (&is_inside_of($tagstack, 'sub')) {
       $currentstring .= '}} \\\\ \ensuremath{_{ ';
    }
           $currentstring.=' \keephidden{NEW TABLE ENTRY}';
   
   
     }      }
Line 2209  sub end_table { Line 2214  sub end_table {
  #    # 
   
  if ($colspan > 1) {   if ($colspan > 1) {
       my $spanwidth = 0;
       for (my $spancol = $jn; $spancol < $jn + $colspan; $spancol++) {
    $spanwidth += $fwidth[$spancol];
       }
     $output .= '\multicolumn{'.      $output .= '\multicolumn{'.
  $colspan   $colspan
  .'}{|l|}{';   ."}";
       if ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'c') {
    $output .= '{|c|}{';
       } elsif ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'r') {
    $output .= '{|r|}{';
       }
       else {
    $output .= "{|p{$spanwidth mm}|}{";
       }
   
  }   }
   
    # Rowspan... if colspan is 1, and there's an alignment we'll need
    # to kick in a multicolumn in order to get the alignment spec.
    # this must precede the multirow or LaTex gets quite upset.
    # Naturally if colspan > 1 we've already done that above ^
    #
    my $multirow_aligned = 0;
  if ($rowspan > 1) {   if ($rowspan > 1) {
       if ($colspan == 1) {
    if ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'c') {
       $output .= '\multicolumn{1}{|c|}{';
       $multirow_aligned = 1;
    } elsif ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'r') {
       $output .= '\multicolumn{1}{|r|}{';
       $multirow_aligned = 1;
    }
       }
     $have_rowspan++;      $have_rowspan++;
     $output .= '\multirow{'.$rowspan.'}[0]{'.$fwidth[$jn].'mm}{';      $output .= '\multirow{'.$rowspan.'}[0]{*}{';
       #
       # If we did not throw in a multicolumn to align, then add 
       # an extra {
       # so we close correctly without having to keep additional state
       # around
       #
       if (!$multirow_aligned) {
    $output .= '{';
       }
  }   }
  if (($rowspan eq '^') || ($rowspan eq '_')) {   if (($rowspan eq '^') || ($rowspan eq '_')) {
     $have_rowspan++;      $have_rowspan++;
  }   }
  #--------------------------------------------------------------   #--------------------------------------------------------------
   
  if ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'c') {  
     $output.=&center_correction().'\begin{center}';   # For right and center alignment of single cells.
  } elsif ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'r') {   # we are going to use a multicolumn with a span of 1 to specify alignment.
     $output.=' \hfill \llap{'   #
    if ($colspan == 1  && $rowspan == 1) {
       if ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'c') {
    $output .= '\multicolumn{1}{|c|}{';
       } elsif ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'r') {
    $output .= '\multicolumn{1}{|r|}{';
       }
  }   }
   
  $output.=$Apache::londefdef::table[-1]{'content'}[$in][$jn];   $output.=$Apache::londefdef::table[-1]{'content'}[$in][$jn];
  if ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'c') {  
     $output.='\end{center}';   if (($colspan == 1 && $rowspan == 1)   &&
  } elsif ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'r') {      (($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'c') ||
     $output.='} ';       ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'r'))) {
       $output .= '}';
  }   }
   
  # Close off any open multirow:   # Close off any open multirow:
   
  if ($rowspan > 1) {   if ($rowspan > 1) {
     $output .= '}';      $output .= '}}';
  }   }
  #  Close off the colspan...   #  Close off the colspan...
  #   #
Line 2800  sub start_img { Line 2851  sub start_img {
  #if original gif/jpg/png file exist do following:   #if original gif/jpg/png file exist do following:
  my $origsrc=$src;   my $origsrc=$src;
  my ($path,$file) = &get_eps_image($src);   my ($path,$file) = &get_eps_image($src);
    # &Apache::lonnet::logthis("Image source: $src result: $path $file");
  $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);   $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
  &Apache::lonxml::debug("path = $path file = $file src = $src");   &Apache::lonxml::debug("path = $path file = $file src = $src");
  if (-e $src) {   if (-e $src) {
     &Apache::lonxml::debug("$src exists");      &Apache::lonxml::debug("$src exists");
     my ($height_param,$width_param)=      my ($height_param,$width_param)=
  &image_size($origsrc,0.3,$parstack,$safeeval);   &image_size($origsrc,0.3,$parstack,$safeeval);
     my $destpath = $path;  
     $destpath    =~ s/ /\_/g; # Spaces in path cause LaTex to vomit.  
     my $destfile = $file;  
     $destfile    =~ s/ /\_/g;  
     my $size;      my $size;
     if ($width_param)  { $size.='width='.$width_param.' mm,'; }      if ($width_param)  { $size.='width='.$width_param.' mm,'; }
     if ($height_param) { $size.='height='.$height_param.' mm]'; }      if ($height_param) { $size.='height='.$height_param.' mm]'; }
       # Default size if not able to extract that (e.g. eps image).
       
       # &Apache::lonnet::logthis("Size = $size");
       
     $size='['.$size;      $size='['.$size;
     $size=~s/,$/]/;       $size=~s/,$/]/; 
     $currentstring .= '\graphicspath{{'.$destpath.'}}'      $currentstring .= '\graphicspath{{'.$path.'}}'
  .'\includegraphics'.$size.'{'.$destfile.'} ';   .'\includegraphics'.$size.'{'.$file.'} ';
   
     #    If there's an alignment specification we need to honor it here.      #    If there's an alignment specification we need to honor it here.
     #    For the horizontal alignments, we will also honor the      #    For the horizontal alignments, we will also honor the
Line 3368  sub start_blockquote { Line 3420  sub start_blockquote {
     if ($target eq 'web' || $target eq 'webgrade') {      if ($target eq 'web' || $target eq 'webgrade') {
  $currentstring .= $token->[4];        $currentstring .= $token->[4];     
     }       } 
       if ($target eq 'tex') {
    $currentstring .= '\begin{quote}';
       }
     return $currentstring;      return $currentstring;
 }  }
   
Line 3377  sub end_blockquote { Line 3432  sub end_blockquote {
     if ($target eq 'web' || $target eq 'webgrade') {      if ($target eq 'web' || $target eq 'webgrade') {
  $currentstring = $token->[2];       $currentstring = $token->[2];    
     }       } 
       if ($target eq 'tex') {
    $currentstring = '\end{quote}';
       }
     return $currentstring;      return $currentstring;
 }  }
   
Line 4177  sub get_eps_image { Line 4235  sub get_eps_image {
  &Apache::lonnet::repcopy($orig_src); # Failure is not completely fatal.   &Apache::lonnet::repcopy($orig_src); # Failure is not completely fatal.
     }      }
     &Apache::lonxml::debug("get_eps_image: Original image: $orig_src");      &Apache::lonxml::debug("get_eps_image: Original image: $orig_src");
     my ($spath, $sname, $sext) = fileparse($src, qr/\.(gif|png|jpg|jpeg)/i);      my ($spath, $sname, $sext) = &fileparse($src, qr/\.(gif|png|jpg|jpeg)/i);
     $src=~s/\.(gif|png|jpg|jpeg)$/\.eps/i;      $src=~s/\.(gif|png|jpg|jpeg)$/\.eps/i;
     $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);      $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
     &Apache::lonxml::debug("Filelocation gives: $src");      &Apache::lonxml::debug("Filelocation gives: $src");
Line 4202  sub get_eps_image { Line 4260  sub get_eps_image {
  my $newsrc=$orig_src;   my $newsrc=$orig_src;
  $newsrc =~ s|(.*)/res/|/home/httpd/html/res/|;   $newsrc =~ s|(.*)/res/|/home/httpd/html/res/|;
  &Apache::lonxml::debug("queueing $newsrc for dynamic eps production.");   &Apache::lonxml::debug("queueing $newsrc for dynamic eps production.");
  print FILE "$newsrc\n";   print FILE ("$newsrc\n");
  close FILE;   close(FILE);
  $src=~s|/home/httpd/html/res|/home/httpd/prtspool|;   $src=~s|/home/httpd/html/res|/home/httpd/prtspool|;
  $src=~s|/home/([^/]*)/public_html/|/home/httpd/prtspool/$1/|;   $src=~s|/home/([^/]*)/public_html/|/home/httpd/prtspool/$1/|;
  if ($sext ne "") { # Put the ext. back in to uniquify.   if ($sext ne "") { # Put the ext. back in to uniquify.
     $src =~ s/\.eps$/$sext.eps/;      $src =~ s/\.eps$/$sext.eps/;
  }   }
   
     }      }
   
  }   }
       } else {
    # If the postscript file has spaces in its name,
    # LaTeX will gratuitiously vomit.  Therefore
    # queue such files for copy with " " replaced by "_".
    # printout.pm will know them by their .ps  or .eps extensions.
    my $newsrc = $orig_src;
    $newsrc    =~  s|(.*)/res/|/home/httpd/html/res/|;
    open(FILE,">>/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout.dat");
    print FILE "$src\n";
    close FILE;
    $src=~s|/home/httpd/html/res|/home/httpd/prtspool|;
    $src=~s|/home/([^/]*)/public_html/|/home/httpd/prtspool/$1/|;
     }      }
     my ($path,$file)=($src=~m|(.*)/([^/]*)$|);      my ($path,$file)=($src=~m|(.*)/([^/]*)$|);
       $path =~ s/ /\_/g;
       $file =~ s/ /\_/g;
     &Apache::lonxml::debug("get_eps_image returning: $path / $file<BR />");      &Apache::lonxml::debug("get_eps_image returning: $path / $file<BR />");
     return ($path.'/',$file);      return ($path.'/',$file);
 }  }

Removed from v.1.335  
changed lines
  Added in v.1.344


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