Diff for /loncom/xml/londefdef.pm between versions 1.77 and 1.119

version 1.77, 2002/07/24 20:23:21 version 1.119, 2003/02/20 17:07:14
Line 44 Line 44
   
 package Apache::londefdef;   package Apache::londefdef; 
   
 use Apache::lonnet;  use Apache::lonnet();
 use strict;  use strict;
 use Apache::lonxml;  use Apache::lonxml();
 use Apache::File();  use Apache::File();
 use Image::Magick;  use Image::Magick;
   use Apache::lonmenu();
   use Apache::lonmeta();
   
 BEGIN {  BEGIN {
   
     &Apache::lonxml::register('Apache::londefdef',('m','html','head','map','select','option','input','textarea','form','meta','title','body','center','b','strong','dt','h1','h2','h3','h4','h5','h6','cite','i','address','dd','dl','dir','ol','ul','menu','dfn','kbd','tt','code','em','q','p','br','big','small','basefont','font','s','sub','strike','sup','hr','a','li','u','output','param','applet','img','embed','allow','frameset','pre','insert','externallink','table','tr','th','td','blankspace','bubble','bubbles','bubbleline'));      &Apache::lonxml::register('Apache::londefdef',('a','abbr','acronym','address','allow','applet','area','b','base','basefont','bgo','bgsound','big','blink','blockquote','blankspace','body','br','button','caption','center','cite','code','col','colgroup','dd','del','dfn','dir','div','dl','dt','em','embed','externallink','fieldset','font','form','frame','frameset','h1','h2','h3','h4','h5','h6','head','hr','html','i','iframe','img','input','ins','insert','isindex','kbd','keygen','label','layer','legend','li','link','m','map','marquee','menu','meta','multicol','nobr','noembed','noframes','nolayer','noscript','object','ol','optgroup','option','output','p','param','pre','q','s','samp','select','server','small','spacer','span','strike','strong','sub','sup','table','tbody','td','textarea','tfoot','th','thead','title','tr','tt','tthoption','u','ul','var','wbr'));
   
 }  }
   
Line 91  sub start_m { Line 93  sub start_m {
     #&Apache::lonxml::debug("M is ends with:$currentstring:");      #&Apache::lonxml::debug("M is ends with:$currentstring:");
   } elsif ($target eq 'tex') {    } elsif ($target eq 'tex') {
     $currentstring = &Apache::lonxml::get_all_text_unbalanced("/m",$parser);      $currentstring = &Apache::lonxml::get_all_text_unbalanced("/m",$parser);
     if ($currentstring=~/\s*\\\\\s*/) {$currentstring = ' \vskip 0 mm ';}      if ($currentstring=~/^(\s*\\\\\s*)*$/) {$currentstring = ' \vskip 0 mm ';}
   } else {    } else {
     my $inside = &Apache::lonxml::get_all_text_unbalanced("/m",$parser);      my $inside = &Apache::lonxml::get_all_text_unbalanced("/m",$parser);
   }    }
