Annotation of loncom/xml/londefdef.pm, revision 1.122

1.1       sakharuk    1: # The LearningOnline Network with CAPA
                      2: # Tags Default Definition Module 
                      3: #
1.122   ! albertel    4: # $Id: londefdef.pm,v 1.121 2003/03/18 07:26:49 www Exp $
1.41      sakharuk    5: # 
1.34      www         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: #
1.1       sakharuk   41: # last modified 06/26/00 by Alexander Sakharuk
1.28      www        42: # 11/6,11/30,02/01/01,5/4 Gerd Kortemeyer
1.41      sakharuk   43: # 01/18 Alex Sakharuk
1.1       sakharuk   44: 
1.2       albertel   45: package Apache::londefdef; 
1.1       sakharuk   46: 
1.118     www        47: use Apache::lonnet();
1.1       sakharuk   48: use strict;
1.118     www        49: use Apache::lonxml();
1.57      sakharuk   50: use Apache::File();
1.70      sakharuk   51: use Image::Magick;
1.118     www        52: use Apache::lonmenu();
                     53: use Apache::lonmeta();
1.54      sakharuk   54: 
1.38      harris41   55: BEGIN {
1.15      sakharuk   56: 
1.121     www        57:     &Apache::lonxml::register('Apache::londefdef',('a','abbr','acronym','accessrule','address','allow','applet','area','b','base','basefont','bgo','bgsound','big','blink','blockquote','blankspace','body','br','button','caption','center','cite','code','col','colgroup','dd','del','dfn','dir','div','dl','dt','em','embed','externallink','fieldset','font','form','frame','frameset','h1','h2','h3','h4','h5','h6','head','hr','html','i','iframe','img','input','ins','insert','isindex','kbd','keygen','label','layer','legend','li','link','m','map','marquee','menu','meta','multicol','nobr','noembed','noframes','nolayer','noscript','object','ol','optgroup','option','output','p','param','pre','q','s','samp','select','server','small','spacer','span','strike','strong','sub','sup','table','tbody','td','textarea','tfoot','th','thead','title','tr','tt','tthoption','u','ul','var','wbr'));
1.15      sakharuk   58: 
1.3       sakharuk   59: }
1.1       sakharuk   60: 
1.35      sakharuk   61: #======================= TAG SUBROUTINES =====================
1.8       sakharuk   62: #-- <output>
1.21      albertel   63: sub start_output {
1.122   ! albertel   64:     my ($target) = @_;
        !            65:     if ($target eq 'meta') { $Apache::lonxml::metamode--; }
        !            66:     return '';
1.21      albertel   67: }
                     68: sub end_output {
1.122   ! albertel   69:     my ($target) = @_;
        !            70:     if ($target eq 'meta') { $Apache::lonxml::metamode++; }
        !            71:     return '';
1.21      albertel   72: }
1.4       sakharuk   73: #-- <m> tag
1.33      albertel   74: sub start_m {
1.122   ! albertel   75:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
        !            76:     my $currentstring = '';
        !            77:     if ($target eq 'web') {
        !            78: 	$Apache::lonxml::prevent_entity_encode++;
        !            79: 	my $inside = &Apache::lonxml::get_all_text_unbalanced("/m",$parser);
        !            80: 	$inside ='\\documentstyle{article}'.$inside;
        !            81: 	&Apache::lonxml::debug("M is starting with:$inside:");
        !            82: 	my $eval=&Apache::lonxml::get_param('eval',$parstack,$safeeval);
        !            83: 	if ($eval eq 'on') {
        !            84: 	    $inside=&Apache::run::evaluate($inside,$safeeval,$$parstack[-1]);
        !            85: 	    #&Apache::lonxml::debug("M is evaulated to:$inside:");
        !            86: 	}
        !            87: 	$currentstring = &Apache::lontexconvert::converted(\$inside);
        !            88: 	if ($Apache::lontexconvert::errorstring) {
        !            89: 	    &Apache::lonxml::warning("tth error: ".
        !            90: 				     $Apache::lontexconvert::errorstring);
        !            91: 	    $Apache::lontexconvert::errorstring='';
        !            92: 	}
        !            93: 	#&Apache::lonxml::debug("M is ends with:$currentstring:");
        !            94:     } elsif ($target eq 'tex') {
        !            95: 	$currentstring = &Apache::lonxml::get_all_text_unbalanced("/m",$parser);
        !            96: 	if ($currentstring=~/^(\s*\\\\\s*)*$/) {$currentstring = ' \vskip 0 mm ';}
        !            97:     } else {
        !            98: 	my $inside = &Apache::lonxml::get_all_text_unbalanced("/m",$parser);
        !            99:     }
        !           100:     return $currentstring;
1.33      albertel  101: }
1.122   ! albertel  102: 
1.33      albertel  103: sub end_m {
1.122   ! albertel  104:     my ($target,$token) = @_;
        !           105:     my $currentstring = '';
        !           106:     if ($target eq 'web') {
        !           107: 	$Apache::lonxml::prevent_entity_encode--;
        !           108:     } elsif ($target eq 'tex') {
        !           109: 	$currentstring = "";
        !           110:     } elsif ($target eq 'meta') {
        !           111:     }
        !           112:     return $currentstring;
1.33      albertel  113: }
1.110     albertel  114: 
                    115: sub start_tthoption {
1.122   ! albertel  116:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
        !           117:     my $result;
        !           118:     if ($target eq 'web') {
        !           119: 	my $inside = &Apache::lonxml::get_all_text("/tthoption",$parser);
        !           120: 	$inside=~s/^\s*//;
        !           121: 	if ($ENV{'browser.mathml'}) {
        !           122: 	    &tth::ttmoptions($inside);
        !           123: 	} else {
        !           124: 	    &tth::tthoptions($inside);
        !           125: 	}
        !           126:     }
        !           127:     return $result;
1.110     albertel  128: }
                    129: 
                    130: sub end_tthoption {
1.122   ! albertel  131:     my ($target,$token) = @_;
        !           132:     my $result;
        !           133:     return $result;
1.110     albertel  134: }
                    135: 
1.35      sakharuk  136: #-- <html> tag    
1.100     albertel  137: sub start_html {
                    138:     my ($target,$token) = @_;
                    139:     my $currentstring = '';
                    140:     if ($ENV{'browser.mathml'}) {
                    141: 	&tth::ttminit();
                    142: 	if ($ENV{'browser.unicode'}) {
                    143: 	    &tth::ttmoptions('-L -u1');
                    144: 	} else {
                    145: 	    &tth::ttmoptions('-L -u0');
                    146: 	}
                    147:     } else {
                    148: 	&tth::tthinit();
                    149: 	if ($ENV{'browser.unicode'}) {
                    150: 	    &tth::tthoptions('-L -u1');
                    151: 	} else {
                    152: 	    &tth::tthoptions('-L -u0');
                    153: 	}
                    154:     }
                    155:     if ($target eq 'web') {
                    156: 	$currentstring = &Apache::lonxml::xmlbegin().
                    157: 	    &Apache::lonxml::fontsettings();     
                    158:     } elsif ($target eq 'tex') {
                    159: 	@Apache::londefdef::table = ();
                    160: 	$currentstring .= '\documentclass[letterpaper]{article}
1.114     sakharuk  161:                            \newcommand{\keephidden}[1]{}
                    162:                            \renewcommand{\deg}{$^{\circ}$}
                    163:                            \usepackage{textcomp}
                    164:                            \usepackage[dvips]{graphicx}
                    165:                            \usepackage{epsfig}\usepackage{calc}
                    166: \newenvironment{choicelist}{\begin{list}{}{\setlength{\rightmargin}{0in}\setlength{\leftmargin}{0.13in}\setlength{\topsep}{0.05in}\setlength{\itemsep}{0.022in}\setlength{\parsep}{0in}\setlength{\belowdisplayskip}{0.04in}\setlength{\abovedisplayskip}{0.05in}\setlength{\abovedisplayshortskip}{-0.04in}\setlength{\belowdisplayshortskip}{0.04in}}}{\end{list}}';
1.100     albertel  167:     }
                    168:     return $currentstring;
                    169: }
1.122   ! albertel  170: 
        !           171: sub end_html {
        !           172:     my ($target,$token) = @_;
        !           173:     my $currentstring = '';
        !           174:     if ($target eq 'web') {
        !           175: 	$currentstring = &Apache::lonxml::xmlend();
        !           176:     }
        !           177:     return $currentstring;
        !           178: }
        !           179: 
1.35      sakharuk  180: #-- <head> tag
1.122   ! albertel  181: sub start_head {
        !           182:     my ($target,$token) = @_;
        !           183:     my $currentstring = '';
        !           184:     if ($target eq 'web') {
        !           185: 	$currentstring = $token->[4];     
        !           186:     } 
        !           187:     return $currentstring;
        !           188: }
        !           189: 
        !           190: sub end_head {
        !           191:     my ($target,$token) = @_;
        !           192:     my $currentstring = '';
        !           193:     if ($target eq 'web') {
        !           194: 	$currentstring = &Apache::lonmenu::registerurl(undef,$target).
        !           195: 	    $token->[2];    
        !           196:     } 
        !           197:     return $currentstring;
        !           198: }
        !           199: 
1.35      sakharuk  200: #-- <map> tag
1.122   ! albertel  201: sub start_map {
        !           202:     my ($target,$token) = @_;
        !           203:     my $currentstring = '';
        !           204:     if ($target eq 'web') {
        !           205: 	$currentstring = $token->[4];     
        !           206:     } 
        !           207:     return $currentstring;
        !           208: }
        !           209: 
        !           210: sub end_map {
        !           211:     my ($target,$token) = @_;
        !           212:     my $currentstring = '';
        !           213:     if ($target eq 'web') {
        !           214: 	$currentstring = $token->[2];    
        !           215:     } 
        !           216:     return $currentstring;
        !           217: }
        !           218: 
1.35      sakharuk  219: #-- <select> tag
1.122   ! albertel  220: sub start_select {
        !           221:     my ($target,$token) = @_;
        !           222:     my $currentstring = '';
        !           223:     if ($target eq 'web') {
        !           224: 	$currentstring = $token->[4];     
        !           225:     } 
        !           226:     return $currentstring;
        !           227: }
        !           228: 
        !           229: sub end_select {
        !           230:     my ($target,$token) = @_;
        !           231:     my $currentstring = '';
        !           232:     if ($target eq 'web') {
        !           233: 	$currentstring = $token->[2];    
        !           234:     } 
        !           235:     return $currentstring;
        !           236: }
        !           237: 
1.35      sakharuk  238: #-- <option> tag
1.122   ! albertel  239: sub start_option {
        !           240:     my ($target,$token) = @_;
        !           241:     my $currentstring = '';
        !           242:     if ($target eq 'web') {
        !           243: 	$currentstring = $token->[4];     
        !           244:     } 
        !           245:     return $currentstring;
        !           246: }
        !           247: 
        !           248: sub end_option {
        !           249:     my ($target,$token) = @_;
        !           250:     my $currentstring = '';
        !           251:     if ($target eq 'web') {
        !           252: 	$currentstring = $token->[2];    
        !           253:     } 
        !           254:     return $currentstring;
        !           255: }
        !           256: 
1.35      sakharuk  257: #-- <input> tag
1.122   ! albertel  258: sub start_input {
        !           259:     my ($target,$token) = @_;
        !           260:     my $currentstring = '';
        !           261:     if ($target eq 'web') {
        !           262: 	$currentstring = $token->[4];     
        !           263:     } 
        !           264:     return $currentstring;
        !           265: }
        !           266: 
        !           267: sub end_input {
        !           268:     my ($target,$token) = @_;
        !           269:     my $currentstring = '';
        !           270:     if ($target eq 'web') {
        !           271: 	$currentstring = $token->[2];    
        !           272:     } 
        !           273:     return $currentstring;
        !           274: }
        !           275: 
1.35      sakharuk  276: #-- <textarea> tag
1.122   ! albertel  277: sub start_textarea {
        !           278:     my ($target,$token) = @_;
        !           279:     my $currentstring = '';
        !           280:     if ($target eq 'web') {
        !           281: 	$currentstring = $token->[4];     
        !           282:     } 
        !           283:     return $currentstring;
        !           284: }
        !           285: 
        !           286: sub end_textarea {
        !           287:     my ($target,$token) = @_;
        !           288:     my $currentstring = '';
        !           289:     if ($target eq 'web') {
        !           290: 	$currentstring = $token->[2];    
        !           291:     } 
        !           292:     return $currentstring;
        !           293: }
        !           294: 
1.35      sakharuk  295: #-- <form> tag
1.122   ! albertel  296: sub start_form {
        !           297:     my ($target,$token) = @_;
        !           298:     my $currentstring = '';
        !           299:     if ($target eq 'web') {
        !           300: 	$currentstring = $token->[4];     
        !           301:     } 
        !           302:     return $currentstring;
        !           303: }
        !           304: 
        !           305: sub end_form {
        !           306:     my ($target,$token) = @_;
        !           307:     my $currentstring = '';
        !           308:     if ($target eq 'web') {
        !           309: 	$currentstring = $token->[2];    
        !           310:     } 
        !           311:     return $currentstring;
        !           312: }
        !           313: 
