--- loncom/xml/lonxml.pm	2000/06/19 15:52:29	1.1
+++ loncom/xml/lonxml.pm	2000/11/07 23:41:27	1.37
@@ -1,1305 +1,394 @@
-package Apache::lonxml;
-
+# The LearningOnline Network with CAPA
+# XML Parser Module 
+#
+# last modified 06/26/00 by Alexander Sakharuk
+# 11/6 Gerd Kortemeyer
+
+package Apache::lonxml; 
+use vars 
+qw(@pwd $outputstack $redirection $textredirection $on_offimport @extlinks);
 use strict;
 use HTML::TokeParser;
 use Safe;
-use Apache::Constants qw(:common);
-use Apache::lontexconvert;
-
+use Opcode;
 
-#=======================================================   Main subroutine: xmlparse  
+sub register {
+  my $space;
+  my @taglist;
+  my $temptag;
+  ($space,@taglist) = @_;
+  foreach $temptag (@taglist) {
+    $Apache::lonxml::alltags{$temptag}=$space;
+  }
+}
+                                     
+use Apache::style;
+use Apache::lontexconvert;
+use Apache::run;
+use Apache::londefdef;
+use Apache::scripttag;
+#==================================================   Main subroutine: xmlparse  
+@pwd=();
+$outputstack = '';
+$redirection = 1;
+$textredirection = 1;
+$on_offimport = 0;
+@extlinks=();
 
 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 ($target,$content_file_string,$safeinit,%style_for_target) = @_;
