--- loncom/xml/londefdef.pm 2000/06/26 21:51:17 1.1 +++ loncom/xml/londefdef.pm 2003/03/14 21:23:20 1.106.2.1 @@ -1,63 +1,177 @@ # The LearningOnline Network with CAPA # Tags Default Definition Module # +# $Id: londefdef.pm,v 1.106.2.1 2003/03/14 21:23:20 albertel Exp $ +# +# +# Copyright Michigan State University Board of Trustees +# +# This file is part of the LearningOnline Network with CAPA (LON-CAPA). +# +# LON-CAPA is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# LON-CAPA is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LON-CAPA; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# /home/httpd/html/adm/gpl.txt +# +# http://www.lon-capa.org/ +# +# Copyright for TtHfunc and TtMfunc by Ian Hutchinson. +# TtHfunc and TtMfunc (the "Code") may be compiled and linked into +# binary executable programs or libraries distributed by the +# Michigan State University (the "Licensee"), but any binaries so +# distributed are hereby licensed only for use in the context +# of a program or computational system for which the Licensee is the +# primary author or distributor, and which performs substantial +# additional tasks beyond the translation of (La)TeX into HTML. +# The C source of the Code may not be distributed by the Licensee +# to any other parties under any circumstances. +# +# # last modified 06/26/00 by Alexander Sakharuk +# 11/6,11/30,02/01/01,5/4 Gerd Kortemeyer +# 01/18 Alex Sakharuk -package Apache::londefaulttag; +package Apache::londefdef; +use Apache::lonnet; use strict; +use Apache::lonxml; +use Apache::File(); +use Image::Magick; +BEGIN { -#===================================================================== TAG SUBROUTINES -#----------------------------------------------------------------------------- tag - sub start_mfirst { - my ($target,$token) = @_; - my $currentstring = ''; - if ($target eq 'web') { - $currentstring = "\$out = lontexconvert::converted(\$in = '\\documentstyle{article}'.'\$'.\""; - } elsif ($target eq 'tex') { - $currentstring = "\$"; - } - return $currentstring; - } - sub start_m { - my ($target,$token) = @_; - my $currentstring = ''; - if ($target eq 'web') { - $currentstring = "\$out = lontexconvert::converted(\$in = '\$'.\""; - } elsif ($target eq 'tex') { - $currentstring = "\$"; - } - return $currentstring; - } - sub end_m { - my ($target,$token) = @_; - my $currentstring = ''; - if ($target eq 'web') { - $currentstring = "\".'\$') "; - } elsif ($target eq 'tex') { - $currentstring = "\$"; - } - return $currentstring; - } -#-------------------------------------------------------------------------- tag - sub start_html { - my ($target,$token) = @_; - my $currentstring = ''; - if ($target eq 'web') { - $currentstring = $token->[4]; - } - return $currentstring; - } + &Apache::lonxml::register('Apache::londefdef',('a','abbr','acronym','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')); + +} + +#======================= TAG SUBROUTINES ===================== +#-- +sub start_output { + my ($target) = @_; + if ($target eq 'meta') { $Apache::lonxml::metamode--; } + return ''; +} +sub end_output { + my ($target) = @_; + if ($target eq 'meta') { $Apache::lonxml::metamode++; } + return ''; +} +#-- tag +sub start_m { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $Apache::lonxml::prevent_entity_encode++; + my $inside = &Apache::lonxml::get_all_text_unbalanced("/m",$parser); + $inside ='\\documentstyle{article}'.$inside; + &Apache::lonxml::debug("M is starting with:$inside:"); + my $eval=&Apache::lonxml::get_param('eval',$parstack,$safeeval); + if ($eval eq 'on') { + $inside=&Apache::run::evaluate($inside,$safeeval,$$parstack[-1]); + #&Apache::lonxml::debug("M is evaulated to:$inside:"); + } + $currentstring = &Apache::lontexconvert::converted(\$inside); + if ($Apache::lontexconvert::errorstring) { + &Apache::lonxml::warning("tth error: ". + $Apache::lontexconvert::errorstring); + $Apache::lontexconvert::errorstring=''; + } + #&Apache::lonxml::debug("M is ends with:$currentstring:"); + } elsif ($target eq 'tex') { + $currentstring = &Apache::lonxml::get_all_text_unbalanced("/m",$parser); + if ($currentstring=~/^(\s*\\\\\s*)*$/) {$currentstring = ' \vskip 0 mm ';} + } else { + my $inside = &Apache::lonxml::get_all_text_unbalanced("/m",$parser); + } + return $currentstring; +} +sub end_m { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $Apache::lonxml::prevent_entity_encode--; + } elsif ($target eq 'tex') { + $currentstring = ""; + } elsif ($target eq 'meta') { + } + return $currentstring; +} + +sub start_tthoption { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; + my $result; + if ($target eq 'web') { + my $inside = &Apache::lonxml::get_all_text("/tthoption",$parser); + $inside=~s/^\s*//; + if ($ENV{'browser.mathml'}) { + &tth::ttmoptions($inside); + } else { + &tth::tthoptions($inside); + } + } + return $result; +} + +sub end_tthoption { + my ($target,$token) = @_; + my $result; + return $result; +} + +#-- tag +sub start_html { + my ($target,$token) = @_; + my $currentstring = ''; + if ($ENV{'browser.mathml'}) { + &tth::ttminit(); + if ($ENV{'browser.unicode'}) { + &tth::ttmoptions('-L -u1'); + } else { + &tth::ttmoptions('-L -u0'); + } + } else { + &tth::tthinit(); + if ($ENV{'browser.unicode'}) { + &tth::tthoptions('-L -u1'); + } else { + &tth::tthoptions('-L -u0'); + } + } + if ($target eq 'web') { + $currentstring = &Apache::lonxml::xmlbegin(). + &Apache::lonxml::fontsettings(); + } elsif ($target eq 'tex') { + @Apache::londefdef::table = (); + $currentstring .= '\documentclass[letterpaper]{article} + \newcommand{\keephidden}[1]{} + \renewcommand{\deg}{$^{\circ}$} + \usepackage[dvips]{graphicx} + \usepackage{epsfig}\usepackage{calc} + \newenvironment{choicelist}{\begin{enumerate}}{\end{enumerate}}'; + } + return $currentstring; +} sub end_html { my ($target,$token) = @_; my $currentstring = ''; if ($target eq 'web') { - $currentstring = $token->[2]; - } + $currentstring = &Apache::lonxml::xmlend(); + } return $currentstring; } -#-------------------------------------------------------------------------- tag +#-- tag sub start_head { my ($target,$token) = @_; my $currentstring = ''; @@ -70,11 +184,12 @@ use strict; my ($target,$token) = @_; my $currentstring = ''; if ($target eq 'web') { - $currentstring = $token->[2]; + $currentstring = &Apache::lonxml::registerurl(undef,$target). + $token->[2]; } return $currentstring; } -#--------------------------------------------------------------------------- tag +#-- tag sub start_map { my ($target,$token) = @_; my $currentstring = ''; @@ -91,24 +206,7 @@ use strict; } return $currentstring; } -#------------------------------------------------------------------------ tag - sub start_applet { - my ($target,$token) = @_; - my $currentstring = ''; - if ($target eq 'web') { - $currentstring = $token->[4]; - } - return $currentstring; - } - sub end_applet { - my ($target,$token) = @_; - my $currentstring = ''; - if ($target eq 'web') { - $currentstring = $token->[2]; - } - return $currentstring; - } -#------------------------------------------------------------------------ tag sub start_select { my ($target,$token) = @_; my $currentstring = ''; @@ -125,7 +223,7 @@ use strict; } return $currentstring; } -#------------------------------------------------------------------------