1.35      sakharuk  314: #-- <title> tag
1.122   ! albertel  315: sub start_title {
        !           316:     my ($target,$token) = @_;
        !           317:     my $currentstring = '';
        !           318:     if ($target eq 'web') {
        !           319: 	$currentstring = $token->[4];     
        !           320:     } elsif ($target eq 'tex') {
        !           321: 	$currentstring .= '\keephidden{' 
        !           322:     }
        !           323:     if ($target eq 'meta') {
        !           324: 	$currentstring='<title>';
        !           325: 	&start_output();
        !           326:     }
        !           327:     return $currentstring;
        !           328: }
        !           329: 
        !           330: sub end_title {
        !           331:     my ($target,$token) = @_;
        !           332:     my $currentstring = '';
        !           333:     if ($target eq 'web') {
        !           334: 	$currentstring = $token->[2];    
        !           335:     } elsif ($target eq 'tex') {
        !           336: 	$currentstring .= '}';
        !           337:     }  
        !           338:     if ($target eq 'meta') {
        !           339: 	&end_output();
        !           340: 	$currentstring='</title>';
        !           341:     } 
        !           342:     return $currentstring;
        !           343: }
        !           344: 
        !           345: #-- <meta> tag
        !           346: sub start_meta {
        !           347:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
        !           348:     my $currentstring = '';
        !           349:     if ($target eq 'web') {
        !           350: 	my $args='';
        !           351: 	if ( $#$parstack > -1 ) { $args=$$parstack[$#$parstack]; }
        !           352: 	if ($args eq '') {
        !           353: 	    &Apache::lonxml::get_all_text("/meta",$parser);
        !           354: 	} else {
        !           355: 	    $currentstring = $token->[4];
1.1       sakharuk  356: 	}
1.122   ! albertel  357:     }
        !           358:     if ($target eq 'meta') {
        !           359: 	unless (&Apache::lonxml::get_param
        !           360: 		('http-equiv',$parstack,$safeeval,undef,1)) {
        !           361: 	    my $name=$token->[2]->{'name'};
        !           362: 	    $name=~tr/A-Z/a-z/;
        !           363: 	    $name=~s/\s/\_/gs;
        !           364: 	    $name=~s/\W//gs;
        !           365: 	    if ($name) {
        !           366: 		$currentstring='<'.$name.'>'.
        !           367: 		    &Apache::lonxml::get_param
        !           368: 			('content',$parstack,$safeeval,undef,1).
        !           369: 			    '</'.$name.'>';
1.1       sakharuk  370: 	    }
                    371: 	}
1.122   ! albertel  372:     }
        !           373:     return $currentstring;
        !           374: }
        !           375: 
        !           376: sub end_meta {
        !           377:     my ($target,$token,$tagstack,$parstack,$parser) = @_;
        !           378:     my $currentstring = '';
        !           379:     if ($target eq 'web') {
        !           380: 	my $args='';
        !           381: 	if ( $#$parstack > -1 ) { $args=$$parstack[$#$parstack]; }
        !           382: 	if ($args ne '') {
1.121     www       383: 	    $currentstring = $token->[4];
1.122   ! albertel  384: 	}
        !           385:     } 
        !           386:     return $currentstring;
        !           387: }
        !           388: 
1.121     www       389: # accessrule
1.122   ! albertel  390: sub start_accessrule {
        !           391:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
        !           392:     my $currentstring = '';
        !           393:     my $eff=&Apache::lonxml::get_param
        !           394: 	('effect',$parstack,$safeeval,undef,1);
        !           395:     my $realm=&Apache::lonxml::get_param
        !           396: 	('realm',$parstack,$safeeval,undef,1);
        !           397:     my $cont=&Apache::lonxml::get_param
        !           398: 	('content',$parstack,$safeeval,undef,1);
        !           399:     $cont=~s/\s+//g;
        !           400:     $cont=~s/\W/\;/g;
        !           401:     if ($target eq 'web') {
        !           402: 	my $args='';
        !           403: 	if ( $#$parstack > -1 ) { $args=$$parstack[$#$parstack]; }
        !           404: 	if ($args eq '') {
        !           405: 	    &Apache::lonxml::get_all_text("/accessrule",$parser);
        !           406: 	} else {
        !           407: 	    $currentstring = $token->[4];
        !           408: 	}
        !           409:     }
        !           410:     if ($target eq 'meta') {
        !           411: 	$currentstring='<rule>'.$eff.':'.$realm.':'.$cont.'</rule>';
        !           412:     }
        !           413:     return $currentstring;
        !           414: }
        !           415: 
        !           416: sub end_accessrule {
        !           417:     my ($target,$token,$tagstack,$parstack,$parser) = @_;
        !           418:     my $currentstring = '';
        !           419:     if ($target eq 'web') {
        !           420: 	my $args='';
        !           421: 	if ( $#$parstack > -1 ) { $args=$$parstack[$#$parstack]; }
        !           422: 	if ($args ne '') {
        !           423: 	    $currentstring = $token->[4];
        !           424: 	}
        !           425:     } 
        !           426:     return $currentstring;
        !           427: }
        !           428: 
        !           429: #-- <body> tag
        !           430: sub start_body {
        !           431:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
        !           432:     my $currentstring = '';
        !           433:     if ($target eq 'web') {
        !           434: 	if (!$Apache::lonxml::registered) {
        !           435: 	    $currentstring.='<head>'.
        !           436: 		&Apache::lonmenu::registerurl(undef,$target).'</head>';
        !           437: 	}
        !           438: 	my $onLoad='';
        !           439: 	foreach my $key (keys(%{$token->[2]})) {
        !           440: 	    if ($key =~ /^onload$/i) {
        !           441: 		$onLoad.=$token->[2]->{$key}.';';
        !           442: 		delete($token->[2]->{$key});
1.121     www       443: 	    }
1.122   ! albertel  444: 	}
        !           445: 	$token->[2]->{'onload'}=&Apache::lonmenu::loadevents().';'.$onLoad;
        !           446: 	my $onUnload='';
        !           447: 	foreach my $key (keys(%{$token->[2]})) {
        !           448: 	    if ($key =~ /^onunload$/i) {
        !           449: 		$onUnload.=$token->[2]->{$key}.';';
        !           450: 		delete($token->[2]->{$key});
1.121     www       451: 	    }
                    452: 	}
1.122   ! albertel  453: 	$token->[2]->{'onunload'}=&Apache::lonmenu::unloadevents().
        !           454: 	    ';'.$onUnload;
        !           455: 	
        !           456: 	$currentstring .= '<'.$token->[1];
        !           457: 	foreach (keys %{$token->[2]}) {
        !           458: 	    $currentstring.=' '.$_.'="'.$token->[2]->{$_}.'"';
        !           459: 	}
        !           460: 	$currentstring.='>';
        !           461: 	if ($ENV{'request.state'} ne 'published') {
        !           462: 	    $currentstring.=(<<EDITBUTTON);
1.40      albertel  463: 		<form method="post">
1.49      albertel  464: 		<input type="submit" name="editmode" value="Edit" />
1.40      albertel  465: 		</form>
                    466: EDITBUTTON
1.122   ! albertel  467: 	} else {
        !           468: 	    $currentstring.=&Apache::lonmenu::menubuttons(undef,$target,1);
1.1       sakharuk  469: 	}
1.122   ! albertel  470:     } elsif ($target eq 'tex') {
        !           471: 	$currentstring = '\begin{document}';  
        !           472:     } 
        !           473:     return $currentstring;
        !           474: }
        !           475: 
        !           476: sub end_body {
        !           477:     my ($target,$token) = @_;
        !           478:     my $currentstring = '';
        !           479:     if ($target eq 'web') {
        !           480: 	$currentstring = $token->[2];     
        !           481:     } elsif ($target eq 'tex') {
        !           482: 	$currentstring = '\end{document}';  
        !           483:     } 
        !           484:     return $currentstring;
        !           485: }
        !           486: 
1.35      sakharuk  487: #-- <center> tag
1.122   ! albertel  488: sub start_center {
        !           489:     my ($target,$token) = @_;
        !           490:     my $currentstring = '';
        !           491:     if ($target eq 'web') {
        !           492: 	$currentstring = $token->[4];     
        !           493:     } elsif ($target eq 'tex') {
        !           494: 	$currentstring = '\begin{center}';  
        !           495:     }  elsif ($target eq 'latexsource') {
        !           496: 	$currentstring = '\begin{center}';  
        !           497:     } 
        !           498:     return $currentstring;
        !           499: }
        !           500: 
        !           501: sub end_center {
        !           502:     my ($target,$token) = @_;
        !           503:     my $currentstring = '';
        !           504:     if ($target eq 'web') {
        !           505: 	$currentstring = $token->[2];     
        !           506:     } elsif ($target eq 'tex') {
        !           507: 	$currentstring = '\end{center}';  
        !           508:     }  elsif ($target eq 'latexsource') {
        !           509: 	$currentstring = '\end{center}';  
        !           510:     } 
        !           511:     return $currentstring;
        !           512: }
        !           513: 
1.35      sakharuk  514: #-- <b> tag
1.122   ! albertel  515: sub start_b {
        !           516:     my ($target,$token) = @_;
        !           517:     my $currentstring = '';
        !           518:     if ($target eq 'web') {
        !           519: 	$currentstring = $token->[4];     
        !           520:     } elsif ($target eq 'tex') {
        !           521: 	$currentstring = '\textbf{';  
        !           522:     }  elsif ($target eq 'latexsource') {
        !           523: 	$currentstring = '\textbf{';  
        !           524:     } 
        !           525:     return $currentstring;
        !           526: }
        !           527: 
        !           528: sub end_b {
        !           529:     my ($target,$token) = @_;
        !           530:     my $currentstring = '';
        !           531:     if ($target eq 'web') {
        !           532: 	$currentstring = $token->[2];     
        !           533:     } elsif ($target eq 'tex') {
        !           534: 	$currentstring = '}';  
        !           535:     } elsif ($target eq 'latexsource') {
        !           536: 	$currentstring = '}';  
        !           537:     } 
        !           538:     return $currentstring;
        !           539: }
1.35      sakharuk  540: 
                    541: #-- <strong> tag
1.122   ! albertel  542: sub start_strong {
        !           543:     my ($target,$token) = @_;
        !           544:     my $currentstring = '';
        !           545:     if ($target eq 'web') {
        !           546: 	$currentstring = $token->[4];     
        !           547:     } elsif ($target eq 'tex') {
        !           548: 	$currentstring = '\textbf{';  
        !           549:     } elsif ($target eq 'latexsource') {
        !           550: 	$currentstring = '\textbf{';  
        !           551:     } 
        !           552:     return $currentstring;
        !           553: }
        !           554: 
        !           555: sub end_strong {
        !           556:     my ($target,$token) = @_;
        !           557:     my $currentstring = '';
        !           558:     if ($target eq 'web') {
        !           559: 	
        !           560: 	$currentstring = $token->[2];     
        !           561:     } elsif ($target eq 'tex') {
        !           562: 	$currentstring = '}';  
        !           563:     }  elsif ($target eq 'latexsource') {
        !           564: 	$currentstring = '}';  
        !           565:     } 
        !           566:     return $currentstring;
        !           567: }
        !           568: 
1.35      sakharuk  569: #-- <h1> tag
1.122   ! albertel  570: sub start_h1 {
        !           571:     my ($target,$token) = @_;
        !           572:     my $currentstring = '';
        !           573:     if ($target eq 'web') {
        !           574: 	$currentstring .= $token->[4];
        !           575:     } elsif ($target eq 'tex') {
        !           576: 	$currentstring .= '{\large \textbf{';
        !           577:     } elsif ($target eq 'meta') {
        !           578: 	$currentstring='<subject>';
        !           579: 	&start_output();
        !           580:     }
        !           581:     return $currentstring;
        !           582: }
        !           583: 
        !           584: sub end_h1 {
        !           585:     my ($target,$token) = @_;
        !           586:     my $currentstring = '';
        !           587:     if ($target eq 'web') {
        !           588: 	$currentstring .= $token->[2];
        !           589:     } elsif ($target eq 'tex') {
        !           590: 	$currentstring .= '}}';
        !           591:     } elsif ($target eq 'meta') {
        !           592: 	&end_output();
        !           593: 	$currentstring='</subject>';
        !           594:     } 
        !           595:     return $currentstring;
        !           596: }
        !           597: 
1.35      sakharuk  598: #-- <h2> tag
1.122   ! albertel  599: sub start_h2 {
        !           600:     my ($target,$token) = @_;
        !           601:     my $currentstring = '';
        !           602:     if ($target eq 'web') {
        !           603: 	$currentstring .= $token->[4];
        !           604:     } elsif ($target eq 'tex') {
        !           605: 	$currentstring .= '{\large \textbf{';
        !           606:     } 
        !           607:     return $currentstring;
        !           608: }
        !           609: 
        !           610: sub end_h2 {
        !           611:     my ($target,$token) = @_;
        !           612:     my $currentstring = '';
        !           613:     if ($target eq 'web') {
        !           614: 	$currentstring .= $token->[2];
        !           615:     } elsif ($target eq 'tex') {
        !           616: 	$currentstring .= '}}';
        !           617:     } 
        !           618:     return $currentstring;
        !           619: }
        !           620: 
1.35      sakharuk  621: #-- <h3> tag
1.122   ! albertel  622: sub start_h3 {
        !           623:     my ($target,$token) = @_;
        !           624:     my $currentstring = '';
        !           625:     if ($target eq 'web') {
        !           626: 	$currentstring .= $token->[4];
        !           627:     } elsif ($target eq 'tex') {
        !           628: 	$currentstring .= '{\large \textbf{';
        !           629:     } 
        !           630:     return $currentstring;
        !           631: }
        !           632: 
        !           633: sub end_h3 {
        !           634:     my ($target,$token) = @_;
        !           635:     my $currentstring = '';
        !           636:     if ($target eq 'web') {
        !           637: 	$currentstring .= $token->[2];
        !           638:     } elsif ($target eq 'tex') {
        !           639: 	$currentstring .= '}}';
        !           640:     } 
        !           641:     return $currentstring;
        !           642: }
        !           643: 
1.35      sakharuk  644: #-- <h4> tag
1.122   ! albertel  645: sub start_h4 {
        !           646:     my ($target,$token) = @_;
        !           647:     my $currentstring = '';
        !           648:     if ($target eq 'web') {
        !           649: 	$currentstring .= $token->[4];
        !           650:     } elsif ($target eq 'tex') {
        !           651: 	$currentstring .= '{\large \textbf{';
        !           652:     } 
        !           653:     return $currentstring;
        !           654: }
        !           655: 
        !           656: sub end_h4 {
        !           657:     my ($target,$token) = @_;
        !           658:     my $currentstring = '';
        !           659:     if ($target eq 'web') {
        !           660: 	$currentstring .= $token->[2];
        !           661:     } elsif ($target eq 'tex') {
        !           662: 	$currentstring .= '}}';
        !           663:     } 
        !           664:     return $currentstring;
        !           665: }
        !           666: 
1.35      sakharuk  667: #-- <h5> tag
1.122   ! albertel  668: sub start_h5 {
        !           669:     my ($target,$token) = @_;
        !           670:     my $currentstring = '';
        !           671:     if ($target eq 'web') {
        !           672: 	$currentstring .= $token->[4];
        !           673:     } elsif ($target eq 'tex') {
        !           674: 	$currentstring .= '{\large \textbf{';
        !           675:     } 
        !           676:     return $currentstring;
        !           677: }
        !           678: 
        !           679: sub end_h5 {
        !           680:     my ($target,$token) = @_;
        !           681:     my $currentstring = '';
        !           682:     if ($target eq 'web') {
        !           683: 	$currentstring .= $token->[2];
        !           684:     } elsif ($target eq 'tex') {
        !           685: 	$currentstring .= '}}';
        !           686:     } 
        !           687:     return $currentstring;
        !           688: }
        !           689: 
1.35      sakharuk  690: #-- <h6> tag
1.122   ! albertel  691: sub start_h6 {
        !           692:     my ($target,$token) = @_;
        !           693:     my $currentstring = '';
        !           694:     if ($target eq 'web') {
        !           695: 	$currentstring .= $token->[4];
        !           696:     } elsif ($target eq 'tex') {
        !           697: 	$currentstring .= '{\large \textbf{';
        !           698:     } 
        !           699:     return $currentstring;
        !           700: }
        !           701: 
        !           702: sub end_h6 {
        !           703:     my ($target,$token) = @_;
        !           704:     my $currentstring = '';
        !           705:     if ($target eq 'web') {
        !           706: 	$currentstring .= $token->[2];
        !           707:     } elsif ($target eq 'tex') {
        !           708: 	$currentstring .= '}}';
        !           709:     } 
        !           710:     return $currentstring;
        !           711: }
        !           712: 
1.35      sakharuk  713: #--- <cite> tag
1.122   ! albertel  714: sub start_cite {
        !           715:     my ($target,$token) = @_;
        !           716:     my $currentstring = '';
        !           717:     if ($target eq 'web') {
        !           718: 	$currentstring .= $token->[4];
        !           719:     } elsif ($target eq 'tex') {
        !           720: 	$currentstring .= "\\textit{";
        !           721:     }  elsif ($target eq 'latexsource') {
        !           722: 	$currentstring .= "\\textit{";
        !           723:     } 
        !           724:     return $currentstring;
        !           725: }
        !           726: 
        !           727: sub end_cite {
        !           728:     my ($target,$token) = @_;
        !           729:     my $currentstring = '';
        !           730:     if ($target eq 'web') {
        !           731: 	$currentstring .= $token->[2];
        !           732:     } elsif ($target eq 'tex') {
        !           733: 	$currentstring .= "}";
        !           734:     }  elsif ($target eq 'latexsource') {
        !           735: 	$currentstring .= "}";
        !           736:     } 
        !           737:     return $currentstring;
        !           738: }
        !           739: 
1.35      sakharuk  740: #-- <i> tag
1.122   ! albertel  741: sub start_i {
        !           742:     my ($target,$token) = @_;
        !           743:     my $currentstring = '';
        !           744:     if ($target eq 'web') {
        !           745: 	$currentstring .= $token->[4];
        !           746:     } elsif ($target eq 'tex') {
        !           747: 	$currentstring .= '\textit{';
        !           748:     }  elsif ($target eq 'latexsource') {
        !           749: 	$currentstring .= '\textit{';
        !           750:     } 
        !           751:     return $currentstring;
        !           752: }
        !           753: 
        !           754: sub end_i {
        !           755:     my ($target,$token) = @_;
        !           756:     my $currentstring = '';
        !           757:     if ($target eq 'web') {
        !           758: 	$currentstring .= $token->[2];
        !           759:     } elsif ($target eq 'tex') {
        !           760: 	$currentstring .= '}';
        !           761:     } elsif ($target eq 'latexsource') {
        !           762: 	$currentstring .= '}';
        !           763:     } 
        !           764:     return $currentstring;
        !           765: }
        !           766: 
1.35      sakharuk  767: #-- <address> tag
1.122   ! albertel  768: sub start_address {
        !           769:     my ($target,$token) = @_;
        !           770:     my $currentstring = '';
        !           771:     if ($target eq 'web') {
        !           772: 	$currentstring .= $token->[4];
        !           773:     } elsif ($target eq 'tex') {
        !           774: 	$currentstring .= "\\textit{";
        !           775:     } elsif ($target eq 'latexsource') {
        !           776: 	$currentstring .= "\\textit{";
        !           777:     } 
        !           778:     return $currentstring;
        !           779: }
        !           780: 
        !           781: sub end_address {
        !           782:     my ($target,$token) = @_;
        !           783:     my $currentstring = '';
        !           784:     if ($target eq 'web') {
        !           785: 	$currentstring .= $token->[2];
        !           786:     } elsif ($target eq 'tex') {
        !           787: 	$currentstring .= "}";
        !           788:     } elsif ($target eq 'latexsource') {
        !           789: 	$currentstring .= "}";
        !           790:     }
        !           791:     return $currentstring;
        !           792: }
        !           793: 
1.35      sakharuk  794: #-- <dfn> tag
1.122   ! albertel  795: sub start_dfn {
        !           796:     my ($target,$token) = @_;
        !           797:     my $currentstring = '';
        !           798:     if ($target eq 'web') {
        !           799: 	$currentstring .= $token->[4];
        !           800:     } elsif ($target eq 'tex') {
        !           801: 	$currentstring .= "\\textit{";
        !           802:     } elsif ($target eq 'latexsource') {
        !           803: 	$currentstring .= "\\textit{";
        !           804:     } 
        !           805:     return $currentstring;
        !           806: }
        !           807: 
        !           808: sub end_dfn {
        !           809:     my ($target,$token) = @_;
        !           810:     my $currentstring = '';
        !           811:     if ($target eq 'web') {
        !           812: 	$currentstring .= $token->[2];
        !           813:     } elsif ($target eq 'tex') {
        !           814: 	$currentstring .= "}";
        !           815:     } elsif ($target eq 'latexsource') {
        !           816: 	$currentstring .= "}";
        !           817:     } 
        !           818:     return $currentstring;
        !           819: }
        !           820: 
1.35      sakharuk  821: #-- <tt> tag
1.122   ! albertel  822: sub start_tt {
        !           823:     my ($target,$token) = @_;
        !           824:     my $currentstring = '';
        !           825:     if ($target eq 'web') {
        !           826: 	$currentstring .= $token->[4];
        !           827:     } elsif ($target eq 'tex') {
        !           828: 	$currentstring .= '\texttt{';
        !           829:     } elsif ($target eq 'latexsource') {
        !           830: 	$currentstring .= '\texttt{';
        !           831:     } 
        !           832:     return $currentstring;
        !           833: }
        !           834: 
        !           835: sub end_tt {
        !           836:     my ($target,$token) = @_;
        !           837:     my $currentstring = '';
        !           838:     if ($target eq 'web') {
        !           839: 	$currentstring .= $token->[2];
        !           840:     } elsif ($target eq 'tex') {
        !           841: 	$currentstring .= '}';
        !           842:     } elsif ($target eq 'latexsource') {
        !           843: 	$currentstring .= '}';
        !           844:     }
        !           845:     return $currentstring;
        !           846: }
        !           847: 
1.35      sakharuk  848: #-- <kbd> tag
1.122   ! albertel  849: sub start_kbd {
        !           850:     my ($target,$token) = @_;
        !           851:     my $currentstring = '';
        !           852:     if ($target eq 'web') {
        !           853: 	$currentstring .= $token->[4];
        !           854:     } elsif ($target eq 'tex') {
        !           855: 	$currentstring .= "\\texttt";
        !           856:     } elsif ($target eq 'latexsource') {
        !           857: 	$currentstring .= "\\texttt{";
        !           858:     } 
        !           859:     return $currentstring;
        !           860: }
        !           861: 
        !           862: sub end_kbd {
        !           863:     my ($target,$token) = @_;
        !           864:     my $currentstring = '';
        !           865:     if ($target eq 'web') {
        !           866: 	$currentstring .= $token->[2];
        !           867:     } elsif ($target eq 'tex') {
        !           868: 	$currentstring .= "}";
        !           869:     } elsif ($target eq 'latexsource') {
        !           870: 	$currentstring .= "}";
        !           871:     } 
        !           872:     return $currentstring;
        !           873: }
        !           874: 
1.35      sakharuk  875: #-- <code> tag
1.122   ! albertel  876: sub start_code {
        !           877:     my ($target,$token) = @_;
        !           878:     my $currentstring = '';
        !           879:     if ($target eq 'web') {
        !           880: 	$currentstring .= $token->[4];
        !           881:     } elsif ($target eq 'tex') {
        !           882: 	$currentstring .= '\texttt{';
        !           883:     } 
        !           884:     return $currentstring;
        !           885: }
        !           886: 
        !           887: sub end_code {
        !           888:     my ($target,$token) = @_;
        !           889:     my $currentstring = '';
        !           890:     if ($target eq 'web') {
        !           891: 	$currentstring .= $token->[2];
        !           892:     } elsif ($target eq 'tex') {
        !           893: 	$currentstring .= '}';
        !           894:     } 
        !           895:     return $currentstring;
        !           896: }
        !           897: 
1.35      sakharuk  898: #-- <em> tag
1.122   ! albertel  899: sub start_em {
        !           900:     my ($target,$token) = @_;
        !           901:     my $currentstring = '';
        !           902:     if ($target eq 'web') {
        !           903: 	$currentstring .= $token->[4];
        !           904:     } elsif ($target eq 'tex') {
        !           905: 	$currentstring .= '\emph{';
        !           906:     } elsif ($target eq 'latexsource') {
        !           907: 	$currentstring .= '\emph{';
        !           908:     } 
        !           909:     return $currentstring;
        !           910: }
        !           911: 
        !           912: sub end_em {
        !           913:     my ($target,$token) = @_;
        !           914:     my $currentstring = '';
        !           915:     if ($target eq 'web') {
        !           916: 	$currentstring .= $token->[2];
        !           917:     } elsif ($target eq 'tex') {
        !           918: 	$currentstring .= '}';
        !           919:     } elsif ($target eq 'latexsource') {
        !           920: 	$currentstring .= '}';
        !           921:     }  
        !           922:     return $currentstring;
        !           923: }
        !           924: 
1.35      sakharuk  925: #-- <q> tag
1.122   ! albertel  926: sub start_q {
        !           927:     my ($target,$token) = @_;
        !           928:     my $currentstring = '';
        !           929:     if ($target eq 'web') {
        !           930: 	$currentstring .= $token->[4];
        !           931:     } elsif ($target eq 'tex') {
        !           932: 	$currentstring .= "\\emph{";
        !           933:     }  elsif ($target eq 'latexsource') {
        !           934: 	$currentstring .= "\\emph{";
        !           935:     }
        !           936:     return $currentstring;
        !           937: }
        !           938: 
        !           939: sub end_q {
        !           940:     my ($target,$token) = @_;
        !           941:     my $currentstring = '';
        !           942:     if ($target eq 'web') {
        !           943: 	$currentstring .= $token->[2];
        !           944:     } elsif ($target eq 'tex') {
        !           945: 	$currentstring .= "}";
        !           946:     } elsif ($target eq 'latexsource') {
        !           947: 	$currentstring .= "}";
        !           948:     }  
        !           949:     return $currentstring;
        !           950: }
        !           951: 
1.35      sakharuk  952: #-- <p> tag
1.122   ! albertel  953: sub start_p {
        !           954:     my ($target,$token) = @_;
        !           955:     my $currentstring = '';
        !           956:     if ($target eq 'web') {
        !           957: 	$currentstring .= $token->[4];
        !           958:     } elsif ($target eq 'tex') {
        !           959: 	$currentstring .= '{\par ';
        !           960:     } elsif ($target eq 'latexsource') {
        !           961: 	$currentstring .= '{\par ';
        !           962:     } 
        !           963:     return $currentstring;
        !           964: }
        !           965: 
        !           966: sub end_p {
        !           967:     my ($target,$token) = @_;
        !           968:     my $currentstring = '';
        !           969:     if ($target eq 'web') {
        !           970: 	$currentstring .= $token->[2];
        !           971:     } elsif ($target eq 'tex') {
        !           972: 	$currentstring .= '}';
        !           973:     } elsif ($target eq 'latexsource') {
        !           974: 	$currentstring .= '}';
        !           975:     }
        !           976:     return $currentstring;
        !           977: }
        !           978: 
1.35      sakharuk  979: #-- <br> tag
1.122   ! albertel  980: sub start_br {
        !           981:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
        !           982:     my $currentstring = '';
        !           983:     if ($target eq 'web') {
        !           984: 	$currentstring .= $token->[4];
        !           985:     } elsif ($target eq 'tex') {
        !           986: 	if ($$tagstack[-2] ne 'sub' && $$tagstack[-2] ne 'sup') {
        !           987: 	    $currentstring .= '\vskip 0.2 mm';
1.1       sakharuk  988: 	}
1.122   ! albertel  989:     } elsif ($target eq 'latexsource') {
        !           990: 	$currentstring .= '\\';
        !           991:     } 
        !           992:     return $currentstring;
        !           993: }
        !           994: 
        !           995: sub end_br {
        !           996:     my ($target,$token) = @_;
        !           997:     my $currentstring = '';
        !           998:     if ($target eq 'web') {
        !           999: 	$currentstring .= $token->[2];
        !          1000:     }
        !          1001:     return $currentstring;
        !          1002: }
        !          1003: 
1.35      sakharuk 1004: #-- <big> tag
1.122   ! albertel 1005: sub start_big {
        !          1006:     my ($target,$token) = @_;
        !          1007:     my $currentstring = '';
        !          1008:     if ($target eq 'web') {
        !          1009: 	$currentstring .= $token->[4];
        !          1010:     } elsif ($target eq 'tex') {
        !          1011: 	$currentstring .= '\large{';
        !          1012:     } elsif ($target eq 'latexsource') {
        !          1013: 	$currentstring .= '{\Large ';
        !          1014:     }  
        !          1015:     return $currentstring;
        !          1016: }
        !          1017: 
        !          1018: sub end_big {
        !          1019:     my ($target,$token) = @_;
        !          1020:     my $currentstring = '';
        !          1021:     if ($target eq 'web') {
        !          1022: 	$currentstring .= $token->[2];
        !          1023:     } elsif ($target eq 'tex') {
        !          1024: 	$currentstring .= '}';
        !          1025:     } elsif ($target eq 'latexsource') {
        !          1026: 	$currentstring .= '}';
        !          1027:     }
        !          1028:     return $currentstring;
        !          1029: }
        !          1030: 
1.35      sakharuk 1031: #-- <small> tag
1.122   ! albertel 1032: sub start_small {
        !          1033:     my ($target,$token) = @_;
        !          1034:     my $currentstring = '';
        !          1035:     if ($target eq 'web') {
        !          1036: 	$currentstring .= $token->[4];
        !          1037:     } elsif ($target eq 'tex') {
        !          1038: 	$currentstring .= '{\footnotesize ';
        !          1039:     } elsif ($target eq 'latexsource') {
        !          1040: 	$currentstring .= '{\footnotesize ';
        !          1041:     } 
        !          1042:     return $currentstring;
        !          1043: }
        !          1044: 
        !          1045: sub end_small {
        !          1046:     my ($target,$token) = @_;
        !          1047:     my $currentstring = '';
        !          1048:     if ($target eq 'web') {
        !          1049: 	$currentstring .= $token->[2];
        !          1050:     } elsif ($target eq 'tex') {
        !          1051: 	$currentstring .= '}';
        !          1052:     } elsif ($target eq 'latexsource') {
        !          1053: 	$currentstring .= '}';
        !          1054:     }
        !          1055:     return $currentstring;
        !          1056: }
        !          1057: 
1.35      sakharuk 1058: #-- <basefont> tag
1.122   ! albertel 1059: sub start_basefont {
        !          1060:     my ($target,$token) = @_;
        !          1061:     my $currentstring = '';
        !          1062:     if ($target eq 'web') {
        !          1063: 	$currentstring = $token->[4];     
        !          1064:     } 
        !          1065:     return $currentstring;
        !          1066: }
        !          1067: 
        !          1068: sub end_basefont {
        !          1069:     my ($target,$token) = @_;
        !          1070:     my $currentstring = '';
        !          1071:     if ($target eq 'web') {
        !          1072: 	$currentstring = $token->[4];     
        !          1073:     } 
        !          1074:     return $currentstring;
        !          1075: }
        !          1076: 
1.35      sakharuk 1077: #-- <font> tag
1.122   ! albertel 1078: sub start_font {
        !          1079:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
        !          1080:     my $currentstring = '';
        !          1081:     if ($target eq 'web') {
        !          1082: 	my $face=&Apache::lonxml::get_param('face',$parstack,$safeeval);
        !          1083: 	if ($face=~/symbol/i) {$Apache::lonxml::prevent_entity_encode++;}
        !          1084: 	$currentstring = $token->[4];     
        !          1085:     } 
        !          1086:     return $currentstring;
        !          1087: }
        !          1088: 
        !          1089: sub end_font {
        !          1090:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
        !          1091:     my $currentstring = '';
        !          1092:     if ($target eq 'web') {
        !          1093: 	my $face=&Apache::lonxml::get_param('face',$parstack,$safeeval);
        !          1094: 	if ($face=~/symbol/i) {$Apache::lonxml::prevent_entity_encode--;}
        !          1095: 	$currentstring = $token->[2];    
        !          1096:     } 
        !          1097:     return $currentstring;
        !          1098: }
        !          1099:  
1.35      sakharuk 1100: #-- <strike> tag
1.122   ! albertel 1101: sub start_strike {
        !          1102:     my ($target,$token) = @_;
        !          1103:     my $currentstring = '';
        !          1104:     if ($target eq 'web') {
        !          1105: 	$currentstring .= $token->[4];
        !          1106:     } elsif ($target eq 'tex') {
        !          1107: 	&Apache::lonxml::startredirection();
        !          1108:     } 
        !          1109:     return $currentstring;
        !          1110: }
        !          1111: 
        !          1112: sub end_strike {
        !          1113:     my ($target,$token) = @_;
        !          1114:     my $currentstring = '';
        !          1115:     if ($target eq 'web') {
        !          1116: 	$currentstring .= $token->[2];
        !          1117:     } elsif ($target eq 'tex') {
        !          1118: 	$currentstring=&Apache::lonxml::endredirection();
        !          1119: 	$currentstring=~s/(\S)(\s+)(\S)/$1\}$2\\underline\{$3/g; 
        !          1120: 	$currentstring=~s/^\s*(\S)/\\underline\{$1/; 
        !          1121: 	$currentstring=~s/(\S)\s*$/$1\}/;
        !          1122:     }
        !          1123:     return $currentstring;
        !          1124: }
        !          1125: 
1.35      sakharuk 1126: #-- <s> tag
1.122   ! albertel 1127: sub start_s {
        !          1128:     my ($target,$token) = @_;
        !          1129:     my $currentstring = '';
        !          1130:     if ($target eq 'web') {
        !          1131: 	$currentstring .= $token->[4];
        !          1132:     } elsif ($target eq 'tex') {
        !          1133: 	&Apache::lonxml::startredirection();
        !          1134:     } 
        !          1135:     return $currentstring;
        !          1136: }
        !          1137: 
        !          1138: sub end_s {
        !          1139:     my ($target,$token) = @_;
        !          1140:     my $currentstring = '';
        !          1141:     if ($target eq 'web') {
        !          1142: 	$currentstring .= $token->[2];
        !          1143:     } elsif ($target eq 'tex') {
        !          1144: 	$currentstring=&Apache::lonxml::endredirection();
        !          1145: 	$currentstring=~s/(\S)(\s+)(\S)/$1\}$2\\underline\{$3/g;
        !          1146: 	$currentstring=~s/^\s*(\S)/\\underline\{$1/;
        !          1147: 	$currentstring=~s/(\S)\s*$/$1\}/;	
        !          1148:     }
        !          1149:     return $currentstring;
        !          1150: }
        !          1151: 
1.35      sakharuk 1152: #-- <sub> tag
1.122   ! albertel 1153: sub start_sub {
        !          1154:     my ($target,$token) = @_;
        !          1155:     my $currentstring = '';
        !          1156:     if ($target eq 'web') {
        !          1157: 	$currentstring .= $token->[4];
        !          1158:     } elsif ($target eq 'tex') {
        !          1159: 	$currentstring .= "\$_{ ";
        !          1160:     } 
        !          1161:     return $currentstring;
        !          1162: }
        !          1163: 
        !          1164: sub end_sub {
        !          1165:     my ($target,$token) = @_;
        !          1166:     my $currentstring = '';
        !          1167:     if ($target eq 'web') {
        !          1168: 	$currentstring .= $token->[2];
        !          1169:     } elsif ($target eq 'tex') {
        !          1170: 	$currentstring .= " }\$";
        !          1171:     }
        !          1172:     return $currentstring;
        !          1173: }
        !          1174: 
1.35      sakharuk 1175: #-- <sup> tag
1.122   ! albertel 1176: sub start_sup {
        !          1177:     my ($target,$token) = @_;
        !          1178:     my $currentstring = '';
        !          1179:     if ($target eq 'web') {
        !          1180: 	$currentstring .= $token->[4];
        !          1181:     } elsif ($target eq 'tex') {
        !          1182: 	$currentstring .= "\$^{ ";
        !          1183:     } 
        !          1184:     return $currentstring;
        !          1185: }
        !          1186: 
        !          1187: sub end_sup {
        !          1188:     my ($target,$token) = @_;
        !          1189:     my $currentstring = '';
        !          1190:     if ($target eq 'web') {
        !          1191: 	$currentstring .= $token->[2];
        !          1192:     } elsif ($target eq 'tex') {
        !          1193: 	$currentstring .= " }\$";
        !          1194:     }
        !          1195:     return $currentstring;
        !          1196: }
        !          1197: 
1.35      sakharuk 1198: #-- <hr> tag
1.122   ! albertel 1199: sub start_hr {
        !          1200:     my ($target,$token) = @_;
        !          1201:     my $currentstring = '';
        !          1202:     if ($target eq 'web') {
        !          1203: 	$currentstring .= $token->[4];
        !          1204:     } elsif ($target eq 'tex') {
        !          1205: 	$currentstring .= '\vskip 0 mm \noindent\makebox[\textwidth/2 ][b]{\hrulefill}\vskip 0 mm ';
        !          1206:     } 
        !          1207:     return $currentstring;
        !          1208: }
        !          1209: 
        !          1210: sub end_hr {
        !          1211:     my ($target,$token) = @_;
        !          1212:     my $currentstring = '';
        !          1213:     if ($target eq 'web') {
        !          1214: 	$currentstring .= $token->[2];
        !          1215:     } elsif ($target eq 'tex') {
        !          1216:     } 
        !          1217:     return $currentstring;
        !          1218: }
        !          1219: 
1.85      sakharuk 1220: #-- <div> tag
1.122   ! albertel 1221: sub start_div {
        !          1222:     my ($target,$token) = @_;
        !          1223:     my $currentstring = '';
        !          1224:     if ($target eq 'web') {
        !          1225: 	$currentstring .= $token->[4];
        !          1226:     } 
        !          1227:     return $currentstring;
        !          1228: }
        !          1229: 
        !          1230: sub end_div {
        !          1231:     my ($target,$token) = @_;
        !          1232:     my $currentstring = '';
        !          1233:     if ($target eq 'web') {
        !          1234: 	$currentstring .= $token->[2];
        !          1235:     } 
        !          1236:     return $currentstring;
        !          1237: }
        !          1238: 
1.35      sakharuk 1239: #-- <a> tag
1.122   ! albertel 1240: sub start_a {
        !          1241:     my ($target,$token) = @_;
        !          1242:     my $currentstring = '';
        !          1243:     if ($target eq 'web') {
        !          1244: 	$currentstring .= $token->[4];
        !          1245:     } elsif ($target eq 'tex') {
        !          1246:     }
        !          1247:     return $currentstring;
        !          1248: }
        !          1249: 
        !          1250: sub end_a {
        !          1251:     my ($target,$token,$tagstack,$stackref) = @_;
        !          1252:     my $currentstring = '';
        !          1253:     if ($target eq 'web') {
        !          1254: 	$currentstring .= $token->[2];
        !          1255:     } elsif ($target eq 'tex') {
        !          1256: 	my  $tempor_var = $stackref->[$#$stackref];
        !          1257: 	if (index($tempor_var,'name') != -1 ) {
        !          1258: 	    $tempor_var =~ s/name=([^,]*),/$1/g;
        !          1259: 	} elsif (index($tempor_var,'href') != -1 ) {
        !          1260: 	    $tempor_var =~ s/href=([^,]*),/$1/g;
        !          1261: 	    $currentstring .= " \\ref{$tempor_var}";
1.1       sakharuk 1262: 	}
1.122   ! albertel 1263:     }
        !          1264:     return $currentstring;
        !          1265: }
        !          1266: 
1.35      sakharuk 1267: #-- <li> tag
1.122   ! albertel 1268: sub start_li {
        !          1269:     my ($target,$token,$tagstack,$stackref) = @_;
        !          1270:     my $currentstring = '';
        !          1271:     if ($target eq 'web') {
        !          1272: 	$currentstring = $token->[4];     
        !          1273:     } elsif ($target eq 'tex') {
        !          1274: 	my  $tempor_var = $stackref->[$#$stackref];
        !          1275: 	if (index($tempor_var,'circle') != -1 ) {
        !          1276: 	    $currentstring .= " \\item[o] ";
        !          1277: 	} elsif (index($tempor_var,'square') != -1 ) {
        !          1278: 	    $currentstring .= " \\item[$\Box$] ";
        !          1279: 	} elsif ($tempor_var ne '') { 
        !          1280: 	    $_ = $tempor_var;
        !          1281: 	    m/my\s*([^=]*)=/;
        !          1282: 	    $currentstring .= " \\item[$1] ";
        !          1283: 	} else {
        !          1284: 	    $currentstring .= " \\item ";
        !          1285: 	}  
        !          1286:     } 
        !          1287:     return $currentstring;
        !          1288: }
        !          1289: 
        !          1290: sub end_li {
        !          1291:     my ($target,$token) = @_;
        !          1292:     my $currentstring = '';
        !          1293:     if ($target eq 'web') {
        !          1294: 	$currentstring = $token->[2];     
        !          1295:     } 
        !          1296:     return $currentstring;
        !          1297: }
        !          1298: 
1.35      sakharuk 1299: #-- <u> tag
1.122   ! albertel 1300: sub start_u {
        !          1301:     my ($target,$token) = @_;
        !          1302:     my $currentstring = '';
        !          1303:     if ($target eq 'web') {
        !          1304: 	$currentstring .= $token->[4];
        !          1305:     } elsif ($target eq 'tex') {
        !          1306: 	&Apache::lonxml::startredirection();
        !          1307:     } 
        !          1308:     return $currentstring;
        !          1309: }
        !          1310: 
        !          1311: sub end_u {
        !          1312:     my ($target,$token) = @_;
        !          1313:     my $currentstring = '';
        !          1314:     if ($target eq 'web') {
        !          1315: 	$currentstring .= $token->[2];
        !          1316:     } elsif ($target eq 'tex') {
        !          1317: 	$currentstring=&Apache::lonxml::endredirection();
        !          1318: 	$currentstring=~s/(\S)(\s+)(\S)/$1\}$2\\underline\{$3/g;
        !          1319: 	$currentstring=~s/^\s*(\S)/\\underline\{$1/;
        !          1320: 	$currentstring=~s/(\S)\s*$/$1\}/;		
        !          1321:     }
        !          1322:     return $currentstring;
        !          1323: }
        !          1324: 
1.35      sakharuk 1325: #-- <ul> tag
1.122   ! albertel 1326: sub start_ul {
        !          1327:     my ($target,$token) = @_;
        !          1328:     my $currentstring = '';
        !          1329:     if ($target eq 'web') {
        !          1330: 	$currentstring = $token->[4];     
        !          1331:     } elsif ($target eq 'tex') {
        !          1332: 	$currentstring = '\begin{itemize}';  
        !          1333:     } 
        !          1334:     return $currentstring;
        !          1335: }
        !          1336: 
        !          1337: sub end_ul {
        !          1338:     my ($target,$token) = @_;
        !          1339:     my $currentstring = '';
        !          1340:     if ($target eq 'web') {
        !          1341: 	$currentstring = $token->[2];     
        !          1342:     } elsif ($target eq 'tex') {
        !          1343: 	$currentstring = '\end{itemize}';  
        !          1344:     } 
        !          1345:     return $currentstring;
        !          1346: }
        !          1347: 
1.35      sakharuk 1348: #-- <menu> tag
1.122   ! albertel 1349: sub start_menu {
        !          1350:     my ($target,$token) = @_;
        !          1351:     my $currentstring = '';
        !          1352:     if ($target eq 'web') {
        !          1353: 	$currentstring = $token->[4];     
        !          1354:     } elsif ($target eq 'tex') {
        !          1355: 	$currentstring = " \\begin{itemize} ";  
        !          1356:     } 
        !          1357:     return $currentstring;
        !          1358: }
        !          1359: 
        !          1360: sub end_menu {
        !          1361:     my ($target,$token) = @_;
        !          1362:     my $currentstring = '';
        !          1363:     if ($target eq 'web') {
        !          1364: 	$currentstring = $token->[2];     
        !          1365:     } elsif ($target eq 'tex') {
        !          1366: 	$currentstring = " \\end{itemize}";  
        !          1367:     } 
        !          1368:     return $currentstring;
        !          1369: }
        !          1370: 
1.35      sakharuk 1371: #-- <dir> tag
1.122   ! albertel 1372: sub start_dir {
        !          1373:     my ($target,$token) = @_;
        !          1374:     my $currentstring = '';
        !          1375:     if ($target eq 'web') {
        !          1376: 	$currentstring = $token->[4];     
        !          1377:     } elsif ($target eq 'tex') {
        !          1378: 	$currentstring = " \\begin{itemize} ";  
        !          1379:     } 
        !          1380:     return $currentstring;
        !          1381: }
        !          1382: 
        !          1383: sub end_dir {
        !          1384:     my ($target,$token) = @_;
        !          1385:     my $currentstring = '';
        !          1386:     if ($target eq 'web') {
        !          1387: 	$currentstring = $token->[2];     
        !          1388:     } elsif ($target eq 'tex') {
        !          1389: 	$currentstring = " \\end{itemize}";  
        !          1390:     } 
        !          1391:     return $currentstring;
        !          1392: }
        !          1393: 
1.35      sakharuk 1394: #-- <ol> tag
1.122   ! albertel 1395: sub start_ol {
        !          1396:     my ($target,$token) = @_;
        !          1397:     my $currentstring = '';
        !          1398:     if ($target eq 'web') {
        !          1399: 	$currentstring = $token->[4];     
        !          1400:     } elsif ($target eq 'tex') {
        !          1401: 	$currentstring = '\begin{enumerate}';  
        !          1402:     } 
        !          1403:     return $currentstring;
        !          1404: }
        !          1405: 
        !          1406: sub end_ol {
        !          1407:     my ($target,$token) = @_;
        !          1408:     my $currentstring = '';
        !          1409:     if ($target eq 'web') {
        !          1410: 	$currentstring = $token->[2];     
        !          1411:     } elsif ($target eq 'tex') {
        !          1412: 	$currentstring = '\end{enumerate}';  
        !          1413:     } 
        !          1414:     return $currentstring;
        !          1415: }
        !          1416: 
1.35      sakharuk 1417: #-- <dl> tag
1.122   ! albertel 1418: sub start_dl {
        !          1419:     my ($target,$token) = @_;
        !          1420:     my $currentstring = '';
        !          1421:     if ($target eq 'web') {
        !          1422: 	$currentstring = $token->[4];     
        !          1423:     } elsif ($target eq 'tex') {
        !          1424: 	$currentstring = '\begin{description}';  
        !          1425:     } 
        !          1426:     return $currentstring;
        !          1427: }
        !          1428: 
        !          1429: sub end_dl {
        !          1430:     my ($target,$token) = @_;
        !          1431:     my $currentstring = '';
        !          1432:     if ($target eq 'web') {
        !          1433: 	$currentstring = $token->[2];     
        !          1434:     } elsif ($target eq 'tex') {
        !          1435: 	$currentstring = '\end{description}';  
        !          1436:     } 
        !          1437:     return $currentstring;
        !          1438: }
        !          1439: 
1.35      sakharuk 1440: #-- <dt> tag
1.122   ! albertel 1441: sub start_dt {
        !          1442:     my ($target,$token) = @_;
        !          1443:     my $currentstring = '';
        !          1444:     if ($target eq 'web') {
        !          1445: 	$currentstring = $token->[4];     
        !          1446:     } elsif ($target eq 'tex') {
        !          1447: 	$currentstring = '\item[';  
        !          1448:     } 
        !          1449:     return $currentstring;
        !          1450: }
        !          1451: 
        !          1452: sub end_dt {
        !          1453:     my ($target,$token) = @_;
        !          1454:     my $currentstring = '';
        !          1455:     if ($target eq 'web') {
        !          1456: 	$currentstring = $token->[2];    
        !          1457:     } elsif ($target eq 'tex') {
        !          1458: 	$currentstring = ']';  
        !          1459:     } 
        !          1460:     return $currentstring;
        !          1461: }
        !          1462: 
1.35      sakharuk 1463: #-- <dd> tag
1.122   ! albertel 1464: sub start_dd {
        !          1465:     my ($target,$token) = @_;
        !          1466:     my $currentstring = '';
        !          1467:     if ($target eq 'web') {
        !          1468: 	$currentstring = $token->[4];     
        !          1469:     } 
        !          1470:     return $currentstring;
        !          1471: }
        !          1472: 
        !          1473: sub end_dd {
        !          1474:     my ($target,$token) = @_;
        !          1475:     my $currentstring = '';
        !          1476:     if ($target eq 'web') {
        !          1477: 	$currentstring = $token->[2];    
        !          1478:     } 
        !          1479:     return $currentstring;
        !          1480: }
        !          1481: 
1.35      sakharuk 1482: #-- <table> tag
1.91      sakharuk 1483: sub start_table {
                   1484:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
                   1485:     my $currentstring = '';
                   1486:     if ($target eq 'web') {
                   1487: 	$currentstring = $token->[4];     
                   1488:     } elsif ($target eq 'tex') {
                   1489: 	my $aa = {};
                   1490: 	push @Apache::londefdef::table, $aa; 
                   1491: 	$Apache::londefdef::table[-1]{'row_number'} = -1;
                   1492: 	$Apache::londefdef::table[-1]{'output'} = ' \noindent \begin{tabular} ';
1.101     sakharuk 1493: 	my $border = &Apache::lonxml::get_param('border',$parstack,$safeeval,undef,1); 
1.91      sakharuk 1494: 	unless (defined $border) { $border = 0; }
                   1495: 	if ($border) { 
                   1496: 	    $Apache::londefdef::table[-1]{'hinc'} = '\hline '; 
                   1497: 	    $Apache::londefdef::table[-1]{'vinc'} = '&'; 
                   1498: 	    $Apache::londefdef::table[-1]{'vvinc'} = '|';
                   1499: 	} else {
                   1500: 	    $Apache::londefdef::table[-1]{'hinc'} = ''; 
                   1501: 	    $Apache::londefdef::table[-1]{'vinc'} = '&'; 
                   1502: 	    $Apache::londefdef::table[-1]{'vvinc'} = '';
                   1503: 	}
                   1504: 	my $width;
                   1505: 	foreach my $key (keys(%{$token->[2]})) {
                   1506: 	    if ($key =~ /^width$/i) {
1.101     sakharuk 1507: 		$width = &Apache::lonxml::get_param($key,$parstack,$safeeval,undef,1);
1.91      sakharuk 1508: 	    }
1.51      sakharuk 1509: 	}
1.91      sakharuk 1510: 	if (defined($width)) { $Apache::londefdef::table[-1]{'width'}=$width; }
                   1511:     }
                   1512:     return $currentstring;
                   1513: }
1.122   ! albertel 1514:  
        !          1515: sub end_table {
        !          1516:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
        !          1517:     my $currentstring = '';
        !          1518:     if ($target eq 'web') {
        !          1519: 	$currentstring = $token->[2];     
        !          1520:     } elsif ($target eq 'tex') {
        !          1521: 	my $inmemory = '';
        !          1522: 	my $output = '';
        !          1523: 	#construct header of the table
        !          1524: 	my $header_of_table = '{'.$Apache::londefdef::table[-1]{'vvinc'};
        !          1525: 	my $in;
        !          1526: 	for ($in=0;$in<=$Apache::londefdef::table[-1]{'counter_columns'};$in++) {
        !          1527: 	    $header_of_table .= $Apache::londefdef::table[-1]{'columns'}[$in].$Apache::londefdef::table[-1]{'vvinc'};
        !          1528: 	}
        !          1529: 	$header_of_table .= '}';
        !          1530: 	#fill the table
        !          1531: 	for ($in=0;$in<=$Apache::londefdef::table[-1]{'row_number'};$in++) {
        !          1532: 	    $output .=  $Apache::londefdef::table[-1]{'rowdata'}[$in];
        !          1533: 	    chop $output;
        !          1534: 	    $output .= ' \\\\ ';
        !          1535: 	}
        !          1536: 	#define the length of the table cells
        !          1537: 	my @lengthforoutput = split(/,/,$Apache::londefdef::table[-1]{'lengthrow'}[0]);
        !          1538: 	my $how_many_columns = $#lengthforoutput + 1; #total number of columns in the table 
        !          1539: 	my $filled_columns = 0; #number of columns with information about width
        !          1540: 	my $available_space = ' ';
        !          1541: 	foreach my $tempo_length (@{ $Apache::londefdef::table[-1]{'lengthrow'} }) {
        !          1542: 	    my @length = split(/,/,$tempo_length);
        !          1543: 	    for (my $ico=0;$ico<=$#lengthforoutput;$ico++) {
        !          1544: 		$lengthforoutput[$ico] =~ m/(\d*\.?\d*)\s*(\w+)/;
        !          1545: 		my $old_value = $1;
        !          1546: 		my $old_unit = $2; 
        !          1547: 		if ($old_unit eq 'cm') { 
        !          1548: 		    $old_value = $old_value * 10;
        !          1549: 		} elsif ($old_unit eq 'in') { 
        !          1550: 		    $old_value = $old_value * 25.4;
        !          1551: 		} elsif ($old_unit eq 'pt') {
        !          1552: 		    $old_value = $old_value * 25.4/72.27;
        !          1553: 		} elsif ($old_unit eq 'pc') {
        !          1554: 		    $old_value = $old_value * 25.4/6.022;
1.50      sakharuk 1555: 		}
1.122   ! albertel 1556: 		$old_unit = 'mm';
        !          1557: 		$length[$ico] =~ m/(\d*\.?\d*)\s*(\w+)/;
        !          1558: 		my $new_value = $1;
        !          1559: 		my $new_unit = $2;
        !          1560: 		if ($new_unit eq 'cm') { 
        !          1561: 		    $new_value = $new_value * 10;
        !          1562: 		} elsif ($old_unit eq 'in') { 
        !          1563: 		    $new_value = $new_value * 25.4;
        !          1564: 		} elsif ($old_unit eq 'pt') {
        !          1565: 		    $new_value = $new_value * 25.4/72.27;
        !          1566: 		} elsif ($old_unit eq 'pc') {
        !          1567: 		    $new_value = $new_value * 25.4/6.022;
1.71      sakharuk 1568: 		}
1.122   ! albertel 1569: 		$new_unit = 'mm';
        !          1570: 		if ($old_value < $new_value) {
        !          1571: 		    $lengthforoutput[$ico] = $new_value.' mm';
1.91      sakharuk 1572: 		} else {
1.122   ! albertel 1573: 		    $lengthforoutput[$ico] = $old_value.' mm';
1.53      sakharuk 1574: 		}
1.51      sakharuk 1575: 	    }
                   1576: 	}
1.122   ! albertel 1577: 	for (my $ico=0;$ico<=$#lengthforoutput;$ico++) {
        !          1578: 	    if (not $lengthforoutput[$ico]=~m/^\s*0\s*\w*\s*$/) {
        !          1579: 		$filled_columns++;
        !          1580: 		$available_space = $available_space.' - '.$lengthforoutput[$ico];
        !          1581: 	    }
        !          1582: 	}
        !          1583: 	my $temp_file;
        !          1584: 	my $filename = "/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout.tbl";
        !          1585: 	if (-e $filename) {
        !          1586: 	    $temp_file = Apache::File->new($filename); 
        !          1587: 	    my @tbl_file_content = <$temp_file>;
        !          1588: 	    my ($one,$two,$three) = split(/,/,$tbl_file_content[0]);
        !          1589: 	    $how_many_columns+=$one-1;
        !          1590: 	    $filled_columns+=$two;
        !          1591: 	    if($three=~/\S/) {$available_space = $available_space.' - '.$three;}
        !          1592: 	} else {
        !          1593: 	    $temp_file = Apache::File->new('>>'.$filename); 
        !          1594: 	}		
        !          1595: 	print $temp_file "$how_many_columns,$filled_columns,$available_space\n";
        !          1596: 	$output =~ s/\\parbox{TOBECHANGEDONNUMBER}{}/\\parbox{1 mm}{}/g;
        !          1597: 	$output =~ s/\\parbox{TOBECHANGEDONNUMBER}/\\parbox{\$SpacePerColumn}/g;
        !          1598: 	my @tagar = @$tagstack;
        !          1599: 	my $signature = 1;
        !          1600: 	for (my $ico=0;$ico<$#tagar;$ico++) {
        !          1601: 	    if ($tagar[$ico] eq 'table') { $signature = 0; }
        !          1602: 	}
        !          1603: 	if ($signature) {
        !          1604: 	    my $NumberEmptyLength = $how_many_columns - $filled_columns;		
        !          1605: 	    my $SpacePerColumn = '(\textwidth '.$available_space.')/'.$NumberEmptyLength;
        !          1606: 	    my $shorthand = ($filled_columns+1)*4;
        !          1607: 	    $output =~ s/\$SpacePerColumn/$SpacePerColumn - $shorthand mm/g;
        !          1608: 	}	
        !          1609: 	if ($how_many_columns==1) {
        !          1610: 	    #start of block with width correction for one column table
        !          1611: 	    $output=~s/^\s*\\parbox\{([^\}]*)\}/\\parbox\{\\textwidth - 1 cm\}/;
        !          1612: 	    #end of block with width correction for one column table
        !          1613: 	}
        !          1614: 	$Apache::londefdef::table[-1]{'output'} .= $header_of_table.$output.$Apache::londefdef::table[-1]{'hinc'}.'\end{tabular}\vskip 0 mm ';
        !          1615: 	if ($#Apache::londefdef::table > 0) {
        !          1616: 	    $inmemory = $Apache::londefdef::table[-1]{'output'};
        !          1617: 	    pop @Apache::londefdef::table;
        !          1618: 	    $Apache::londefdef::table[-1]{'rowdata'}[$Apache::londefdef::table[-1]{'row_number'}] .= $inmemory
        !          1619: 	} else {
        !          1620: 	    $currentstring = $Apache::londefdef::table[-1]{'output'};
        !          1621: 	    $currentstring =~ s/\\\\\s+\\\\/\\\\/g; 
        !          1622: 	    pop @Apache::londefdef::table;
        !          1623: 	    if (-e $filename) {
        !          1624: 		unlink $filename;
        !          1625: 	    }
        !          1626: 	}
        !          1627:     }
        !          1628:     return $currentstring;
        !          1629: }
        !          1630: 
1.51      sakharuk 1631: #-- <tr> tag
1.122   ! albertel 1632: sub start_tr {
        !          1633:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
        !          1634:     my $currentstring = '';
        !          1635:     if ($target eq 'web') {
        !          1636: 	$currentstring = $token->[4];     
        !          1637:     } elsif ($target eq 'tex') {
        !          1638: 	$Apache::londefdef::table[-1]{'row_number'}++;
        !          1639: 	my $alignchar = substr(&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1),0,1);
        !          1640: 	if ($alignchar ne '') {
        !          1641: 	    push @ {$Apache::londefdef::table[-1]{'rows'} }, $alignchar;
        !          1642: 	} else {
        !          1643: 	    push @ {$Apache::londefdef::table[-1]{'rows'} }, 'l';
        !          1644: 	}
        !          1645: 	push ( @{ $Apache::londefdef::table[-1]{'rowdata'} }, $Apache::londefdef::table[-1]{'hinc'});
        !          1646: 	$Apache::londefdef::table[-1]{'counter_columns'} = -1;
        !          1647: 	$Apache::londefdef::table[-1]{'length'} = ''; 
        !          1648:     } 
        !          1649:     return $currentstring;
        !          1650: }
        !          1651:         
        !          1652: sub end_tr {
        !          1653:     my ($target,$token) = @_;
        !          1654:     my $currentstring = '';
        !          1655:     if ($target eq 'web') {
        !          1656: 	$currentstring = $token->[2];     
        !          1657:     } elsif ($target eq 'tex') {
        !          1658: 	push @{ $Apache::londefdef::table[-1]{'lengthrow'} },$Apache::londefdef::table[-1]{'length'};
        !          1659: 	
        !          1660:     }
        !          1661:     return $currentstring;
        !          1662: }
        !          1663: 
        !          1664: #-- <td> tag
        !          1665: sub start_td {
        !          1666:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
        !          1667:     my $currentstring = '';
        !          1668:     if ($target eq 'web') {
        !          1669: 	$currentstring = $token->[4];     
        !          1670:     } elsif ($target eq 'tex') {
        !          1671: 	my $what_to_push = substr(&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1),0,1);
        !          1672: 	if ($what_to_push eq '') {
        !          1673: 	    $what_to_push = substr($Apache::londefdef::table[-1]{'rows'}[0],0,1);;
        !          1674: 	}
        !          1675: 	push @{ $Apache::londefdef::table[-1]{'columns'} }, $what_to_push;
        !          1676: 	$Apache::londefdef::table[-1]{'counter_columns'}++;
        !          1677: 	&Apache::lonxml::startredirection();
        !          1678:     } 
        !          1679:     return $currentstring;
        !          1680: }   
        !          1681:      
        !          1682: sub end_td {
        !          1683:     my ($target,$token) = @_;
        !          1684:     my $currentstring = '';
        !          1685:     my $tempolen = '';
        !          1686:     if ($target eq 'web') {
        !          1687: 	$currentstring = $token->[2];     
        !          1688:     } elsif ($target eq 'tex') {
        !          1689: 	my $current_row = $Apache::londefdef::table[-1]{'row_number'};
        !          1690: 	my $data=&Apache::lonxml::endredirection();
        !          1691: 	if ($data=~m/width\s*=\s*(\d+\.?\d*\s*(mm|cm|in|pc|pt))/) {
        !          1692: 	    $Apache::londefdef::table[-1]{'length'} .= $1.',';
        !          1693: 	    $tempolen = $1;         
        !          1694: 	} else {
        !          1695: 	    if (length($data)<5) {
        !          1696: 		$Apache::londefdef::table[-1]{'length'} .= '0 mm,';
        !          1697: 		$tempolen = '6 mm';
        !          1698: 	    } else {
        !          1699: 		$Apache::londefdef::table[-1]{'length'} .= '0 mm,';
        !          1700: 		$tempolen = 'TOBECHANGEDONNUMBER';
        !          1701: 	    }
        !          1702: 	}                                        
        !          1703: 	@{ $Apache::londefdef::table[-1]{'rowdata'} }[$current_row] .= '\parbox{'.$tempolen.'}{'.$data.'} '.$Apache::londefdef::table[-1]{'vinc'};
        !          1704:     }
        !          1705:     return $currentstring;
        !          1706: }
        !          1707: 
        !          1708: #-- <th> tag
        !          1709: sub start_th {
        !          1710:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
        !          1711:     my $currentstring = '';
        !          1712:     if ($target eq 'web') {
        !          1713: 	$currentstring = $token->[4];     
        !          1714:     } elsif ($target eq 'tex') {
        !          1715: 	my $what_to_push = substr(&Apache::lonxml::get_param('align',$parstack,$safeeval,undef,1),0,1);
        !          1716: 	if ($what_to_push eq '') {
        !          1717: 	    $what_to_push = substr($Apache::londefdef::table[-1]{'rows'}[0],0,1);;
        !          1718: 	}
        !          1719: 	push @{ $Apache::londefdef::table[-1]{'columns'} }, $what_to_push;
        !          1720: 	$Apache::londefdef::table[-1]{'counter_columns'}++;
        !          1721: 	&Apache::lonxml::startredirection();
        !          1722: 	;
        !          1723:     } 
        !          1724:     return $currentstring;
        !          1725: }
        !          1726:         
        !          1727: sub end_th {
        !          1728:     my ($target,$token) = @_;
        !          1729:     my $currentstring = '';
        !          1730:     if ($target eq 'web') {
        !          1731: 	$currentstring = $token->[2];     
        !          1732:     } elsif ($target eq 'tex') {
        !          1733: 	my $current_row = $Apache::londefdef::table[-1]{'row_number'};
        !          1734: 	my $data=&Apache::lonxml::endredirection();
        !          1735: 	if ($data=~m/width\s*=\s*(\d+\.*\d*\s*(mm|cm))/) {                 
        !          1736: 	    $Apache::londefdef::table[-1]{'length'} .= $1.',';             
        !          1737: 	} else {
        !          1738: 	    $Apache::londefdef::table[-1]{'length'} .= '0 mm,'; 
        !          1739: 	}                                                           
        !          1740: 	@{ $Apache::londefdef::table[-1]{'rowdata'} }[$current_row] .= '\parbox{'.$1.'}{\textbf{'.$data.'}} '.$Apache::londefdef::table[-1]{'vinc'};
        !          1741:     }
        !          1742:     return $currentstring;
        !          1743: }
1.79      sakharuk 1744: 
1.122   ! albertel 1745: #-- <img> tag
        !          1746: sub start_img {
        !          1747:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
        !          1748:     my $src = &Apache::lonxml::get_param('src',$parstack,$safeeval,
        !          1749: 					 undef,1);
        !          1750:     $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=$src;
        !          1751:     my $currentstring = '';
        !          1752:     my $width_param = '';
        !          1753:     my $height_param = '';
        !          1754:     my $scaling = .3;
        !          1755:     
        !          1756:     if ($target eq 'web') {
        !          1757: 	if ($ENV{'browser.imagesuppress'} ne 'on') {
        !          1758: 	    $currentstring = $token->[4];
        !          1759: 	} else {
        !          1760: 	    my $alttag= &Apache::lonxml::get_param
        !          1761: 		('alt',$parstack,$safeeval,undef,1);
        !          1762: 	    unless ($alttag) {
        !          1763: 		$alttag=&Apache::lonmeta::alttag
        !          1764: 		    ($Apache::lonxml::pwd[-1],$src);
1.51      sakharuk 1765: 	    }
1.122   ! albertel 1766: 	    $currentstring='[IMAGE: '.$alttag.']';
1.1       sakharuk 1767: 	}
1.122   ! albertel 1768:     } elsif ($target eq 'tex') {
        !          1769: 	$src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
        !          1770: 	&image_replication($src);
        !          1771: 	
        !          1772: 	#if original gif/jpg/png file exist do following:
        !          1773: 	if (-e $src) {          
        !          1774: 	    #defines the default size of image
        !          1775: 	    my $image = Image::Magick->new;
        !          1776: 	    my $current_figure = $image->Read($src);
        !          1777: 	    $width_param = $image->Get('width') * $scaling;;
        !          1778: 	    $height_param = $image->Get('height') * $scaling;;
        !          1779: 	    undef $image;
        !          1780: 	    #do we have any specified size of the picture?
        !          1781: 	    my $TeXwidth = &Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval);
        !          1782: 	    my $TeXheight = &Apache::lonxml::get_param('TeXheight',$parstack,$safeeval);
        !          1783: 	    my $width = &Apache::lonxml::get_param('width',$parstack,$safeeval,
        !          1784: 						   undef,1);
        !          1785: 	    if ($TeXwidth ne '') {  
        !          1786: 		if ($TeXwidth=~/(\d+)\s*\%/) {
        !          1787: 		    $width_param = $1*$ENV{'form.textwidth'}/100;
        !          1788: 		} else { 
        !          1789: 		    $width_param = $TeXwidth;
        !          1790: 		}
        !          1791: 	    } elsif ($TeXheight ne '') {
        !          1792: 		$width_param = $TeXheight/$height_param*$width_param;
        !          1793: 	    } elsif ($width ne '') {
        !          1794: 		$width_param = $width*$scaling;      
        !          1795: 	    }
        !          1796: 	    my $file;
        !          1797: 	    my $path;	
        !          1798: 	    if ($src =~ m!(.*)/([^/]*)$!) {
        !          1799: 		$file = $2; 
        !          1800: 		$path = $1.'/'; 
        !          1801: 	    } 
        !          1802: 	    my $newsrc = $src;
        !          1803: 	    $newsrc =~ s/\.(gif|jpg|png)$/.eps/i;
        !          1804: 	    $file=~s/\.(gif|jpg|png)$/.eps/i;
        !          1805: 	    #where can we find the picture?
        !          1806: 	    if (-e $newsrc) {
        !          1807: 		#eps counterpart for image exist 
        !          1808: 		if ($path) {
        !          1809: 		    $currentstring .= '\vskip 1 mm \noindent\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
1.51      sakharuk 1810: 		}
1.122   ! albertel 1811: 	    } else {
        !          1812: 		#there is no eps counterpart for image - check for ps one
        !          1813: 		$newsrc =~ s/\.eps$/\.ps/;
        !          1814: 		if (-e $newsrc) {
        !          1815: 		    #ps counterpart for image exist 
        !          1816: 		    $file =~ s/\.eps$/\.ps/;
        !          1817: 		    if ($path) {
        !          1818: 			$currentstring .= '\vskip 1 mm \noindent\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
        !          1819: 		    }
1.78      sakharuk 1820: 		} else {
1.122   ! albertel 1821: 		    #there aren't eps or ps - so create eps 
        !          1822: 		    my $temp_file;
        !          1823: 		    my $filename = "/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout.dat";
        !          1824: 		    $temp_file = Apache::File->new('>>'.$filename); 
        !          1825: 		    print $temp_file "$src\n";
        !          1826: 		    $currentstring .= '\vskip 1 mm \graphicspath{{/home/httpd/prtspool/}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
        !          1827: 		}
        !          1828: 	    }
        !          1829: 	} else {
        !          1830: 	    #original image file doesn't exist so check the alt attribute
        !          1831: 	    my $alt = 
        !          1832: 		&Apache::lonxml::get_param('alt',$parstack,$safeeval,undef,1);
        !          1833: 	    unless ($alt) {
        !          1834: 		$alt=&Apache::lonmeta::alttag($Apache::lonxml::pwd[-1],$src);
        !          1835: 	    }
        !          1836: 
        !          1837: 	    if ($alt) {
        !          1838: 		$currentstring .= ' '.$alt.' ';
        !          1839: 	    } else {
        !          1840: 		#<allow> tag will care about replication 
1.59      sakharuk 1841: 	    }
                   1842: 	}
1.122   ! albertel 1843:     }
        !          1844:     return $currentstring;
        !          1845: }
        !          1846: 
        !          1847: sub end_img {
        !          1848:     my ($target,$token) = @_;
        !          1849:     my $currentstring = '';
        !          1850:     if ($target eq 'web') {
        !          1851: 	$currentstring = $token->[2];
        !          1852:     } elsif ($target eq 'tex') {
        !          1853: 	$currentstring = '';
        !          1854:     }
        !          1855:     return $currentstring;
        !          1856: }
        !          1857: 
        !          1858: #-- <applet> tag
        !          1859: sub start_applet {
        !          1860:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
        !          1861:     
        !          1862:     my $code=&Apache::lonxml::get_param('code',$parstack,$safeeval,undef,1);
        !          1863:     $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=$code;
        !          1864:     
        !          1865:     my $archive=&Apache::lonxml::get_param('archive',$parstack,$safeeval,
        !          1866: 					   undef,1);
        !          1867:     $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=$archive;
        !          1868:     
        !          1869:     my $currentstring = '';
        !          1870:     if ($target eq 'web') {
        !          1871: 	if ($ENV{'browser.appletsuppress'} ne 'on') {
        !          1872: 	    $currentstring = $token->[4];
        !          1873: 	} else {
        !          1874: 	    my $alttag= &Apache::lonxml::get_param('alt',$parstack,
        !          1875: 						   $safeeval,undef,1);
        !          1876: 	    unless ($alttag) {
        !          1877: 		$alttag=&Apache::lonmeta::alttag($Apache::lonxml::pwd[-1],
        !          1878: 						 $code);
1.44      sakharuk 1879: 	    }
1.122   ! albertel 1880: 	    $currentstring='[APPLET: '.$alttag.']';
1.1       sakharuk 1881: 	}
1.122   ! albertel 1882:     } elsif ($target eq 'tex') {
        !          1883: 	$currentstring = " \\begin{figure} ";
        !          1884:     } 
        !          1885:     return $currentstring;
        !          1886: }
        !          1887: 
        !          1888: sub end_applet {
        !          1889:     my ($target,$token) = @_;
        !          1890:     my $currentstring = '';
        !          1891:     if ($target eq 'web') {
        !          1892: 	$currentstring = $token->[2];
        !          1893:     } elsif ($target eq 'tex') {
        !          1894: 	$currentstring = " \\end{figure}";
        !          1895:     } 
        !          1896:     return $currentstring;
        !          1897: }
        !          1898: 
        !          1899: #-- <embed> tag
        !          1900: sub start_embed {    
        !          1901:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
        !          1902:     my $src=&Apache::lonxml::get_param('src',$parstack,$safeeval,undef,1);
        !          1903:     $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=$src;
        !          1904:     my $currentstring = '';
        !          1905:     if ($target eq 'web') {
        !          1906: 	if ($ENV{'browser.embedsuppress'} ne 'on') {
        !          1907: 	    $currentstring = $token->[4];
        !          1908: 	} else {
        !          1909: 	    my $alttag=&Apache::lonxml::get_param
        !          1910: 		('alt',$parstack,$safeeval,undef,1);
        !          1911: 	    unless ($alttag) {
        !          1912: 		$alttag=&Apache::lonmeta::alttag($Apache::lonxml::pwd[-1],$src);
1.42      albertel 1913: 	    }
1.122   ! albertel 1914: 	    $currentstring='[EMBED: '.$alttag.']';
1.10      www      1915: 	}
1.122   ! albertel 1916:     } elsif ($target eq 'tex') {
        !          1917: 	$currentstring = " \\begin{figure} ";  
        !          1918:     } 
        !          1919:     return $currentstring;
        !          1920: }
        !          1921: 
        !          1922: sub end_embed {
        !          1923:     my ($target,$token) = @_;
        !          1924:     my $currentstring = '';
        !          1925:     if ($target eq 'web') {
        !          1926: 	$currentstring = $token->[2];     
        !          1927:     } elsif ($target eq 'tex') {
        !          1928: 	$currentstring = " \\end{figure}";  
        !          1929:     } 
        !          1930:     return $currentstring;
        !          1931: }
        !          1932: 
        !          1933: #-- <param> tag
        !          1934: sub start_param {
        !          1935:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
        !          1936:     if (&Apache::lonxml::get_param
        !          1937: 	('name',$parstack,$safeeval,undef,1)=~/^cabbase$/i) {
        !          1938: 	$Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=
        !          1939: 	    &Apache::lonxml::get_param('value',$parstack,$safeeval,undef,1);
        !          1940:     }   
        !          1941:     $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=   
        !          1942: 	&Apache::lonxml::get_param('src',$parstack,$safeeval,undef,1);
        !          1943:     my $currentstring = '';
        !          1944:     if ($target eq 'web') {
        !          1945: 	$currentstring = $token->[4];     
        !          1946:     } elsif ($target eq 'tex') {
        !          1947: 	$currentstring = " \\begin{figure} ";  
        !          1948:     } 
        !          1949:     return $currentstring;
        !          1950: }
        !          1951: 
        !          1952: sub end_param {
        !          1953:     my ($target,$token) = @_;
        !          1954:     my $currentstring = '';
        !          1955:     if ($target eq 'web') {
        !          1956: 	$currentstring = $token->[2];     
        !          1957:     } elsif ($target eq 'tex') {
        !          1958: 	$currentstring = " \\end{figure}";  
        !          1959:     } 
        !          1960:     return $currentstring;
        !          1961: }
        !          1962: 
        !          1963: #-- <allow> tag
        !          1964: sub start_allow {
        !          1965:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
        !          1966:     my $src = &Apache::lonxml::get_param('src',$parstack,$safeeval,undef,1);
        !          1967:     $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
        !          1968:     $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=$src;
        !          1969:     &image_replication($src);
        !          1970:     my $result;
        !          1971:     if ($target eq 'edit') {
        !          1972: 	$result .=&Apache::edit::tag_start($target,$token);
        !          1973: 	$result .=&Apache::edit::text_arg('File Spec:','src',$token,70);
        !          1974: 	$result .=&Apache::edit::end_row();#.&Apache::edit::start_spanning_row();
        !          1975:     } elsif ($target eq 'modified') {
        !          1976: 	my $constructtag=&Apache::edit::get_new_args($token,$parstack,
        !          1977: 						     $safeeval,'src');
        !          1978: 	if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); }
        !          1979:     }
        !          1980:     return $result;
        !          1981: }
        !          1982: 
        !          1983: sub end_allow {
        !          1984:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
        !          1985:     if ( $target eq 'edit') { return (&Apache::edit::end_table()); }
        !          1986:     return '';
        !          1987: }