Line 108  sub end_m { Line 110  sub end_m {
   }    }
   return $currentstring;    return $currentstring;
 }  }
   
   sub start_tthoption {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
     my $result;
     if ($target eq 'web') {
         my $inside = &Apache::lonxml::get_all_text("/tthoption",$parser);
         $inside=~s/^\s*//;
         if ($ENV{'browser.mathml'}) {
     &tth::ttmoptions($inside);
         } else {
     &tth::tthoptions($inside);
         }
     }
   }
   
   sub end_tthoption {
     my ($target,$token) = @_;
     my $result;
     return $result;
   }
   
 #-- <html> tag      #-- <html> tag    
       sub start_html {  sub start_html {
     my ($target,$token) = @_;      my ($target,$token) = @_;
             my $currentstring = '';      my $currentstring = '';
     if ($ENV{'browser.mathml'}) {      if ($ENV{'browser.mathml'}) {
       &tth::ttminit();   &tth::ttminit();
     } else {   if ($ENV{'browser.unicode'}) {
       &tth::tthinit();      &tth::ttmoptions('-L -u1');
     }   } else {
             if ($target eq 'web') {      &tth::ttmoptions('-L -u0');
               $currentstring = &Apache::lonxml::xmlbegin().   }
                                &Apache::lonxml::fontsettings();           } else {
     } elsif ($target eq 'tex') {   &tth::tthinit();
       @Apache::londefdef::table = ();   if ($ENV{'browser.unicode'}) {
       $currentstring .= '\documentclass[letterpaper]{article}      &tth::tthoptions('-L -u1');
                                  \newcommand{\keephidden}[1]{}   } else {
                                  \renewcommand{\deg}{$^{\circ}$}      &tth::tthoptions('-L -u0');
                                  \usepackage[dvips]{graphicx}  
                                  \usepackage{epsfig}\usepackage{calc}';  
     }  
    return $currentstring;  
  }   }
       }
       if ($target eq 'web') {
    $currentstring = &Apache::lonxml::xmlbegin().
       &Apache::lonxml::fontsettings();     
       } elsif ($target eq 'tex') {
    @Apache::londefdef::table = ();
    $currentstring .= '\documentclass[letterpaper]{article}
                              \newcommand{\keephidden}[1]{}
                              \renewcommand{\deg}{$^{\circ}$}
                              \usepackage{textcomp}
                              \usepackage[dvips]{graphicx}
                              \usepackage{epsfig}\usepackage{calc}
   \newenvironment{choicelist}{\begin{list}{}{\setlength{\rightmargin}{0in}\setlength{\leftmargin}{0.13in}\setlength{\topsep}{0.05in}\setlength{\itemsep}{0.022in}\setlength{\parsep}{0in}\setlength{\belowdisplayskip}{0.04in}\setlength{\abovedisplayskip}{0.05in}\setlength{\abovedisplayshortskip}{-0.04in}\setlength{\belowdisplayshortskip}{0.04in}}}{\end{list}}';
       }
       return $currentstring;
   }
         sub end_html {          sub end_html {
     my ($target,$token) = @_;      my ($target,$token) = @_;
             my $currentstring = '';              my $currentstring = '';
Line 151  sub end_m { Line 186  sub end_m {
     my ($target,$token) = @_;      my ($target,$token) = @_;
             my $currentstring = '';              my $currentstring = '';
             if ($target eq 'web') {              if ($target eq 'web') {
               $currentstring = &Apache::lonxml::registerurl(undef,$target).                $currentstring = &Apache::lonmenu::registerurl(undef,$target).
                                $token->[2];                                     $token->[2];    
             }               } 
    return $currentstring;     return $currentstring;
Line 289  sub end_m { Line 324  sub end_m {
  }   }
 #-- <meta> tag  #-- <meta> tag
       sub start_meta {        sub start_meta {
     my ($target,$token,$tagstack,$parstack,$parser) = @_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
             my $currentstring = '';              my $currentstring = '';
             if ($target eq 'web') {              if ($target eq 'web') {
       my $args='';        my $args='';
       if ( $#$parstack > -1 ) { $args=$$parstack[$#$parstack]; }        if ( $#$parstack > -1 ) { $args=$$parstack[$#$parstack]; }
       if ($args eq '') {        if ($args eq '') {
  &Apache::lonxml::get_all_text("/meta",$$parser[$#$parser]);   &Apache::lonxml::get_all_text("/meta",$parser);
       } else {        } else {
  $currentstring = $token->[4];   $currentstring = $token->[4];
       }        }
     }      }
             if ($target eq 'meta') {              if ($target eq 'meta') {
  unless ($token->[2]->{'http-equiv'}) {   unless (&Apache::lonxml::get_param
                            ('http-equiv',$parstack,$safeeval,undef,1)) {
     my $name=$token->[2]->{'name'};      my $name=$token->[2]->{'name'};
                     $name=~tr/A-Z/a-z/;                      $name=~tr/A-Z/a-z/;
                     $name=~s/\s/\_/g;                      $name=~s/\s/\_/gs;
                       $name=~s/\W//gs;
                     if ($name) {                      if ($name) {
                        $currentstring='<'.$name.'>'.                         $currentstring='<'.$name.'>'.
                                          $token->[2]->{'content'}.                                           &Apache::lonxml::get_param
                                  ('content',$parstack,$safeeval,undef,1).
               '</'.$name.'>';                '</'.$name.'>';
     }      }
                 }                  }
Line 329  sub end_m { Line 367  sub end_m {
 #-- <body> tag  #-- <body> tag
         sub start_body {          sub start_body {
             my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;              my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
 #    my ($target,$token) = @_;  
             my $currentstring = '';              my $currentstring = '';
             if ($target eq 'web') {              if ($target eq 'web') {
       if (!$Apache::lonxml::registered) {        if (!$Apache::lonxml::registered) {
  $currentstring.='<head>'.   $currentstring.='<head>'.
     &Apache::lonxml::registerurl(undef,$target).'</head>';      &Apache::lonmenu::registerurl(undef,$target).'</head>';
       }        }
       my $onLoad='';        my $onLoad='';
       foreach my $key (keys(%{$token->[2]})) {        foreach my $key (keys(%{$token->[2]})) {
Line 343  sub end_m { Line 380  sub end_m {
   delete($token->[2]->{$key});    delete($token->[2]->{$key});
  }   }
       }        }
       $token->[2]->{'onLoad'}=&Apache::lonxml::loadevents().        $token->[2]->{'onload'}=&Apache::lonmenu::loadevents().
                        ';'.$onLoad;                         ';'.$onLoad;
       my $onUnload='';        my $onUnload='';
       foreach my $key (keys(%{$token->[2]})) {        foreach my $key (keys(%{$token->[2]})) {
Line 352  sub end_m { Line 389  sub end_m {
   delete($token->[2]->{$key});    delete($token->[2]->{$key});
  }   }
       }        }
       $token->[2]->{'onUnload'}=&Apache::lonxml::unloadevents().        $token->[2]->{'onunload'}=&Apache::lonmenu::unloadevents().
                          ';'.$onUnload;                           ';'.$onUnload;
   
       $currentstring .= '<'.$token->[1];        $currentstring .= '<'.$token->[1];
Line 366  sub end_m { Line 403  sub end_m {
  <input type="submit" name="editmode" value="Edit" />   <input type="submit" name="editmode" value="Edit" />
  </form>   </form>
 EDITBUTTON  EDITBUTTON
       }                } else {
    $currentstring.=&Apache::lonmenu::menubuttons(undef,$target,1);
                 }
            } elsif ($target eq 'tex') {             } elsif ($target eq 'tex') {
               $currentstring = '\begin{document}';                  $currentstring = '\begin{document}';  
     }       } 
Line 466  EDITBUTTON Line 505  EDITBUTTON
             if ($target eq 'web') {              if ($target eq 'web') {
        $currentstring .= $token->[4];         $currentstring .= $token->[4];
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  $currentstring .= '\large{\textbf{';   $currentstring .= '{\large \textbf{';
     } elsif ($target eq 'meta') {      } elsif ($target eq 'meta') {
  $currentstring='<subject>';   $currentstring='<subject>';
                 &start_output();                  &start_output();
Line 493  EDITBUTTON Line 532  EDITBUTTON
             if ($target eq 'web') {              if ($target eq 'web') {
        $currentstring .= $token->[4];         $currentstring .= $token->[4];
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  $currentstring .= '\large{\textbf{';   $currentstring .= '{\large \textbf{';
     }       } 
            return $currentstring;             return $currentstring;
  }   }
Line 514  EDITBUTTON Line 553  EDITBUTTON
             if ($target eq 'web') {              if ($target eq 'web') {
        $currentstring .= $token->[4];         $currentstring .= $token->[4];
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  $currentstring .= '\large{\textbf{';   $currentstring .= '{\large \textbf{';
     }       } 
            return $currentstring;             return $currentstring;
  }   }
Line 535  EDITBUTTON Line 574  EDITBUTTON
             if ($target eq 'web') {              if ($target eq 'web') {
        $currentstring .= $token->[4];         $currentstring .= $token->[4];
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  $currentstring .= '\large{\textbf{';   $currentstring .= '{\large \textbf{';
     }       } 
            return $currentstring;             return $currentstring;
  }   }
Line 556  EDITBUTTON Line 595  EDITBUTTON
             if ($target eq 'web') {              if ($target eq 'web') {
        $currentstring .= $token->[4];         $currentstring .= $token->[4];
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  $currentstring .= '\large{\textbf{';   $currentstring .= '{\large \textbf{';
     }       } 
            return $currentstring;             return $currentstring;
  }   }
Line 577  EDITBUTTON Line 616  EDITBUTTON
             if ($target eq 'web') {              if ($target eq 'web') {
        $currentstring .= $token->[4];         $currentstring .= $token->[4];
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  $currentstring .= '\large{\textbf{';   $currentstring .= '{\large \textbf{';
     }       } 
            return $currentstring;             return $currentstring;
  }   }
Line 845  EDITBUTTON Line 884  EDITBUTTON
        $currentstring .= $token->[4];         $currentstring .= $token->[4];
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  if ($$tagstack[-2] ne 'sub' && $$tagstack[-2] ne 'sup') {   if ($$tagstack[-2] ne 'sub' && $$tagstack[-2] ne 'sup') {
     $currentstring .= '\vskip 0 mm';      $currentstring .= '\vskip 0.2 mm';
  }   }
     } elsif ($target eq 'latexsource') {      } elsif ($target eq 'latexsource') {
  $currentstring .= '\\';   $currentstring .= '\\';
Line 955  EDITBUTTON Line 994  EDITBUTTON
             if ($target eq 'web') {              if ($target eq 'web') {
        $currentstring .= $token->[4];         $currentstring .= $token->[4];
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  $currentstring .= '\underline{';         &Apache::lonxml::startredirection();
     }       } 
            return $currentstring;             return $currentstring;
  }   }
Line 965  EDITBUTTON Line 1004  EDITBUTTON
             if ($target eq 'web') {              if ($target eq 'web') {
        $currentstring .= $token->[2];         $currentstring .= $token->[2];
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
         $currentstring .= '}';         $currentstring=&Apache::lonxml::endredirection();
          $currentstring=~s/(\S)(\s+)(\S)/$1}$2\\underline{$3/g;
          $currentstring=~s/^\s*(\S)/\\underline{$1/;
          $currentstring=~s/(\S)\s*$/$1}/;       
             }              }
            return $currentstring;             return $currentstring;
  }   }
Line 976  EDITBUTTON Line 1018  EDITBUTTON
             if ($target eq 'web') {              if ($target eq 'web') {
        $currentstring .= $token->[4];         $currentstring .= $token->[4];
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  $currentstring .= '\underline{';         &Apache::lonxml::startredirection();
     }       } 
            return $currentstring;             return $currentstring;
  }   }
Line 986  EDITBUTTON Line 1028  EDITBUTTON
             if ($target eq 'web') {              if ($target eq 'web') {
        $currentstring .= $token->[2];         $currentstring .= $token->[2];
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
         $currentstring .= '}';         $currentstring=&Apache::lonxml::endredirection();
          $currentstring=~s/(\S)(\s+)(\S)/$1}$2\\underline{$3/g;
          $currentstring=~s/^\s*(\S)/\\underline{$1/;
          $currentstring=~s/(\S)\s*$/$1}/;
             }              }
            return $currentstring;             return $currentstring;
  }   }
