Diff for /loncom/xml/londefdef.pm between versions 1.226 and 1.244

version 1.226, 2004/07/12 17:19:13 version 1.244, 2004/11/13 08:56:53
Line 63  sub initialize_londefdef { Line 63  sub initialize_londefdef {
     $Apache::londefdef::TD_redirection=0;      $Apache::londefdef::TD_redirection=0;
     @Apache::londefdef::table = ();      @Apache::londefdef::table = ();
     $Apache::londefdef::select=0;      $Apache::londefdef::select=0;
     @Apache::londefdef::description=();      undef(@Apache::londefdef::description);
     $Apache::londefdef::DD_redirection=0;      @Apache::londefdef::DD=(0);
     $Apache::londefdef::DT_redirection=0;      @Apache::londefdef::DT=(0);
       @Apache::londefdef::seenDT=(0);
       $Apache::londefdef::list_index=0;
 }  }
   
 #======================= TAG SUBROUTINES =====================  #======================= TAG SUBROUTINES =====================
Line 150  sub start_html { Line 152  sub start_html {
     my $options=$ENV{'course.'.$ENV{'request.course.id'}.'.tthoptions'};      my $options=$ENV{'course.'.$ENV{'request.course.id'}.'.tthoptions'};
     &Apache::lontexconvert::init_tth();      &Apache::lontexconvert::init_tth();
     if ($target eq 'web' || $target eq 'edit') {      if ($target eq 'web' || $target eq 'edit') {
  $currentstring = &Apache::lonxml::xmlbegin().   $currentstring = &Apache::lonxml::xmlbegin();
     &Apache::lonxml::fontsettings();       
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  @Apache::londefdef::table = ();   @Apache::londefdef::table = ();
  $currentstring .= '\documentclass[letterpaper]{article}';   $currentstring .= '\documentclass[letterpaper]{book}';
  if ($ENV{'form.latex_type'}=~'batchmode') {$currentstring .='\batchmode';}    if ($ENV{'form.latex_type'}=~'batchmode') {$currentstring .='\batchmode';} 
  $currentstring .= '\newcommand{\keephidden}[1]{}'.   $currentstring .= '\newcommand{\keephidden}[1]{}'.
                           '\renewcommand{\deg}{$^{\circ}$}'.                            '\renewcommand{\deg}{$^{\circ}$}'.
Line 176  sub start_html { Line 177  sub start_html {
 }  }
   
 sub end_html {  sub end_html {
     my ($target,$token) = @_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
     my $currentstring = '';      my $currentstring = '';
     if ($target eq 'web') {      if ($target eq 'web') {
  $currentstring = &Apache::lonxml::xmlend();   $currentstring = &Apache::lonxml::xmlend($target,$parser);
     }      }
     return $currentstring;      return $currentstring;
 }  }
Line 189  sub start_head { Line 190  sub start_head {
     my ($target,$token) = @_;      my ($target,$token) = @_;
     my $currentstring = '';      my $currentstring = '';
     if ($target eq 'web') {      if ($target eq 'web') {
  $currentstring = $token->[4];        $currentstring = $token->[4].&Apache::lonxml::fontsettings();
     }       } 
     return $currentstring;      return $currentstring;
 }  }
Line 478  sub end_accessrule { Line 479  sub end_accessrule {
 sub start_body {  sub start_body {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
     my $currentstring = '';      my $currentstring = '';
   
     if ($target eq 'web') {      if ($target eq 'web') {
  if ($Apache::lonhomework::parsing_a_problem) {   if ($Apache::lonhomework::parsing_a_problem) {
     &Apache::lonxml::warning("<body> tag found inside of <problem> tag this can cause problems.");      &Apache::lonxml::warning("<body> tag found inside of <problem> tag this can cause problems.");
Line 1134  sub end_p { Line 1136  sub end_p {
  $currentstring .= $token->[2];   $currentstring .= $token->[2];
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  my $align=&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1);   my $align=&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1);
  if ($align eq 'center') {   if (not defined $align) {
       $currentstring.='\strut\\\\\strut ';
    } elsif ($align eq 'center') {
     $currentstring .= '\end{center}';      $currentstring .= '\end{center}';
  } elsif ($align eq 'right') {   } elsif ($align eq 'right') {
     $currentstring .= '}}';      $currentstring .= '}}';
  } elsif ($align eq 'left') {   } elsif ($align eq 'left') {
     $currentstring .= '}\hfill}';      $currentstring .= '}\hfill}';
  }   } 
     }      }
     return $currentstring;      return $currentstring;
 }  }
Line 1152  sub start_br { Line 1156  sub start_br {
     if ($target eq 'web') {      if ($target eq 'web') {
  $currentstring .= $token->[4];   $currentstring .= $token->[4];
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  if (($$tagstack[-2] eq 'b') || ($$tagstack[-2] eq 'strong') ||   my @tempo=@$tagstack;
             ($$tagstack[-2] eq 'ol') || ($$tagstack[-2] eq 'ul')) {   my $signal=0;
    for (my $i=$#tempo;$i>=0;$i--) {
       if (($tempo[$i] eq 'b') || ($tempo[$i] eq 'strong') ||
                   ($tempo[$i] eq 'ol') || ($tempo[$i] eq 'ul') ||
                   ($tempo[$i] eq 'td') || ($tempo[$i] eq 'th'))  {
    $signal=1;
    last;
       }
    }
    if ($signal) {
     $currentstring .= ' \vskip 0 mm ';      $currentstring .= ' \vskip 0 mm ';
  } elsif ($$tagstack[-2] ne 'sub' && $$tagstack[-2] ne 'sup') {   } elsif ($$tagstack[-2] ne 'sub' && $$tagstack[-2] ne 'sup') {
     $currentstring .= '\strut \\\\ \strut ';      $currentstring .= '\strut \\\\ \strut ';
Line 1474  sub start_li { Line 1487  sub start_li {
     if ($target eq 'web') {      if ($target eq 'web') {
  $currentstring = $token->[4];        $currentstring = $token->[4];     
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  my  $type=&Apache::lonxml::get_param('type',$parstack,$safeeval,undef,1);   my $type=&Apache::lonxml::get_param('type',$parstack,$safeeval,undef,0);
  if ($type=~/circle/) {   my $value=&Apache::lonxml::get_param('value',$parstack,$safeeval,undef,0);
     $currentstring .= ' \item[o] ';   #FIXME need to support types i and I 
    if ($type=~/disc/) {
       $currentstring .= ' \item[$\bullet$] ';
    } elsif ($type=~/circle/) {
       $currentstring .= ' \item[$\circ$] ';
  } elsif ($type=~/square/) {   } elsif ($type=~/square/) {
     $currentstring .= ' \item[$\Box$] ';      $currentstring .= ' \item[$\diamond$] ';
  } elsif ($type ne '') {    } elsif ($type eq '1') {
     $currentstring .= ' \item['.$type.'] ';      $currentstring .= ' \item['.($Apache::londefdef::list_index+1).'.]';
    } elsif ($type eq 'A') {
       $currentstring .= ' \item['.('A'..'Z')[$Apache::londefdef::list_index].'.]';
    } elsif ($type eq 'a') {
       $currentstring .= ' \item['.('a'..'z')[$Apache::londefdef::list_index].'.]';
    } elsif ($value ne '') {
       $currentstring .= ' \item['.$value.'] ';
  } else {   } else {
     $currentstring .= ' \item ';      $currentstring .= ' \item ';
  }     }  
     }    $Apache::londefdef::list_index++;
       }
     return $currentstring;      return $currentstring;
 }  }
   
Line 1531  sub start_ul { Line 1555  sub start_ul {
  $currentstring = $token->[4];        $currentstring = $token->[4];     
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  my $TeXtype=&Apache::lonxml::get_param('type',$parstack,$safeeval,undef,0);   my $TeXtype=&Apache::lonxml::get_param('type',$parstack,$safeeval,undef,0);
    $Apache::londefdef::list_index=0;
  if ($TeXtype eq 'disc') {   if ($TeXtype eq 'disc') {
     $currentstring .= '\renewcommand{\labelitemi}{$\bullet$}'.      $currentstring .= '\renewcommand{\labelitemi}{$\bullet$}'.
                               '\renewcommand{\labelitemii}{$\bullet$}'.                                 '\renewcommand{\labelitemii}{$\bullet$}'. 
Line 1619  sub start_ol { Line 1644  sub start_ol {
     if ($target eq 'web') {      if ($target eq 'web') {
  $currentstring = $token->[4];        $currentstring = $token->[4];     
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
    $Apache::londefdef::list_index=0;
  my $type=&Apache::lonxml::get_param('type',$parstack,$safeeval,undef,0);   my $type=&Apache::lonxml::get_param('type',$parstack,$safeeval,undef,0);
  if ($type eq '1') {   if ($type eq '1') {
     $currentstring .= '\renewcommand{\labelenumi}{\arabic{enumi}.}'.      $currentstring .= '\renewcommand{\labelenumi}{\arabic{enumi}.}'.
Line 1673  sub start_dl { Line 1699  sub start_dl {
  $currentstring = $token->[4];        $currentstring = $token->[4];     
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  $currentstring = '\begin{description}';   $currentstring = '\begin{description}';
  @Apache::londefdef::description=();   $Apache::londefdef::DL++;
  $Apache::londefdef::DD_redirection=0;   push(@Apache::londefdef::description,[]);
  $Apache::londefdef::DT_redirection=0;   $Apache::londefdef::DD[$Apache::londefdef::DL]=0;
    $Apache::londefdef::DT[$Apache::londefdef::DL]=0;
    $Apache::londefdef::seenDT[$Apache::londefdef::DL]=0;
     }       } 
     return $currentstring;      return $currentstring;
 }  }
Line 1686  sub end_dl { Line 1714  sub end_dl {
     if ($target eq 'web') {      if ($target eq 'web') {
  $currentstring = $token->[2];        $currentstring = $token->[2];     
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  if ($Apache::londefdef::DT_redirection) {   if ($Apache::londefdef::DT[-1]) { &end_dt(@_); }
     my $data=&item_cleanup;   if ($Apache::londefdef::DD[-1]) { &end_dd(@_); }
     push @Apache::londefdef::description,'\item['.$data.']';   foreach my $element (@{$Apache::londefdef::description[-1]}) {
     $Apache::londefdef::DT_redirection=0;  
  } elsif ($Apache::londefdef::DD_redirection) {  
     $Apache::londefdef::description[-1].=&Apache::lonxml::endredirection();  
  }  
  foreach my $element (@Apache::londefdef::description) {  
     $currentstring.=' '.$element.' ';      $currentstring.=' '.$element.' ';
  }   }
  @Apache::londefdef::description=();   pop(@Apache::londefdef::description);
  $currentstring.='\end{description}';     $currentstring.='\end{description}';  
    delete($Apache::londefdef::DD[$Apache::londefdef::DL]);
    delete($Apache::londefdef::DT[$Apache::londefdef::DL]);
    delete($Apache::londefdef::seenDT[$Apache::londefdef::DL]);
    $Apache::londefdef::DL--;
     }       } 
     return $currentstring;      return $currentstring;
 }  }
Line 1709  sub start_dt { Line 1736  sub start_dt {
     if ($target eq 'web') {      if ($target eq 'web') {
  $currentstring = $token->[4];        $currentstring = $token->[4];     
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  if ($Apache::londefdef::DT_redirection) {   if ($Apache::londefdef::DT[-1]) { &end_dt(@_); }
     my $data=&item_cleanup;   if ($Apache::londefdef::DD[-1]) { &end_dd(@_); }
     push @Apache::londefdef::description,'\item['.$data.']';  
     $Apache::londefdef::DT_redirection=0;  
  } elsif ($Apache::londefdef::DD_redirection) {  
     $Apache::londefdef::description[-1].=&Apache::lonxml::endredirection();  
     $Apache::londefdef::DD_redirection=0;  
  }  
  &Apache::lonxml::startredirection();   &Apache::lonxml::startredirection();
  $Apache::londefdef::DT_redirection=1;   $Apache::londefdef::DT[-1]++;
    $Apache::londefdef::seenDT[-1]=1;
     }       } 
     return $currentstring;      return $currentstring;
 }  }
Line 1729  sub end_dt { Line 1751  sub end_dt {
     if ($target eq 'web') {      if ($target eq 'web') {
  $currentstring = $token->[2];       $currentstring = $token->[2];    
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  my $data=&item_cleanup;   if ($Apache::londefdef::DT[-1]) {
  push @Apache::londefdef::description,'\item['.$data.']';      my $data=&item_cleanup();
  $Apache::londefdef::DT_redirection=0;      push(@{$Apache::londefdef::description[-1]},'\item['.$data.'] \strut \vskip 0mm');
       $Apache::londefdef::DT[-1]--;
    }
     }       } 
     return $currentstring;      return $currentstring;
 }  }
Line 1750  sub start_dd { Line 1774  sub start_dd {
     if ($target eq 'web') {      if ($target eq 'web') {
  $currentstring = $token->[4];        $currentstring = $token->[4];     
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  if ($Apache::londefdef::DT_redirection) {   if ($Apache::londefdef::DT[-1]) { &end_dt(@_); }
     my $data=&item_cleanup;   if ($Apache::londefdef::DD[-1]) { &end_dd(@_);}
     push @Apache::londefdef::description,'\item['.$data.']';   if (!$Apache::londefdef::seenDT[-1]) {
     $Apache::londefdef::DT_redirection=0;      push(@{$Apache::londefdef::description[-1]},'\item[\strut] \strut \vskip 0mm ');
  }   }
  $Apache::londefdef::DD_redirection=1;   push(@{$Apache::londefdef::description[-1]},'');
    $Apache::londefdef::description[-1]->[-1].=' \strut ';
    $Apache::londefdef::DD[-1]++;
  &Apache::lonxml::startredirection();   &Apache::lonxml::startredirection();
     }       } 
     return $currentstring;      return $currentstring;
Line 1767  sub end_dd { Line 1793  sub end_dd {
     if ($target eq 'web') {      if ($target eq 'web') {
  $currentstring = $token->[2];       $currentstring = $token->[2];    
     }  elsif ($target eq 'tex') {      }  elsif ($target eq 'tex') {
  $Apache::londefdef::description[-1].=&Apache::lonxml::endredirection();   $Apache::londefdef::description[-1]->[-1].=
  $Apache::londefdef::DD_redirection=0;      &Apache::lonxml::endredirection().' \vskip 0mm ';
    $Apache::londefdef::DD[-1]--;
     }      }
     return $currentstring;      return $currentstring;
 }  }
Line 1795  sub start_table { Line 1822  sub start_table {
  $textwidth=$Apache::londefdef::table[-2]{'TeXlen'}[$Apache::londefdef::table[-2]{'row_number'}][$Apache::londefdef::table[-2]{'counter_columns'}];    $textwidth=$Apache::londefdef::table[-2]{'TeXlen'}[$Apache::londefdef::table[-2]{'row_number'}][$Apache::londefdef::table[-2]{'counter_columns'}]; 
     } else {      } else {
               #try to use all space not used before (minus 5% for LaTeX table internal) - rather silly                #try to use all space not used before (minus 5% for LaTeX table internal) - rather silly
  my $textwidth=$Apache::londefdef::table[-2]{'width'};   $textwidth=$Apache::londefdef::table[-2]{'width'};
  for (my $i=0;$i<$Apache::londefdef::table[-2]{'counter_columns'};$i++) {   for (my $i=0;$i<$Apache::londefdef::table[-2]{'counter_columns'};$i++) {
     $textwidth=$textwidth-$Apache::londefdef::table[-2]{'TeXlen'}[0][$i];      $textwidth=$textwidth-$Apache::londefdef::table[-2]{'TeXlen'}[0][$i];
  }   }
Line 1838  sub start_table { Line 1865  sub start_table {
  $Apache::londefdef::table[-1]{'output'}.=' \noindent \begin{tabular} ';   $Apache::londefdef::table[-1]{'output'}.=' \noindent \begin{tabular} ';
         $Apache::londefdef::table[-1]{'TeXlen'}=[];          $Apache::londefdef::table[-1]{'TeXlen'}=[];
         $Apache::londefdef::table[-1]{'objectlen'}=[];          $Apache::londefdef::table[-1]{'objectlen'}=[];
           $Apache::londefdef::table[-1]{'objectsignal'}=[];
         $Apache::londefdef::table[-1]{'maxlen'}=[];          $Apache::londefdef::table[-1]{'maxlen'}=[];
         $Apache::londefdef::table[-1]{'minlen'}=[];          $Apache::londefdef::table[-1]{'minlen'}=[];
         $Apache::londefdef::table[-1]{'content'}=[];          $Apache::londefdef::table[-1]{'content'}=[];
Line 1866  sub end_table { Line 1894  sub end_table {
  }   }
         #free space and number of empty columns          #free space and number of empty columns
  my ($available_space,$empty_columns)=($Apache::londefdef::table[-1]{'width'},0);   my ($available_space,$empty_columns)=($Apache::londefdef::table[-1]{'width'},0);
 ## &Apache::lonnet::logthis("Available space $Apache::londefdef::table[-1]{'width'}");   if ($#Apache::londefdef::table ne 0) {$available_space=0.9*$available_space;} 
  for (my $jn=0;$jn<=$Apache::londefdef::table[-1]{'counter_columns'};$jn++) {   for (my $jn=0;$jn<=$Apache::londefdef::table[-1]{'counter_columns'};$jn++) {
     if ($Apache::londefdef::table[-1]{'TeXlen'}[0][$jn]==0) {      if ($Apache::londefdef::table[-1]{'TeXlen'}[0][$jn]==0) {
  $empty_columns++;   $empty_columns++;
Line 1897  sub end_table { Line 1925  sub end_table {
     $localmin=$Apache::londefdef::table[-1]{'objectlen'}[$in][$jn];      $localmin=$Apache::londefdef::table[-1]{'objectlen'}[$in][$jn];
  }   }
     }      }
     if ($max_len[$jn]<$localmin) {$max_len[$jn]=$localmin;}#object size is bigger      if ($max_len[$jn]<$localmin) {
     if ($min_len[$jn]<$localmin) {$min_len[$jn]=$localmin;}#object size is bigger   $max_len[$jn]=$localmin;
        $Apache::londefdef::table[-1]{'objectsignal'}[$jn]=1;
       }#object size is bigger
       if ($min_len[$jn]<$localmin) {
    $min_len[$jn]=$localmin;
    $Apache::londefdef::table[-1]{'objectsignal'}[$jn]=1;
       }#object size is bigger
     if ($Apache::londefdef::table[-1]{'TeXlen'}[0][$jn]!=0) {      if ($Apache::londefdef::table[-1]{'TeXlen'}[0][$jn]!=0) {
  $min_len[$jn]=0;   $min_len[$jn]=0;
  $max_len[$jn]=0;   $max_len[$jn]=0;
Line 1931  sub end_table { Line 1965  sub end_table {
  $fwidth[$jn]=$min_len[$jn];   $fwidth[$jn]=$min_len[$jn];
     }      }
  }   }
    #check if we have objects which can be scaled
    my $how_many_to_scale=0;
    my @to_scale=();
    for (my $jn=0;$jn<=$#max_len;$jn++) {
       if ($Apache::londefdef::table[-1]{'objectsignal'}[$jn] eq '1') {
    $how_many_to_scale++;
    push @to_scale, $jn;
       }
    }
    if ($how_many_to_scale>0) {
       my $space_to_adjust=($space_neeeded-$available_space)/$how_many_to_scale;
       foreach my $jn (@to_scale) {
    for (my $in=0;$in<=$Apache::londefdef::table[-1]{'row_number'};$in++) {
       $Apache::londefdef::table[-1]{'content'}[$in][$jn]=~m/width\s*=\s*(\d+\.?\d*\s*(mm|cm|in|pc|pt)*)/;
       if ($1 ne '') {
    my $current_length=&recalc($1);
    $current_length=~/(\d+\.?\d*)/;
    $current_length=$current_length-$space_to_adjust;
    $Apache::londefdef::table[-1]{'content'}[$in][$jn]=~s/width\s*=\s*(\d+\.?\d*\s*(mm|cm|in|pc|pt)*)/width=$current_length mm/;
       }
       $Apache::londefdef::table[-1]{'content'}[$in][$jn]=~m/\[(\d+\.?\d*)\s*mm\]/;
       if ($1 ne '') {
    my $current_length=$1;
    $current_length=$current_length-$space_to_adjust;
    $Apache::londefdef::table[-1]{'content'}[$in][$jn]=~s/\[(\d+\.?\d*)\s*mm\]/\[$current_length mm\]/;
       }
    }
    $fwidth[$jn]=$fwidth[$jn]-$space_to_adjust;
       }
    }
     } else {      } else {
       #step 3. adjustment over minimal + corrections        #step 3. adjustment over minimal + corrections
  my $enlarge_coef=$available_space/$space_neeeded;   my $enlarge_coef=$available_space/$space_neeeded;
Line 2005  sub end_table { Line 2069  sub end_table {
  for (my $in=0;$in<=$Apache::londefdef::table[-1]{'row_number'};$in++) {   for (my $in=0;$in<=$Apache::londefdef::table[-1]{'row_number'};$in++) {
     for (my $jn=0;$jn<=$#fwidth;$jn++) {      for (my $jn=0;$jn<=$#fwidth;$jn++) {
  if ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'c') {   if ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'c') {
     $output.='\begin{center}';      $output.='\vspace*{-6 mm}\begin{center}';
  } elsif ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'r') {   } elsif ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'r') {
     $output.=' \hfill \llap{'      $output.=' \hfill \llap{'
  }   }
  $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') {   if ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'c') {
     $output.='\end{center}';      $output.='\end{center}\vspace*{-6 mm}';
  } elsif ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'r') {   } elsif ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'r') {
     $output.='} ';      $output.='} ';
  }   }
Line 2147  sub end_td_tex { Line 2211  sub end_td_tex {
     push @ {$Apache::londefdef::table[-1]{'objectlen'}[$Apache::londefdef::table[-1]{'row_number'}] },$fwidth;      push @ {$Apache::londefdef::table[-1]{'objectlen'}[$Apache::londefdef::table[-1]{'row_number'}] },$fwidth;
     push @ {$Apache::londefdef::table[-1]{'minlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0';      push @ {$Apache::londefdef::table[-1]{'minlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0';
     push @ {$Apache::londefdef::table[-1]{'maxlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0';      push @ {$Apache::londefdef::table[-1]{'maxlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0';
    } elsif ($data=~/\\parbox\{\s*\d+\.?\d*\s*(mm|cm|in|pc|pt)*\s*\}/ or $data=~/\\epsfxsize\s*=\s*\d+\.?\d*\s*(mm|cm|in|pc|pt)*/) {
       my $garbage_data=$data;
       my $fwidth=0;
               while ($garbage_data=~/\\parbox\{\s*(\d+\.?\d*\s*(mm|cm|in|pc|pt)*)\s*\}/) {
    my $current_length=&recalc($1);
    $current_length=~/(\d+\.?\d*)/;
    if ($fwidth<$1) {$fwidth=$1;}
    $garbage_data=~s/\\parbox\{\s*(\d+\.?\d*\s*(mm|cm|in|pc|pt)*)//;
       }
               while ($garbage_data=~/\\epsfxsize\s*=\s*(\d+\.?\d*\s*(mm|cm|in|pc|pt)*)/) {
    my $current_length=&recalc($1);
    $current_length=~/(\d+\.?\d*)/;
    if ($fwidth<$1) {$fwidth=$1;}
    $garbage_data=~s/\\epsfxsize\s*=\s*(\d+\.?\d*\s*(mm|cm|in|pc|pt)*)//;
       }
       push @ {$Apache::londefdef::table[-1]{'TeXlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0';
       push @ {$Apache::londefdef::table[-1]{'objectlen'}[$Apache::londefdef::table[-1]{'row_number'}] },$fwidth;
       push @ {$Apache::londefdef::table[-1]{'minlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0';
       push @ {$Apache::londefdef::table[-1]{'maxlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0';
       $data=~s/\\\\\s*$//; 
  } else {     } else {  
     $data=~s/^\s+(\S.*)/$1/;       $data=~s/^\s+(\S.*)/$1/; 
     $data=~s/(.*\S)\s+$/$1/;      $data=~s/(.*\S)\s+$/$1/;
Line 2169  sub end_td_tex { Line 2253  sub end_td_tex {
  $current_length=2.5*&LATEX_length($data);   $current_length=2.5*&LATEX_length($data);
                     my @words=split(/ /,$data);                      my @words=split(/ /,$data);
     foreach my $word (@words) {      foreach my $word (@words) {
  my $lengthword=2.5*&LATEX_length($word);   my $lengthword=2*&LATEX_length($word);
  if ($min_length<$lengthword) {$min_length=$lengthword;}   if ($min_length<$lengthword) {$min_length=$lengthword;}
     }      }
     }      }
Line 2205  sub start_th { Line 2289  sub start_th {
     if ($target eq 'web') {      if ($target eq 'web') {
  $currentstring = $token->[4];        $currentstring = $token->[4];     
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  my $what_to_push = substr(&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1),0,1);   $Apache::londefdef::TD_redirection = 1;
  if ($what_to_push eq '') {   &tagg_check('tr','th',$tagstack,$parstack,$parser,$safeeval);
     $what_to_push = substr($Apache::londefdef::table[-1]{'rows'}[0],0,1);;  
  }  
  push @{ $Apache::londefdef::table[-1]{'columns'} }, $what_to_push;  
  $Apache::londefdef::table[-1]{'counter_columns'}++;  
  &Apache::lonxml::startredirection();  
     }       } 
     return $currentstring;      return $currentstring;
 }     }   
            
   sub tagg_check {
       my ($good_tag,$bad_tag,$tagstack,$parstack,$parser,$safeeval) = @_;
       my @ar=@$parstack; 
       for (my $i=$#ar-1;$i>=0;$i--) {
    if (lc($$tagstack[$i]) eq $good_tag) {
       &start_th_tex($parstack,$parser,$safeeval);
       last;
    } elsif (lc($$tagstack[$i]) eq $bad_tag) {
       splice @ar, $i+1;
       &end_th_tex(\@ar,$parser,$safeeval);
       &start_th_tex($parstack,$parser,$safeeval);
       last;
    }
       }
       return '';
   }
    
   sub start_th_tex {
       my ($parstack,$parser,$safeeval) = @_;
       my $alignchar = substr(&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1),0,1);
       if ($alignchar eq '') {
    $alignchar = $Apache::londefdef::table[-1]{'rows'}[-1];
       }
       push @{ $Apache::londefdef::table[-1]{'align'}[$Apache::londefdef::table[-1]{'row_number'}] }, $alignchar;
       $Apache::londefdef::table[-1]{'counter_columns'}++;
       my $TeXwidth=&Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval,undef,0);
       if (defined $TeXwidth) {
    my $current_length=&recalc($TeXwidth);
    $current_length=~/(\d+\.?\d*)/;
    push @ {$Apache::londefdef::table[-1]{'TeXlen'}[$Apache::londefdef::table[-1]{'row_number'}] },$1;
       }
       &Apache::lonxml::startredirection();
       return '';
   }
   
   sub end_th_tex {
       my ($parstack,$parser,$safeeval) = @_;
       my $current_row = $Apache::londefdef::table[-1]{'row_number'};
       my $data=&Apache::lonxml::endredirection();
       my $TeXwidth=&Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval,undef,0);
       if (defined $TeXwidth) {
    push @ {$Apache::londefdef::table[-1]{'objectlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0';
    push @ {$Apache::londefdef::table[-1]{'minlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0';
    push @ {$Apache::londefdef::table[-1]{'maxlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0';
       } else {
    if (($data=~m/width\s*=\s*(\d+\.?\d*\s*(mm|cm|in|pc|pt)*)/) or ($data=~m/\[(\d+\.?\d*)\s*mm\]/)) {
       my $garbage_data=$data;
       my $fwidth=0;
               while ($garbage_data=~m/width\s*=\s*(\d+\.?\d*\s*(mm|cm|in|pc|pt)*)/) {
    my $current_length=&recalc($1);
    $current_length=~/(\d+\.?\d*)/;
    if ($fwidth<$1) {$fwidth=$1;}
    $garbage_data=~s/width\s*=\s*(\d+\.?\d*\s*(mm|cm|in|pc|pt)*)//;
       }
               while ($garbage_data=~m/\[(\d+\.?\d*)\s*mm\]/) {
    my $current_length=$1;
    if ($fwidth<$current_length) {$fwidth=$current_length;}
    $garbage_data=~s/\[(\d+\.?\d*)\s*mm\]//;
       }
       push @ {$Apache::londefdef::table[-1]{'TeXlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0';
       push @ {$Apache::londefdef::table[-1]{'objectlen'}[$Apache::londefdef::table[-1]{'row_number'}] },$fwidth;
       push @ {$Apache::londefdef::table[-1]{'minlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0';
       push @ {$Apache::londefdef::table[-1]{'maxlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0';
    } else {  
       $data=~s/^\s+(\S.*)/$1/; 
       $data=~s/(.*\S)\s+$/$1/;
       $data=~s/(\s)+/$1/;
       my ($current_length,$min_length)=(0,0);
       if ($data=~/\\vskip/) {
                   my $newdata=$data;
    $newdata=~s/\\vskip \d*\.?\d*\s*mm/THISISJUSTTEMPORARYSEPARATOR/g;
    my @newdata=split(/THISISJUSTTEMPORARYSEPARATOR/,$newdata);
    foreach my $elementdata (@newdata) {
       my $lengthnewdata=2.5*&LATEX_length($elementdata);
       if ($lengthnewdata>$current_length) {$current_length=$lengthnewdata;}
                       my @words=split(/ /,$elementdata);
       foreach my $word (@words) {
    my $lengthword=2.5*&LATEX_length($word);
    if ($min_length<$lengthword) {$min_length=$lengthword;}
       }
    }
       } else {
    $current_length=2.5*&LATEX_length($data);
                       my @words=split(/ /,$data);
       foreach my $word (@words) {
    my $lengthword=2*&LATEX_length($word);
    if ($min_length<$lengthword) {$min_length=$lengthword;}
       }
       }
       push @ {$Apache::londefdef::table[-1]{'TeXlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0';
       push @ {$Apache::londefdef::table[-1]{'objectlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0';
       push @ {$Apache::londefdef::table[-1]{'maxlen'}[$Apache::londefdef::table[-1]{'row_number'}] },$current_length;
       push @ {$Apache::londefdef::table[-1]{'minlen'}[$Apache::londefdef::table[-1]{'row_number'}] },$min_length;
    }        
       }
    for (my $in=0; $in<=$#{$Apache::londefdef::table[-1]{'include'}};$in++) {         
       $data=~s/\\keephidden\{NEW TABLE ENTRY\}/$Apache::londefdef::table[-1]{'include'}[$in]/;
    }
       #make data bold
       $data='\textbf{'.$data.'}';
       push @ {$Apache::londefdef::table[-1]{'content'}[-1] },$data;
       return'';
   }
   
 sub end_th {  sub end_th {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
     my $currentstring = '';      my $currentstring = '';
     if ($target eq 'web') {      if ($target eq 'web') {
  $currentstring = $token->[2];        $currentstring = $token->[2];     
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  my $current_row = $Apache::londefdef::table[-1]{'row_number'};          $Apache::londefdef::TD_redirection =0;
  my $data=&Apache::lonxml::endredirection();   &end_th_tex($parstack,$parser,$safeeval);
  my $TeXwidth=&Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval,undef,0);  
  if (defined $TeXwidth) {  
     my $current_length=&recalc($TeXwidth);  
     $current_length=~/(\d+)/;  
     $Apache::londefdef::table[-1]{'TeXlength'} .= $1.',';  
     $Apache::londefdef::table[-1]{'length'} .= '0,';  
  } else {  
     if ($data=~m/width\s*=\s*(\d+\.?\d*\s*(mm|cm|in|pc|pt)*)/) {  
  my $current_length=&recalc($1);  
  $current_length=~/(\d+)/;  
  $Apache::londefdef::table[-1]{'TeXlength'} .= $1.',';  
  $Apache::londefdef::table[-1]{'length'} .= '0,';  
     } else {       
  $data=~/^\s*(\S.*)/;  
  $data=$1;  
  $data=~/(.*\S)\s*$/;  
  $data=$1;  
  my $current_length=2*length($data);  
  $Apache::londefdef::table[-1]{'length'} .= $current_length.',';  
  $Apache::londefdef::table[-1]{'TeXlength'} .= '0,';  
     }          
  }  
  for (my $in=0; $in<=$#{$Apache::londefdef::table[-1]{'include'}};$in++) {                                  
     $data=~s/\\keephidden\{NEW TABLE ENTRY\}/$Apache::londefdef::table[-1]{'include'}[$in]/;  
  }  
  $data='\textbf{'.$data.'}';  
  @{ $Apache::londefdef::table[-1]{'rowdata'} }[$current_row] .= '\parbox{TOBECHANGEDONNUMBER}{'.$data.'} '.$Apache::londefdef::table[-1]{'vinc'};  
     }      }
     return $currentstring;      return $currentstring;
 }  }
        
 #-- <img> tag (end tag forbidden)  #-- <img> tag (end tag forbidden)
 sub start_img {  sub start_img {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
Line 2279  sub start_img { Line 2436  sub start_img {
     $currentstring.='[IMAGE: '.$alttag.']';      $currentstring.='[IMAGE: '.$alttag.']';
  }   }
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
    my $oldSRC=$src;
           $oldSRC=~s/\.(gif|jpg|png)$/\.eps/;
  $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);   $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
         #if uploaded restore the path  
  if ($src=~/^\/uploaded\/([^\/]+)\/([^\/]+)\/simplepage\/([^\/]+)$/) {  
     $src=&Apache::loncommon::propath($1,$2).'/userfiles/simplepage/'.$3;  
  } elsif ($src=~/^\/uploaded\/([^\/]+)\/([^\/]+)\/aboutme\/([^\/]+)$/) {  
     $src=&Apache::loncommon::propath($1,$2).'/userfiles/aboutme/'.$3;  
  }  
  #if original gif/jpg/png file exist do following:   #if original gif/jpg/png file exist do following:
  if (-e $src) {   if (-e $src) {
     #what is the image size?      #what is the image size?
Line 2293  sub start_img { Line 2446  sub start_img {
             my ($file,$path)=&file_path($src);               my ($file,$path)=&file_path($src); 
     my $newsrc = $src;      my $newsrc = $src;
     $newsrc =~ s/\.(gif|jpg|png)$/.eps/i;      $newsrc =~ s/\.(gif|jpg|png)$/.eps/i;
       &Apache::lonnet::repcopy($oldSRC);
     $file=~s/\.(gif|jpg|png)$/.eps/i;      $file=~s/\.(gif|jpg|png)$/.eps/i;
     #where can we find the picture?      #where can we find the picture?
     if (-e $newsrc) {      if (-e $newsrc) {
Line 2338  sub start_img { Line 2492  sub start_img {
  $currentstring .=&Apache::edit::text_arg('height (pixel):','height',$token,5).'<br />';   $currentstring .=&Apache::edit::text_arg('height (pixel):','height',$token,5).'<br />';
  $currentstring .=&Apache::edit::text_arg('TeXwidth (mm):','TeXwidth',$token,5);   $currentstring .=&Apache::edit::text_arg('TeXwidth (mm):','TeXwidth',$token,5);
  $currentstring .=&Apache::edit::text_arg('TeXheight (mm):','TeXheight',$token,5);   $currentstring .=&Apache::edit::text_arg('TeXheight (mm):','TeXheight',$token,5);
    $currentstring .=&Apache::edit::select_arg('Alignment:','align',
      ['','bottom','middle','top','left','right'],$token,5);
  $currentstring .=&Apache::edit::end_row().&Apache::edit::start_spanning_row();   $currentstring .=&Apache::edit::end_row().&Apache::edit::start_spanning_row();
  my $src=&Apache::lonxml::get_param('src',$parstack,$safeeval);   my $src=&Apache::lonxml::get_param('src',$parstack,$safeeval);
  my $alt=&Apache::lonxml::get_param('alt',$parstack,$safeeval);   my $alt=&Apache::lonxml::get_param('alt',$parstack,$safeeval);
Line 2351  sub start_img { Line 2507  sub start_img {
  my ($osrc,$owidth,$oheight)=   my ($osrc,$owidth,$oheight)=
     ($token->[2]{'src'},$token->[2]{'width'},$token->[2]{'height'});      ($token->[2]{'src'},$token->[2]{'width'},$token->[2]{'height'});
  my $ctag=&Apache::edit::get_new_args($token,$parstack,   my $ctag=&Apache::edit::get_new_args($token,$parstack,
      $safeeval,'src','alt',       $safeeval,'src','alt','align',
      'TeXwidth','TeXheight',       'TeXwidth','TeXheight',
      'width','height');       'width','height');
  my ($nsrc,$nwidth,$nheight)=   my ($nsrc,$nwidth,$nheight)=
Line 2518  sub start_allow { Line 2674  sub start_allow {
     $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);      $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
     $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=      $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=
  &Apache::lonnet::clutter($src);   &Apache::lonnet::clutter($src);
     &image_replication($src);      if ($target eq 'tex') { &image_replication($src); }
     my $result;      my $result;
     if ($target eq 'edit') {      if ($target eq 'edit') {
  $result .=&Apache::edit::tag_start($target,$token);   $result .=&Apache::edit::tag_start($target,$token);
Line 3559  sub eps_generation { Line 3715  sub eps_generation {
  $newsrc=~s/\/home\/httpd\/lonUsers//;   $newsrc=~s/\/home\/httpd\/lonUsers//;
  $newsrc=~s/\/([^\/]+)\/(\w)\/(\w)\/(\w)\//\/$1\//;   $newsrc=~s/\/([^\/]+)\/(\w)\/(\w)\/(\w)\//\/$1\//;
     }      }
     return ' \graphicspath{{/home/httpd/prtspool'.$newsrc.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';      if ($newsrc=~/\/userfiles\//) {
    return ' \graphicspath{{'.$newsrc.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
       } else {
    return ' \graphicspath{{/home/httpd/prtspool'.$newsrc.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
       }
 }  }
   
 sub file_path {       sub file_path {     

Removed from v.1.226  
changed lines
  Added in v.1.244


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