Diff for /loncom/xml/londefdef.pm between versions 1.230 and 1.246

version 1.230, 2004/07/15 17:05:20 version 1.246, 2004/11/19 21:17:56
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]{article}';
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 1483  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 1540  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 1628  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 1682  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 1695  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 1718  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 1738  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 1759  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 1776  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 2193  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 2398  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 2412  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) {
  #eps counterpart for image exist    #eps counterpart for image exist 
  if ($path) {   if ($path) {
     $currentstring .= '\vskip 1 mm \noindent\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';      $currentstring .= '\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
  }   }
     } else {      } else {
  #there is no eps counterpart for image - check for ps one   #there is no eps counterpart for image - check for ps one
Line 2426  sub start_img { Line 2461  sub start_img {
     #ps counterpart for image exist       #ps counterpart for image exist 
     $file =~ s/\.eps$/\.ps/;      $file =~ s/\.eps$/\.ps/;
     if ($path) {      if ($path) {
  $currentstring .= '\vskip 1 mm \noindent\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';   $currentstring .= '\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
     }      }
  } else {   } else {
     #care about eps dynamical generation      #care about eps dynamical generation
     $currentstring.='\vskip 1 mm '.&eps_generation($src,$file,$width_param);      $currentstring.=&eps_generation($src,$file,$width_param);
  }   }
     }      }
  } else {   } else {
Line 2457  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 2470  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 2637  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 3678  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.230  
changed lines
  Added in v.1.246


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