--- loncom/xml/lontexconvert.pm 2003/02/26 20:22:11 1.18 +++ loncom/xml/lontexconvert.pm 2003/10/07 17:52:29 1.26 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # TeX Conversion Module # -# $Id: lontexconvert.pm,v 1.18 2003/02/26 20:22:11 albertel Exp $ +# $Id: lontexconvert.pm,v 1.26 2003/10/07 17:52:29 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -44,6 +44,7 @@ package Apache::lontexconvert; use strict; use tth; use vars qw($errorstring); +use Apache(); use Apache::lonmsg; use Apache::lonxml; use Apache::lonmenu; @@ -77,12 +78,16 @@ sub header { # ================================================================== Conversion +$Apache::lontexconvert::messedup=0; sub converted { my $texstring=shift; my $xmlstring='[UNDISPLAYABLE]'; + if ($Apache::lontexconvert::messedup) { + return '[TeX Unconverted Due To Previous Errors]'; + } eval(<<'ENDCONV'); - { - local $SIG{SEGV}=sub { die; }; + { + local $SIG{SEGV}=sub { $Apache::lontexconvert::messedup=1; die; }; if ($ENV{'browser.mathml'}) { $xmlstring=&tth::ttm($$texstring); $xmlstring=~s/\/\/g; @@ -93,8 +98,16 @@ sub converted { $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; } @@ -116,11 +129,35 @@ sub footer { sub to_convert { my ($string) = @_; - $string=~s/\/ /g; + $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; @@ -140,11 +177,20 @@ sub msgtexconverted { &tth::tthoptions('-L -u0'); } } - $message=~s/(\$\$.+?\$\$)/&to_convert($1)/ge; - $message=~s/(\$.+?\$)/&to_convert($1)/ge; - $message=~s/(\\\(.+?\\\))/&to_convert($1)/ge; - $message=~s/(\\\[.+?\\\])/&to_convert($1)/ge; - return $message.$errorstring; + 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;