--- loncom/xml/lontexconvert.pm 2002/07/30 12:42:13 1.7 +++ loncom/xml/lontexconvert.pm 2003/06/09 21:37:54 1.23 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # TeX Conversion Module # -# $Id: lontexconvert.pm,v 1.7 2002/07/30 12:42:13 www Exp $ +# $Id: lontexconvert.pm,v 1.23 2003/06/09 21:37:54 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -37,7 +37,6 @@ # 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; @@ -45,8 +44,10 @@ package Apache::lontexconvert; use strict; use tth; use vars qw($errorstring); +use Apache(); use Apache::lonmsg; use Apache::lonxml; +use Apache::lonmenu; # ====================================================================== Header @@ -55,30 +56,57 @@ sub header { my $time=time; 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'); + } } return &Apache::lonxml::xmlbegin(). &Apache::lonxml::fontsettings(). "\n\n". - &Apache::lonxml::registerurl(undef,'tex'). + &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 '[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; } @@ -99,18 +127,61 @@ sub footer { # ------------------------------------------------------------ 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(); - &tth::ttmoptions("-L"); + &tth::ttminit(); + if ($ENV{'browser.unicode'}) { + &tth::ttmoptions('-L -u1'); + } else { + &tth::ttmoptions('-L -u0'); + } } else { - &tth::tthinit(); - &tth::tthoptions("-L"); + &tth::tthinit(); + if ($ENV{'browser.unicode'}) { + &tth::tthoptions('-L -u1'); + } else { + &tth::tthoptions('-L -u0'); + } } - $message=~s/(\$.+?\$)/&converted(\$1)/ge; - $message=~s/(\\\[.+?\\\])/&converted(\$1)/ge; - return $message; + $message=~s/(\$\$.+?\$\$)/&to_convert($1)/gse; + $message=~s/(\$.+?\$)/&to_convert($1)/gse; + $message=~s/(\\\(.+?\\\))/&to_convert($1)/gse; + $message=~s/(\\\[.+?\\\])/&to_convert($1)/gse; + return &smiley($message).$errorstring; } 1;