--- loncom/xml/londefdef.pm 2000/11/06 14:29:53 1.9 +++ loncom/xml/londefdef.pm 2005/07/11 09:49:59 1.279 @@ -1,1094 +1,4039 @@ # The LearningOnline Network with CAPA # Tags Default Definition Module # -# last modified 06/26/00 by Alexander Sakharuk +# $Id: londefdef.pm,v 1.279 2005/07/11 09:49:59 foxr 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. +# package Apache::londefdef; +use Apache::lonnet; use strict; use Apache::lonxml; +use Apache::File(); +use Image::Magick; +use Apache::lonmenu(); +use Apache::lonmeta(); +use Apache::Constants qw(:common); + + +BEGIN { -sub BEGIN { - &Apache::lonxml::register('Apache::londefdef',('m','html','head','map','applet','select','option','input','textarea','form','meta','title','body','center','b','strong','table','dt','h1','h2','h3','h4','h5','h6','cite','i','address','dd','dl','dir','ol','ul','menu','dfn','kbd','tt','code','em','q','p','br','big','small','basefont','font','s','sub','strike','sup','hr','a','li','u','output')); + &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','hideweboutput')); + +} + +sub initialize_londefdef { + $Apache::londefdef::TD_redirection=0; + @Apache::londefdef::table = (); + $Apache::londefdef::select=0; + undef(@Apache::londefdef::description); + @Apache::londefdef::DD=(0); + @Apache::londefdef::DT=(0); + @Apache::londefdef::seenDT=(0); + $Apache::londefdef::list_index=0; } -#===================================================================== TAG SUBROUTINES +#======================= TAG SUBROUTINES ===================== #-- - sub start_output { - my ($target,$token,$parstack,$parser) = @_; - $Apache::lonxml::textredirection = 1; - my $result = ''; - return $result; - } - sub end_output { - my ($target,$token,$parstack,$parser) = @_; - $Apache::lonxml::textredirection = 0; - my $result = ''; - return $result; - } +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,$parstack,$parser) = @_; - my $currentstring = ''; - if ($target eq 'web') { - my $inside = &Apache::lonxml::get_all_text("/m",$$parser[$#$parser]); - $inside ='\\documentstyle{article}'.$inside; -# &Apache::lonxml::debug($inside); - $currentstring = &Apache::lontexconvert::converted(\$inside); -# &Apache::lonxml::debug($currentstring); +sub start_m { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_; + my $currentstring = ''; + my $inside = &Apache::lonxml::get_all_text_unbalanced("/m",$parser); + if ($target eq 'web' || $target eq 'analyze') { + &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:"); + } + my $display=&Apache::lonxml::get_param('display',$parstack,$safeeval); + $currentstring = &Apache::lontexconvert::converted(\$inside,$display); + if ($Apache::lontexconvert::errorstring) { + &Apache::lonxml::warning("tth error: ". + $Apache::lontexconvert::errorstring); + $Apache::lontexconvert::errorstring=''; + } + #&Apache::lonxml::debug("M is ends with:$currentstring:"); + $Apache::lonxml::post_evaluate=0; + } elsif ($target eq 'tex') { + $currentstring = $inside; + my $eval=&Apache::lonxml::get_param('eval',$parstack,$safeeval); + if ($eval eq 'on') { + $currentstring=&Apache::run::evaluate($currentstring,$safeeval,$$parstack[-1]); + } + if ($currentstring=~/^(\s*\\\\\s*)*$/) {$currentstring = ' \vskip 0 mm ';} + # detect simple math mode entry exits, and convert them + # to use \ensuremath + if ($currentstring=~/^\s*\$[^\$].*[^\$]\$\s*$/) { + $currentstring=~s/^\$//; + $currentstring=~s/\$$//; + $currentstring='\ensuremath{'.$currentstring.'}'; + } + $Apache::lonxml::post_evaluate=0; + } + return $currentstring; +} - } elsif ($target eq 'tex') { - $currentstring = ""; - } - return $currentstring; +sub end_m { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'tex') { + $currentstring = ""; + } + 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); } - sub end_m { - my ($target,$token) = @_; - my $currentstring = ''; - if ($target eq 'web') { - } elsif ($target eq 'tex') { - $currentstring = ""; - } elsif ($target eq 'meta') { - } - return $currentstring; + } + return $result; +} + +sub end_tthoption { + my ($target,$token) = @_; + my $result; + return $result; +} + +#-- tag (end tag optional) +sub start_html { + my ($target,$token) = @_; + my $currentstring = ''; + my $options=$env{'course.'.$env{'request.course.id'}.'.tthoptions'}; + &Apache::lontexconvert::init_tth(); + if ($target eq 'web' || $target eq 'edit' || $target eq 'webgrade' ) { + $currentstring = &Apache::lonxml::xmlbegin(); + } elsif ($target eq 'tex') { + $currentstring .= '\documentclass[letterpaper]{article}'; + if (($env{'form.latex_type'}=~'batchmode') || + (!$env{'request.role.adv'})) {$currentstring .='\batchmode';} + $currentstring .= '\newcommand{\keephidden}[1]{}'. + '\renewcommand{\deg}{$^{\circ}$}'. + '\usepackage{longtable}'. + '\usepackage{textcomp}'. + '\usepackage{makeidx}'. + '\usepackage[dvips]{graphicx}'. + '\usepackage{picins}'. + '\usepackage{epsfig}'. + '\usepackage{calc}'. + '\usepackage{amsmath}'. + '\usepackage{amssymb}'. + '\usepackage{amsfonts}'. + '\usepackage{amsthm}'. + '\usepackage{amscd}'. + '\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}}'. + '\renewenvironment{theindex}{\begin{list}{}{{\vskip 1mm \noindent \large\textbf{Index}} \newline \setlength{\rightmargin}{0in}\setlength{\leftmargin}{0.13in}\setlength{\topsep}{0.01in}\setlength{\itemsep}{0.1in}\setlength{\parsep}{-0.02in}\setlength{\belowdisplayskip}{0.01in}\setlength{\abovedisplayskip}{0.01in}\setlength{\abovedisplayshortskip}{-0.04in}\setlength{\belowdisplayshortskip}{0.01in}}}{\end{list}}'; + } + return $currentstring; +} + +sub end_html { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = ''; + } + return $currentstring; +} + +#-- tag (end tag optional) +sub start_head { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = $token->[4].&Apache::lonxml::fontsettings(); + } + return $currentstring; +} + +sub end_head { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web' && $env{'request.state'} eq 'published') { + $currentstring = &Apache::lonmenu::registerurl(undef,$target). + $token->[2]; + } + return $currentstring; +} + +#-- tag (end tag required) +sub start_map { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = $token->[4]; + } + return $currentstring; +} + +sub end_map { + my ($target,$token) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = $token->[2]; + } + return $currentstring; +} + +#-- tag - sub start_select { - my ($target,$token) = @_; - my $currentstring = ''; - if ($target eq 'web') { - $currentstring = $token->[4]; - } - return $currentstring; - } - sub end_select { - my ($target,$token) = @_; - my $currentstring = ''; - if ($target eq 'web') { - $currentstring = $token->[2]; - } - return $currentstring; - } -#------------------------------------------------------------------------