Line 1039  EDITBUTTON Line 1084  EDITBUTTON
             if ($target eq 'web') {              if ($target eq 'web') {
        $currentstring .= $token->[4];         $currentstring .= $token->[4];
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  $currentstring .= '\vskip 0 mm \noindent\makebox[\textwidth - 8 mm][b]{\hrulefill}';   $currentstring .= '\vskip 0 mm \noindent\makebox[\textwidth/2 ][b]{\hrulefill}\vskip 0 mm ';
     }       } 
            return $currentstring;             return $currentstring;
  }   }
Line 1052  EDITBUTTON Line 1097  EDITBUTTON
     }       } 
            return $currentstring;             return $currentstring;
  }   }
   #-- <div> tag
           sub start_div {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
          $currentstring .= $token->[4];
       } 
              return $currentstring;
    }
           sub end_div {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
          $currentstring .= $token->[2];
       } 
              return $currentstring;
    }
 #-- <a> tag  #-- <a> tag
         sub start_a {          sub start_a {
     my ($target,$token) = @_;      my ($target,$token) = @_;
Line 1071  EDITBUTTON Line 1133  EDITBUTTON
                 my  $tempor_var = $stackref->[$#$stackref];                  my  $tempor_var = $stackref->[$#$stackref];
  if (index($tempor_var,'name') != -1 ) {   if (index($tempor_var,'name') != -1 ) {
     $tempor_var =~ s/name=([^,]*),/$1/g;      $tempor_var =~ s/name=([^,]*),/$1/g;
 #        $currentstring .= " \\label{$tempor_var}";  
         } elsif (index($tempor_var,'href') != -1 ) {          } elsif (index($tempor_var,'href') != -1 ) {
     $tempor_var =~ s/href=([^,]*),/$1/g;      $tempor_var =~ s/href=([^,]*),/$1/g;
         $currentstring .= " \\ref{$tempor_var}";          $currentstring .= " \\ref{$tempor_var}";
Line 1116  EDITBUTTON Line 1177  EDITBUTTON
             if ($target eq 'web') {              if ($target eq 'web') {
        $currentstring .= $token->[4];         $currentstring .= $token->[4];
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  $currentstring .= '\underline{';         &Apache::lonxml::startredirection();
     }       } 
            return $currentstring;             return $currentstring;
  }   }
Line 1126  EDITBUTTON Line 1187  EDITBUTTON
             if ($target eq 'web') {              if ($target eq 'web') {
        $currentstring .= $token->[2];         $currentstring .= $token->[2];
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
         $currentstring .= '}';         $currentstring=&Apache::lonxml::endredirection();
          $currentstring=~s/(\S)(\s+)(\S)/$1}$2\\underline{$3/g;
          $currentstring=~s/^\s*(\S)/\\underline{$1/;
          $currentstring=~s/(\S)\s*$/$1}/;
             }              }
            return $currentstring;             return $currentstring;
  }   }
Line 1274  EDITBUTTON Line 1338  EDITBUTTON
    return $currentstring;     return $currentstring;
  }   }
 #-- <table> tag  #-- <table> tag
         sub start_table {  sub start_table {
     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->[4];        $currentstring = $token->[4];     
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  my $aa = {};   my $aa = {};
  push @Apache::londefdef::table, $aa;    push @Apache::londefdef::table, $aa; 
  $Apache::londefdef::table[-1]{'row_number'} = -1;   $Apache::londefdef::table[-1]{'row_number'} = -1;
  $Apache::londefdef::table[-1]{'output'} = '\begin{tabular} ';   $Apache::londefdef::table[-1]{'output'} = ' \noindent \begin{tabular} ';
  my $border = &Apache::lonxml::get_param('border',$parstack,$safeeval);   my $border = &Apache::lonxml::get_param('border',$parstack,$safeeval,undef,1); 
  unless (defined $border) { $border = 0; }   unless (defined $border) { $border = 0; }
  if ($border) {    if ($border) { 
     $Apache::londefdef::table[-1]{'hinc'} = '\hline ';       $Apache::londefdef::table[-1]{'hinc'} = '\hline '; 
     $Apache::londefdef::table[-1]{'vinc'} = '&';       $Apache::londefdef::table[-1]{'vinc'} = '&'; 
     $Apache::londefdef::table[-1]{'vvinc'} = '|';      $Apache::londefdef::table[-1]{'vvinc'} = '|';
  } else {   } else {
     $Apache::londefdef::table[-1]{'hinc'} = '';       $Apache::londefdef::table[-1]{'hinc'} = ''; 
     $Apache::londefdef::table[-1]{'vinc'} = '&';       $Apache::londefdef::table[-1]{'vinc'} = '&'; 
     $Apache::londefdef::table[-1]{'vvinc'} = '';      $Apache::londefdef::table[-1]{'vvinc'} = '';
  }   }
     }    my $width;
    return $currentstring;   foreach my $key (keys(%{$token->[2]})) {
       if ($key =~ /^width$/i) {
    $width = &Apache::lonxml::get_param($key,$parstack,$safeeval,undef,1);
       }
  }   }
    if (defined($width)) { $Apache::londefdef::table[-1]{'width'}=$width; }
       }
       return $currentstring;
   }
         sub end_table {          sub end_table {
     my ($target,$token) = @_;      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 $inmemory = '';   my $inmemory = '';
  my $output = '';   my $output = '';
                   #construct header of the table
  my $header_of_table = '{'.$Apache::londefdef::table[-1]{'vvinc'};   my $header_of_table = '{'.$Apache::londefdef::table[-1]{'vvinc'};
  my $in;   my $in;
  for ($in=0;$in<=$Apache::londefdef::table[-1]{'counter_columns'};$in++) {   for ($in=0;$in<=$Apache::londefdef::table[-1]{'counter_columns'};$in++) {
     $header_of_table .= $Apache::londefdef::table[-1]{'columns'}[$in].$Apache::londefdef::table[-1]{'vvinc'};      $header_of_table .= $Apache::londefdef::table[-1]{'columns'}[$in].$Apache::londefdef::table[-1]{'vvinc'};
  }   }
  $header_of_table .= '}';   $header_of_table .= '}';
                   #fill the table
  for ($in=0;$in<=$Apache::londefdef::table[-1]{'row_number'};$in++) {   for ($in=0;$in<=$Apache::londefdef::table[-1]{'row_number'};$in++) {
     $output .=  $Apache::londefdef::table[-1]{'rowdata'}[$in];      $output .=  $Apache::londefdef::table[-1]{'rowdata'}[$in];
     chop $output;      chop $output;
     $output .= ' \\\\ ';      $output .= ' \\\\ ';
  }   }
                 my @length = split(/,/,$Apache::londefdef::table[-1]{'length'});                  #define the length of the table cells
                 my $how_many_columns = $#length+1;   my @lengthforoutput = split(/,/,$Apache::londefdef::table[-1]{'lengthrow'}[0]);
                 my $parboxlength = '(\textwidth';   my $how_many_columns = $#lengthforoutput + 1; #total number of columns in the table 
                 for (my $io=0; $io<=$#length;$io++) {   my $filled_columns = 0; #number of columns with information about width
     if ($length[$io] ne '') {   my $available_space = ' ';
  $parboxlength .= ' - '.$length[$io].' ';   foreach my $tempo_length (@{ $Apache::londefdef::table[-1]{'lengthrow'} }) {
       my @length = split(/,/,$tempo_length);
       for (my $ico=0;$ico<=$#lengthforoutput;$ico++) {
    $lengthforoutput[$ico] =~ m/(\d*\.?\d*)\s*(\w+)/;
    my $old_value = $1;
    my $old_unit = $2; 
    if ($old_unit eq 'cm') { 
       $old_value = $old_value * 10;
    } elsif ($old_unit eq 'in') { 
       $old_value = $old_value * 25.4;
    } elsif ($old_unit eq 'pt') {
       $old_value = $old_value * 25.4/72.27;
    } elsif ($old_unit eq 'pc') {
       $old_value = $old_value * 25.4/6.022;
    }
    $old_unit = 'mm';
     $length[$ico] =~ m/(\d*\.?\d*)\s*(\w+)/;
    my $new_value = $1;
    my $new_unit = $2;
    if ($new_unit eq 'cm') { 
       $new_value = $new_value * 10;
    } elsif ($old_unit eq 'in') { 
       $new_value = $new_value * 25.4;
    } elsif ($old_unit eq 'pt') {
       $new_value = $new_value * 25.4/72.27;
    } elsif ($old_unit eq 'pc') {
       $new_value = $new_value * 25.4/6.022;
    }
    $new_unit = 'mm';
    if ($old_value < $new_value) {
       $lengthforoutput[$ico] = $new_value.' mm';
    } else {
       $lengthforoutput[$ico] = $old_value.' mm';
    }  
       }
    }
    for (my $ico=0;$ico<=$#lengthforoutput;$ico++) {
       if (not $lengthforoutput[$ico]=~m/^\s*0\s*\w*\s*$/) {
    $filled_columns++;
    $available_space = $available_space.' - '.$lengthforoutput[$ico];
     }      }
  }   }
  $parboxlength .= ')/'.$how_many_columns.' - 7 mm';   my $temp_file;
  $output =~ s/\\parbox{}/\\parbox{$parboxlength}/g;   my $filename = "/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout.tbl";
    if (-e $filename) {
       $temp_file = Apache::File->new($filename); 
       my @tbl_file_content = <$temp_file>;
       my ($one,$two,$three) = split(/,/,$tbl_file_content[0]);
           $how_many_columns+=$one-1;
           $filled_columns+=$two;
       if($three=~/\S/) {$available_space = $available_space.' - '.$three;}
    } else {
       $temp_file = Apache::File->new('>>'.$filename); 
    }
    print $temp_file "$how_many_columns,$filled_columns,$available_space\n";
    $output =~ s/\\parbox{TOBECHANGEDONNUMBER}{}/\\parbox{1 mm}{}/g;
    $output =~ s/\\parbox{TOBECHANGEDONNUMBER}/\\parbox{\$SpacePerColumn}/g;
    my @tagar = @$tagstack;
    my $signature = 1;
    for (my $ico=0;$ico<$#tagar;$ico++) {
        if ($tagar[$ico] eq 'table') { $signature = 0; }
    }
    if ($signature) {
       my $NumberEmptyLength = $how_many_columns - $filled_columns;
       my $SpacePerColumn = '(\textwidth '.$available_space.')/'.$NumberEmptyLength;
       my $shorthand = ($filled_columns+1)*4;
       $output =~ s/\$SpacePerColumn/$SpacePerColumn - $shorthand mm/g;
    }
    if ($how_many_columns==1) {  #start of block with width correction for one column table
     $output=~s/^\s*\\parbox{([^}]*)}/\\parbox{\\textwidth - 1 cm}/;
    }                            #end of block with width correction for one column table
  $Apache::londefdef::table[-1]{'output'} .= $header_of_table.$output.$Apache::londefdef::table[-1]{'hinc'}.'\end{tabular}\vskip 0 mm ';   $Apache::londefdef::table[-1]{'output'} .= $header_of_table.$output.$Apache::londefdef::table[-1]{'hinc'}.'\end{tabular}\vskip 0 mm ';
  if ($#Apache::londefdef::table > 0) {   if ($#Apache::londefdef::table > 0) {
     $inmemory = $Apache::londefdef::table[-1]{'output'};      $inmemory = $Apache::londefdef::table[-1]{'output'};
     pop @Apache::londefdef::table;      pop @Apache::londefdef::table;
     $Apache::londefdef::table[-1]{'rowdata'}[$Apache::londefdef::table[-1]{'row_number'}] .= $inmemory;      $Apache::londefdef::table[-1]{'rowdata'}[$Apache::londefdef::table[-1]{'row_number'}] .= $inmemory
  } else {   } else {
     $currentstring = $Apache::londefdef::table[-1]{'output'};      $currentstring = $Apache::londefdef::table[-1]{'output'};
     $currentstring =~ s/\\\\\s+\\\\/\\\\/g;       $currentstring =~ s/\\\\\s+\\\\/\\\\/g; 
     pop @Apache::londefdef::table;      pop @Apache::londefdef::table;
       if (-e $filename) {
    unlink $filename;
       }
  }   }
     }      }
    return $currentstring;     return $currentstring;
