Diff for /loncom/xml/lonxml.pm between versions 1.1 and 1.5

version 1.1, 2000/06/19 15:52:29 version 1.5, 2000/06/27 20:33:54
Line 1 Line 1
 package Apache::lonxml;  # The LearningOnline Network with CAPA
   # XML Parser Module 
   #
   # last modified 06/26/00 by Alexander Sakharuk
   
   package Apache::lonxml; 
   
 use strict;  use strict;
 use HTML::TokeParser;  use HTML::TokeParser;
 use Safe;  use Safe;
 use Apache::Constants qw(:common);  use Apache::style;
 use Apache::lontexconvert;  use Apache::lontexconvert;
   use Apache::londefdef;
   #==================================================   Main subroutine: xmlparse  
 #=======================================================   Main subroutine: xmlparse    
   
 sub xmlparse {  sub xmlparse {
   
     my ($target,$content_file_string,%style_for_target) = @_;   my ($target,$content_file_string,%style_for_target) = @_;
     my $pars = HTML::TokeParser->new(\$content_file_string);   my $pars = HTML::TokeParser->new(\$content_file_string);
     my $currentstring = '';   my $currentstring = '';
     my $finaloutput = '';    my $finaloutput = ''; 
     my $newarg = '';   my $newarg = '';
     my $tempostring = '';   my $tempostring = '';
     my $tempocont = '';   my $tempocont = '';
     my $safeeval = new Safe;   my $safeeval = new Safe;
   
 #------------------------- Redefinition of the target in the case of compound target  
     ($target, my @tenta) = split('&&',$target);  
 #------------------------------ Stack definition (in stack we have all current tags)  
   
     my @stack = ();   
     my @parstack = ();  
   
 #------------------------------------------ Parse input string (content_file_string)  #-------------------- Redefinition of the target in the case of compound target
    
     my $token;  
   
     while ($token = $pars->get_token) {  
   if ($token->[0] eq 'T') {  
     $finaloutput .= $token->[1];  
             $tempocont .= $token->[1];  
  } elsif ($token->[0] eq 'S') {  
 #------------------------------------------------------------------ add tag to stack      
                push (@stack,$token->[1]);  
 #---------------------------------------------- add parameters list to another stack  
        map {$tempostring .= "$_=$token->[2]->{$_},"} @{$token->[3]};  
                push (@parstack,$tempostring);  
                $tempostring = '';  
                $tempocont = '';   
   
                if (exists $style_for_target{$token->[1]}) {   
   
 #--------------------------------------------------------- use style file definition   ($target, my @tenta) = split('&&',$target);
   
                    $newarg = $style_for_target{$token->[1]};  #------------------------- Stack definition (in stack we have all current tags)
   
                    if (index($newarg,'script') != -1 ) {   my @stack = (); 
                     my $pat = HTML::TokeParser->new(\$newarg);   my @parstack = ();
                     my $tokenpat;  
                     my $partstring = '';  
                     my $oustring = '';  
                     my $outputstring;  
   
                     while  ($tokenpat = $pat->get_token) {  #------------------------------------- Parse input string (content_file_string)
  if ($tokenpat->[0] eq 'T') {   
     $oustring .= $tokenpat->[1];   my $token;
  } elsif ($tokenpat->[0] eq 'S') {   
                             if ($tokenpat->[1] eq 'script') {   while ($token = $pars->get_token) {
                                while  ($tokenpat = $pat->get_token and $tokenpat->[1] ne 'script') {     if ($token->[0] eq 'T') {
                                     if ($tokenpat->[0] eq 'S')  {       $finaloutput .= $token->[1];
  $partstring .=  $tokenpat->[4];       $tempocont .= $token->[1];
     } elsif ($tokenpat->[0] eq 'T') {     } elsif ($token->[0] eq 'S') {
                                         $partstring .=  $tokenpat->[1];  #------------------------------------------------------------- add tag to stack    
     } elsif ($tokenpat->[0] eq 'E') {       push (@stack,$token->[1]);
                                         $partstring .=  $tokenpat->[2];  #----------------------------------------- add parameters list to another stack
                                     }       map {$tempostring .= "$_=$token->[2]->{$_},"} @{$token->[3]};
        }       push (@parstack,$tempostring);
              $tempostring = '';
                                 map {$partstring =~ s/\$$_/$token->[2]->{$_}/g; } @{$token->[3]};       
                                       if (exists $style_for_target{$token->[1]}) { 
                                 &run($partstring,$safeeval);         
                                 $partstring = '';  #---------------------------------------------------- use style file definition
     } elsif ($tokenpat->[1] eq 'evaluate') {         
  $outputstring = &evaluate($tokenpat->[2]{expression},$safeeval);         $newarg = $style_for_target{$token->[1]};
                                    $oustring .=  $outputstring;         
     } else {         if (index($newarg,'script') != -1 ) {
                                    $oustring .= $tokenpat->[4];    my $pat = HTML::TokeParser->new(\$newarg);
     }   my $tokenpat;
  } elsif ($tokenpat->[0] eq 'E' and $tokenpat->[1] ne 'evaluate') {   my $partstring = '';
                              $oustring .= $tokenpat->[1];       my $oustring = '';
  }   my $outputstring;
     }    
     $newarg =  $oustring;   while  ($tokenpat = $pat->get_token) {
                    } else {     if ($tokenpat->[0] eq 'T') {
                        map {$newarg =~ s/\$$_/$token->[2]->{$_}/g; } @{$token->[3]};       $oustring .= $tokenpat->[1];
            }     } elsif ($tokenpat->[0] eq 'S') {
    $finaloutput .= $newarg;       if ($tokenpat->[1] eq 'script') {
        } else {         while  ($tokenpat = $pat->get_token and $tokenpat->[1] ne 'script') {
 #----------------------------------------------------- use default definition of tag   if ($tokenpat->[0] eq 'S')  {
                    my $sub="start_$token->[1]";     $partstring .=  $tokenpat->[4];
             } elsif ($tokenpat->[0] eq 'T') {
                    {     $partstring .=  $tokenpat->[1];
        no strict 'refs';   } elsif ($tokenpat->[0] eq 'E') {
                        if (defined (&$sub)) {     $partstring .=  $tokenpat->[2];
                          $currentstring = &$sub($target,$token,\@parstack);   }
                          $finaloutput .= $currentstring;  
                          $currentstring = '';  
        } else {  
    $finaloutput .= $token->[4];  
        }  
                        use strict 'refs';      
    }  
        }                
   } elsif ($token->[0] eq 'E')  {  
                pop @stack;   
                unless (exists $style_for_target{$token->[1]}) {  
                      my $sub="end_$token->[1]";  
                        {  
          no strict 'refs';  
                            if (defined (&$sub)) {  
      $currentstring = &$sub($target,$token,\@parstack);  
                              $finaloutput .= $currentstring;  
                              $currentstring = '';  
            } else {  
                              $finaloutput .= $token->[4];  
            }  
  use strict 'refs';  
                }  
        }  
 #------------------------------------------------------- end tag from the style file  
                if (exists $style_for_target{'/'."$token->[1]"}) {  
                    $newarg = $style_for_target{'/'."$token->[1]"};  
                    my @very_temp = split(',',@parstack[$#parstack]);  
                    map {my @ret= split('=',$_); $newarg =~ s/\$$ret[0]/$ret[1]/g; } @very_temp;  
    $finaloutput .= $newarg;   
        }         }
                pop @parstack;         
  }         map {$partstring =~ s/\$$_/$token->[2]->{$_}/g; } @{$token->[3]};
     }         
     return $finaloutput;         &run($partstring,$safeeval);
 }         
          $partstring = '';
        } elsif ($tokenpat->[1] eq 'evaluate') {       
 #================================================================== style subroutine          $outputstring = &evaluate($tokenpat->[2]{expression},$safeeval);
          $oustring .=  $outputstring;
 sub styleparser {  
   
     my ($target,$content_style_string) = @_;  
   
 #------------------------------------------------ target redefinition (if necessary)   
       
     my @target_string = '';  
     my $element;  
      
     ($element,@target_string) = split ('&&',$target);  
   
      map {$content_style_string =~ s/\<(.*)$_\>/\<$1$element\>/g; } @target_string;  
      
     $target = $element;  
      
 #------------------------------------------------- create a table for defined target  
 #---------------------------------------------- from the information from Style File  
   
     my @value_style = ();  
     my $current_key = '';  
     my $current_value = '';  
   
     my $pstyle = HTML::TokeParser->new(\$content_style_string);  
   
     my $stoken;  
   
       while ($stoken = $pstyle->get_token) {  
 #---------------------------------------------------------- start for tag definition  
   if ($stoken->[0] eq 'S' and $stoken->[1] eq 'definetag') {  
 #------------------------------------------------------------------- new key in hash  
      $current_key = $stoken->[2]{name};  
              if ($target eq 'meta') {  
 #-------------------------------------------------- reserved for the metadate output  
   
   
      } else {       } else {
 #-------------------------------------------------------------------- outtext output         $oustring .= $tokenpat->[4]; 
  while ($stoken = $pstyle->get_token and $stoken->[1] ne 'outtext') {       }
  }     } elsif ($tokenpat->[0] eq 'E' and $tokenpat->[1] ne 'evaluate') {
  while ($stoken = $pstyle->get_token and $stoken->[0] ne 'S') {       $oustring .= $tokenpat->[1];    
      $current_value .= $stoken->[1];     }
  }   }
                  while ($stoken->[1] ne 'definetag') {   $newarg =  $oustring;
                       if ($stoken->[0] eq 'S' and $stoken->[1] eq $target) {         } else {
   while ($stoken = $pstyle->get_token) {   map {$newarg =~ s/\$$_/$token->[2]->{$_}/g; } @{$token->[3]};
                if ($stoken->[1] ne $target) {         }
          if ($stoken->[0] eq 'S') {         $finaloutput .= $newarg;
            $current_value .= $stoken->[4];       } else {
                  }          # use default definition of tag
                                  if ($stoken->[0] eq 'E') {         my $sub="start_$token->[1]";
                                    $current_value .= $stoken->[2];         {
                  }    no strict 'refs';
                                  if ($stoken->[0] eq 'T') {   if (defined (&$sub)) {
                                    $current_value .= $stoken->[1];      $currentstring = &$sub($target,$token,\@parstack);
                  }                      $finaloutput .= $currentstring;
                }  else {           $currentstring = '';
               last;   } else {
                }     $finaloutput .= $token->[4];
   }   }
       } elsif ($stoken->[0] eq 'S' and $stoken->[1] ne $target) {   use strict 'refs';    
              while ($stoken = $pstyle->get_token and $stoken->[0] ne 'E') {         }
              }       }              
       }     } elsif ($token->[0] eq 'E')  {
        # Put here check for correct final tag (to avoid existence of 
                       while ($stoken = $pstyle->get_token) {       # starting tag only)
                          if ($stoken->[0] eq 'T') {          
                              $current_value .= $stoken->[1];       pop @stack; 
  }        unless (exists $style_for_target{$token->[1]}) {
                          if ($stoken->[0] eq 'E') {         my $sub="end_$token->[1]";
    last;         {
  }    no strict 'refs';
                          if ($stoken->[0] eq 'S') {   if (defined(&$sub)) {
    last;     $currentstring = &$sub($target,$token,\@parstack);
  }     $finaloutput .= $currentstring;
       }          $currentstring = '';
        } else {
      $finaloutput .= $token->[4];
    }
    use strict 'refs';
          }
        }
        #---- end tag from the style file
        if (exists $style_for_target{'/'."$token->[1]"}) {
          $newarg = $style_for_target{'/'."$token->[1]"};
          if (index($newarg,'script') != -1 ) {
            my $pat = HTML::TokeParser->new(\$newarg);
            my $tokenpat;
            my $partstring = '';
            my $oustring = '';
            my $outputstring;
     
            while  ($tokenpat = $pat->get_token) {
      if ($tokenpat->[0] eq 'T') {
        $oustring .= $tokenpat->[1];
      } elsif ($tokenpat->[0] eq 'S') {
                if ($tokenpat->[1] eq 'script') {
                  while  ($tokenpat = $pat->get_token and $tokenpat->[1] ne 'script') {
    if ($tokenpat->[0] eq 'S')  {
      $partstring .=  $tokenpat->[4];
    } elsif ($tokenpat->[0] eq 'T') {
      $partstring .=  $tokenpat->[1];
    } elsif ($tokenpat->[0] eq 'E') {
      $partstring .=  $tokenpat->[2];
  }   }
          }
          
                  my @tempor_list = split(',',$parstack[$#parstack]);
                  my @te_kl = ();
                  my %tempor_hash = ();
                  map {(my $onete,my $twote) = split('=',$_); push (@te_kl,$onete); 
                       $tempor_hash{$onete} = $twote} @tempor_list;
                  map {$partstring =~ s/\$$_/$tempor_hash{$_}/g; } @te_kl; 
          
                  &run($partstring,$safeeval);
          
                  $partstring = '';
        } elsif ($tokenpat->[1] eq 'evaluate') {
          $outputstring = &evaluate($tokenpat->[2]{expression},$safeeval);
          $oustring .=  $outputstring;
        } else {
          $oustring .= $tokenpat->[4]; 
      }       }
          } elsif ($tokenpat->[0] eq 'E' and $tokenpat->[1] ne 'evaluate') {
   }                   $oustring .= $tokenpat->[1];    
                     push (@value_style,lc $current_key,$current_value);     }
                     $current_key = '';           }
                     $current_value = '';            $newarg =  $oustring;
          } else {
       }           my @very_temp = split(',',$parstack[$#parstack]);
              map {my @ret= split('=',$_); $newarg =~ s/\$$ret[0]/$ret[1]/g; } @very_temp;
     my %style_for_target = @value_style;         }
             
 #-------------------------------------------------------------------- check printing         $finaloutput .= $newarg; 
 #   while (($current_key,$current_value) = each %style_for_target) {       }
 #       print "$current_key => $current_value\n";       pop @parstack;
 #   }     }
    }
     return %style_for_target;   return $finaloutput;
     
 }  }
   
   
   
 #=============================================================== Subroutine definition  
 #--------------------------------------------------------------------------------- Run   
         sub evaluate {  
     my ($expression,$safeeval) = @_;  
             return $safeeval->reval($expression);  
         }  
   
         sub run {  
     my ($code,$safeeval) = @_;  
             $safeeval->reval($code);  
         }  
   
 #===================================================================== TAG SUBROUTINES  
 #----------------------------------------------------------------------------- <m> tag  
         sub start_m {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = "\$out = lontexconvert::converted(\$in = '\$'.\"";       
     } elsif ($target eq 'tex') {  
               $currentstring = "\$";  
             }  
    return $currentstring;  
  }  
         sub end_m {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = "\".'\$') ";      
             } elsif ($target eq 'tex') {  
               $currentstring = "\$";  
             }  
    return $currentstring;  
  }  
 #-------------------------------------------------------------------------- <html> tag      
       sub start_html {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[4];       
     }   
    return $currentstring;  
  }  
         sub end_html {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[2];      
             }   
    return $currentstring;  
  }  
 #-------------------------------------------------------------------------- <head> tag  
       sub start_head {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[4];       
     }   
    return $currentstring;  
  }  
         sub end_head {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[2];      
             }   
    return $currentstring;  
  }  
 #--------------------------------------------------------------------------- <map> tag  
       sub start_map {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[4];       
     }   
    return $currentstring;  
  }  
         sub end_map {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[2];      
             }   
    return $currentstring;  
  }  
 #------------------------------------------------------------------------ <applet> tag  
       sub start_applet {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[4];       
     }   
    return $currentstring;  
  }  
         sub end_applet {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[2];      
             }   
    return $currentstring;  
  }  
 #------------------------------------------------------------------------ <select> tag  
       sub start_select {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[4];       
     }   
    return $currentstring;  
  }  
         sub end_select {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[2];      
             }   
    return $currentstring;  
  }  
 #------------------------------------------------------------------------ <option> tag  
       sub start_option {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[4];       
     }   
    return $currentstring;  
  }  
         sub end_option {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[2];      
             }   
    return $currentstring;  
  }  
 #------------------------------------------------------------------------- <input> tag  
       sub start_input {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[4];       
     }   
    return $currentstring;  
  }  
         sub end_input {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[2];      
             }   
    return $currentstring;  
  }  
 #---------------------------------------------------------------------- <textarea> tag  
       sub start_textarea {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[4];       
     }   
    return $currentstring;  
  }  
         sub end_textarea {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[2];      
             }   
    return $currentstring;  
  }  
 #-------------------------------------------------------------------------- <form> tag  
       sub start_form {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[4];       
     }   
    return $currentstring;  
  }  
         sub end_form {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[2];      
             }   
    return $currentstring;  
  }  
 #------------------------------------------------------------------------- <title> tag  
       sub start_title {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[4];       
     }  
    return $currentstring;  
  }  
         sub end_title {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[2];      
             }   
    return $currentstring;  
  }  
 #-------------------------------------------------------------------------- <meta> tag  
       sub start_meta {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[4];       
     }  
    return $currentstring;  
  }  
         sub end_meta {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[2];      
             }   
    return $currentstring;  
  }  
 #-------------------------------------------------------------------------- <body> tag  
         sub start_body {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[4];       
     } elsif ($target eq 'tex') {  
               $currentstring = " \\begin{document} ";    
     }   
    return $currentstring;  
  }  
         sub end_body {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[2];       
     } elsif ($target eq 'tex') {  
               $currentstring = " \\end{document}";    
     }   
    return $currentstring;  
  }  
 #------------------------------------------------------------------------ <center> tag  
         sub start_center {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[4];       
     } elsif ($target eq 'tex') {  
               $currentstring = " \\begin{center} ";    
     }   
    return $currentstring;  
  }  
         sub end_center {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[2];       
     } elsif ($target eq 'tex') {  
               $currentstring = " \\end{center}";    
     }   
    return $currentstring;  
  }  
 #----------------------------------------------------------------------------- <b> tag  
         sub start_b {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[4];       
     } elsif ($target eq 'tex') {  
               $currentstring = " {\\bf ";    
     }   
    return $currentstring;  
  }  
         sub end_b {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[2];       
     } elsif ($target eq 'tex') {  
               $currentstring = "}";    
     }   
    return $currentstring;  
  }  
 #------------------------------------------------------------------------ <strong> tag  
         sub start_strong {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[4];       
     } elsif ($target eq 'tex') {  
               $currentstring = " {\\bf ";    
     }   
    return $currentstring;  
  }  
         sub end_strong {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
   
               $currentstring = $token->[2];       
     } elsif ($target eq 'tex') {  
               $currentstring = "}";    
     }   
    return $currentstring;  
  }  
 #---------------------------------------------------------------------------- <h1> tag  
         sub start_h1 {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[4];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "\\chapter{ ";  
     }   
            return $currentstring;  
  }  
         sub end_h1 {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[2];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "}";  
     }   
            return $currentstring;  
  }  
 #---------------------------------------------------------------------------- <h2> tag  
         sub start_h2 {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[4];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "\\section{ ";  
     }   
            return $currentstring;  
  }  
         sub end_h2 {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[2];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "}";  
     }   
            return $currentstring;  
  }  
 #---------------------------------------------------------------------------- <h3> tag  
         sub start_h3 {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[4];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "\\subsection{ ";  
     }   
            return $currentstring;  
  }  
         sub end_h3 {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[2];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "}";  
     }   
            return $currentstring;  
  }  
 #---------------------------------------------------------------------------- <h4> tag  
         sub start_h4 {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[4];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "\\subsubsection{ ";  
     }   
            return $currentstring;  
  }  
         sub end_h4 {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[2];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "}";  
     }   
            return $currentstring;  
  }  
 #---------------------------------------------------------------------------- <h5> tag  
         sub start_h5 {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[4];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "\\paragraph{ ";  
     }   
            return $currentstring;  
  }  
         sub end_h5 {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[2];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "}";  
     }   
            return $currentstring;  
  }  
 #---------------------------------------------------------------------------- <h6> tag  
         sub start_h6 {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[4];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "\\subparagraph{ ";  
     }   
            return $currentstring;  
  }  
         sub end_h6 {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[2];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "}";  
     }   
            return $currentstring;  
  }  
 #-------------------------------------------------------------------------- <cite> tag  
         sub start_cite {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[4];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "{ \\it ";  
     }   
            return $currentstring;  
  }  
         sub end_cite {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[2];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "}";  
     }   
            return $currentstring;  
  }  
 #----------------------------------------------------------------------------- <i> tag  
         sub start_i {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[4];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "{ \\it ";  
     }   
            return $currentstring;  
  }  
         sub end_i {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[2];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "}";  
     }   
            return $currentstring;  
  }  
 #----------------------------------------------------------------------- <address> tag  
         sub start_address {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[4];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "{ \\it ";  
     }   
            return $currentstring;  
  }  
         sub end_address {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[2];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "}";  
     }   
            return $currentstring;  
  }  
 #--------------------------------------------------------------------------- <dfn> tag  
         sub start_dfn {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[4];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "{ \\it ";  
     }   
            return $currentstring;  
  }  
         sub end_dfn {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[2];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "}";  
     }   
            return $currentstring;  
  }  
 #---------------------------------------------------------------------------- <tt> tag  
         sub start_tt {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[4];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "{ \\tt ";  
     }   
            return $currentstring;  
  }  
         sub end_tt {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[2];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "}";  
     }   
            return $currentstring;  
  }  
 #---------------------------------------------------------------------------- <kbd> tag  
         sub start_kbd {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[4];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "{ \\tt ";  
     }   
            return $currentstring;  
  }  
         sub end_kbd {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[2];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "}";  
     }   
            return $currentstring;  
  }  
 #-------------------------------------------------------------------------- <code> tag  
         sub start_code {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[4];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "{ \\tt ";  
     }   
            return $currentstring;  
  }  
         sub end_code {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[2];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "}";  
     }   
            return $currentstring;  
  }  
 #---------------------------------------------------------------------------- <em> tag  
         sub start_em {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[4];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "{ \\emph ";  
     }   
            return $currentstring;  
  }  
         sub end_em {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[2];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "}";  
     }   
            return $currentstring;  
  }  
 #----------------------------------------------------------------------------- <q> tag  
         sub start_q {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[4];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "{ \\emph ";  
     }   
            return $currentstring;  
  }  
         sub end_q {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[2];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "}";  
     }   
            return $currentstring;  
  }  
 #----------------------------------------------------------------------------- <p> tag  
         sub start_p {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[4];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "{\\par ";  
     }   
            return $currentstring;  
  }  
         sub end_p {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[2];  
     } elsif ($target eq 'tex') {  
         $currentstring .= " }";  
             }  
            return $currentstring;  
  }  
 #---------------------------------------------------------------------------- <br> tag  
         sub start_br {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[4];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "\\\\";  
     }   
            return $currentstring;  
  }  
         sub end_br {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[2];  
     }  
            return $currentstring;  
  }  
 #--------------------------------------------------------------------------- <big> tag  
         sub start_big {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[4];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "{\\large ";  
     }   
            return $currentstring;  
  }  
         sub end_big {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[2];  
     } elsif ($target eq 'tex') {  
         $currentstring .= " }";  
             }  
            return $currentstring;  
  }  
 #------------------------------------------------------------------------- <small> tag  
         sub start_small {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[4];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "{\\footnotesize ";  
     }   
            return $currentstring;  
  }  
         sub end_small {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[2];  
     } elsif ($target eq 'tex') {  
         $currentstring .= " }";  
             }  
            return $currentstring;  
  }  
 #---------------------------------------------------------------------- <basefont> tag  
       sub start_basefont {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[4];       
     }   
    return $currentstring;  
  }  
 #-------------------------------------------------------------------------- <font> tag  
          sub start_font {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[4];       
     }   
    return $currentstring;  
  }  
         sub end_font {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[2];      
             }   
    return $currentstring;  
  }   
 #------------------------------------------------------------------------ <strike> tag  
         sub start_strike {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[4];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "{\\underline ";  
     }   
            return $currentstring;  
  }  
         sub end_strike {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[2];  
     } elsif ($target eq 'tex') {  
         $currentstring .= " }";  
             }  
            return $currentstring;  
  }  
 #----------------------------------------------------------------------------- <s> tag  
         sub start_s {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[4];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "{\\underline ";  
     }   
            return $currentstring;  
  }  
         sub end_s {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[2];  
     } elsif ($target eq 'tex') {  
         $currentstring .= " }";  
             }  
            return $currentstring;  
  }  
 #--------------------------------------------------------------------------- <sub> tag  
         sub start_sub {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[4];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "\$_{ ";  
     }   
            return $currentstring;  
  }  
         sub end_sub {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[2];  
     } elsif ($target eq 'tex') {  
         $currentstring .= " }\$";  
             }  
            return $currentstring;  
  }  
 #--------------------------------------------------------------------------- <sup> tag  
         sub start_sup {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[4];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "\$^{ ";  
     }   
            return $currentstring;  
  }  
         sub end_sup {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[2];  
     } elsif ($target eq 'tex') {  
         $currentstring .= " }\$";  
             }  
            return $currentstring;  
  }  
 #---------------------------------------------------------------------------- <hr> tag  
         sub start_hr {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[4];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "\\hline ";  
     }   
            return $currentstring;  
  }  
 #----------------------------------------------------------------------------- <a> tag  
         sub start_a {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[4];  
     } elsif ($target eq 'tex') {  
     }  
            return $currentstring;  
  }  
         sub end_a {  
     my ($target,$token,$stackref) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[2];  
     } elsif ($target eq 'tex') {  
                 my  $tempor_var = $stackref->[$#$stackref];  
  if (index($tempor_var,'name') != -1 ) {  
     $tempor_var =~ s/name=([^,]*),/$1/g;  
         $currentstring .= " \\label{$tempor_var}";  
         } elsif (index($tempor_var,'href') != -1 ) {  
     $tempor_var =~ s/href=([^,]*),/$1/g;  
         $currentstring .= " \\ref{$tempor_var}";  
         }  
             }  
            return $currentstring;  
  }  
 #---------------------------------------------------------------------------- <li> tag  
         sub start_li {  
     my ($target,$token,$stackref) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[4];       
     } elsif ($target eq 'tex') {  
                 my  $tempor_var = $stackref->[$#$stackref-1];  
                 if (index($tempor_var,'circle') != -1 ) {  
           $currentstring .= " \\item[o] ";  
         } elsif (index($tempor_var,'square') != -1 ) {  
                $currentstring .= " \\item[$\Box$] ";  
         } else {  
     $currentstring .= " \\item ";  
         }    
     }   
    return $currentstring;  
  }  
         sub end_li {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[2];       
     }   
    return $currentstring;  
  }  
 #----------------------------------------------------------------------------- <u> tag  
         sub start_u {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[4];  
     } elsif ($target eq 'tex') {  
  $currentstring .= "{\\underline ";  
     }   
            return $currentstring;  
  }  
         sub end_u {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
        $currentstring .= $token->[2];  
     } elsif ($target eq 'tex') {  
         $currentstring .= " }";  
             }  
            return $currentstring;  
  }  
 #---------------------------------------------------------------------------- <ul> tag  
         sub start_ul {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[4];       
     } elsif ($target eq 'tex') {  
               $currentstring = " \\begin{itemize} ";    
     }   
    return $currentstring;  
  }  
         sub end_ul {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[2];       
     } elsif ($target eq 'tex') {  
               $currentstring = " \\end{itemize}";    
     }   
    return $currentstring;  
  }  
 #-------------------------------------------------------------------------- <menu> tag  
         sub start_menu {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[4];       
     } elsif ($target eq 'tex') {  
               $currentstring = " \\begin{itemize} ";    
     }   
    return $currentstring;  
  }  
         sub end_menu {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[2];       
     } elsif ($target eq 'tex') {  
               $currentstring = " \\end{itemize}";    
     }   
    return $currentstring;  
  }  
 #--------------------------------------------------------------------------- <dir> tag  
         sub start_dir {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[4];       
     } elsif ($target eq 'tex') {  
               $currentstring = " \\begin{itemize} ";    
     }   
    return $currentstring;  
  }  
         sub end_dir {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[2];       
     } elsif ($target eq 'tex') {  
               $currentstring = " \\end{itemize}";    
     }   
    return $currentstring;  
  }  
 #---------------------------------------------------------------------------- <ol> tag  
         sub start_ol {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[4];       
     } elsif ($target eq 'tex') {  
               $currentstring = " \\begin{enumerate} ";    
     }   
    return $currentstring;  
  }  
         sub end_ol {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[2];       
     } elsif ($target eq 'tex') {  
               $currentstring = " \\end{enumerate}";    
     }   
    return $currentstring;  
  }  
 #---------------------------------------------------------------------------- <dl> tag  
         sub start_dl {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[4];       
     } elsif ($target eq 'tex') {  
               $currentstring = " \\begin{description} ";    
     }   
    return $currentstring;  
  }  
         sub end_dl {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[2];       
     } elsif ($target eq 'tex') {  
               $currentstring = " \\end{description}";    
     }   
    return $currentstring;  
  }  
 #---------------------------------------------------------------------------- <dt> tag  
         sub start_dt {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[4];       
     } elsif ($target eq 'tex') {  
               $currentstring = "\\item[ ";    
     }   
    return $currentstring;  
  }  
         sub end_dt {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[2];      
             } elsif ($target eq 'tex') {  
               $currentstring = "]";    
     }   
    return $currentstring;  
  }  
 #---------------------------------------------------------------------------- <dd> tag  
         sub start_dd {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[4];       
     }   
    return $currentstring;  
  }  
         sub end_dd {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[2];      
             }   
    return $currentstring;  
  }  
 #------------------------------------------------------------------------- <table> tag  
         sub start_table {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[4];       
     } elsif ($target eq 'tex') {  
               $currentstring = " \\begin{tabular} ";    
     }   
    return $currentstring;  
  }  
         sub end_table {  
     my ($target,$token) = @_;  
             my $currentstring = '';  
             if ($target eq 'web') {  
               $currentstring = $token->[2];       
     } elsif ($target eq 'tex') {  
               $currentstring = " \\end{tabular}";    
     }   
    return $currentstring;  
  }  
   
 1;  1;
 __END__  __END__

Removed from v.1.1  
changed lines
  Added in v.1.5


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