1.119     www      1988: 
1.122   ! albertel 1989: #-- Frames
        !          1990: sub start_frameset {
        !          1991:     my ($target,$token) = @_;
        !          1992:     my $currentstring = '';
        !          1993:     if ($target eq 'web') { 
        !          1994: 	if (!$Apache::lonxml::registered) {
        !          1995: 	    $currentstring.='<head>'.
        !          1996: 		&Apache::lonmenu::registerurl(undef,$target).'</head>';
1.10      www      1997: 	}
1.122   ! albertel 1998: 	$currentstring .= $token->[4];
        !          1999:     }
        !          2000:     return $currentstring;
        !          2001: }
        !          2002: 
        !          2003: sub end_frameset {
        !          2004:     my ($target,$token) = @_;
        !          2005:     my $currentstring = '';
        !          2006:     if ($target eq 'web') {
        !          2007: 	$currentstring = $token->[2];
        !          2008:     }
        !          2009:     return $currentstring;
        !          2010: }
        !          2011: 
        !          2012: #-- <pre>
        !          2013: sub start_pre {
        !          2014:     my ($target,$token) = @_;
        !          2015:     my $currentstring = '';
        !          2016:     if ($target eq 'web') {
        !          2017: 	$currentstring .= $token->[4];
        !          2018:     } elsif ($target eq 'tex') {
        !          2019: 	$currentstring .= '\begin{verbatim}';
        !          2020:     } 
        !          2021:     return $currentstring;
        !          2022: }
        !          2023: 
        !          2024: sub end_pre {
        !          2025:     my ($target,$token) = @_;
        !          2026:     my $currentstring = '';
        !          2027:     if ($target eq 'web') {
        !          2028: 	$currentstring .= $token->[2];
        !          2029:     } elsif ($target eq 'tex') {
        !          2030: 	$currentstring .= '\end{verbatim}';
        !          2031:     }
        !          2032:     return $currentstring;
        !          2033: }
        !          2034: 
        !          2035: #-- <insert>
        !          2036: sub start_insert {
        !          2037:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
        !          2038:     my $currentstring = '';
        !          2039:     if ($target eq 'web') {
        !          2040: 	my $display = &Apache::lonxml::get_param('display',$parstack,$safeeval,undef,1);
        !          2041: 	$currentstring .= '<b>'.$display.'</b>';;
        !          2042:     }
        !          2043:     return $currentstring;
        !          2044: }
        !          2045: 
        !          2046: sub end_insert {
        !          2047:     my ($target,$token) = @_;
        !          2048:     my $currentstring = '';
        !          2049:     if ($target eq 'web') {
        !          2050: 	$currentstring .= '';
        !          2051:     }
        !          2052:     return $currentstring;
        !          2053: }
        !          2054: 
        !          2055: #-- <externallink>
        !          2056: sub start_externallink {
        !          2057:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
        !          2058:     my $currentstring = '';
        !          2059:     if ($target eq 'web') {
        !          2060: 	my $display = &Apache::lonxml::get_param('display',$parstack,$safeeval,undef,1);
        !          2061: 	$currentstring .= '<b>'.$display.'</b>';;
        !          2062:     }
        !          2063:     return $currentstring;
        !          2064: }
        !          2065: 
        !          2066: sub end_externallink {
        !          2067:     my ($target,$token) = @_;
        !          2068:     my $currentstring = '';
        !          2069:     if ($target eq 'web') {
        !          2070: 	$currentstring .= '';
        !          2071:     }
        !          2072:     return $currentstring;
        !          2073: }
        !          2074: 
        !          2075: #-- <blankspace heigth="">
        !          2076: sub start_blankspace {
        !          2077:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
        !          2078:     my $currentstring = '';
        !          2079:     if ($target eq 'tex') {
        !          2080: 	my $howmuch = &Apache::lonxml::get_param('heigth',$parstack,$safeeval,undef,1);
        !          2081: 	$currentstring .= '\vskip '.$howmuch.' ';
        !          2082:     }
        !          2083:     return $currentstring;
        !          2084: }
        !          2085: 
        !          2086: sub end_blankspace {
        !          2087:     my ($target,$token) = @_;
        !          2088:     my $currentstring = '';
        !          2089:     if ($target eq 'tex') {
        !          2090: 	$currentstring .= '';
        !          2091:     }
        !          2092:     return $currentstring;
        !          2093: }
        !          2094: 
        !          2095: #-- <abbr> tag
        !          2096: sub start_abbr {
        !          2097:     my ($target,$token) = @_;
        !          2098:     my $currentstring = '';
        !          2099:     if ($target eq 'web') {
        !          2100: 	$currentstring = $token->[4];     
        !          2101:     } 
        !          2102:     return $currentstring;
        !          2103: }
        !          2104: 
        !          2105: sub end_abbr {
        !          2106:     my ($target,$token) = @_;
        !          2107:     my $currentstring = '';
        !          2108:     if ($target eq 'web') {
        !          2109: 	$currentstring = $token->[2];    
        !          2110:     } 
        !          2111:     return $currentstring;
        !          2112: }
        !          2113: 
        !          2114: #-- <acronym> tag
        !          2115: sub start_acronym {
        !          2116:     my ($target,$token) = @_;
        !          2117:     my $currentstring = '';
        !          2118:     if ($target eq 'web') {
        !          2119: 	$currentstring = $token->[4];     
        !          2120:     } 
        !          2121:     return $currentstring;
        !          2122: }
        !          2123: 
        !          2124: sub end_acronym {
        !          2125:     my ($target,$token) = @_;
        !          2126:     my $currentstring = '';
        !          2127:     if ($target eq 'web') {
        !          2128: 	$currentstring = $token->[2];    
        !          2129:     } 
        !          2130:     return $currentstring;
        !          2131: }
        !          2132: 
        !          2133: #-- <area> tag
        !          2134: sub start_area {
        !          2135:     my ($target,$token) = @_;
        !          2136:     my $currentstring = '';
        !          2137:     if ($target eq 'web') {
        !          2138: 	$currentstring = $token->[4];     
        !          2139:     } 
        !          2140:     return $currentstring;
        !          2141: }
        !          2142: 
        !          2143: sub end_area {
        !          2144:     my ($target,$token) = @_;
        !          2145:     my $currentstring = '';
        !          2146:     if ($target eq 'web') {
        !          2147: 	$currentstring = $token->[2];    
        !          2148:     } 
        !          2149:     return $currentstring;
        !          2150: }
        !          2151: 
        !          2152: #-- <base> tag
        !          2153: sub start_base {
        !          2154:     my ($target,$token) = @_;
        !          2155:     my $currentstring = '';
        !          2156:     if ($target eq 'web') {
        !          2157: 	$currentstring = $token->[4];     
        !          2158:     } 
        !          2159:     return $currentstring;
        !          2160: }
        !          2161: 
        !          2162: sub end_base {
        !          2163:     my ($target,$token) = @_;
        !          2164:     my $currentstring = '';
        !          2165:     if ($target eq 'web') {
        !          2166: 	$currentstring = $token->[2];    
        !          2167:     } 
        !          2168:     return $currentstring;
        !          2169: }
        !          2170: 
        !          2171: #-- <bdo> tag
        !          2172: sub start_bdo {
        !          2173:     my ($target,$token) = @_;
        !          2174:     my $currentstring = '';
        !          2175:     if ($target eq 'web') {
        !          2176: 	$currentstring = $token->[4];     
        !          2177:     } 
        !          2178:     return $currentstring;
        !          2179: }
        !          2180: 
        !          2181: sub end_bdo {
        !          2182:     my ($target,$token) = @_;
        !          2183:     my $currentstring = '';
        !          2184:     if ($target eq 'web') {
        !          2185: 	$currentstring = $token->[2];    
        !          2186:     } 
        !          2187:     return $currentstring;
        !          2188: }
        !          2189: 
        !          2190: #-- <bgsound> tag
        !          2191: sub start_bgsound {
        !          2192:     my ($target,$token) = @_;
        !          2193:     my $currentstring = '';
        !          2194:     if ($target eq 'web') {
        !          2195: 	$currentstring = $token->[4];     
        !          2196:     } 
        !          2197:     return $currentstring;
        !          2198: }
        !          2199: 
        !          2200: sub end_bgsound {
        !          2201:     my ($target,$token) = @_;
        !          2202:     my $currentstring = '';
        !          2203:     if ($target eq 'web') {
        !          2204: 	$currentstring = $token->[2];    
        !          2205:     } 
        !          2206:     return $currentstring;
        !          2207: }
        !          2208: 
        !          2209: #-- <blink> tag
        !          2210: sub start_blink {
        !          2211:     my ($target,$token) = @_;
        !          2212:     my $currentstring = '';
        !          2213:     if ($target eq 'web') {
        !          2214: 	$currentstring = $token->[4];     
        !          2215:     } 
        !          2216:     return $currentstring;
        !          2217: }
        !          2218: 
        !          2219: sub end_blink {
        !          2220:     my ($target,$token) = @_;
        !          2221:     my $currentstring = '';
        !          2222:     if ($target eq 'web') {
        !          2223: 	$currentstring = $token->[2];    
        !          2224:     } 
        !          2225:     return $currentstring;
        !          2226: }
        !          2227: 
        !          2228: #-- <blockquote> tag
        !          2229: sub start_blockquote {
        !          2230:     my ($target,$token) = @_;
        !          2231:     my $currentstring = '';
        !          2232:     if ($target eq 'web') {
        !          2233: 	$currentstring = $token->[4];     
        !          2234:     } 
        !          2235:     return $currentstring;
        !          2236: }
        !          2237: 
        !          2238: sub end_blockquote {
        !          2239:     my ($target,$token) = @_;
        !          2240:     my $currentstring = '';
        !          2241:     if ($target eq 'web') {
        !          2242: 	$currentstring = $token->[2];    
        !          2243:     } 
        !          2244:     return $currentstring;
        !          2245: }
        !          2246: 
        !          2247: #-- <button> tag
        !          2248: sub start_button {
        !          2249:     my ($target,$token) = @_;
        !          2250:     my $currentstring = '';
        !          2251:     if ($target eq 'web') {
        !          2252: 	$currentstring = $token->[4];     
        !          2253:     } 
        !          2254:     return $currentstring;
        !          2255: }
        !          2256: 
        !          2257: sub end_button {
        !          2258:     my ($target,$token) = @_;
        !          2259:     my $currentstring = '';
        !          2260:     if ($target eq 'web') {
        !          2261: 	$currentstring = $token->[2];    
        !          2262:     } 
        !          2263:     return $currentstring;
        !          2264: }
        !          2265: 
        !          2266: #-- <caption> tag
        !          2267: sub start_caption {
        !          2268:     my ($target,$token) = @_;
        !          2269:     my $currentstring = '';
        !          2270:     if ($target eq 'web') {
        !          2271: 	$currentstring = $token->[4];     
        !          2272:     } 
        !          2273:     return $currentstring;
        !          2274: }
        !          2275: 
        !          2276: sub end_caption {
        !          2277:     my ($target,$token) = @_;
        !          2278:     my $currentstring = '';
        !          2279:     if ($target eq 'web') {
        !          2280: 	$currentstring = $token->[2];    
        !          2281:     } 
        !          2282:     return $currentstring;
        !          2283: }
        !          2284: 
        !          2285: #-- <col> tag
        !          2286: sub start_col {
        !          2287:     my ($target,$token) = @_;
        !          2288:     my $currentstring = '';
        !          2289:     if ($target eq 'web') {
        !          2290: 	$currentstring = $token->[4];     
        !          2291:     } 
        !          2292:     return $currentstring;
        !          2293: }
        !          2294: 
        !          2295: sub end_col {
        !          2296:     my ($target,$token) = @_;
        !          2297:     my $currentstring = '';
        !          2298:     if ($target eq 'web') {
        !          2299: 	$currentstring = $token->[2];    
        !          2300:     } 
        !          2301:     return $currentstring;
        !          2302: }
        !          2303: 
        !          2304: #-- <colgroup> tag
        !          2305: sub start_colgroup {
        !          2306:     my ($target,$token) = @_;
        !          2307:     my $currentstring = '';
        !          2308:     if ($target eq 'web') {
        !          2309: 	$currentstring = $token->[4];     
        !          2310:     } 
        !          2311:     return $currentstring;
        !          2312: }
        !          2313: 
        !          2314: sub end_colgroup {
        !          2315:     my ($target,$token) = @_;
        !          2316:     my $currentstring = '';
        !          2317:     if ($target eq 'web') {
        !          2318: 	$currentstring = $token->[2];    
        !          2319:     } 
        !          2320:     return $currentstring;
        !          2321: }
        !          2322: 
        !          2323: #-- <del> tag
        !          2324: sub start_del {
        !          2325:     my ($target,$token) = @_;
        !          2326:     my $currentstring = '';
        !          2327:     if ($target eq 'web') {
        !          2328: 	$currentstring = $token->[4];     
        !          2329:     } 
        !          2330:     return $currentstring;
        !          2331: }
        !          2332: 
        !          2333: sub end_del {
        !          2334:     my ($target,$token) = @_;
        !          2335:     my $currentstring = '';
        !          2336:     if ($target eq 'web') {
        !          2337: 	$currentstring = $token->[2];    
        !          2338:     } 
        !          2339:     return $currentstring;
        !          2340: }
        !          2341: 
        !          2342: #-- <fieldset> tag
        !          2343: sub start_fieldset {
        !          2344:     my ($target,$token) = @_;
        !          2345:     my $currentstring = '';
        !          2346:     if ($target eq 'web') {
        !          2347: 	$currentstring = $token->[4];     
        !          2348:     } 
        !          2349:     return $currentstring;
        !          2350: }
        !          2351: 
        !          2352: sub end_fieldset {
        !          2353:     my ($target,$token) = @_;
        !          2354:     my $currentstring = '';
        !          2355:     if ($target eq 'web') {
        !          2356: 	$currentstring = $token->[2];    
        !          2357:     } 
        !          2358:     return $currentstring;
        !          2359: }
        !          2360: 
        !          2361: #-- <frame> tag
        !          2362: sub start_frame {
        !          2363:     my ($target,$token) = @_;
        !          2364:     my $currentstring = '';
        !          2365:     if ($target eq 'web') {
        !          2366: 	$currentstring = $token->[4];     
        !          2367:     } 
        !          2368:     return $currentstring;
        !          2369: }
        !          2370: 
        !          2371: sub end_frame {
        !          2372:     my ($target,$token) = @_;
        !          2373:     my $currentstring = '';
        !          2374:     if ($target eq 'web') {
        !          2375: 	$currentstring = $token->[2];    
        !          2376:     } 
        !          2377:     return $currentstring;
        !          2378: }
        !          2379: 
        !          2380: #-- <iframe> tag
        !          2381: sub start_iframe {
        !          2382:     my ($target,$token) = @_;
        !          2383:     my $currentstring = '';
        !          2384:     if ($target eq 'web') {
        !          2385: 	$currentstring = $token->[4];     
        !          2386:     } 
        !          2387:     return $currentstring;
        !          2388: }
        !          2389: 
        !          2390: sub end_iframe {
        !          2391:     my ($target,$token) = @_;
        !          2392:     my $currentstring = '';
        !          2393:     if ($target eq 'web') {
        !          2394: 	$currentstring = $token->[2];    
        !          2395:     } 
        !          2396:     return $currentstring;
        !          2397: }
        !          2398: 
        !          2399: #-- <ins> tag
        !          2400: sub start_ins {
        !          2401:     my ($target,$token) = @_;
        !          2402:     my $currentstring = '';
        !          2403:     if ($target eq 'web') {
        !          2404: 	$currentstring = $token->[4];     
        !          2405:     } 
        !          2406:     return $currentstring;
        !          2407: }
        !          2408: 
        !          2409: sub end_ins {
        !          2410:     my ($target,$token) = @_;
        !          2411:     my $currentstring = '';
        !          2412:     if ($target eq 'web') {
        !          2413: 	$currentstring = $token->[2];    
        !          2414:     } 
        !          2415:     return $currentstring;
        !          2416: }
        !          2417: 
        !          2418: #-- <isindex> tag
        !          2419: sub start_isindex {
        !          2420:     my ($target,$token) = @_;
        !          2421:     my $currentstring = '';
        !          2422:     if ($target eq 'web') {
        !          2423: 	$currentstring = $token->[4];     
        !          2424:     } 
        !          2425:     return $currentstring;
        !          2426: }
        !          2427: 
        !          2428: sub end_isindex {
        !          2429:     my ($target,$token) = @_;
        !          2430:     my $currentstring = '';
        !          2431:     if ($target eq 'web') {
        !          2432: 	$currentstring = $token->[2];    
        !          2433:     } 
        !          2434:     return $currentstring;
        !          2435: }
        !          2436: 
        !          2437: #-- <keygen> tag
        !          2438: sub start_keygen {
        !          2439:     my ($target,$token) = @_;
        !          2440:     my $currentstring = '';
        !          2441:     if ($target eq 'web') {
        !          2442: 	$currentstring = $token->[4];     
        !          2443:     } 
        !          2444:     return $currentstring;
        !          2445: }
        !          2446: 
        !          2447: sub end_keygen {
        !          2448:     my ($target,$token) = @_;
        !          2449:     my $currentstring = '';
        !          2450:     if ($target eq 'web') {
        !          2451: 	$currentstring = $token->[2];    
        !          2452:     } 
        !          2453:     return $currentstring;
        !          2454: }
        !          2455: 
        !          2456: #-- <label> tag
        !          2457: sub start_label {
        !          2458:     my ($target,$token) = @_;
        !          2459:     my $currentstring = '';
        !          2460:     if ($target eq 'web') {
        !          2461: 	$currentstring = $token->[4];     
        !          2462:     } 
        !          2463:     return $currentstring;
        !          2464: }
        !          2465: 
        !          2466: sub end_label {
        !          2467:     my ($target,$token) = @_;
        !          2468:     my $currentstring = '';
        !          2469:     if ($target eq 'web') {
        !          2470: 	$currentstring = $token->[2];    
        !          2471:     } 
        !          2472:     return $currentstring;
        !          2473: }
        !          2474: 
        !          2475: #-- <layer> tag
        !          2476: sub start_layer {
        !          2477:     my ($target,$token) = @_;
        !          2478:     my $currentstring = '';
        !          2479:     if ($target eq 'web') {
        !          2480: 	$currentstring = $token->[4];     
        !          2481:     } 
        !          2482:     return $currentstring;
        !          2483: }
        !          2484: 
        !          2485: sub end_layer {
        !          2486:     my ($target,$token) = @_;
        !          2487:     my $currentstring = '';
        !          2488:     if ($target eq 'web') {
        !          2489: 	$currentstring = $token->[2];    
        !          2490:     } 
        !          2491:     return $currentstring;
        !          2492: }
        !          2493: 
        !          2494: #-- <legend> tag
        !          2495: sub start_legend {
        !          2496:     my ($target,$token) = @_;
        !          2497:     my $currentstring = '';
        !          2498:     if ($target eq 'web') {
        !          2499: 	$currentstring = $token->[4];     
        !          2500:     } 
        !          2501:     return $currentstring;
        !          2502: }
        !          2503: 
        !          2504: sub end_legend {
        !          2505:     my ($target,$token) = @_;
        !          2506:     my $currentstring = '';
        !          2507:     if ($target eq 'web') {
        !          2508: 	$currentstring = $token->[2];    
        !          2509:     } 
        !          2510:     return $currentstring;
        !          2511: }
        !          2512: 
        !          2513: #-- <link> tag
        !          2514: sub start_link {
        !          2515:     my ($target,$token) = @_;
        !          2516:     my $currentstring = '';
        !          2517:     if ($target eq 'web') {
        !          2518: 	$currentstring = $token->[4];     
        !          2519:     } 
        !          2520:     return $currentstring;
        !          2521: }
        !          2522: 
        !          2523: sub end_link {
        !          2524:     my ($target,$token) = @_;
        !          2525:     my $currentstring = '';
        !          2526:     if ($target eq 'web') {
        !          2527: 	$currentstring = $token->[2];    
        !          2528:     } 
        !          2529:     return $currentstring;
        !          2530: }
        !          2531: 
        !          2532: #-- <marquee> tag
        !          2533: sub start_marquee {
        !          2534:     my ($target,$token) = @_;
        !          2535:     my $currentstring = '';
        !          2536:     if ($target eq 'web') {
        !          2537: 	$currentstring = $token->[4];     
        !          2538:     } 
        !          2539:     return $currentstring;
        !          2540: }
        !          2541: 
        !          2542: sub end_marquee {
        !          2543:     my ($target,$token) = @_;
        !          2544:     my $currentstring = '';
        !          2545:     if ($target eq 'web') {
        !          2546: 	$currentstring = $token->[2];    
        !          2547:     } 
        !          2548:     return $currentstring;
        !          2549: }
        !          2550: 
        !          2551: #-- <malticol> tag
        !          2552: sub start_malticol {
        !          2553:     my ($target,$token) = @_;
        !          2554:     my $currentstring = '';
        !          2555:     if ($target eq 'web') {
        !          2556: 	$currentstring = $token->[4];     
        !          2557:     } 
        !          2558:     return $currentstring;
        !          2559: }
        !          2560: 
        !          2561: sub end_malticol {
        !          2562:     my ($target,$token) = @_;
        !          2563:     my $currentstring = '';
        !          2564:     if ($target eq 'web') {
        !          2565: 	$currentstring = $token->[2];    
        !          2566:     } 
        !          2567:     return $currentstring;
        !          2568: }
        !          2569: 
        !          2570: #-- <nobr> tag
        !          2571: sub start_nobr {
        !          2572:     my ($target,$token) = @_;
        !          2573:     my $currentstring = '';
        !          2574:     if ($target eq 'web') {
        !          2575: 	$currentstring = $token->[4];     
        !          2576:     } 
        !          2577:     return $currentstring;
        !          2578: }
        !          2579: 
        !          2580: sub end_nobr {
        !          2581:     my ($target,$token) = @_;
        !          2582:     my $currentstring = '';
        !          2583:     if ($target eq 'web') {
        !          2584: 	$currentstring = $token->[2];    
        !          2585:     } 
        !          2586:     return $currentstring;
        !          2587: }
        !          2588: 
        !          2589: #-- <noembed> tag
        !          2590: sub start_noembed {
        !          2591:     my ($target,$token) = @_;
        !          2592:     my $currentstring = '';
        !          2593:     if ($target eq 'web') {
        !          2594: 	$currentstring = $token->[4];     
        !          2595:     } 
        !          2596:     return $currentstring;
        !          2597: }
        !          2598: 
        !          2599: sub end_noembed {
        !          2600:     my ($target,$token) = @_;
        !          2601:     my $currentstring = '';
        !          2602:     if ($target eq 'web') {
        !          2603: 	$currentstring = $token->[2];    
        !          2604:     } 
        !          2605:     return $currentstring;
        !          2606: }
        !          2607: 
        !          2608: #-- <noframes> tag
        !          2609: sub start_noframes {
        !          2610:     my ($target,$token) = @_;
        !          2611:     my $currentstring = '';
        !          2612:     if ($target eq 'web') {
        !          2613: 	$currentstring = $token->[4];     
        !          2614:     } 
        !          2615:     return $currentstring;
        !          2616: }
        !          2617: 
        !          2618: sub end_noframes {
        !          2619:     my ($target,$token) = @_;
        !          2620:     my $currentstring = '';
        !          2621:     if ($target eq 'web') {
        !          2622: 	$currentstring = $token->[2];    
        !          2623:     } 
        !          2624:     return $currentstring;
        !          2625: }
        !          2626: 
        !          2627: #-- <nolayer> tag
        !          2628: sub start_nolayer {
        !          2629:     my ($target,$token) = @_;
        !          2630:     my $currentstring = '';
        !          2631:     if ($target eq 'web') {
        !          2632: 	$currentstring = $token->[4];     
        !          2633:     } 
        !          2634:     return $currentstring;
        !          2635: }
        !          2636: 
        !          2637: sub end_nolayer {
        !          2638:     my ($target,$token) = @_;
        !          2639:     my $currentstring = '';
        !          2640:     if ($target eq 'web') {
        !          2641: 	$currentstring = $token->[2];    
        !          2642:     } 
        !          2643:     return $currentstring;
        !          2644: }
        !          2645: 
        !          2646: #-- <noscript> tag
        !          2647: sub start_noscript {
        !          2648:     my ($target,$token) = @_;
        !          2649:     my $currentstring = '';
        !          2650:     if ($target eq 'web') {
        !          2651: 	$currentstring = $token->[4];     
        !          2652:     } 
        !          2653:     return $currentstring;
        !          2654: }
        !          2655: 
        !          2656: sub end_noscript {
        !          2657:     my ($target,$token) = @_;
        !          2658:     my $currentstring = '';
        !          2659:     if ($target eq 'web') {
        !          2660: 	$currentstring = $token->[2];    
        !          2661:     } 
        !          2662:     return $currentstring;
        !          2663: }
        !          2664: 
        !          2665: #-- <object> tag
        !          2666: sub start_object {
        !          2667:     my ($target,$token) = @_;
        !          2668:     my $currentstring = '';
        !          2669:     if ($target eq 'web') {
        !          2670: 	$currentstring = $token->[4];     
        !          2671:     } 
        !          2672:     return $currentstring;
        !          2673: }
        !          2674: 
        !          2675: sub end_object {
        !          2676:     my ($target,$token) = @_;
        !          2677:     my $currentstring = '';
        !          2678:     if ($target eq 'web') {
        !          2679: 	$currentstring = $token->[2];    
        !          2680:     } 
        !          2681:     return $currentstring;
        !          2682: }
        !          2683: 
        !          2684: #-- <optgroup> tag
        !          2685: sub start_optgroup {
        !          2686:     my ($target,$token) = @_;
        !          2687:     my $currentstring = '';
        !          2688:     if ($target eq 'web') {
        !          2689: 	$currentstring = $token->[4];     
        !          2690:     } 
        !          2691:     return $currentstring;
        !          2692: }
        !          2693: 
        !          2694: sub end_optgroup {
        !          2695:     my ($target,$token) = @_;
        !          2696:     my $currentstring = '';
        !          2697:     if ($target eq 'web') {
        !          2698: 	$currentstring = $token->[2];    
        !          2699:     } 
        !          2700:     return $currentstring;
        !          2701: }
        !          2702: 
        !          2703: #-- <samp> tag
        !          2704: sub start_samp {
        !          2705:     my ($target,$token) = @_;
        !          2706:     my $currentstring = '';
        !          2707:     if ($target eq 'web') {
        !          2708: 	$currentstring = $token->[4];     
        !          2709:     } 
        !          2710:     return $currentstring;
        !          2711: }
        !          2712: 
        !          2713: sub end_samp {
        !          2714:     my ($target,$token) = @_;
        !          2715:     my $currentstring = '';
        !          2716:     if ($target eq 'web') {
        !          2717: 	$currentstring = $token->[2];    
        !          2718:     } 
        !          2719:     return $currentstring;
        !          2720: }
        !          2721: 
        !          2722: #-- <server> tag
        !          2723: sub start_server {
        !          2724:     my ($target,$token) = @_;
        !          2725:     my $currentstring = '';
        !          2726:     if ($target eq 'web') {
        !          2727: 	$currentstring = $token->[4];     
        !          2728:     } 
        !          2729:     return $currentstring;
        !          2730: }
        !          2731: 
        !          2732: sub end_server {
        !          2733:     my ($target,$token) = @_;
        !          2734:     my $currentstring = '';
        !          2735:     if ($target eq 'web') {
        !          2736: 	$currentstring = $token->[2];    
        !          2737:     } 
        !          2738:     return $currentstring;
        !          2739: }
        !          2740: 
        !          2741: #-- <spacer> tag
        !          2742: sub start_spacer {
        !          2743:     my ($target,$token) = @_;
        !          2744:     my $currentstring = '';
        !          2745:     if ($target eq 'web') {
        !          2746: 	$currentstring = $token->[4];     
        !          2747:     } 
        !          2748:     return $currentstring;
        !          2749: }
        !          2750: 
        !          2751: sub end_spacer {
        !          2752:     my ($target,$token) = @_;
        !          2753:     my $currentstring = '';
        !          2754:     if ($target eq 'web') {
        !          2755: 	$currentstring = $token->[2];    
        !          2756:     } 
        !          2757:     return $currentstring;
        !          2758: }
        !          2759: 
        !          2760: #-- <span> tag
        !          2761: sub start_span {
        !          2762:     my ($target,$token) = @_;
        !          2763:     my $currentstring = '';
        !          2764:     if ($target eq 'web') {
        !          2765: 	$currentstring = $token->[4];     
        !          2766:     } 
        !          2767:     return $currentstring;
        !          2768: }
        !          2769: 
        !          2770: sub end_span {
        !          2771:     my ($target,$token) = @_;
        !          2772:     my $currentstring = '';
        !          2773:     if ($target eq 'web') {
        !          2774: 	$currentstring = $token->[2];    
        !          2775:     } 
        !          2776:     return $currentstring;
        !          2777: }
        !          2778: 
        !          2779: #-- <tbody> tag
        !          2780: sub start_tbody {
        !          2781:     my ($target,$token) = @_;
        !          2782:     my $currentstring = '';
        !          2783:     if ($target eq 'web') {
        !          2784: 	$currentstring = $token->[4];     
        !          2785:     } 
        !          2786:     return $currentstring;
        !          2787: }
        !          2788: 
        !          2789: sub end_tbody {
        !          2790:     my ($target,$token) = @_;
        !          2791:     my $currentstring = '';
        !          2792:     if ($target eq 'web') {
        !          2793: 	$currentstring = $token->[2];    
        !          2794:     } 
        !          2795:     return $currentstring;
        !          2796: }
        !          2797: 
        !          2798: #-- <tfoot> tag
        !          2799: sub start_tfoot {
        !          2800:     my ($target,$token) = @_;
        !          2801:     my $currentstring = '';
        !          2802:     if ($target eq 'web') {
        !          2803: 	$currentstring = $token->[4];     
        !          2804:     } 
        !          2805:     return $currentstring;
        !          2806: }
        !          2807: 
        !          2808: sub end_tfoot {
        !          2809:     my ($target,$token) = @_;
        !          2810:     my $currentstring = '';
        !          2811:     if ($target eq 'web') {
        !          2812: 	$currentstring = $token->[2];    
        !          2813:     } 
        !          2814:     return $currentstring;
        !          2815: }
        !          2816: 
        !          2817: #-- <thead> tag
        !          2818: sub start_thead {
        !          2819:     my ($target,$token) = @_;
        !          2820:     my $currentstring = '';
        !          2821:     if ($target eq 'web') {
        !          2822: 	$currentstring = $token->[4];     
        !          2823:     } 
        !          2824:     return $currentstring;
        !          2825: }