Line 1348  EDITBUTTON Line 1490  EDITBUTTON
               $currentstring = $token->[4];                     $currentstring = $token->[4];     
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  $Apache::londefdef::table[-1]{'row_number'}++;   $Apache::londefdef::table[-1]{'row_number'}++;
  my $alignchar = substr(&Apache::lonxml::get_param('align',$parstack,$safeeval),0,1);   my $alignchar = substr(&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1),0,1);
  if ($alignchar ne '') {   if ($alignchar ne '') {
     push @ {$Apache::londefdef::table[-1]{'rows'} }, $alignchar;      push @ {$Apache::londefdef::table[-1]{'rows'} }, $alignchar;
  } else {   } else {
Line 1356  EDITBUTTON Line 1498  EDITBUTTON
  }   }
  push ( @{ $Apache::londefdef::table[-1]{'rowdata'} }, $Apache::londefdef::table[-1]{'hinc'});   push ( @{ $Apache::londefdef::table[-1]{'rowdata'} }, $Apache::londefdef::table[-1]{'hinc'});
  $Apache::londefdef::table[-1]{'counter_columns'} = -1;   $Apache::londefdef::table[-1]{'counter_columns'} = -1;
  $Apache::londefdef::table[-1]{'length'} = ''; #just added   $Apache::londefdef::table[-1]{'length'} = ''; 
   
     }       } 
    return $currentstring;     return $currentstring;
  }           }        
