File:  [LON-CAPA] / loncom / xml / londefdef.pm
Revision 1.80: download - view: text, annotated - select for diffs
Wed Jul 31 14:55:56 2002 UTC (21 years, 9 months ago) by sakharuk
Branches: MAIN
CVS tags: HEAD
Added alt attribute to <img> tag.

    1: # The LearningOnline Network with CAPA
    2: # Tags Default Definition Module 
    3: #
    4: # $Id: londefdef.pm,v 1.80 2002/07/31 14:55:56 sakharuk Exp $
    5: # 
    6: #
    7: # Copyright Michigan State University Board of Trustees
    8: #
    9: # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
   10: #
   11: # LON-CAPA is free software; you can redistribute it and/or modify
   12: # it under the terms of the GNU General Public License as published by
   13: # the Free Software Foundation; either version 2 of the License, or
   14: # (at your option) any later version.
   15: #
   16: # LON-CAPA is distributed in the hope that it will be useful,
   17: # but WITHOUT ANY WARRANTY; without even the implied warranty of
   18: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   19: # GNU General Public License for more details.
   20: #
   21: # You should have received a copy of the GNU General Public License
   22: # along with LON-CAPA; if not, write to the Free Software
   23: # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   24: #
   25: # /home/httpd/html/adm/gpl.txt
   26: #
   27: # http://www.lon-capa.org/
   28: #
   29: # Copyright for TtHfunc and TtMfunc by Ian Hutchinson. 
   30: # TtHfunc and TtMfunc (the "Code") may be compiled and linked into 
   31: # binary executable programs or libraries distributed by the 
   32: # Michigan State University (the "Licensee"), but any binaries so 
   33: # distributed are hereby licensed only for use in the context
   34: # of a program or computational system for which the Licensee is the 
   35: # primary author or distributor, and which performs substantial 
   36: # additional tasks beyond the translation of (La)TeX into HTML.
   37: # The C source of the Code may not be distributed by the Licensee
   38: # to any other parties under any circumstances.
   39: #
   40: #
   41: # last modified 06/26/00 by Alexander Sakharuk
   42: # 11/6,11/30,02/01/01,5/4 Gerd Kortemeyer
   43: # 01/18 Alex Sakharuk
   44: 
   45: package Apache::londefdef; 
   46: 
   47: use Apache::lonnet;
   48: use strict;
   49: use Apache::lonxml;
   50: use Apache::File();
   51: use Image::Magick;
   52: 
   53: BEGIN {
   54: 
   55:     &Apache::lonxml::register('Apache::londefdef',('m','html','head','map','select','option','input','textarea','form','meta','title','body','center','b','strong','dt','h1','h2','h3','h4','h5','h6','cite','i','address','dd','dl','dir','ol','ul','menu','dfn','kbd','tt','code','em','q','p','br','big','small','basefont','font','s','sub','strike','sup','hr','a','li','u','output','param','applet','img','embed','allow','frameset','pre','insert','externallink','table','tr','th','td','blankspace','bubble','bubbles','bubbleline'));
   56: 
   57: }
   58: 
   59: #======================= TAG SUBROUTINES =====================
   60: #-- <output>
   61: sub start_output {
   62:   my ($target) = @_;
   63:   if ($target eq 'meta') { $Apache::lonxml::metamode--; }
   64:   return '';
   65: }
   66: sub end_output {
   67:   my ($target) = @_;
   68:   if ($target eq 'meta') { $Apache::lonxml::metamode++; }
   69:   return '';
   70: }
   71: #-- <m> tag
   72: sub start_m {
   73:   my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
   74:   my $currentstring = '';
   75:   if ($target eq 'web') {
   76:     $Apache::lonxml::prevent_entity_encode++;
   77:     my $inside = &Apache::lonxml::get_all_text_unbalanced("/m",$parser);
   78:     $inside ='\\documentstyle{article}'.$inside;
   79:     &Apache::lonxml::debug("M is starting with:$inside:");
   80:     my $eval=&Apache::lonxml::get_param('eval',$parstack,$safeeval);
   81:     if ($eval eq 'on') {
   82:       $inside=&Apache::run::evaluate($inside,$safeeval,$$parstack[-1]);
   83:       #&Apache::lonxml::debug("M is evaulated to:$inside:");
   84:     }
   85:     $currentstring = &Apache::lontexconvert::converted(\$inside);
   86:     if ($Apache::lontexconvert::errorstring) {
   87:       &Apache::lonxml::warning("tth error: ".
   88: 			       $Apache::lontexconvert::errorstring);
   89:       $Apache::lontexconvert::errorstring='';
   90:     }
   91:     #&Apache::lonxml::debug("M is ends with:$currentstring:");
   92:   } elsif ($target eq 'tex') {
   93:     $currentstring = &Apache::lonxml::get_all_text_unbalanced("/m",$parser);
   94:     if ($currentstring=~/\s*\\\\\s*/) {$currentstring = ' \vskip 0 mm ';}
   95:   } else {
   96:     my $inside = &Apache::lonxml::get_all_text_unbalanced("/m",$parser);
   97:   }
   98:   return $currentstring;
   99: }
  100: sub end_m {
  101:   my ($target,$token) = @_;
  102:   my $currentstring = '';
  103:   if ($target eq 'web') {
  104:     $Apache::lonxml::prevent_entity_encode--;
  105:   } elsif ($target eq 'tex') {
  106:     $currentstring = "";
  107:   } elsif ($target eq 'meta') {
  108:   }
  109:   return $currentstring;
  110: }
  111: #-- <html> tag    
  112:       sub start_html {
  113: 	    my ($target,$token) = @_;
  114:             my $currentstring = '';
  115: 	    if ($ENV{'browser.mathml'}) {
  116: 	      &tth::ttminit();
  117: 	    } else {
  118: 	      &tth::tthinit();
  119: 	    }
  120:             if ($target eq 'web') {
  121:               $currentstring = &Apache::lonxml::xmlbegin().
  122:                                &Apache::lonxml::fontsettings();     
  123: 	    } elsif ($target eq 'tex') {
  124: 	      @Apache::londefdef::table = ();
  125: 	      $currentstring .= '\documentclass[letterpaper]{article}
  126:                                  \newcommand{\keephidden}[1]{}
  127:                                  \renewcommand{\deg}{$^{\circ}$}
  128:                                  \usepackage[dvips]{graphicx}
  129:                                  \usepackage{epsfig}\usepackage{calc}';
  130: 	    }
  131: 	   return $currentstring;
  132: 	}
  133:         sub end_html {
  134: 	    my ($target,$token) = @_;
  135:             my $currentstring = '';
  136:             if ($target eq 'web') {
  137: 		$currentstring = &Apache::lonxml::xmlend();
  138: 	    }
  139: 	   return $currentstring;
  140: 	}
  141: #-- <head> tag
  142:       sub start_head {
  143: 	    my ($target,$token) = @_;
  144:             my $currentstring = '';
  145:             if ($target eq 'web') {
  146:               $currentstring = $token->[4];     
  147: 	    } 
  148: 	   return $currentstring;
  149: 	}
  150:         sub end_head {
  151: 	    my ($target,$token) = @_;
  152:             my $currentstring = '';
  153:             if ($target eq 'web') {
  154:               $currentstring = &Apache::lonxml::registerurl(undef,$target).
  155:                                $token->[2];    
  156:             } 
  157: 	   return $currentstring;
  158: 	}
  159: #-- <map> tag
  160:       sub start_map {
  161: 	    my ($target,$token) = @_;
  162:             my $currentstring = '';
  163:             if ($target eq 'web') {
  164:               $currentstring = $token->[4];     
  165: 	    } 
  166: 	   return $currentstring;
  167: 	}
  168:         sub end_map {
  169: 	    my ($target,$token) = @_;
  170:             my $currentstring = '';
  171:             if ($target eq 'web') {
  172:               $currentstring = $token->[2];    
  173:             } 
  174: 	   return $currentstring;
  175: 	}
  176: #-- <select> tag
  177:       sub start_select {
  178: 	    my ($target,$token) = @_;
  179:             my $currentstring = '';
  180:             if ($target eq 'web') {
  181:               $currentstring = $token->[4];     
  182: 	    } 
  183: 	   return $currentstring;
  184: 	}
  185:         sub end_select {
  186: 	    my ($target,$token) = @_;
  187:             my $currentstring = '';
  188:             if ($target eq 'web') {
  189:               $currentstring = $token->[2];    
  190:             } 
  191: 	   return $currentstring;
  192: 	}
  193: #-- <option> tag
  194:       sub start_option {
  195: 	    my ($target,$token) = @_;
  196:             my $currentstring = '';
  197:             if ($target eq 'web') {
  198:               $currentstring = $token->[4];     
  199: 	    } 
  200: 	   return $currentstring;
  201: 	}
  202:         sub end_option {
  203: 	    my ($target,$token) = @_;
  204:             my $currentstring = '';
  205:             if ($target eq 'web') {
  206:               $currentstring = $token->[2];    
  207:             } 
  208: 	   return $currentstring;
  209: 	}
  210: #-- <input> tag
  211:       sub start_input {
  212: 	    my ($target,$token) = @_;
  213:             my $currentstring = '';
  214:             if ($target eq 'web') {
  215:               $currentstring = $token->[4];     
  216: 	    } 
  217: 	   return $currentstring;
  218: 	}
  219:         sub end_input {
  220: 	    my ($target,$token) = @_;
  221:             my $currentstring = '';
  222:             if ($target eq 'web') {
  223:               $currentstring = $token->[2];    
  224:             } 
  225: 	   return $currentstring;
  226: 	}
  227: #-- <textarea> tag
  228:       sub start_textarea {
  229: 	    my ($target,$token) = @_;
  230:             my $currentstring = '';
  231:             if ($target eq 'web') {
  232:               $currentstring = $token->[4];     
  233: 	    } 
  234: 	   return $currentstring;
  235: 	}
  236:         sub end_textarea {
  237: 	    my ($target,$token) = @_;
  238:             my $currentstring = '';
  239:             if ($target eq 'web') {
  240:               $currentstring = $token->[2];    
  241:             } 
  242: 	   return $currentstring;
  243: 	}
  244: #-- <form> tag
  245:       sub start_form {
  246: 	    my ($target,$token) = @_;
  247:             my $currentstring = '';
  248:             if ($target eq 'web') {
  249:               $currentstring = $token->[4];     
  250: 	    } 
  251: 	   return $currentstring;
  252: 	}
  253:         sub end_form {
  254: 	    my ($target,$token) = @_;
  255:             my $currentstring = '';
  256:             if ($target eq 'web') {
  257:               $currentstring = $token->[2];    
  258:             } 
  259: 	   return $currentstring;
  260: 	}
  261: #-- <title> tag
  262:       sub start_title {
  263: 	    my ($target,$token) = @_;
  264:             my $currentstring = '';
  265:             if ($target eq 'web') {
  266:               $currentstring = $token->[4];     
  267: 	    } elsif ($target eq 'tex') {
  268:               $currentstring .= '\keephidden{' 
  269: 	    }
  270:             if ($target eq 'meta') {
  271: 		$currentstring='<title>';
  272:                 &start_output();
  273:             }
  274: 	   return $currentstring;
  275: 	}
  276:         sub end_title {
  277: 	    my ($target,$token) = @_;
  278:             my $currentstring = '';
  279:             if ($target eq 'web') {
  280:               $currentstring = $token->[2];    
  281:             } elsif ($target eq 'tex') {
  282:               $currentstring .= '}';
  283: 	    }  
  284:             if ($target eq 'meta') {
  285:                &end_output();
  286:                $currentstring='</title>';
  287:             } 
  288: 	   return $currentstring;
  289: 	}
  290: #-- <meta> tag
  291:       sub start_meta {
  292: 	    my ($target,$token,$tagstack,$parstack,$parser) = @_;
  293:             my $currentstring = '';
  294:             if ($target eq 'web') {
  295: 	      my $args='';
  296: 	      if ( $#$parstack > -1 ) { $args=$$parstack[$#$parstack]; }
  297: 	      if ($args eq '') {
  298: 		&Apache::lonxml::get_all_text("/meta",$$parser[$#$parser]);
  299: 	      } else {
  300: 		$currentstring = $token->[4];
  301: 	      }
  302: 	    }
  303:             if ($target eq 'meta') {
  304: 		unless ($token->[2]->{'http-equiv'}) {
  305: 		    my $name=$token->[2]->{'name'};
  306:                     $name=~tr/A-Z/a-z/;
  307:                     $name=~s/\s/\_/g;
  308:                     if ($name) {
  309:                        $currentstring='<'.$name.'>'.
  310:                                          $token->[2]->{'content'}.
  311: 			              '</'.$name.'>';
  312: 		    }
  313:                 }
  314: 	    }
  315: 	   return $currentstring;
  316: 	}
  317:       sub end_meta {
  318: 	my ($target,$token,$tagstack,$parstack,$parser) = @_;
  319: 	my $currentstring = '';
  320: 	if ($target eq 'web') {
  321: 	  my $args='';
  322: 	  if ( $#$parstack > -1 ) { $args=$$parstack[$#$parstack]; }
  323: 	  if ($args ne '') {
  324: 	    $currentstring = $token->[4];
  325: 	  }
  326: 	} 
  327: 	return $currentstring;
  328:       }
  329: #-- <body> tag
  330:         sub start_body {
  331:             my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
  332: #	    my ($target,$token) = @_;
  333:             my $currentstring = '';
  334:             if ($target eq 'web') {
  335: 	      if (!$Apache::lonxml::registered) {
  336: 		$currentstring.='<head>'.
  337: 		    &Apache::lonxml::registerurl(undef,$target).'</head>';
  338: 	      }
  339: 	      my $onLoad='';
  340: 	      foreach my $key (keys(%{$token->[2]})) {
  341: 		if ($key =~ /^onload$/i) {
  342: 		  $onLoad.=$token->[2]->{$key}.';';
  343: 		  delete($token->[2]->{$key});
  344: 		}
  345: 	      }
  346: 	      $token->[2]->{'onLoad'}=&Apache::lonxml::loadevents().
  347: 		                       ';'.$onLoad;
  348: 	      my $onUnload='';
  349: 	      foreach my $key (keys(%{$token->[2]})) {
  350: 		if ($key =~ /^onunload$/i) {
  351: 		  $onUnload.=$token->[2]->{$key}.';';
  352: 		  delete($token->[2]->{$key});
  353: 		}
  354: 	      }
  355: 	      $token->[2]->{'onUnload'}=&Apache::lonxml::unloadevents().
  356: 		                         ';'.$onUnload;
  357: 
  358: 	      $currentstring .= '<'.$token->[1];
  359: 	      foreach (keys %{$token->[2]}) {
  360: 	      	$currentstring.=' '.$_.'="'.$token->[2]->{$_}.'"';
  361: 	      }
  362: 	      $currentstring.='>';
  363: 	      if ($ENV{'request.state'} ne 'published') {
  364: 		$currentstring.=(<<EDITBUTTON);
  365: 		<form method="post">
  366: 		<input type="submit" name="editmode" value="Edit" />
  367: 		</form>
  368: EDITBUTTON
  369: 	      }
  370:        	    } elsif ($target eq 'tex') {
  371:               $currentstring = '\begin{document}';  
  372: 	    } 
  373: 	   return $currentstring;
  374: 	}
  375:         sub end_body {
  376: 	    my ($target,$token) = @_;
  377:             my $currentstring = '';
  378:             if ($target eq 'web') {
  379:               $currentstring = $token->[2];     
  380: 	    } elsif ($target eq 'tex') {
  381:               $currentstring = '\end{document}';  
  382: 	    } 
  383: 	   return $currentstring;
  384: 	}
  385: #-- <center> tag
  386:         sub start_center {
  387: 	    my ($target,$token) = @_;
  388:             my $currentstring = '';
  389:             if ($target eq 'web') {
  390:               $currentstring = $token->[4];     
  391: 	    } elsif ($target eq 'tex') {
  392:               $currentstring = '\begin{center}';  
  393: 	    }  elsif ($target eq 'latexsource') {
  394:               $currentstring = '\begin{center}';  
  395: 	    } 
  396: 	   return $currentstring;
  397: 	}
  398:         sub end_center {
  399: 	    my ($target,$token) = @_;
  400:             my $currentstring = '';
  401:             if ($target eq 'web') {
  402:               $currentstring = $token->[2];     
  403: 	    } elsif ($target eq 'tex') {
  404:               $currentstring = '\end{center}';  
  405: 	    }  elsif ($target eq 'latexsource') {
  406:               $currentstring = '\end{center}';  
  407: 	    } 
  408: 	   return $currentstring;
  409: 	}
  410: #-- <b> tag
  411:         sub start_b {
  412: 	    my ($target,$token) = @_;
  413:             my $currentstring = '';
  414:             if ($target eq 'web') {
  415:               $currentstring = $token->[4];     
  416: 	    } elsif ($target eq 'tex') {
  417:               $currentstring = '\textbf{';  
  418: 	    }  elsif ($target eq 'latexsource') {
  419:               $currentstring = '\textbf{';  
  420: 	    } 
  421: 	   return $currentstring;
  422: 	}
  423:         sub end_b {
  424: 	    my ($target,$token) = @_;
  425:             my $currentstring = '';
  426:             if ($target eq 'web') {
  427:               $currentstring = $token->[2];     
  428: 	    } elsif ($target eq 'tex') {
  429:               $currentstring = '}';  
  430: 
  431: 	    } elsif ($target eq 'latexsource') {
  432:               $currentstring = '}';  
  433: 	    } 
  434: 	   return $currentstring;
  435: 	}
  436: #-- <strong> tag
  437:         sub start_strong {
  438: 	    my ($target,$token) = @_;
  439:             my $currentstring = '';
  440:             if ($target eq 'web') {
  441:               $currentstring = $token->[4];     
  442: 	    } elsif ($target eq 'tex') {
  443:               $currentstring = '\textbf{';  
  444: 	    } elsif ($target eq 'latexsource') {
  445:               $currentstring = '\textbf{';  
  446: 	    } 
  447: 	   return $currentstring;
  448: 	}
  449:         sub end_strong {
  450: 	    my ($target,$token) = @_;
  451:             my $currentstring = '';
  452:             if ($target eq 'web') {
  453: 
  454:               $currentstring = $token->[2];     
  455: 	    } elsif ($target eq 'tex') {
  456:               $currentstring = '}';  
  457: 	    }  elsif ($target eq 'latexsource') {
  458:               $currentstring = '}';  
  459: 	    } 
  460: 	   return $currentstring;
  461: 	}
  462: #-- <h1> tag
  463:         sub start_h1 {
  464: 	    my ($target,$token) = @_;
  465:             my $currentstring = '';
  466:             if ($target eq 'web') {
  467: 	       $currentstring .= $token->[4];
  468: 	    } elsif ($target eq 'tex') {
  469: 		$currentstring .= '\large{\textbf{';
  470: 	    } elsif ($target eq 'meta') {
  471: 		$currentstring='<subject>';
  472:                 &start_output();
  473:             }
  474:            return $currentstring;
  475: 	}
  476:         sub end_h1 {
  477: 	    my ($target,$token) = @_;
  478:             my $currentstring = '';
  479:             if ($target eq 'web') {
  480: 	       $currentstring .= $token->[2];
  481: 	    } elsif ($target eq 'tex') {
  482: 		$currentstring .= '}}';
  483: 	    } elsif ($target eq 'meta') {
  484:                 &end_output();
  485: 		$currentstring='</subject>';
  486:             } 
  487:            return $currentstring;
  488: 	}
  489: #-- <h2> tag
  490:         sub start_h2 {
  491: 	    my ($target,$token) = @_;
  492:             my $currentstring = '';
  493:             if ($target eq 'web') {
  494: 	       $currentstring .= $token->[4];
  495: 	    } elsif ($target eq 'tex') {
  496: 		$currentstring .= '\large{\textbf{';
  497: 	    } 
  498:            return $currentstring;
  499: 	}
  500:         sub end_h2 {
  501: 	    my ($target,$token) = @_;
  502:             my $currentstring = '';
  503:             if ($target eq 'web') {
  504: 	       $currentstring .= $token->[2];
  505: 	    } elsif ($target eq 'tex') {
  506: 		$currentstring .= '}}';
  507: 	    } 
  508:            return $currentstring;
  509: 	}
  510: #-- <h3> tag
  511:         sub start_h3 {
  512: 	    my ($target,$token) = @_;
  513:             my $currentstring = '';
  514:             if ($target eq 'web') {
  515: 	       $currentstring .= $token->[4];
  516: 	    } elsif ($target eq 'tex') {
  517: 		$currentstring .= '\large{\textbf{';
  518: 	    } 
  519:            return $currentstring;
  520: 	}
  521:         sub end_h3 {
  522: 	    my ($target,$token) = @_;
  523:             my $currentstring = '';
  524:             if ($target eq 'web') {
  525: 	       $currentstring .= $token->[2];
  526: 	    } elsif ($target eq 'tex') {
  527: 		$currentstring .= '}}';
  528: 	    } 
  529:            return $currentstring;
  530: 	}
  531: #-- <h4> tag
  532:         sub start_h4 {
  533: 	    my ($target,$token) = @_;
  534:             my $currentstring = '';
  535:             if ($target eq 'web') {
  536: 	       $currentstring .= $token->[4];
  537: 	    } elsif ($target eq 'tex') {
  538: 		$currentstring .= '\large{\textbf{';
  539: 	    } 
  540:            return $currentstring;
  541: 	}
  542:         sub end_h4 {
  543: 	    my ($target,$token) = @_;
  544:             my $currentstring = '';
  545:             if ($target eq 'web') {
  546: 	       $currentstring .= $token->[2];
  547: 	    } elsif ($target eq 'tex') {
  548: 		$currentstring .= '}}';
  549: 	    } 
  550:            return $currentstring;
  551: 	}
  552: #-- <h5> tag
  553:         sub start_h5 {
  554: 	    my ($target,$token) = @_;
  555:             my $currentstring = '';
  556:             if ($target eq 'web') {
  557: 	       $currentstring .= $token->[4];
  558: 	    } elsif ($target eq 'tex') {
  559: 		$currentstring .= '\large{\textbf{';
  560: 	    } 
  561:            return $currentstring;
  562: 	}
  563:         sub end_h5 {
  564: 	    my ($target,$token) = @_;
  565:             my $currentstring = '';
  566:             if ($target eq 'web') {
  567: 	       $currentstring .= $token->[2];
  568: 	    } elsif ($target eq 'tex') {
  569: 		$currentstring .= '}}';
  570: 	    } 
  571:            return $currentstring;
  572: 	}
  573: #-- <h6> tag
  574:         sub start_h6 {
  575: 	    my ($target,$token) = @_;
  576:             my $currentstring = '';
  577:             if ($target eq 'web') {
  578: 	       $currentstring .= $token->[4];
  579: 	    } elsif ($target eq 'tex') {
  580: 		$currentstring .= '\large{\textbf{';
  581: 	    } 
  582:            return $currentstring;
  583: 	}
  584:         sub end_h6 {
  585: 	    my ($target,$token) = @_;
  586:             my $currentstring = '';
  587:             if ($target eq 'web') {
  588: 	       $currentstring .= $token->[2];
  589: 	    } elsif ($target eq 'tex') {
  590: 		$currentstring .= '}}';
  591: 	    } 
  592:            return $currentstring;
  593: 	}
  594: #--- <cite> tag
  595:         sub start_cite {
  596: 	    my ($target,$token) = @_;
  597:             my $currentstring = '';
  598:             if ($target eq 'web') {
  599: 	       $currentstring .= $token->[4];
  600: 	    } elsif ($target eq 'tex') {
  601: 		$currentstring .= "\\textit{";
  602: 	    }  elsif ($target eq 'latexsource') {
  603: 		$currentstring .= "\\textit{";
  604: 	    } 
  605:            return $currentstring;
  606: 	}
  607:         sub end_cite {
  608: 	    my ($target,$token) = @_;
  609:             my $currentstring = '';
  610:             if ($target eq 'web') {
  611: 	       $currentstring .= $token->[2];
  612: 	    } elsif ($target eq 'tex') {
  613: 		$currentstring .= "}";
  614: 	    }  elsif ($target eq 'latexsource') {
  615: 		$currentstring .= "}";
  616: 	    } 
  617:            return $currentstring;
  618: 	}
  619: #-- <i> tag
  620:         sub start_i {
  621: 	    my ($target,$token) = @_;
  622:             my $currentstring = '';
  623:             if ($target eq 'web') {
  624: 	       $currentstring .= $token->[4];
  625: 	    } elsif ($target eq 'tex') {
  626: 		$currentstring .= '\textit{';
  627: 	    }  elsif ($target eq 'latexsource') {
  628: 		$currentstring .= '\textit{';
  629: 	    } 
  630:            return $currentstring;
  631: 	}
  632:         sub end_i {
  633: 	    my ($target,$token) = @_;
  634:             my $currentstring = '';
  635:             if ($target eq 'web') {
  636: 	       $currentstring .= $token->[2];
  637: 	    } elsif ($target eq 'tex') {
  638: 		$currentstring .= '}';
  639: 	    } elsif ($target eq 'latexsource') {
  640: 		$currentstring .= '}';
  641: 	    } 
  642:            return $currentstring;
  643: 	}
  644: #-- <address> tag
  645:         sub start_address {
  646: 	    my ($target,$token) = @_;
  647:             my $currentstring = '';
  648:             if ($target eq 'web') {
  649: 	       $currentstring .= $token->[4];
  650: 	    } elsif ($target eq 'tex') {
  651: 		$currentstring .= "\\textit{";
  652: 	    } elsif ($target eq 'latexsource') {
  653: 		$currentstring .= "\\textit{";
  654: 	    } 
  655:            return $currentstring;
  656: 	}
  657:         sub end_address {
  658: 	    my ($target,$token) = @_;
  659:             my $currentstring = '';
  660:             if ($target eq 'web') {
  661: 	       $currentstring .= $token->[2];
  662: 	    } elsif ($target eq 'tex') {
  663: 		$currentstring .= "}";
  664: 	    } elsif ($target eq 'latexsource') {
  665: 		$currentstring .= "}";
  666: 	    }
  667:            return $currentstring;
  668: 	}
  669: #-- <dfn> tag
  670:         sub start_dfn {
  671: 	    my ($target,$token) = @_;
  672:             my $currentstring = '';
  673:             if ($target eq 'web') {
  674: 	       $currentstring .= $token->[4];
  675: 	    } elsif ($target eq 'tex') {
  676: 		$currentstring .= "\\textit{";
  677: 	    } elsif ($target eq 'latexsource') {
  678: 		$currentstring .= "\\textit{";
  679: 	    } 
  680:            return $currentstring;
  681: 	}
  682:         sub end_dfn {
  683: 	    my ($target,$token) = @_;
  684:             my $currentstring = '';
  685:             if ($target eq 'web') {
  686: 	       $currentstring .= $token->[2];
  687: 	    } elsif ($target eq 'tex') {
  688: 		$currentstring .= "}";
  689: 	    } elsif ($target eq 'latexsource') {
  690: 		$currentstring .= "}";
  691: 	    } 
  692:            return $currentstring;
  693: 	}
  694: #-- <tt> tag
  695:         sub start_tt {
  696: 	    my ($target,$token) = @_;
  697:             my $currentstring = '';
  698:             if ($target eq 'web') {
  699: 	       $currentstring .= $token->[4];
  700: 	    } elsif ($target eq 'tex') {
  701: 		$currentstring .= '\texttt{';
  702: 	    } elsif ($target eq 'latexsource') {
  703: 		$currentstring .= '\texttt{';
  704: 	    } 
  705:            return $currentstring;
  706: 	}
  707:         sub end_tt {
  708: 	    my ($target,$token) = @_;
  709:             my $currentstring = '';
  710:             if ($target eq 'web') {
  711: 	       $currentstring .= $token->[2];
  712: 	    } elsif ($target eq 'tex') {
  713: 		$currentstring .= '}';
  714: 	    } elsif ($target eq 'latexsource') {
  715: 		$currentstring .= '}';
  716: 	    }
  717:            return $currentstring;
  718: 	}
  719: #-- <kbd> tag
  720:         sub start_kbd {
  721: 	    my ($target,$token) = @_;
  722:             my $currentstring = '';
  723:             if ($target eq 'web') {
  724: 	       $currentstring .= $token->[4];
  725: 	    } elsif ($target eq 'tex') {
  726: 		$currentstring .= "\\texttt";
  727: 	    } elsif ($target eq 'latexsource') {
  728: 		$currentstring .= "\\texttt{";
  729: 	    } 
  730:            return $currentstring;
  731: 	}
  732:         sub end_kbd {
  733: 	    my ($target,$token) = @_;
  734:             my $currentstring = '';
  735:             if ($target eq 'web') {
  736: 	       $currentstring .= $token->[2];
  737: 	    } elsif ($target eq 'tex') {
  738: 		$currentstring .= "}";
  739: 	    } elsif ($target eq 'latexsource') {
  740: 		$currentstring .= "}";
  741: 	    } 
  742:            return $currentstring;
  743: 	}
  744: #-- <code> tag
  745:         sub start_code {
  746: 	    my ($target,$token) = @_;
  747:             my $currentstring = '';
  748:             if ($target eq 'web') {
  749: 	       $currentstring .= $token->[4];
  750: 	    } elsif ($target eq 'tex') {
  751: 		$currentstring .= '\texttt{';
  752: 	    } 
  753:            return $currentstring;
  754: 	}
  755:         sub end_code {
  756: 	    my ($target,$token) = @_;
  757:             my $currentstring = '';
  758:             if ($target eq 'web') {
  759: 	       $currentstring .= $token->[2];
  760: 	    } elsif ($target eq 'tex') {
  761: 		$currentstring .= '}';
  762: 	    } 
  763:            return $currentstring;
  764: 	}
  765: #-- <em> tag
  766:         sub start_em {
  767: 	    my ($target,$token) = @_;
  768:             my $currentstring = '';
  769:             if ($target eq 'web') {
  770: 	       $currentstring .= $token->[4];
  771: 	    } elsif ($target eq 'tex') {
  772: 		$currentstring .= '\emph{';
  773: 	    } elsif ($target eq 'latexsource') {
  774: 		$currentstring .= '\emph{';
  775: 	    } 
  776:            return $currentstring;
  777: 	}
  778:         sub end_em {
  779: 	    my ($target,$token) = @_;
  780:             my $currentstring = '';
  781:             if ($target eq 'web') {
  782: 	       $currentstring .= $token->[2];
  783: 	    } elsif ($target eq 'tex') {
  784: 		$currentstring .= '}';
  785: 	    } elsif ($target eq 'latexsource') {
  786: 		$currentstring .= '}';
  787: 	    }  
  788:            return $currentstring;
  789: 	}
  790: #-- <q> tag
  791:         sub start_q {
  792: 	    my ($target,$token) = @_;
  793:             my $currentstring = '';
  794:             if ($target eq 'web') {
  795: 	       $currentstring .= $token->[4];
  796: 	    } elsif ($target eq 'tex') {
  797: 		$currentstring .= "\\emph{";
  798: 	    }  elsif ($target eq 'latexsource') {
  799: 		$currentstring .= "\\emph{";
  800: 	    }
  801:            return $currentstring;
  802: 	}
  803:         sub end_q {
  804: 	    my ($target,$token) = @_;
  805:             my $currentstring = '';
  806:             if ($target eq 'web') {
  807: 	       $currentstring .= $token->[2];
  808: 	    } elsif ($target eq 'tex') {
  809: 		$currentstring .= "}";
  810: 	    } elsif ($target eq 'latexsource') {
  811: 		$currentstring .= "}";
  812: 	    }  
  813:            return $currentstring;
  814: 	}
  815: #-- <p> tag
  816:         sub start_p {
  817: 	    my ($target,$token) = @_;
  818:             my $currentstring = '';
  819:             if ($target eq 'web') {
  820: 	       $currentstring .= $token->[4];
  821: 	    } elsif ($target eq 'tex') {
  822: 		$currentstring .= '{\par ';
  823: 	    } elsif ($target eq 'latexsource') {
  824: 		$currentstring .= '{\par ';
  825: 	    } 
  826:            return $currentstring;
  827: 	}
  828:         sub end_p {
  829: 	    my ($target,$token) = @_;
  830:             my $currentstring = '';
  831:             if ($target eq 'web') {
  832: 	       $currentstring .= $token->[2];
  833: 	    } elsif ($target eq 'tex') {
  834: 	        $currentstring .= '}';
  835:             } elsif ($target eq 'latexsource') {
  836: 	        $currentstring .= '}';
  837:             }
  838:            return $currentstring;
  839: 	}
  840: #-- <br> tag
  841:         sub start_br {
  842: 	    my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
  843:             my $currentstring = '';
  844:             if ($target eq 'web') {
  845: 	       $currentstring .= $token->[4];
  846: 	    } elsif ($target eq 'tex') {
  847: 		if ($$tagstack[-2] ne 'sub' && $$tagstack[-2] ne 'sup') {
  848: 		    $currentstring .= '\vskip 0 mm';
  849: 		}
  850: 	    } elsif ($target eq 'latexsource') {
  851: 		$currentstring .= '\\';
  852: 	    } 
  853:            return $currentstring;
  854: 	}
  855:         sub end_br {
  856: 	    my ($target,$token) = @_;
  857:             my $currentstring = '';
  858:             if ($target eq 'web') {
  859: 	       $currentstring .= $token->[2];
  860: 	    }
  861:            return $currentstring;
  862: 	}
  863: #-- <big> tag
  864:         sub start_big {
  865: 	    my ($target,$token) = @_;
  866:             my $currentstring = '';
  867:             if ($target eq 'web') {
  868: 	       $currentstring .= $token->[4];
  869: 	    } elsif ($target eq 'tex') {
  870: 		$currentstring .= '\large{';
  871: 	    } elsif ($target eq 'latexsource') {
  872: 		$currentstring .= '{\Large ';
  873: 	    }  
  874:            return $currentstring;
  875: 	}
  876:         sub end_big {
  877: 	    my ($target,$token) = @_;
  878:             my $currentstring = '';
  879:             if ($target eq 'web') {
  880: 	       $currentstring .= $token->[2];
  881: 	    } elsif ($target eq 'tex') {
  882: 	        $currentstring .= '}';
  883:             } elsif ($target eq 'latexsource') {
  884: 	        $currentstring .= '}';
  885:             }
  886:            return $currentstring;
  887: 	}
  888: #-- <small> tag
  889:         sub start_small {
  890: 	    my ($target,$token) = @_;
  891:             my $currentstring = '';
  892:             if ($target eq 'web') {
  893: 	       $currentstring .= $token->[4];
  894: 	    } elsif ($target eq 'tex') {
  895: 		$currentstring .= '{\footnotesize ';
  896: 	    } elsif ($target eq 'latexsource') {
  897: 		$currentstring .= '{\footnotesize ';
  898: 	    } 
  899:            return $currentstring;
  900: 	}
  901:         sub end_small {
  902: 	    my ($target,$token) = @_;
  903:             my $currentstring = '';
  904:             if ($target eq 'web') {
  905: 	       $currentstring .= $token->[2];
  906: 	    } elsif ($target eq 'tex') {
  907: 	        $currentstring .= '}';
  908:             } elsif ($target eq 'latexsource') {
  909: 	        $currentstring .= '}';
  910:             }
  911:            return $currentstring;
  912: 	}
  913: #-- <basefont> tag
  914:       sub start_basefont {
  915: 	my ($target,$token) = @_;
  916: 	my $currentstring = '';
  917: 	if ($target eq 'web') {
  918: 	  $currentstring = $token->[4];     
  919: 	} 
  920: 	return $currentstring;
  921:       }
  922:       sub end_basefont {
  923: 	my ($target,$token) = @_;
  924: 	my $currentstring = '';
  925: 	if ($target eq 'web') {
  926: 	  $currentstring = $token->[4];     
  927: 	} 
  928: 	return $currentstring;
  929:       }
  930: #-- <font> tag
  931:          sub start_font {
  932: 	    my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
  933:             my $currentstring = '';
  934:             if ($target eq 'web') {
  935: 	      my $face=&Apache::lonxml::get_param('face',$parstack,$safeeval);
  936: 	      if ($face=~/symbol/i) {$Apache::lonxml::prevent_entity_encode++;}
  937:               $currentstring = $token->[4];     
  938: 	    } 
  939: 	   return $currentstring;
  940: 	}
  941:         sub end_font {
  942: 	    my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
  943:             my $currentstring = '';
  944:             if ($target eq 'web') {
  945: 	      my $face=&Apache::lonxml::get_param('face',$parstack,$safeeval);
  946: 	      if ($face=~/symbol/i) {$Apache::lonxml::prevent_entity_encode--;}
  947:               $currentstring = $token->[2];    
  948:             } 
  949: 	   return $currentstring;
  950: 	} 
  951: #-- <strike> tag
  952:         sub start_strike {
  953: 	    my ($target,$token) = @_;
  954:             my $currentstring = '';
  955:             if ($target eq 'web') {
  956: 	       $currentstring .= $token->[4];
  957: 	    } elsif ($target eq 'tex') {
  958: 		$currentstring .= '\underline{';
  959: 	    } 
  960:            return $currentstring;
  961: 	}
  962:         sub end_strike {
  963: 	    my ($target,$token) = @_;
  964:             my $currentstring = '';
  965:             if ($target eq 'web') {
  966: 	       $currentstring .= $token->[2];
  967: 	    } elsif ($target eq 'tex') {
  968: 	        $currentstring .= '}';
  969:             }
  970:            return $currentstring;
  971: 	}
  972: #-- <s> tag
  973:         sub start_s {
  974: 	    my ($target,$token) = @_;
  975:             my $currentstring = '';
  976:             if ($target eq 'web') {
  977: 	       $currentstring .= $token->[4];
  978: 	    } elsif ($target eq 'tex') {
  979: 		$currentstring .= '\underline{';
  980: 	    } 
  981:            return $currentstring;
  982: 	}
  983:         sub end_s {
  984: 	    my ($target,$token) = @_;
  985:             my $currentstring = '';
  986:             if ($target eq 'web') {
  987: 	       $currentstring .= $token->[2];
  988: 	    } elsif ($target eq 'tex') {
  989: 	        $currentstring .= '}';
  990:             }
  991:            return $currentstring;
  992: 	}
  993: #-- <sub> tag
  994:         sub start_sub {
  995: 	    my ($target,$token) = @_;
  996:             my $currentstring = '';
  997:             if ($target eq 'web') {
  998: 	       $currentstring .= $token->[4];
  999: 	    } elsif ($target eq 'tex') {
 1000: 		$currentstring .= "\$_{ ";
 1001: 	    } 
 1002:            return $currentstring;
 1003: 	}
 1004:         sub end_sub {
 1005: 	    my ($target,$token) = @_;
 1006:             my $currentstring = '';
 1007:             if ($target eq 'web') {
 1008: 	       $currentstring .= $token->[2];
 1009: 	    } elsif ($target eq 'tex') {
 1010: 	        $currentstring .= " }\$";
 1011:             }
 1012:            return $currentstring;
 1013: 	}
 1014: #-- <sup> tag
 1015:         sub start_sup {
 1016: 	    my ($target,$token) = @_;
 1017:             my $currentstring = '';
 1018:             if ($target eq 'web') {
 1019: 	       $currentstring .= $token->[4];
 1020: 	    } elsif ($target eq 'tex') {
 1021: 		$currentstring .= "\$^{ ";
 1022: 	    } 
 1023:            return $currentstring;
 1024: 	}
 1025:         sub end_sup {
 1026: 	    my ($target,$token) = @_;
 1027:             my $currentstring = '';
 1028:             if ($target eq 'web') {
 1029: 	       $currentstring .= $token->[2];
 1030: 	    } elsif ($target eq 'tex') {
 1031: 	        $currentstring .= " }\$";
 1032:             }
 1033:            return $currentstring;
 1034: 	}
 1035: #-- <hr> tag
 1036:         sub start_hr {
 1037: 	    my ($target,$token) = @_;
 1038:             my $currentstring = '';
 1039:             if ($target eq 'web') {
 1040: 	       $currentstring .= $token->[4];
 1041: 	    } elsif ($target eq 'tex') {
 1042: 		$currentstring .= '\vskip 0 mm \noindent\makebox[\textwidth - 8 mm][b]{\hrulefill}';
 1043: 	    } 
 1044:            return $currentstring;
 1045: 	}
 1046:         sub end_hr {
 1047: 	    my ($target,$token) = @_;
 1048:             my $currentstring = '';
 1049:             if ($target eq 'web') {
 1050: 	       $currentstring .= $token->[2];
 1051: 	    } elsif ($target eq 'tex') {
 1052: 	    } 
 1053:            return $currentstring;
 1054: 	}
 1055: #-- <a> tag
 1056:         sub start_a {
 1057: 	    my ($target,$token) = @_;
 1058:             my $currentstring = '';
 1059:             if ($target eq 'web') {
 1060: 	       $currentstring .= $token->[4];
 1061: 	    } elsif ($target eq 'tex') {
 1062: 	    }
 1063:            return $currentstring;
 1064: 	}
 1065:         sub end_a {
 1066: 	    my ($target,$token,$tagstack,$stackref) = @_;
 1067:             my $currentstring = '';
 1068:             if ($target eq 'web') {
 1069: 	       $currentstring .= $token->[2];
 1070: 	    } elsif ($target eq 'tex') {
 1071:                 my  $tempor_var = $stackref->[$#$stackref];
 1072: 		if (index($tempor_var,'name') != -1 ) {
 1073: 		    $tempor_var =~ s/name=([^,]*),/$1/g;
 1074: #	        $currentstring .= " \\label{$tempor_var}";
 1075: 	        } elsif (index($tempor_var,'href') != -1 ) {
 1076: 		    $tempor_var =~ s/href=([^,]*),/$1/g;
 1077: 	        $currentstring .= " \\ref{$tempor_var}";
 1078: 	        }
 1079:             }
 1080:            return $currentstring;
 1081: 	}
 1082: #-- <li> tag
 1083:         sub start_li {
 1084: 	    my ($target,$token,$tagstack,$stackref) = @_;
 1085:             my $currentstring = '';
 1086:             if ($target eq 'web') {
 1087:               $currentstring = $token->[4];     
 1088: 	    } elsif ($target eq 'tex') {
 1089:                 my  $tempor_var = $stackref->[$#$stackref];
 1090:                 if (index($tempor_var,'circle') != -1 ) {
 1091: 	          $currentstring .= " \\item[o] ";
 1092: 	        } elsif (index($tempor_var,'square') != -1 ) {
 1093: 	               $currentstring .= " \\item[$\Box$] ";
 1094: 	        } elsif ($tempor_var ne '') { 
 1095: 		       $_ = $tempor_var;
 1096:                        m/my\s*([^=]*)=/;
 1097: 		       $currentstring .= " \\item[$1] ";
 1098: 		} else {
 1099: 		    $currentstring .= " \\item ";
 1100: 	        }  
 1101: 	    } 
 1102: 	   return $currentstring;
 1103: 	}
 1104:         sub end_li {
 1105: 	    my ($target,$token) = @_;
 1106:             my $currentstring = '';
 1107:             if ($target eq 'web') {
 1108:               $currentstring = $token->[2];     
 1109: 	    } 
 1110: 	   return $currentstring;
 1111: 	}
 1112: #-- <u> tag
 1113:         sub start_u {
 1114: 	    my ($target,$token) = @_;
 1115:             my $currentstring = '';
 1116:             if ($target eq 'web') {
 1117: 	       $currentstring .= $token->[4];
 1118: 	    } elsif ($target eq 'tex') {
 1119: 		$currentstring .= '\underline{';
 1120: 	    } 
 1121:            return $currentstring;
 1122: 	}
 1123:         sub end_u {
 1124: 	    my ($target,$token) = @_;
 1125:             my $currentstring = '';
 1126:             if ($target eq 'web') {
 1127: 	       $currentstring .= $token->[2];
 1128: 	    } elsif ($target eq 'tex') {
 1129: 	        $currentstring .= '}';
 1130:             }
 1131:            return $currentstring;
 1132: 	}
 1133: #-- <ul> tag
 1134:         sub start_ul {
 1135: 	    my ($target,$token) = @_;
 1136:             my $currentstring = '';
 1137:             if ($target eq 'web') {
 1138:               $currentstring = $token->[4];     
 1139: 	    } elsif ($target eq 'tex') {
 1140:               $currentstring = '\begin{itemize}';  
 1141: 	    } 
 1142: 	   return $currentstring;
 1143: 	}
 1144:         sub end_ul {
 1145: 	    my ($target,$token) = @_;
 1146:             my $currentstring = '';
 1147:             if ($target eq 'web') {
 1148:               $currentstring = $token->[2];     
 1149: 	    } elsif ($target eq 'tex') {
 1150:               $currentstring = '\end{itemize}';  
 1151: 	    } 
 1152: 	   return $currentstring;
 1153: 	}
 1154: #-- <menu> tag
 1155:         sub start_menu {
 1156: 	    my ($target,$token) = @_;
 1157:             my $currentstring = '';
 1158:             if ($target eq 'web') {
 1159:               $currentstring = $token->[4];     
 1160: 	    } elsif ($target eq 'tex') {
 1161:               $currentstring = " \\begin{itemize} ";  
 1162: 	    } 
 1163: 	   return $currentstring;
 1164: 	}
 1165:         sub end_menu {
 1166: 	    my ($target,$token) = @_;
 1167:             my $currentstring = '';
 1168:             if ($target eq 'web') {
 1169:               $currentstring = $token->[2];     
 1170: 	    } elsif ($target eq 'tex') {
 1171:               $currentstring = " \\end{itemize}";  
 1172: 	    } 
 1173: 	   return $currentstring;
 1174: 	}
 1175: #-- <dir> tag
 1176:         sub start_dir {
 1177: 	    my ($target,$token) = @_;
 1178:             my $currentstring = '';
 1179:             if ($target eq 'web') {
 1180:               $currentstring = $token->[4];     
 1181: 	    } elsif ($target eq 'tex') {
 1182:               $currentstring = " \\begin{itemize} ";  
 1183: 	    } 
 1184: 	   return $currentstring;
 1185: 	}
 1186:         sub end_dir {
 1187: 	    my ($target,$token) = @_;
 1188:             my $currentstring = '';
 1189:             if ($target eq 'web') {
 1190:               $currentstring = $token->[2];     
 1191: 	    } elsif ($target eq 'tex') {
 1192:               $currentstring = " \\end{itemize}";  
 1193: 	    } 
 1194: 	   return $currentstring;
 1195: 	}
 1196: #-- <ol> tag
 1197:         sub start_ol {
 1198: 	    my ($target,$token) = @_;
 1199:             my $currentstring = '';
 1200:             if ($target eq 'web') {
 1201:               $currentstring = $token->[4];     
 1202: 	    } elsif ($target eq 'tex') {
 1203:               $currentstring = '\begin{enumerate}';  
 1204: 	    } 
 1205: 	   return $currentstring;
 1206: 	}
 1207:         sub end_ol {
 1208: 	    my ($target,$token) = @_;
 1209:             my $currentstring = '';
 1210:             if ($target eq 'web') {
 1211:               $currentstring = $token->[2];     
 1212: 	    } elsif ($target eq 'tex') {
 1213:               $currentstring = '\end{enumerate}';  
 1214: 	    } 
 1215: 	   return $currentstring;
 1216: 	}
 1217: #-- <dl> tag
 1218:         sub start_dl {
 1219: 	    my ($target,$token) = @_;
 1220:             my $currentstring = '';
 1221:             if ($target eq 'web') {
 1222:               $currentstring = $token->[4];     
 1223: 	    } elsif ($target eq 'tex') {
 1224:               $currentstring = '\begin{description}';  
 1225: 	    } 
 1226: 	   return $currentstring;
 1227: 	}
 1228:         sub end_dl {
 1229: 	    my ($target,$token) = @_;
 1230:             my $currentstring = '';
 1231:             if ($target eq 'web') {
 1232:               $currentstring = $token->[2];     
 1233: 	    } elsif ($target eq 'tex') {
 1234:               $currentstring = '\end{description}';  
 1235: 	    } 
 1236: 	   return $currentstring;
 1237: 	}
 1238: #-- <dt> tag
 1239:         sub start_dt {
 1240: 	    my ($target,$token) = @_;
 1241:             my $currentstring = '';
 1242:             if ($target eq 'web') {
 1243:               $currentstring = $token->[4];     
 1244: 	    } elsif ($target eq 'tex') {
 1245:               $currentstring = '\item[';  
 1246: 	    } 
 1247: 	   return $currentstring;
 1248: 	}
 1249:         sub end_dt {
 1250: 	    my ($target,$token) = @_;
 1251:             my $currentstring = '';
 1252:             if ($target eq 'web') {
 1253:               $currentstring = $token->[2];    
 1254:             } elsif ($target eq 'tex') {
 1255:               $currentstring = ']';  
 1256: 	    } 
 1257: 	   return $currentstring;
 1258: 	}
 1259: #-- <dd> tag
 1260:         sub start_dd {
 1261: 	    my ($target,$token) = @_;
 1262:             my $currentstring = '';
 1263:             if ($target eq 'web') {
 1264:               $currentstring = $token->[4];     
 1265: 	    } 
 1266: 	   return $currentstring;
 1267: 	}
 1268:         sub end_dd {
 1269: 	    my ($target,$token) = @_;
 1270:             my $currentstring = '';
 1271:             if ($target eq 'web') {
 1272:               $currentstring = $token->[2];    
 1273:             } 
 1274: 	   return $currentstring;
 1275: 	}
 1276: #-- <table> tag
 1277:         sub start_table {
 1278: 	    my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
 1279:             my $currentstring = '';
 1280:             if ($target eq 'web') {
 1281:               $currentstring = $token->[4];     
 1282: 	    } elsif ($target eq 'tex') {
 1283: 		my $aa = {};
 1284: 		push @Apache::londefdef::table, $aa; 
 1285: 		$Apache::londefdef::table[-1]{'row_number'} = -1;
 1286: 		$Apache::londefdef::table[-1]{'output'} = ' \noindent \begin{tabular} ';
 1287: 		my $border = &Apache::lonxml::get_param('border',$parstack,$safeeval);
 1288: 		unless (defined $border) { $border = 0; }
 1289: 		if ($border) { 
 1290: 		    $Apache::londefdef::table[-1]{'hinc'} = '\hline '; 
 1291: 		    $Apache::londefdef::table[-1]{'vinc'} = '&'; 
 1292: 		    $Apache::londefdef::table[-1]{'vvinc'} = '|';
 1293: 		} else {
 1294: 		    $Apache::londefdef::table[-1]{'hinc'} = ''; 
 1295: 		    $Apache::londefdef::table[-1]{'vinc'} = '&'; 
 1296: 		    $Apache::londefdef::table[-1]{'vvinc'} = '';
 1297: 		}
 1298: 	    } 
 1299: 	   return $currentstring;
 1300: 	}
 1301:         sub end_table {
 1302: 	    my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
 1303:             my $currentstring = '';
 1304:             if ($target eq 'web') {
 1305:               $currentstring = $token->[2];     
 1306: 	    } elsif ($target eq 'tex') {
 1307: 		my $inmemory = '';
 1308: 		my $output = '';
 1309:                 #construct header of the table
 1310: 		my $header_of_table = '{'.$Apache::londefdef::table[-1]{'vvinc'};
 1311: 		my $in;
 1312: 		for ($in=0;$in<=$Apache::londefdef::table[-1]{'counter_columns'};$in++) {
 1313: 		    $header_of_table .= $Apache::londefdef::table[-1]{'columns'}[$in].$Apache::londefdef::table[-1]{'vvinc'};
 1314: 		}
 1315: 		$header_of_table .= '}';
 1316:                 #fill the table
 1317: 		for ($in=0;$in<=$Apache::londefdef::table[-1]{'row_number'};$in++) {
 1318: 		    $output .=  $Apache::londefdef::table[-1]{'rowdata'}[$in];
 1319: 		    chop $output;
 1320: 		    $output .= ' \\\\ ';
 1321: 		}
 1322:                 #define the length of the table cells
 1323: 		my @lengthforoutput = split(/,/,$Apache::londefdef::table[-1]{'lengthrow'}[0]);
 1324: 		my $how_many_columns = $#lengthforoutput + 1;
 1325: 		my $filled_columns = 0;
 1326: 		foreach my $tempo_length (@{ $Apache::londefdef::table[-1]{'lengthrow'} }) {
 1327: 		    my @length = split(/,/,$tempo_length);
 1328: 		    for (my $ico=0;$ico<$how_many_columns;$ico++) {
 1329: 			if (not $lengthforoutput[$ico]=~m/\s*0\s*/) {$filled_columns++;}
 1330: 		    }
 1331: 		}
 1332: 		my $temp_file;
 1333: 		my $filename = "/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout.tbl";
 1334: 		if (-e $filename) {
 1335: 		    $temp_file = Apache::File->new($filename); 
 1336: 		    my @tbl_file_content = <$temp_file>;
 1337: 		    my ($one,$two) = split(/,/,$tbl_file_content[0]);
 1338: 			$how_many_columns+=$one-1;
 1339: 			$filled_columns+=$two;
 1340: 		} else {
 1341: 		    $temp_file = Apache::File->new('>>'.$filename); 
 1342: 		}
 1343: 		print $temp_file "$how_many_columns,$filled_columns\n";
 1344: 		foreach my $tempo_length (@{ $Apache::londefdef::table[-1]{'lengthrow'} }) {
 1345: 		    my @length = split(/,/,$tempo_length);
 1346: 		    for (my $ico=0;$ico<=$#lengthforoutput;$ico++) {
 1347: 			$lengthforoutput[$ico] =~ m/(\d*\.?\d*)\s*(\w+)/;
 1348: 			my $old_value = $1;
 1349: 			my $old_unit = $2; 
 1350: 			if ($old_unit eq 'cm') { 
 1351: 			    $old_value = $old_value * 10;
 1352: 			} elsif ($old_unit eq 'in') { 
 1353: 			    $old_value = $old_value * 25.4;
 1354: 			} elsif ($old_unit eq 'pt') {
 1355: 			    $old_value = $old_value * 25.4/72.27;
 1356: 			} elsif ($old_unit eq 'pc') {
 1357: 			    $old_value = $old_value * 25.4/6.022;
 1358: 			}
 1359: 			$old_unit = 'mm';
 1360:  			$length[$ico] =~ m/(\d*\.?\d*)\s*(\w+)/;
 1361: 			my $new_value = $1;
 1362: 			my $new_unit = $2;
 1363: 			if ($new_unit eq 'cm') { 
 1364: 			    $new_value = $new_value * 10;
 1365: 			} elsif ($old_unit eq 'in') { 
 1366: 			    $new_value = $new_value * 25.4;
 1367: 			} elsif ($old_unit eq 'pt') {
 1368: 			    $new_value = $new_value * 25.4/72.27;
 1369: 			} elsif ($old_unit eq 'pc') {
 1370: 			    $new_value = $new_value * 25.4/6.022;
 1371: 			}
 1372: 			$new_unit = 'mm';
 1373: 			if ($old_value < $new_value) {
 1374: 			    $lengthforoutput[$ico] = $new_value.' mm';
 1375: 			} else {
 1376: 			    $lengthforoutput[$ico] = $old_value.' mm';
 1377: 			}		 
 1378: 		    }
 1379: 		}
 1380:                 my $parboxlength = '(\textwidth';
 1381:                 for (my $io=0; $io<=$#lengthforoutput;$io++) {
 1382: 		    $parboxlength .= ' - '.$lengthforoutput[$io].' ';
 1383: 		}
 1384: 		$parboxlength .= ')/($GLOBALnumberOFcolumns+1) - 1 mm';
 1385: 		$output =~ s/\\parbox{}{}/\\parbox{1 mm}{}/g;
 1386: 		$output =~ s/\\parbox{}{(\\textbf{\w?\.?})}/\\parbox{5 mm}{$1}/g; #for stupid tables with empty columns
 1387: 		$output =~ s/\\parbox{}/\\parbox{$parboxlength}/g;
 1388:                 my ($howmanyatall,$howmanyfilled) = (0,0);
 1389: 	     
 1390: 		my @tagar = @$tagstack;
 1391: 		my $signature = 1;
 1392: 		for (my $ico=0;$ico<$#tagar;$ico++) {
 1393: 		     if ($tagar[$ico] eq 'table') { $signature = 0; }
 1394: 		}
 1395: 		if ($signature) {
 1396: 		    my $totalnumber = $how_many_columns-$filled_columns-1;
 1397: 		    $output =~ s/\$GLOBALnumberOFcolumns/$totalnumber/g;
 1398: 		}		
 1399: 		$Apache::londefdef::table[-1]{'output'} .= $header_of_table.$output.$Apache::londefdef::table[-1]{'hinc'}.'\end{tabular}\vskip 0 mm ';
 1400: 		if ($#Apache::londefdef::table > 0) {
 1401: 		    $inmemory = $Apache::londefdef::table[-1]{'output'};
 1402: 		    pop @Apache::londefdef::table;
 1403: 		    $Apache::londefdef::table[-1]{'rowdata'}[$Apache::londefdef::table[-1]{'row_number'}] .= $inmemory;
 1404: 		} else {
 1405: 		    $currentstring = $Apache::londefdef::table[-1]{'output'};
 1406: 		    $currentstring =~ s/\\\\\s+\\\\/\\\\/g; 
 1407: 		    pop @Apache::londefdef::table;
 1408: 		}
 1409: 	    }
 1410: 	   return $currentstring;
 1411: 	}
 1412: #-- <tr> tag
 1413:         sub start_tr {
 1414: 	    my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
 1415:             my $currentstring = '';
 1416:             if ($target eq 'web') {
 1417:               $currentstring = $token->[4];     
 1418: 	    } elsif ($target eq 'tex') {
 1419: 		$Apache::londefdef::table[-1]{'row_number'}++;
 1420: 		my $alignchar = substr(&Apache::lonxml::get_param('align',$parstack,$safeeval),0,1);
 1421: 		if ($alignchar ne '') {
 1422: 		    push @ {$Apache::londefdef::table[-1]{'rows'} }, $alignchar;
 1423: 		} else {
 1424: 		    push @ {$Apache::londefdef::table[-1]{'rows'} }, 'l';
 1425: 		}
 1426: 		push ( @{ $Apache::londefdef::table[-1]{'rowdata'} }, $Apache::londefdef::table[-1]{'hinc'});
 1427: 		$Apache::londefdef::table[-1]{'counter_columns'} = -1;
 1428: 		$Apache::londefdef::table[-1]{'length'} = ''; 
 1429: 	    } 
 1430: 	   return $currentstring;
 1431: 	}        
 1432:         sub end_tr {
 1433: 	    my ($target,$token) = @_;
 1434:             my $currentstring = '';
 1435:             if ($target eq 'web') {
 1436: 		$currentstring = $token->[2];     
 1437: 	    } elsif ($target eq 'tex') {
 1438: #		$currentstring .= ' START ROW '. $Apache::londefdef::table[-1]{'rowdata'}[$Apache::londefdef::table[-1]{'row_number'}].' END ROW ';		
 1439: 		push @{ $Apache::londefdef::table[-1]{'lengthrow'} },$Apache::londefdef::table[-1]{'length'};
 1440: 
 1441: 	    }
 1442: 	   return $currentstring;
 1443: 	}
 1444: #-- <td> tag
 1445:         sub start_td {
 1446: 	    my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
 1447:             my $currentstring = '';
 1448:             if ($target eq 'web') {
 1449:               $currentstring = $token->[4];     
 1450: 	    } elsif ($target eq 'tex') {
 1451: 		my $what_to_push = substr(&Apache::lonxml::get_param('align',$parstack,$safeeval),0,1);
 1452: 		if ($what_to_push eq '') {
 1453: 		    $what_to_push = substr($Apache::londefdef::table[-1]{'rows'}[0],0,1);;
 1454: 		}
 1455: 		    push @{ $Apache::londefdef::table[-1]{'columns'} }, $what_to_push;
 1456: 		$Apache::londefdef::table[-1]{'counter_columns'}++;
 1457: 		&Apache::lonxml::startredirection();
 1458: ;
 1459: 	    } 
 1460: 	   return $currentstring;
 1461: 	}        
 1462:         sub end_td {
 1463: 	    my ($target,$token) = @_;
 1464:             my $currentstring = '';
 1465:             if ($target eq 'web') {
 1466: 		$currentstring = $token->[2];     
 1467: 	    } elsif ($target eq 'tex') {
 1468: 		my $current_row = $Apache::londefdef::table[-1]{'row_number'};
 1469: 		my $data=&Apache::lonxml::endredirection();
 1470: 		if ($data=~m/width\s*=\s*(\d+\.*\d*\s*(mm|cm))/) {                 
 1471:                     $Apache::londefdef::table[-1]{'length'} .= $1.',';        
 1472: 		} else {
 1473: 		    $Apache::londefdef::table[-1]{'length'} .= '0 mm,'; 
 1474:                 }                                        
 1475: 		@{ $Apache::londefdef::table[-1]{'rowdata'} }[$current_row] .= '\parbox{'.$1.'}{'.$data.'} '.$Apache::londefdef::table[-1]{'vinc'};
 1476: 	    }
 1477: 	   return $currentstring;
 1478: 	}
 1479: #-- <th> tag
 1480:         sub start_th {
 1481: 	    my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
 1482:             my $currentstring = '';
 1483:             if ($target eq 'web') {
 1484:               $currentstring = $token->[4];     
 1485: 	    } elsif ($target eq 'tex') {
 1486: 		my $what_to_push = substr(&Apache::lonxml::get_param('align',$parstack,$safeeval),0,1);
 1487: 		if ($what_to_push eq '') {
 1488: 		    $what_to_push = substr($Apache::londefdef::table[-1]{'rows'}[0],0,1);;
 1489: 		}
 1490: 		    push @{ $Apache::londefdef::table[-1]{'columns'} }, $what_to_push;
 1491: 		$Apache::londefdef::table[-1]{'counter_columns'}++;
 1492: 		&Apache::lonxml::startredirection();
 1493: ;
 1494: 	    } 
 1495: 	   return $currentstring;
 1496: 	}        
 1497:         sub end_th {
 1498: 	    my ($target,$token) = @_;
 1499:             my $currentstring = '';
 1500:             if ($target eq 'web') {
 1501: 		$currentstring = $token->[2];     
 1502: 	    } elsif ($target eq 'tex') {
 1503: 		my $current_row = $Apache::londefdef::table[-1]{'row_number'};
 1504: 		my $data=&Apache::lonxml::endredirection();
 1505: 		if ($data=~m/width\s*=\s*(\d+\.*\d*\s*(mm|cm))/) {                 
 1506:                     $Apache::londefdef::table[-1]{'length'} .= $1.',';             
 1507: 		} else {
 1508: 		    $Apache::londefdef::table[-1]{'length'} .= '0 mm,'; 
 1509:                 }                                                           
 1510: 		@{ $Apache::londefdef::table[-1]{'rowdata'} }[$current_row] .= '\parbox{'.$1.'}{\textbf{'.$data.'}} '.$Apache::londefdef::table[-1]{'vinc'};
 1511: 	    }
 1512: 	   return $currentstring;
 1513: 	}
 1514: #-- <img> tag
 1515:         sub start_img {
 1516: 	    my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
 1517:             $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=
 1518:                                         $token->[2]->{'src'};
 1519:             my $currentstring = '';
 1520: 	    my $width_param = '';
 1521: 	    my $height_param = '';
 1522: 	    my $scaling = .3;
 1523: 
 1524: 	    if ($target eq 'web') {
 1525:               $currentstring = $token->[4];     
 1526: 	    } elsif ($target eq 'tex') {
 1527: 	      my $src = &Apache::lonxml::get_param('src',$parstack,$safeeval);
 1528: 	      $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
 1529:               if (-e $src) {          #new one
 1530: 		  my $image = Image::Magick->new;
 1531: 		  my $current_figure = $image->Read($src);
 1532: 		  $width_param = $image->Get('width') * $scaling;;
 1533: 		  $height_param = $image->Get('height') * $scaling;;
 1534: 		  undef $image;
 1535: 		  my $epssrc = $src;
 1536: 		  $epssrc =~ s/(\.gif|\.jpg)$/\.eps/i;
 1537: 		  if (not -e $epssrc) {
 1538: 		      my $localfile = $epssrc;
 1539: 		      $localfile =~ s/.*(\/res)/$1/;	
 1540: 		      my $file;
 1541: 		      my $path;	
 1542: 		      if ($localfile =~ m!(.*)/([^/]*)$!) {
 1543: 			  $file = $2;
 1544: 			  $path = $1.'/'; 
 1545: 		      }	
 1546: 		      my $signal_eps = 0;
 1547: 		      my @content_directory = &Apache::lonnet::dirlist($path);
 1548: 		      for (my $iy=0;$iy<=$#content_directory;$iy++) {
 1549: 			  my @tempo_array = split(/&/,$content_directory[$iy]);
 1550: 			  $content_directory[$iy] = $tempo_array[0];
 1551: 			  if ($file eq $tempo_array[0]) {
 1552: 			      $signal_eps = 1;
 1553: 			      last;
 1554: 			  }
 1555: 		      }
 1556: 		      if ($signal_eps) {
 1557: 			  my $eps_file = &Apache::lonnet::getfile($localfile);
 1558: 		      } else {
 1559: 			  $localfile = $src;
 1560: 			  $localfile =~ s/.*(\/res)/$1/;	
 1561: 			  my $as = &Apache::lonnet::getfile($src);		      
 1562: 		      }
 1563: 		  }
 1564: 		  my $file;
 1565: 		  my $path;	
 1566: 		  if ($src =~ m!(.*)/([^/]*)$!) {
 1567: 		      $file = $2; 
 1568: 		      $path = $1.' /'; 
 1569: 		  } 
 1570: 		  my $newsrc = $src;
 1571: 		  $newsrc =~ s/(\.gif|\.jpg)$/\.eps/i;
 1572: 		  $file=~s/(\.gif|\.jpg)$/\.eps/i;
 1573: 		  #do we have any specified size of the picture?
 1574: 		  my $TeXwidth = &Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval); 
 1575: 		  my $TeXheight = &Apache::lonxml::get_param('TeXheight',$parstack,$safeeval); 
 1576: 		  my $width = &Apache::lonxml::get_param('width',$parstack,$safeeval);
 1577: 		  if ($TeXwidth ne '') { 
 1578: 		      $width_param = $TeXwidth; 
 1579: 		  } elsif ($TeXheight ne '') { 
 1580: 		      $width_param = $TeXheight/$height_param*$width_param;
 1581: 		  } elsif ($width ne '') {
 1582: 		      $width_param = $width*$scaling;      
 1583: 		  }
 1584: 		  #where can we find the picture?
 1585: 		  if (-e $newsrc) {
 1586: 		      if ($path) {
 1587: 			  $currentstring .= '\noindent\graphicspath{{'.$path.'}}\fbox{\includegraphics[width='.$width_param.' mm]{'.$file.'}} ';
 1588: 		      }
 1589: 		  } else {
 1590: 		      my $temp_file;
 1591: 		      my $filename = "/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout.dat";
 1592: 		      $temp_file = Apache::File->new('>>'.$filename); 
 1593: 		      print $temp_file "$src\n";
 1594: 		      $currentstring .= '\graphicspath{{/home/httpd/prtspool/}}\fbox{\includegraphics[width='.$width_param.' mm]{'.$file.'}} ';
 1595: 		  }
 1596: 	      } else {
 1597: 		  my $alt = &Apache::lonxml::get_param('alt',$parstack,$safeeval);
 1598:                   if ($alt) {
 1599: 		      $currentstring .= ' '.$alt.' ';
 1600: 		  } else {
 1601:                       $currentstring .= ' THE ORIGINAL PROBLEM CONTAINS EMPTY IMG TAG WITHOUT IMAGE ';
 1602: 		  }
 1603: 	      }
 1604: 	    }
 1605: 	    return $currentstring;
 1606: 	}
 1607:         sub end_img {
 1608: 	    my ($target,$token) = @_;
 1609:             my $currentstring = '';
 1610:             if ($target eq 'web') {
 1611:               $currentstring = $token->[2];
 1612: 	    } elsif ($target eq 'tex') {
 1613:               $currentstring = '';
 1614: 	    }
 1615: 	   return $currentstring;
 1616: 	}
 1617: #-- <applet> tag
 1618: 
 1619:         sub start_applet {
 1620: 	    my ($target,$token) = @_;
 1621:               $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=   
 1622:                                         $token->[2]->{'code'};
 1623:               $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=
 1624:                                         $token->[2]->{'archive'};
 1625:             my $currentstring = '';
 1626:             if ($target eq 'web') {
 1627:               $currentstring = $token->[4];
 1628: 	    } elsif ($target eq 'tex') {
 1629:               $currentstring = " \\begin{figure} ";
 1630: 	    } 
 1631: 	   return $currentstring;
 1632: 	}
 1633: sub end_applet {
 1634:     my ($target,$token) = @_;
 1635:     my $currentstring = '';
 1636:     if ($target eq 'web') {
 1637: 	$currentstring = $token->[2];
 1638:     } elsif ($target eq 'tex') {
 1639: 	$currentstring = " \\end{figure}";
 1640:     } 
 1641:     return $currentstring;
 1642: }
 1643: 
 1644: #-- <embed> tag
 1645: 
 1646: sub start_embed {    
 1647:     my ($target,$token) = @_;
 1648:     $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=
 1649: 	$token->[2]->{'src'};
 1650:     my $currentstring = '';
 1651:     if ($target eq 'web') {
 1652: 	$currentstring = $token->[4];
 1653:     } elsif ($target eq 'tex') {
 1654: 	$currentstring = " \\begin{figure} ";  
 1655:     } 
 1656:     return $currentstring;
 1657: }
 1658:         sub end_embed {
 1659: 	    my ($target,$token) = @_;
 1660:             my $currentstring = '';
 1661:             if ($target eq 'web') {
 1662:               $currentstring = $token->[2];     
 1663: 	    } elsif ($target eq 'tex') {
 1664:               $currentstring = " \\end{figure}";  
 1665: 	    } 
 1666: 	   return $currentstring;
 1667: 	}
 1668: 
 1669: #-- <param> tag
 1670: 
 1671:         sub start_param {
 1672: 	    my ($target,$token) = @_;
 1673: 	    if ($token->[2]->{'name'} eq 'cabbase') {
 1674:                       $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=
 1675: 					     $token->[2]->{'value'};
 1676:             }   
 1677:             $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=   
 1678:                                         $token->[2]->{'src'};
 1679:             my $currentstring = '';
 1680:             if ($target eq 'web') {
 1681:               $currentstring = $token->[4];     
 1682: 	    } elsif ($target eq 'tex') {
 1683:               $currentstring = " \\begin{figure} ";  
 1684: 	    } 
 1685: 	   return $currentstring;
 1686: 	}
 1687:         sub end_param {
 1688: 	    my ($target,$token) = @_;
 1689:             my $currentstring = '';
 1690:             if ($target eq 'web') {
 1691:               $currentstring = $token->[2];     
 1692: 	    } elsif ($target eq 'tex') {
 1693:               $currentstring = " \\end{figure}";  
 1694: 	    } 
 1695: 	   return $currentstring;
 1696: 	}
 1697: 
 1698: #-- <allow> tag
 1699: 
 1700:         sub start_allow {
 1701: 	    my ($target,$token) = @_;
 1702: 
 1703:             $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=   
 1704:                                         $token->[2]->{'src'};
 1705: 
 1706: 	   return '';
 1707: 	}
 1708:         sub end_allow {
 1709: 	   return '';
 1710: 	}
 1711: #-- Frames
 1712: 	sub start_frameset {
 1713: 	  my ($target,$token) = @_;
 1714: 	  my $currentstring = '';
 1715: 	  if ($target eq 'web') { 
 1716: 	    if (!$Apache::lonxml::registered) {
 1717: 	      $currentstring.='<head>'.
 1718: 		  &Apache::lonxml::registerurl(undef,$target).'</head>';
 1719: 	    }
 1720: 	    $currentstring .= $token->[4];
 1721: 	  }
 1722: 	  return $currentstring;
 1723: 	}
 1724:         sub end_frameset {
 1725: 	  my ($target,$token) = @_;
 1726: 	  my $currentstring = '';
 1727: 	  if ($target eq 'web') {
 1728: 	    $currentstring = $token->[2];
 1729: 	  }
 1730: 	  return $currentstring;
 1731: 	}
 1732: #-- <pre>
 1733: 	sub start_pre {
 1734: 	    my ($target,$token) = @_;
 1735:             my $currentstring = '';
 1736:             if ($target eq 'web') {
 1737: 	       $currentstring .= $token->[4];
 1738: 	    } elsif ($target eq 'tex') {
 1739: 		$currentstring .= '\begin{verbatim}';
 1740: 	    } 
 1741:            return $currentstring;
 1742: 	}
 1743:         sub end_pre {
 1744: 	    my ($target,$token) = @_;
 1745:             my $currentstring = '';
 1746:             if ($target eq 'web') {
 1747: 	       $currentstring .= $token->[2];
 1748: 	    } elsif ($target eq 'tex') {
 1749: 		$currentstring .= '\end{verbatim}';
 1750: 	    }
 1751:            return $currentstring;
 1752: 	}
 1753: #-- <insert>
 1754: 	sub start_insert {
 1755: 	    my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
 1756:             my $currentstring = '';
 1757:             if ($target eq 'web') {
 1758: 		my $display = &Apache::lonxml::get_param('display',$parstack,$safeeval);
 1759: 	       $currentstring .= '<b>'.$display.'</b>';;
 1760: 	    }
 1761:            return $currentstring;
 1762: 	}
 1763:         sub end_insert {
 1764: 	    my ($target,$token) = @_;
 1765:             my $currentstring = '';
 1766:             if ($target eq 'web') {
 1767: 	       $currentstring .= '';
 1768: 	    }
 1769:            return $currentstring;
 1770: 	}
 1771: #-- <externallink>
 1772: 	sub start_externallink {
 1773: 	    my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
 1774:             my $currentstring = '';
 1775:             if ($target eq 'web') {
 1776: 		my $display = &Apache::lonxml::get_param('display',$parstack,$safeeval);
 1777: 	       $currentstring .= '<b>'.$display.'</b>';;
 1778: 	    }
 1779:            return $currentstring;
 1780: 	}
 1781:         sub end_externallink {
 1782: 	    my ($target,$token) = @_;
 1783:             my $currentstring = '';
 1784:             if ($target eq 'web') {
 1785: 	       $currentstring .= '';
 1786: 	    }
 1787:            return $currentstring;
 1788: 	}
 1789: #-- <blankspace heigth="">
 1790:         sub start_blankspace {
 1791: 	    my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
 1792:             my $currentstring = '';
 1793:             if ($target eq 'tex') {
 1794: 		my $howmuch = &Apache::lonxml::get_param('heigth',$parstack,$safeeval);
 1795: 		$currentstring .= '\vskip '.$howmuch.' ';
 1796: 	    }
 1797:            return $currentstring;
 1798: 	}
 1799:         sub end_blankspace {
 1800: 	    my ($target,$token) = @_;
 1801:             my $currentstring = '';
 1802:             if ($target eq 'tex') {
 1803: 	       $currentstring .= '';
 1804: 	    }
 1805:            return $currentstring;
 1806: 	}
 1807: 
 1808: 1;
 1809: __END__

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