1.10      www      2826: 
1.122   ! albertel 2827: sub end_thead {
        !          2828:     my ($target,$token) = @_;
        !          2829:     my $currentstring = '';
        !          2830:     if ($target eq 'web') {
        !          2831: 	$currentstring = $token->[2];    
        !          2832:     } 
        !          2833:     return $currentstring;
        !          2834: }
1.119     www      2835: 
1.122   ! albertel 2836: #-- <var> tag
        !          2837: sub start_var {
1.44      sakharuk 2838:     my ($target,$token) = @_;
                   2839:     my $currentstring = '';
                   2840:     if ($target eq 'web') {
1.122   ! albertel 2841: 	$currentstring = $token->[4];     
1.44      sakharuk 2842:     } 
                   2843:     return $currentstring;
                   2844: }
1.10      www      2845: 
1.122   ! albertel 2846: sub end_var {
        !          2847:     my ($target,$token) = @_;
1.44      sakharuk 2848:     my $currentstring = '';
                   2849:     if ($target eq 'web') {
1.122   ! albertel 2850: 	$currentstring = $token->[2];    
1.44      sakharuk 2851:     } 
                   2852:     return $currentstring;
                   2853: }
1.119     www      2854: 
1.122   ! albertel 2855: #-- <wbr> tag
        !          2856: sub start_wbr {
        !          2857:     my ($target,$token) = @_;
        !          2858:     my $currentstring = '';
        !          2859:     if ($target eq 'web') {
        !          2860: 	$currentstring = $token->[4];     
        !          2861:     } 
        !          2862:     return $currentstring;
1.98      albertel 2863: }
                   2864: 