Line 1367  EDITBUTTON Line 1508  EDITBUTTON
             if ($target eq 'web') {              if ($target eq 'web') {
  $currentstring = $token->[2];        $currentstring = $token->[2];     
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
 # $currentstring .= ' START ROW '. $Apache::londefdef::table[-1]{'rowdata'}[$Apache::londefdef::table[-1]{'row_number'}].' END ROW ';   push @{ $Apache::londefdef::table[-1]{'lengthrow'} },$Apache::londefdef::table[-1]{'length'};
   
     }      }
    return $currentstring;     return $currentstring;
  }   }
Line 1378  EDITBUTTON Line 1520  EDITBUTTON
             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),0,1);   my $what_to_push = substr(&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1),0,1);
  if ($what_to_push eq '') {   if ($what_to_push eq '') {
     $what_to_push = substr($Apache::londefdef::table[-1]{'rows'}[0],0,1);;      $what_to_push = substr($Apache::londefdef::table[-1]{'rows'}[0],0,1);;
  }   }
     push @{ $Apache::londefdef::table[-1]{'columns'} }, $what_to_push;      push @{ $Apache::londefdef::table[-1]{'columns'} }, $what_to_push;
  $Apache::londefdef::table[-1]{'counter_columns'}++;   $Apache::londefdef::table[-1]{'counter_columns'}++;
  &Apache::lonxml::startredirection();   &Apache::lonxml::startredirection();
 ;  
     }       } 
    return $currentstring;     return $currentstring;
  }           }        
         sub end_td {          sub end_td {
     my ($target,$token) = @_;      my ($target,$token) = @_;
             my $currentstring = '';              my $currentstring = '';
               my $tempolen = '';
             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'};   my $current_row = $Apache::londefdef::table[-1]{'row_number'};
  my $data=&Apache::lonxml::endredirection();   my $data=&Apache::lonxml::endredirection();
  if ($data=~m/width\s*=\s*(\d+\.*\d*\s*(mm|cm))/) {                 #just added   if ($data=~m/width\s*=\s*(\d+\.?\d*\s*(mm|cm|in|pc|pt))/) {                 
                     $Apache::londefdef::table[-1]{'length'} .= $1.',';             #just added                      $Apache::londefdef::table[-1]{'length'} .= $1.',';
  }                                                                  #just added      $tempolen = $1;         
  @{ $Apache::londefdef::table[-1]{'rowdata'} }[$current_row] .= '\parbox{'.$1.'}{'.$data.'} '.$Apache::londefdef::table[-1]{'vinc'};   } else {
       if (length($data)<5) {
    $Apache::londefdef::table[-1]{'length'} .= '0 mm,';
    $tempolen = '6 mm';
       } else {
    $Apache::londefdef::table[-1]{'length'} .= '0 mm,';
    $tempolen = 'TOBECHANGEDONNUMBER';
       }
                   }                                        
    @{ $Apache::londefdef::table[-1]{'rowdata'} }[$current_row] .= '\parbox{'.$tempolen.'}{'.$data.'} '.$Apache::londefdef::table[-1]{'vinc'};
     }      }
    return $currentstring;     return $currentstring;
  }   }
