--- loncom/xml/lontexconvert.pm 2001/05/03 21:28:53 1.1 +++ loncom/xml/lontexconvert.pm 2003/09/19 16:12:50 1.25 @@ -1,68 +1,112 @@ # The LearningOnline Network with CAPA # TeX Conversion Module # +# $Id: lontexconvert.pm,v 1.25 2003/09/19 16:12:50 www 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. +# # 05/29/00,05/30,10/11,10/20 Gerd Kortemeyer -# 05/03/2001 Scott Harrison +# 5/4 Gerd Kortemeyer package Apache::lontexconvert; use strict; use tth; use vars qw($errorstring); +use Apache(); use Apache::lonmsg; +use Apache::lonxml; +use Apache::lonmenu; # ====================================================================== Header sub header { $errorstring=''; my $time=time; - my $addhead=< - if (window.location.pathname!="/res/adm/pages/menu.html") { - menu=window.open("","LONCAPAmenu"); - menu.currentURL=window.location.href; - } - -END if ($ENV{'browser.mathml'}) { &tth::ttminit(); - return '' - .'' - .']>' - .'' - ."$addhead" - ."\n"; + if ($ENV{'browser.unicode'}) { + &tth::ttmoptions('-L -u1'); + } else { + &tth::ttmoptions('-L -u0'); + } } else { &tth::tthinit(); - my $headerstring=''; - if ($ENV{'browser.os'} eq 'mac') { - $headerstring.="\n" - .'' - ."\n$addhead\n"; + if ($ENV{'browser.unicode'}) { + &tth::tthoptions('-L -u1'); + } else { + &tth::tthoptions('-L -u0'); } - else { - $headerstring.="$addhead"; - } - return $headerstring."\n"; } + return &Apache::lonxml::xmlbegin(). + &Apache::lonxml::fontsettings(). + "\n\n". + &Apache::lonmenu::registerurl(undef,'tex'). + "\n\n"; } # ================================================================== Conversion +$Apache::lontexconvert::messedup=0; sub converted { - my $texstring=shift; - my $xmlstring; + my $texstring=shift; + my $xmlstring='[UNDISPLAYABLE]'; + if ($Apache::lontexconvert::messedup) { + return '[TeX Uncoverted Due To Previous Errors]'; + } + eval(<<'ENDCONV'); + { + local $SIG{SEGV}=sub { $Apache::lontexconvert::messedup=1; die; }; if ($ENV{'browser.mathml'}) { $xmlstring=&tth::ttm($$texstring); $xmlstring=~s/\/\/g; $xmlstring=~s/\/\/g; $xmlstring=~s/\/\\<\/p\>/g; $errorstring.=&tth::ttmerror(); - } else { + } else { $xmlstring=&tth::tth($$texstring); $errorstring.=&tth::ttherror(); + } + $xmlstring=~s/^\s*//; + $xmlstring=~s/\s*$//; + } +ENDCONV + if ($Apache::lontexconvert::messedup || &tth::tthmessedup()) { + &Apache::lonnet::logthis("Trying to kill myself"); + $Apache::lontexconvert::messedup=1; + my $request=Apache->request(); + $request->child_terminate(); } return $xmlstring; } @@ -77,10 +121,78 @@ sub footer { &Apache::lonmsg::author_res_msg($ENV{'request.filename'},$errorstring); } # -------------------------------------------------------------------- End Body - $xmlstring.=''; + $xmlstring.=&Apache::lonxml::xmlend(); return $xmlstring; } +# ------------------------------------------------------------ Message display + +sub to_convert { + my ($string) = @_; + $string=~s/\/ /gs; + $string=~s/\s/ /gs; + $string=&HTML::Entities::decode($string); + return &converted(\$string); +} + +sub smiley { + my $expression=shift; + if ($ENV{'browser.imagesuppress'} eq 'on') { return $expression; } + my %smileys=('\:\-*\)' => 'smiley', + '8\-*\)' => 'coolsmile', + '8\-*I' => 'coolindiff', + ':\-*\(' => 'frowny', + '\:\-*(o|O|\(\))' => 'shocked', + '\;\-*\)' => 'wink', + '\:\-*P' => 'baeh', + '\:\-(\\\|\\/)' => 'hrrm', + '\:\-*D' => 'bigsmile', + '\:\-*C' => 'angry', + '\:(\'|\`)\-*\(' => 'cry', + '\:\-*(X|\#)' => 'lipsrsealed', + '\:\-*S' => 'huh'); + my $iconpath=$Apache::lonnet::perlvar{'lonIconsURL'}; + foreach (keys %smileys) { + $expression=~s/$_/\/gs; + } + return $expression; +} + +sub msgtexconverted { + my $message=shift; + + $errorstring=''; + 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'); + } + } + my $outmessage=''; + my $tex=0; + foreach (split(/(?:\<\;|\<)\/*m\s*(?:\>\;|\>)/i,$message)) { + if ($tex) { + $outmessage.=&to_convert($_); $tex=0; + } else { + $outmessage.=&smiley($_); $tex=1; + } + } + if (wantarray) { + return ($outmessage,$errorstring); + } else { + return $outmessage.$errorstring; + } +} + 1; __END__