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

version 1.1, 2000/06/19 15:52:29 version 1.2, 2000/06/23 20:40:06
Line 1 Line 1
 package Apache::lonxml;  # The LearningOnline Network with CAPA
   # Style Parser Module 
   #
   # last modified 06/23/00 by Alexander Sakharuk
   
   package Apache::lonstyleparser; 
   
 use strict;  use strict;
 use HTML::TokeParser;  use HTML::TokeParser;
 use Safe;  
 use Apache::Constants qw(:common);  
 use Apache::lontexconvert;  
   
   
 #=======================================================   Main subroutine: xmlparse    
   
 sub xmlparse {  
   
     my ($target,$content_file_string,%style_for_target) = @_;  
     my $pars = HTML::TokeParser->new(\$content_file_string);  
     my $currentstring = '';  
     my $finaloutput = '';   
     my $newarg = '';  
     my $tempostring = '';  
     my $tempocont = '';  
     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)  
    
     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  
   
                    $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];  
                                     }  
        }  
         
                                 map {$partstring =~ s/\$$_/$token->[2]->{$_}/g; } @{$token->[3]};  
                                  
                                 &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];      
  }  
     }  
     $newarg =  $oustring;  
                    } else {  
                        map {$newarg =~ s/\$$_/$token->[2]->{$_}/g; } @{$token->[3]};  
            }  
    $finaloutput .= $newarg;  
        } else {  
 #----------------------------------------------------- use default definition of tag  
                    my $sub="start_$token->[1]";  
            
                    {  
        no strict 'refs';  
                        if (defined (&$sub)) {  
                          $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;  
  }  
     }  
     return $finaloutput;  
 }  
   
   #============================================================= style subroutine 
 #================================================================== style subroutine   
   
 sub styleparser {  sub styleparser {
   
     my ($target,$content_style_string) = @_;    my ($target,$content_style_string) = @_;
   
 #------------------------------------------------ target redefinition (if necessary)   #------------------------------------------- target redefinition (if necessary) 
           
     my @target_string = '';    my @target_string = '';
     my $element;    my $element;
         
     ($element,@target_string) = split ('&&',$target);    ($element,@target_string) = split ('&&',$target);
   
      map {$content_style_string =~ s/\<(.*)$_\>/\<$1$element\>/g; } @target_string;    map {$content_style_string =~ s/\<(.*)$_\>/\<$1$element\>/g; } @target_string;
      
     $target = $element;  
         
 #------------------------------------------------- create a table for defined target    $target = $element;
 #---------------------------------------------- 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 {  
 #-------------------------------------------------------------------- outtext output  
  while ($stoken = $pstyle->get_token and $stoken->[1] ne 'outtext') {  
  }  
  while ($stoken = $pstyle->get_token and $stoken->[0] ne 'S') {  
      $current_value .= $stoken->[1];  
  }  
                  while ($stoken->[1] ne 'definetag') {  
                       if ($stoken->[0] eq 'S' and $stoken->[1] eq $target) {  
   while ($stoken = $pstyle->get_token) {  
                if ($stoken->[1] ne $target) {  
          if ($stoken->[0] eq 'S') {  
            $current_value .= $stoken->[4];  
                  }   
                                  if ($stoken->[0] eq 'E') {  
                                    $current_value .= $stoken->[2];  
                  }   
                                  if ($stoken->[0] eq 'T') {  
                                    $current_value .= $stoken->[1];   
                  }                   
                }  else {        
               last;  
                }  
   }  
       } elsif ($stoken->[0] eq 'S' and $stoken->[1] ne $target) {  
              while ($stoken = $pstyle->get_token and $stoken->[0] ne 'E') {  
              }  
       }  
   
                       while ($stoken = $pstyle->get_token) {  
                          if ($stoken->[0] eq 'T') {  
                              $current_value .= $stoken->[1];  
  }   
                          if ($stoken->[0] eq 'E') {  
    last;  
  }   
                          if ($stoken->[0] eq 'S') {  
    last;  
  }  
       }       
       
  }  
      }  
       
   }      
                     push (@value_style,lc $current_key,$current_value);  
                     $current_key = '';  
                     $current_value = '';           
   
       }  
     
     my %style_for_target = @value_style;  
         
 #-------------------------------------------------------------------- check printing  #-------------------------------------------- create a table for defined target
 #   while (($current_key,$current_value) = each %style_for_target) {  #----------------------------------------- from the information from Style File
 #       print "$current_key => $current_value\n";  
 #   }  
   
     return %style_for_target;  
     
 }  
   
   
   
 #=============================================================== Subroutine definition    my @value_style = ();
 #--------------------------------------------------------------------------------- Run     my $current_key = '';
         sub evaluate {    my $current_value = '';
     my ($expression,$safeeval) = @_;    my $stoken;
             return $safeeval->reval($expression);    my $flag;                  
     my $iele;
   
     my $pstyle = HTML::TokeParser->new(\$content_style_string);
   
     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};
       $flag = 0;
   #-------------------------------------------------------------- metadata output
       if ($target eq 'meta') {
        while ($stoken = $pstyle->get_token and $stoken->[1] ne 'definetag') { 
          if ($stoken->[0] eq 'S' and $stoken->[1] eq 'meta') {
           while ($stoken = $pstyle->get_token and $stoken->[1] ne 'meta') {
       $current_value .= $stoken->[1];
         }          }
          }
         sub run {       }
     my ($code,$safeeval) = @_;      } else {
             $safeeval->reval($code);  #--------------------------------------------------------------- outtext output
        while ($stoken = $pstyle->get_token and $stoken->[1] ne 'outtext') {
      if ($stoken->[1] eq 'definetag') {
        $flag = 1;
                last;
      }
         }
        if ($flag == 0) { 
          while ($stoken = $pstyle->get_token and $stoken->[0] ne 'S') {
       $current_value .= $stoken->[1];
          }
         while ($stoken->[1] ne 'definetag') {
          if ($stoken->[0] eq 'S' and $stoken->[1] eq $target) {
    while ($stoken = $pstyle->get_token) {
    if ($stoken->[1] ne $target) {
      if ($stoken->[0] eq 'S') {
          my $flagelem = 0;
                  for (my $i=$#value_style-1;$i>0;$i=$i-2) {
      if ($stoken->[1] eq $value_style[$i]) {
          $flagelem = 1;
                          $iele = $i+1;
                          last;
      }
          }
          if ($flagelem == 0) {
            $current_value .= $stoken->[4];
               } else {
      $current_value .= $value_style[$iele];
          }
      } 
              if ($stoken->[0] eq 'E') {
          my $flagelem = 0;
                  for (my $i=$#value_style-1;$i>0;$i=$i-2) {
      if ('/'.$stoken->[1] eq $value_style[$i]) {
          $flagelem = 1;
                          $iele = $i+1;
                          last;
      }
          }
          if ($flagelem == 0) {
                    $current_value .= $stoken->[2];
               } else {
      $current_value .= $value_style[$iele];
          }
      } 
              if ($stoken->[0] eq 'T') {
                $current_value .= $stoken->[1]; 
      }                 
    }  else {      
    last;
    }
         }          }
          } elsif ($stoken->[0] eq 'S' and $stoken->[1] ne $target) {
 #===================================================================== TAG SUBROUTINES    my $tempotempo = $stoken->[1];
 #----------------------------------------------------------------------------- <m> tag     while ($stoken = $pstyle->get_token and $stoken->[1] ne $tempotempo) {
         sub start_m {     }
     my ($target,$token) = @_;         }
             my $currentstring = '';  
             if ($target eq 'web') {         while ($stoken = $pstyle->get_token) {
               $currentstring = "\$out = lontexconvert::converted(\$in = '\$'.\"";               if ($stoken->[0] eq 'T') {
     } elsif ($target eq 'tex') {            $current_value .= $stoken->[1];
               $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          if ($stoken->[0] eq 'E') {
         sub start_strike {    last;
     my ($target,$token) = @_;   } 
             my $currentstring = '';          if ($stoken->[0] eq 'S') {
             if ($target eq 'web') {    last;
        $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;  
  }   }
          }     
       
         }
        }
       }
       
      }    
      $current_value =~ s/(\s)+/$1/g;
        if ($current_value ne ' ' and $current_value ne '' ) {  
          push (@value_style,lc $current_key,$current_value);
        }
        $current_key = '';
        $current_value = '';         
   
     }  
     my %style_for_target = @value_style;   
   #--------------------------------------------------------------- check printing
   #  while (($current_key,$current_value) = each %style_for_target) {
   #       print "$current_key => $current_value\n";
   #  }
   #---------------------------------------------------------------- return result
     return %style_for_target; 
   }
   
 1;  1;
 __END__  __END__

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


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