Line 1411  EDITBUTTON Line 1562  EDITBUTTON
             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),0,1);   my $what_to_push = substr(&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1),0,1);
  if ($what_to_push eq '') {   if ($what_to_push eq '') {
     $what_to_push = substr($Apache::londefdef::table[-1]{'rows'}[0],0,1);;      $what_to_push = substr($Apache::londefdef::table[-1]{'rows'}[0],0,1);;
  }   }
Line 1430  EDITBUTTON Line 1581  EDITBUTTON
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  my $current_row = $Apache::londefdef::table[-1]{'row_number'};   my $current_row = $Apache::londefdef::table[-1]{'row_number'};
  my $data=&Apache::lonxml::endredirection();   my $data=&Apache::lonxml::endredirection();
  if ($data=~m/width\s*=\s*(\d+\.*\d*\s*(mm|cm))/) {                 #just added   if ($data=~m/width\s*=\s*(\d+\.*\d*\s*(mm|cm))/) {                 
                     $Apache::londefdef::table[-1]{'length'} .= $1.',';             #just added                      $Apache::londefdef::table[-1]{'length'} .= $1.',';             
  }                                                                  #just added   } else {
       $Apache::londefdef::table[-1]{'length'} .= '0 mm,'; 
                   }                                                           
  @{ $Apache::londefdef::table[-1]{'rowdata'} }[$current_row] .= '\parbox{'.$1.'}{\textbf{'.$data.'}} '.$Apache::londefdef::table[-1]{'vinc'};   @{ $Apache::londefdef::table[-1]{'rowdata'} }[$current_row] .= '\parbox{'.$1.'}{\textbf{'.$data.'}} '.$Apache::londefdef::table[-1]{'vinc'};
     }      }
    return $currentstring;     return $currentstring;