+ if ($target eq 'meta') 
+   {$Apache::lonxml::textredirection = 0;
+    $Apache::lonxml::on_offimport = 1;
+ }
+ my @pars = ();
+ @Apache::lonxml::pwd=();
+ my $pwd=$ENV{'request.filename'};
+ $pwd =~ s:/[^/]*$::;
+ &newparser(\@pars,\$content_file_string,$pwd);
+ my $currentstring = '';
+ my $finaloutput = ''; 
+ my $newarg = '';
+ my $result;
+
+ my $safeeval = new Safe;
+ $safeeval->permit("entereval");
+ $safeeval->permit(":base_math");
+ $safeeval->deny(":base_io");
+#need to inspect this class of ops
+# $safeeval->deny(":base_orig");
+ $safeinit .= ';$external::target='.$target.';';
+ $safeinit .= ';$external::randomseed='.&Apache::lonnet::rndseed().';';
+ &Apache::run::run($safeinit,$safeeval);
+#-------------------- Redefinition of the target in the case of compound target
+
+ ($target, my @tenta) = split('&&',$target);
+
+ my @stack = (); 
+ my @parstack = ();
+ &initdepth;
+ my $token;
+ while ( $#pars > -1 ) {
+   while ($token = $pars[$#pars]->get_token) {
+     if ($token->[0] eq 'T') {
+	 if ($Apache::lonxml::textredirection == 1) {$result=$token->[1];}
+#       $finaloutput .= &Apache::run::evaluate($token->[1],$safeeval,'');
+     } elsif ($token->[0] eq 'S') {
+#            if ($target eq 'meta' and $token->[2]->{metaout} eq 'ON') {$Apache::lonxml::textredirection = 1;}
+       # add tag to stack 	    
+       push (@stack,$token->[1]);
+       # add parameters list to another stack
+       push (@parstack,&parstring($token));
+       &increasedepth($token);       
+       if (exists $style_for_target{$token->[1]}) {
+
+	if ($Apache::lonxml::redirection == 1) {
+	  $finaloutput .= &recurse($style_for_target{$token->[1]},
+		  		  $target,$safeeval,\%style_for_target,
+	 		 	  @parstack);
+        } else {
+          $Apache::lonxml::outputstack .=  &recurse($style_for_target{$token->[1]},
+		  		  $target,$safeeval,\%style_for_target,
+	 		 	  @parstack);
+        }
 
-    my @stack = (); 
-    my @parstack = ();
+       } else {
+	 $result = &callsub("start_$token->[1]", $target, $token,\@parstack,
+			       \@pars, $safeeval, \%style_for_target);
+       }              
+     } elsif ($token->[0] eq 'E')  {
+#	 if ($target eq 'meta') {$Apache::lonxml::textredirection = 0;}
+       #clear out any tags that didn't end
+       while ($token->[1] ne $stack[$#stack] 
+	      && ($#stack > -1)) {pop @stack;pop @parstack;&decreasedepth($token);}
+       
+       if (exists $style_for_target{'/'."$token->[1]"}) {
+
+	if ($Apache::lonxml::redirection == 1) {
+	 $finaloutput .= &recurse($style_for_target{'/'."$token->[1]"},
+				  $target,$safeeval,\%style_for_target,
+				  @parstack);
+        } else {
+         $Apache::lonxml::outputstack .=  &recurse($style_for_target{'/'."$token->[1]"},
+				  $target,$safeeval,\%style_for_target,
+				  @parstack);
+        }
 
-#------------------------------------------ Parse input string (content_file_string)
+       } else {
+	 $result = &callsub("end_$token->[1]", $target, $token, \@parstack,
+			       \@pars,$safeeval, \%style_for_target);
+       }
+     }
+     if ($result ne "") {
+       if ( $#parstack > -1 ) {
  
-    my $token;
+	if ($Apache::lonxml::redirection == 1) {
+	 $finaloutput .= &Apache::run::evaluate($result,$safeeval,
+						$parstack[$#parstack]);
+        } else {
+         $Apache::lonxml::outputstack .= &Apache::run::evaluate($result,$safeeval,
+						$parstack[$#parstack]);
+        }
+
+       } else {
+	 $finaloutput .= &Apache::run::evaluate($result,$safeeval,'');
+       }
+       $result = '';
+     } else {
+         $finaloutput .= $result;
+     }
+     if ($token->[0] eq 'E') { pop @stack;pop @parstack;&decreasedepth($token);}
+   }
+   pop @pars;
+   pop @Apache::lonxml::pwd;
+ }
+
+ return $finaloutput;
+}
 
-    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;
+sub recurse {
+  
+  my @innerstack = (); 
+  my @innerparstack = ();
+  my ($newarg,$target,$safeeval,$style_for_target,@parstack) = @_;
+  my @pat = ();
+  &newparser(\@pat,\$newarg);
+  my $tokenpat;
+  my $partstring = '';
+  my $output='';
+  my $decls='';
+  while ( $#pat > -1 ) {
+    while  ($tokenpat = $pat[$#pat]->get_token) {
+      if ($tokenpat->[0] eq 'T') {
+	  if ($Apache::lonxml::textredirection == 1) {$partstring = $tokenpat->[1];}
+      } elsif ($tokenpat->[0] eq 'S') {
+	push (@innerstack,$tokenpat->[1]);
+	push (@innerparstack,&parstring($tokenpat));
+	&increasedepth($tokenpat);
+	$partstring = &callsub("start_$tokenpat->[1]", 
+			       $target, $tokenpat, \@innerparstack,
+			       \@pat, $safeeval, $style_for_target);
+      } elsif ($tokenpat->[0] eq 'E') {
+	#clear out any tags that didn't end
+	while ($tokenpat->[1] ne $innerstack[$#innerstack] 
+	       && ($#innerstack > -1)) {pop @innerstack;pop @innerparstack;
+					&decreasedepth($tokenpat);}
+	$partstring = &callsub("end_$tokenpat->[1]",
+			       $target, $tokenpat, \@innerparstack,
+			       \@pat, $safeeval, $style_for_target);
+      }
+      #pass both the variable to the style tag, and the tag we 
+      #are processing inside the <definedtag>
+      if ( $partstring ne "" ) {
+	if ( $#parstack > -1 ) { 
+	  if ( $#innerparstack > -1 ) { 
+	    $decls= $parstack[$#parstack].$innerparstack[$#innerparstack];
+	  } else {
+	    $decls= $parstack[$#parstack];
+	  }
+	} else {
+	  if ( $#innerparstack > -1 ) { 
+	    $decls=$innerparstack[$#innerparstack];
+	  } else {
+	    $decls='';
+	  }
 	}
+	$output .= &Apache::run::evaluate($partstring,$safeeval,$decls);
+	$partstring = '';
+      }
+      if ($tokenpat->[0] eq 'E') { pop @innerstack;pop @innerparstack;
+				 &decreasedepth($tokenpat);}
     }
-    return $finaloutput;
+    pop @pat;
+    pop @Apache::lonxml::pwd;
+  }
+  return $output;
 }
 
+sub callsub {
+  my ($sub,$target,$token,$parstack,$parser,$safeeval,$style)=@_;
+  my $currentstring='';
+  {
+      my $sub1;
+    no strict 'refs';
+    if (my $space=$Apache::lonxml::alltags{$token->[1]}) {
+      #&Apache::lonxml::debug("Calling sub $sub in $space<br>\n");
+      $sub1="$space\:\:$sub";
+      $Apache::lonxml::curdepth=join('_',@Apache::lonxml::depthcounter);
+      $currentstring = &$sub1($target,$token,$parstack,$parser,
+			     $safeeval,$style);
+    } else {
+      #&Apache::lonxml::debug("NOT Calling sub $sub in $space<br>\n");
+      if (defined($token->[4])) {
+	$currentstring = $token->[4];
+      } else {
+	$currentstring = $token->[2];
+      }
+    }
+    use strict 'refs';
+  }
+  return $currentstring;
+}
 
-#================================================================== style subroutine 
-
-sub styleparser {
+sub initdepth {
+  @Apache::lonxml::depthcounter=();
+  $Apache::lonxml::depth=-1;
+  $Apache::lonxml::olddepth=-1;
+}
 
-    my ($target,$content_style_string) = @_;
+sub increasedepth {
+  my ($token) = @_;
+  $Apache::lonxml::depth++;
+  $Apache::lonxml::depthcounter[$Apache::lonxml::depth]++;
+  if ($Apache::lonxml::depthcounter[$Apache::lonxml::depth]==1) {
+    $Apache::lonxml::olddepth=$Apache::lonxml::depth;
+  }
+#  my $curdepth=join('_',@Apache::lonxml::depthcounter);
+#  print "<br>s $Apache::lonxml::depth : $Apache::lonxml::olddepth : $curdepth : $token->[1]<br>\n";
+}
 
-#------------------------------------------------ target redefinition (if necessary) 
-    
-    my @target_string = '';
-    my $element;
-   
-    ($element,@target_string) = split ('&&',$target);
-
-     map {$content_style_string =~ s/\<(.*)$_\>/\<$1$element\>/g; } @target_string;
-   
-    $target = $element;
-   
-#------------------------------------------------- create a table for defined target
-#---------------------------------------------- from the information from Style File
-
-    my @value_style = ();
-    my $current_key = '';
-    my $current_value = '';
-
-    my $pstyle = HTML::TokeParser->new(\$content_style_string);
-
-    my $stoken;
-
-      while ($stoken = $pstyle->get_token) {
-#---------------------------------------------------------- start for tag definition
-	  if ($stoken->[0] eq 'S' and $stoken->[1] eq 'definetag') {
-#------------------------------------------------------------------- new key in hash
-	     $current_key = $stoken->[2]{name};
-             if ($target eq 'meta') {
-#-------------------------------------------------- reserved for the metadate output
-
-
-	     } else {
-#-------------------------------------------------------------------- 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 = '';         
+sub decreasedepth {
+  my ($token) = @_;
+  $Apache::lonxml::depth--;
+  if ($Apache::lonxml::depth<$Apache::lonxml::olddepth-1) {
+    $#Apache::lonxml::depthcounter--;
+    $Apache::lonxml::olddepth=$Apache::lonxml::depth+1;
+  }
+#  my $curdepth=join('_',@Apache::lonxml::depthcounter);
+#  print "<br>e $Apache::lonxml::depth : $Apache::lonxml::olddepth : $token->[1] : $curdepth <br>\n";
+}
 
-      }
-  
-    my %style_for_target = @value_style;
-   
-#-------------------------------------------------------------------- check printing
-#   while (($current_key,$current_value) = each %style_for_target) {
-#       print "$current_key => $current_value\n";
-#   }
+sub get_all_text {
 
-    return %style_for_target;
-  
+ my($tag,$pars)= @_;
+ my $depth=0;
+ my $token;
+ my $result='';
+ my $tag=substr($tag,1); #strip the / off the tag
+# &Apache::lonxml::debug("have:$tag:");
+ while (($depth >=0) && ($token = $pars->get_token)) {
+   if ($token->[0] eq 'T') {
+     $result.=$token->[1];
+   } elsif ($token->[0] eq 'S') {
+     if ($token->[1] eq $tag) { $depth++; }
+     $result.=$token->[4];
+   } elsif ($token->[0] eq 'E')  {
+     if ( $token->[1] eq $tag) { $depth--; }
+     #skip sending back the last end tag
+     if ($depth > -1) { $result.=$token->[2]; } else {
+       $pars->unget_token($token);
+     }
+   }
+ }
+ return $result
 }
 
+sub newparser {
+  my ($parser,$contentref,$dir) = @_;
+  push (@$parser,HTML::TokeParser->new($contentref));
+  if ( $dir eq '' ) {
+    push (@Apache::lonxml::pwd, $Apache::lonxml::pwd[$#Apache::lonxml::pwd]);
+  } else {
+    push (@Apache::lonxml::pwd, $dir);
+  } 
+#  &Apache::lonxml::debug("pwd:$#Apache::lonxml::pwd");
+#  &Apache::lonxml::debug("pwd:$Apache::lonxml::pwd[$#Apache::lonxml::pwd]");
+}
 
+sub parstring {
+  my ($token) = @_;
+  my $temp='';
+  map {
+    unless ($_=~/\W/) {
+      $temp .= "my \$$_=\"$token->[2]->{$_}\";"
+    }
+  } @{$token->[3]};
+  return $temp;
+}
 
-#=============================================================== Subroutine definition
-#--------------------------------------------------------------------------------- Run 
-        sub evaluate {
-	    my ($expression,$safeeval) = @_;
-            return $safeeval->reval($expression);
-        }
+sub writeallows {
+    my $thisurl='/res/'.&Apache::lonnet::declutter(shift);
+    my $thisdir=$thisurl;
+    $thisdir=~s/\/[^\/]+$//;
+    my %httpref=();
+    map {
+       $httpref{'httpref.'.
+ 	        &Apache::lonnet::hreflocation($thisdir,$_)}=$thisurl;              } @extlinks;
+    &Apache::lonnet::appenv(%httpref);
+}
 
-        sub run {
-	    my ($code,$safeeval) = @_;
-            $safeeval->reval($code);
-        }
+sub handler {
+  my $request=shift;
 
-#===================================================================== 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;
-	}
+  my $target='web';
+  $Apache::lonxml::debug=1;
+  if ($ENV{'browser.mathml'}) {
+    $request->content_type('text/xml');
+  } else {
+    $request->content_type('text/html');
+  }
+
+#  $request->print(<<ENDHEADER);
+#<html>
+#<head>
+#<title>Just test</title>
+#</head>
+#<body bgcolor="#FFFFFF">
+#ENDHEADER
+#  &Apache::lonhomework::send_header($request);
+  $request->send_http_header;
+
+  return 'OK' if $request->header_only;
+
+  $request->print(&Apache::lontexconvert::header());
+
+  $request->print('<body bgcolor="#FFFFFF">'."\n");
+
+  my $file = "/home/httpd/html".$request->uri;
+  my %mystyle;
+  my $result = '';
+  $result = Apache::lonxml::xmlparse($target, &Apache::lonnet::getfile($file),'',%mystyle);
+  $request->print($result);
+
+  $request->print('</body>');
+  $request->print(&Apache::lontexconvert::footer());
+  writeallows($request->uri);
+  return 'OK';
+}
+ 
+$Apache::lonxml::debug=0;
+sub debug {
+  if ($Apache::lonxml::debug eq 1) {
+    print "DEBUG:".$_[0]."<br>\n";
+  }
+}
+sub error {
+  print "ERROR:".$_[0]."<br>\n";
+}
+sub warning {
+  if ($Apache::lonxml::debug eq 1) {
+    print "WARNING:".$_[0]."<br>\n";
+  }
+}
 
 1;
 __END__
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+