1.122   ! albertel 2865: sub end_wbr {
        !          2866:     my ($target,$token) = @_;
        !          2867:     my $currentstring = '';
        !          2868:     if ($target eq 'web') {
        !          2869: 	$currentstring = $token->[2];    
        !          2870:     } 
        !          2871:     return $currentstring;
1.98      albertel 2872: }
1.94      sakharuk 2873: 
                   2874: sub image_replication {
                   2875:     my $src = shift;
1.118     www      2876:     if (not -e $src) {
1.94      sakharuk 2877: 	#replicates image itself
1.118     www      2878: 	&Apache::lonnet::repcopy($src);
1.94      sakharuk 2879: 	#replicates eps or ps 
                   2880: 	my $newsrc = $src;
1.118     www      2881: 	$newsrc =~ s/\.(gif|jpg|jpeg|png)$/.eps/i;
                   2882: 	if (not -e $newsrc) {
1.122   ! albertel 2883: 	    if (&Apache::lonnet::repcopy($newsrc) ne 'OK') {
        !          2884: 		$newsrc =~ s/\.eps$/\.ps/;
        !          2885: 		&Apache::lonnet::repcopy($newsrc);
        !          2886: 	    }
1.94      sakharuk 2887: 	}
                   2888:     }
                   2889:     return '';
                   2890: }
                   2891: 
1.1       sakharuk 2892: 1;
                   2893: __END__

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