Line 1440  EDITBUTTON Line 1593  EDITBUTTON
 #-- <img> tag  #-- <img> tag
         sub start_img {          sub start_img {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
             $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=      my $src = &Apache::lonxml::get_param('src',$parstack,$safeeval,
                                         $token->[2]->{'src'};   undef,1);
               $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=$src;
             my $currentstring = '';              my $currentstring = '';
     my $width_param = '';      my $width_param = '';
     my $height_param = '';      my $height_param = '';
     my $scaling = .3;      my $scaling = .3;
   
     if ($target eq 'web') {      if ($target eq 'web') {
               $currentstring = $token->[4];                     if ($ENV{'browser.imagesuppress'} ne 'on') {
                    $currentstring = $token->[4];
         } else {
     my $alttag= &Apache::lonxml::get_param
                                  ('alt',$parstack,$safeeval,undef,1);
                     unless ($alttag) {
       $alttag=&Apache::lonmeta::alttag
                                      ($Apache::lonxml::pwd[-1],$src);
                     }
                     $currentstring='[IMAGE: '.$alttag.']';
         }
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
       my $src = &Apache::lonxml::get_param('src',$parstack,$safeeval);        $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
       $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);       &image_replication($src);
               my $image = Image::Magick->new;  
               my $current_figure = $image->Read($src);                #if original gif/jpg/png file exist do following:
               $width_param = $image->Get('width') * $scaling;;                if (-e $src) {          
       $height_param = $image->Get('height') * $scaling;;                    #defines the default size of image
       undef $image;    my $image = Image::Magick->new;
       my $epssrc = $src;    my $current_figure = $image->Read($src);
       $epssrc =~ s/(\.gif|\.jpg)$/\.eps/i;    $width_param = $image->Get('width') * $scaling;;
       if (not -e $epssrc) {    $height_param = $image->Get('height') * $scaling;;
   my $localfile = $epssrc;    undef $image;
   $localfile =~ s/.*(\/res)/$1/;    #do we have any specified size of the picture?
     my $TeXwidth = &Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval);
     my $TeXheight = &Apache::lonxml::get_param('TeXheight',$parstack,$safeeval);
     my $width = &Apache::lonxml::get_param('width',$parstack,$safeeval,
                                                            undef,1);
     if ($TeXwidth ne '') {  
         if ($TeXwidth=~/(\d+)\s*\%/) {
     $width_param = $1*$ENV{'form.textwidth'}/100;
         } else { 
     $width_param = $TeXwidth;
         }
     } elsif ($TeXheight ne '') {
     $width_param = $TeXheight/$height_param*$width_param;
     } elsif ($width ne '') {
         $width_param = $width*$scaling;      
     }
   my $file;    my $file;
   my $path;    my $path;
   if ($localfile =~ m!(.*)/([^/]*)$!) {    if ($src =~ m!(.*)/([^/]*)$!) {
       $file = $2;        $file = $2; 
       $path = $1.'/';         $path = $1.'/'; 
   }    } 
   my $signal_eps = 0;    my $newsrc = $src;
   my @content_directory = &Apache::lonnet::dirlist($path);    $newsrc =~ s/\.(gif|jpg|png)$/.eps/i;
   for (my $iy=0;$iy<=$#content_directory;$iy++) {    $file=~s/\.(gif|jpg|png)$/.eps/i;
       my @tempo_array = split(/&/,$content_directory[$iy]);    #where can we find the picture?
       $content_directory[$iy] = $tempo_array[0];    if (-e $newsrc) {
       if ($file eq $tempo_array[0]) {                        #eps counterpart for image exist 
   $signal_eps = 1;        if ($path) {
   last;    $currentstring .= '\vskip 1 mm \noindent\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
       }        }
   }  
   if ($signal_eps) {  
       my $eps_file = &Apache::lonnet::getfile($localfile);  
   } else {    } else {
       $localfile = $src;                        #there is no eps counterpart for image - check for ps one
       $localfile =~ s/.*(\/res)/$1/;        $newsrc =~ s/\.eps$/\.ps/;
       my $as = &Apache::lonnet::getfile($src);              if (-e $newsrc) {
   }    #ps counterpart for image exist 
       }    $file =~ s/\.eps$/\.ps/;
       my $file;    if ($path) {
       my $path;        $currentstring .= '\vskip 1 mm \noindent\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
               if ($src =~ m!(.*)/([^/]*)$!) {    }
   $file = $2;        } else {
   $path = $1.'/';     #there aren't eps or ps - so create eps 
       }    my $temp_file;
       my $newsrc = $src;    my $filename = "/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout.dat";
       $newsrc =~ s/(\.gif|\.jpg)$/\.eps/i;    $temp_file = Apache::File->new('>>'.$filename); 
       $file=~s/(\.gif|\.jpg)$/\.eps/i;    print $temp_file "$src\n";
               #do we have any specified size of the picture?    $currentstring .= '\vskip 1 mm \graphicspath{{/home/httpd/prtspool/}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
       my $TeXwidth = &Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval);         }
               my $TeXheight = &Apache::lonxml::get_param('TeXheight',$parstack,$safeeval);   
       my $width = &Apache::lonxml::get_param('width',$parstack,$safeeval);  
       if ($TeXwidth ne '') {   
   $width_param = $TeXwidth;   
       } elsif ($TeXheight ne '') {   
   $width_param = $TeXheight/$height_param*$width_param;  
       } elsif ($width ne '') {  
   $width_param = $width*$scaling;        
       }  
               #where can we find the picture?  
       if (-e $newsrc) {  
   if ($path) {  
       $currentstring .= '\noindent\graphicspath{{'.$path.'}}\fbox{\includegraphics[width='.$width_param.' mm]{'.$file.'}} ';  
   }    }
       } else {        } else {
   my $temp_file;    #original image file doesn't exist so check the alt attribute
   my $filename = "/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout.dat";    my $alt = 
   $temp_file = Apache::File->new('>>'.$filename);                    &Apache::lonxml::get_param('alt',$parstack,$safeeval,undef,1);
   print $temp_file "$src\n";                    unless ($alt) {
   $currentstring .= '\graphicspath{{/home/httpd/prtspool/}}\fbox{\includegraphics[width='.$width_param.' mm]{'.$file.'}} ';      $alt=&Apache::lonmeta::alttag
                                      ($Apache::lonxml::pwd[-1],$src);
                     }
   
                     if ($alt) {
         $currentstring .= ' '.$alt.' ';
     } else {
                        #<allow> tag will care about replication 
     }
       }        }
     }      }
     return $currentstring;      return $currentstring;
  }   }
   
         sub end_img {          sub end_img {
     my ($target,$token) = @_;      my ($target,$token) = @_;
             my $currentstring = '';              my $currentstring = '';
Line 1534  EDITBUTTON Line 1706  EDITBUTTON
 #-- <applet> tag  #-- <applet> tag
   
         sub start_applet {          sub start_applet {
     my ($target,$token) = @_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
               $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=     
                                         $token->[2]->{'code'};      my $code=&Apache::lonxml::get_param
               $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=                                   ('code',$parstack,$safeeval,undef,1);
                                         $token->[2]->{'archive'};              $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=$code;
   
       my $archive=&Apache::lonxml::get_param
                                    ('archive',$parstack,$safeeval,undef,1);
               $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=$archive;
   
             my $currentstring = '';              my $currentstring = '';
             if ($target eq 'web') {              if ($target eq 'web') {
               $currentstring = $token->[4];                if ($ENV{'browser.appletsuppress'} ne 'on') {
                    $currentstring = $token->[4];
         } else {
     my $alttag= &Apache::lonxml::get_param
                                  ('alt',$parstack,$safeeval,undef,1);
                     unless ($alttag) {
                        $alttag=&Apache::lonmeta::alttag($Apache::lonxml::pwd[-1],
                                                         $code);
                     }
                     $currentstring='[APPLET: '.$alttag.']';
         }
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
               $currentstring = " \\begin{figure} ";                $currentstring = " \\begin{figure} ";
     }       } 
    return $currentstring;     return $currentstring;
  }   }
   
 sub end_applet {  sub end_applet {
     my ($target,$token) = @_;      my ($target,$token) = @_;
     my $currentstring = '';      my $currentstring = '';
Line 1561  sub end_applet { Line 1749  sub end_applet {
 #-- <embed> tag  #-- <embed> tag
   
 sub start_embed {      sub start_embed {    
     my ($target,$token) = @_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
     $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=      my $src=&Apache::lonxml::get_param('src',$parstack,$safeeval,undef,1);
  $token->[2]->{'src'};      $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=$src;
     my $currentstring = '';      my $currentstring = '';
     if ($target eq 'web') {      if ($target eq 'web') {
  $currentstring = $token->[4];         if ($ENV{'browser.embedsuppress'} ne 'on') {
             $currentstring = $token->[4];
          } else {
     my $alttag=&Apache::lonxml::get_param
                                  ('alt',$parstack,$safeeval,undef,1);
             unless ($alttag) {
                $alttag=&Apache::lonmeta::alttag($Apache::lonxml::pwd[-1],$src);
             }
             $currentstring='[EMBED: '.$alttag.']';
         }
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  $currentstring = " \\begin{figure} ";     $currentstring = " \\begin{figure} ";  
     }       } 
     return $currentstring;      return $currentstring;
 }  }
   
         sub end_embed {          sub end_embed {
     my ($target,$token) = @_;      my ($target,$token) = @_;
             my $currentstring = '';              my $currentstring = '';
Line 1586  sub start_embed { Line 1784  sub start_embed {
 #-- <param> tag  #-- <param> tag
   
         sub start_param {          sub start_param {
     my ($target,$token) = @_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
     if ($token->[2]->{'name'} eq 'cabbase') {      if (&Apache::lonxml::get_param
                   ('name',$parstack,$safeeval,undef,1)=~/^cabbase$/i) {
                       $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=                        $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=
      $token->[2]->{'value'};   &Apache::lonxml::get_param
                                  ('value',$parstack,$safeeval,undef,1);
             }                 }   
             $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=                 $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=   
                                         $token->[2]->{'src'};                                        &Apache::lonxml::get_param
                                  ('src',$parstack,$safeeval,undef,1);
             my $currentstring = '';              my $currentstring = '';
             if ($target eq 'web') {              if ($target eq 'web') {
               $currentstring = $token->[4];                     $currentstring = $token->[4];     
Line 1611  sub start_embed { Line 1812  sub start_embed {
     }       } 
    return $currentstring;     return $currentstring;
  }   }
   
 #-- <allow> tag  #-- <allow> tag
   sub start_allow {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
       my $src = &Apache::lonxml::get_param('src',$parstack,$safeeval,undef,1);
       $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
       $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=$src;
       &image_replication($src);
       my $result;
       if ($target eq 'edit') {
    $result .=&Apache::edit::tag_start($target,$token);
    $result .=&Apache::edit::text_arg('File Spec:','src',$token,70);
    $result .=&Apache::edit::end_row();#.&Apache::edit::start_spanning_row();
       } elsif ($target eq 'modified') {
    my $constructtag=&Apache::edit::get_new_args($token,$parstack,
        $safeeval,'src');
    if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); }
       }
       return $result;
   }
   
         sub start_allow {  sub end_allow {
     my ($target,$token) = @_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
       if ( $target eq 'edit') { return (&Apache::edit::end_table()); }
             $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=         return '';
                                         $token->[2]->{'src'};  }
   
    return '';  
  }  
         sub end_allow {  
    return '';  
  }  
 #-- Frames  #-- Frames
  sub start_frameset {   sub start_frameset {
   my ($target,$token) = @_;    my ($target,$token) = @_;
Line 1632  sub start_embed { Line 1844  sub start_embed {
   if ($target eq 'web') {     if ($target eq 'web') { 
     if (!$Apache::lonxml::registered) {      if (!$Apache::lonxml::registered) {
       $currentstring.='<head>'.        $currentstring.='<head>'.
   &Apache::lonxml::registerurl(undef,$target).'</head>';    &Apache::lonmenu::registerurl(undef,$target).'</head>';
     }      }
     $currentstring .= $token->[4];      $currentstring .= $token->[4];
   }    }
Line 1672  sub start_embed { Line 1884  sub start_embed {
     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') {
  my $display = &Apache::lonxml::get_param('display',$parstack,$safeeval);   my $display = &Apache::lonxml::get_param('display',$parstack,$safeeval,undef,1);
        $currentstring .= '<b>'.$display.'</b>';;         $currentstring .= '<b>'.$display.'</b>';;
     }      }
            return $currentstring;             return $currentstring;
Line 1690  sub start_embed { Line 1902  sub start_embed {
     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') {
  my $display = &Apache::lonxml::get_param('display',$parstack,$safeeval);   my $display = &Apache::lonxml::get_param('display',$parstack,$safeeval,undef,1);
        $currentstring .= '<b>'.$display.'</b>';;         $currentstring .= '<b>'.$display.'</b>';;
     }      }
            return $currentstring;             return $currentstring;
Line 1708  sub start_embed { Line 1920  sub start_embed {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
             my $currentstring = '';              my $currentstring = '';
             if ($target eq 'tex') {              if ($target eq 'tex') {
  my $howmuch = &Apache::lonxml::get_param('heigth',$parstack,$safeeval);   my $howmuch = &Apache::lonxml::get_param('heigth',$parstack,$safeeval,undef,1);
  $currentstring .= '\vskip '.$howmuch.' ';   $currentstring .= '\vskip '.$howmuch.' ';
     }      }
            return $currentstring;             return $currentstring;
Line 1721  sub start_embed { Line 1933  sub start_embed {
     }      }
            return $currentstring;             return $currentstring;
  }   }
   #-- <abbr> tag
         sub start_abbr {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_abbr {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <acronym> tag
         sub start_acronym {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_acronym {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <area> tag
         sub start_area {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_area {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <base> tag
         sub start_base {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_base {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <bdo> tag
         sub start_bdo {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_bdo {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <bgsound> tag
         sub start_bgsound {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_bgsound {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <blink> tag
         sub start_blink {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_blink {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <blockquote> tag
         sub start_blockquote {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_blockquote {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <button> tag
         sub start_button {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_button {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <caption> tag
         sub start_caption {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_caption {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <col> tag
         sub start_col {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_col {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <colgroup> tag
         sub start_colgroup {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_colgroup {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <del> tag
         sub start_del {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_del {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <fieldset> tag
         sub start_fieldset {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_fieldset {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <frame> tag
         sub start_frame {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_frame {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <iframe> tag
         sub start_iframe {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_iframe {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <ins> tag
         sub start_ins {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_ins {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <isindex> tag
         sub start_isindex {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_isindex {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <keygen> tag
         sub start_keygen {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_keygen {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <label> tag
         sub start_label {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_label {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <layer> tag
         sub start_layer {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_layer {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <legend> tag
         sub start_legend {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_legend {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <link> tag
         sub start_link {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_link {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <marquee> tag
         sub start_marquee {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_marquee {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <malticol> tag
         sub start_malticol {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_malticol {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <nobr> tag
         sub start_nobr {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_nobr {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <noembed> tag
         sub start_noembed {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_noembed {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <noframes> tag
         sub start_noframes {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_noframes {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <nolayer> tag
         sub start_nolayer {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_nolayer {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <noscript> tag
         sub start_noscript {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_noscript {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <object> tag
         sub start_object {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_object {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <optgroup> tag
         sub start_optgroup {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_optgroup {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <samp> tag
         sub start_samp {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_samp {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <server> tag
         sub start_server {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_server {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <spacer> tag
         sub start_spacer {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_spacer {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <span> tag
         sub start_span {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_span {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <tbody> tag
         sub start_tbody {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_tbody {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <tfoot> tag
         sub start_tfoot {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_tfoot {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <thead> tag
         sub start_thead {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_thead {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <var> tag
         sub start_var {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_var {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   #-- <wbr> tag
         sub start_wbr {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[4];     
       } 
      return $currentstring;
    }
           sub end_wbr {
       my ($target,$token) = @_;
               my $currentstring = '';
               if ($target eq 'web') {
                 $currentstring = $token->[2];    
               } 
      return $currentstring;
    }
   
   sub image_replication {
       my $src = shift;
       if (not -e $src) {
    #replicates image itself
    &Apache::lonnet::repcopy($src);
    #replicates eps or ps 
    my $newsrc = $src;
    $newsrc =~ s/\.(gif|jpg|jpeg|png)$/.eps/i;
    if (not -e $newsrc) {
              if (&Apache::lonnet::repcopy($newsrc) ne 'OK') {
          $newsrc =~ s/\.eps$/\.ps/;
          &Apache::lonnet::repcopy($newsrc);
      }
    }
       }
       return '';
   }
   
 1;  1;
 __END__  __END__

Removed from v.1.77  
changed lines
  Added in v.1.119


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.