--- loncom/xml/lonxml.pm	2000/06/19 15:52:29	1.1
+++ loncom/xml/lonxml.pm	2000/06/29 13:58:23	1.6
@@ -1,1305 +1,195 @@
-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 HTML::TokeParser;
 use Safe;
-use Apache::Constants qw(:common);
+use Apache::style;
 use Apache::lontexconvert;
-
-
-#=======================================================   Main subroutine: xmlparse  
+use Apache::londefdef;
+use Apache::run;
+#==================================================   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 = ();
+ 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;
+ $safeeval->permit("entereval");
+#-------------------- Redefinition of the target in the case of compound target
 
-#------------------------------------------ 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]}) { 
+ ($target, my @tenta) = split('&&',$target);
 
-#--------------------------------------------------------- use style file definition
+#------------------------- Stack definition (in stack we have all current tags)
 
-                   $newarg = $style_for_target{$token->[1]};
+ my @stack = (); 
+ my @parstack = ();
 
-                   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; 
+#------------------------------------- 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 = '';
+     
+     if (exists $style_for_target{$token->[1]}) {
+#       print "Style for $token->[1] is " .$style_for_target{$token->[1]}."\n";
+#---------------------------------------------------- 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') {
+#	     print "evaluating $tokenpat->[4]\n";
+	     $oustring .= &Apache::run::evaluate($tokenpat->[1],$safeeval);
+	   } 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];
+		 }
 	       }
-               pop @parstack;
-	}
-    }
-    return $finaloutput;
-}
-
-
-#================================================================== style subroutine 
-
-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
-
-
+	       
+	       map {$partstring =~ s/\$$_/$token->[2]->{$_}/g; } @{$token->[3]};
+#	       print "want to use run\n";	       
+	       &Apache::run::run($partstring,$safeeval);
+	       
+	       $partstring = '';
 	     } 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;
-			 }
-		      }	     
-    
+#	       print "evaluating $tokenpat->[4]\n";
+	       $oustring .= &Apache::run::evaluate($tokenpat->[4],$safeeval);
+	     }
+	   } elsif ($tokenpat->[0] eq 'E' and $tokenpat->[1] ne 'evaluate') {
+#	     print "hereish\n";
+	     $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')  {
+     # Put here check for correct final tag (to avoid existence of 
+     # starting tag only)
+        
+     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]"};
+       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; 
+	       print "want to use run\n";
+               &Apache::run::run($partstring,$safeeval);
+	       
+               $partstring = '';
+	     } elsif ($tokenpat->[1] eq 'evaluate') {		
+	       $outputstring = &Apache::run::evaluate($tokenpat->[2]{expression},$safeeval);
+	       $oustring .=  $outputstring;
+	     } else {
+	       $oustring .= $tokenpat->[4]; 
 	     }
-    
-	  }    
-                    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 %style_for_target;
-  
+	   } elsif ($tokenpat->[0] eq 'E' and $tokenpat->[1] ne 'evaluate') {
+             $oustring .= $tokenpat->[1];    
+	   }
+         }
+	 $newarg =  $oustring;
+       } else {
+         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;
 }
 
-
-
-#=============================================================== 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;
 __END__