# The LearningOnline Network with CAPA # TeX Conversion Module # # $Id: lontexconvert.pm,v 1.23 2003/06/09 21:37:54 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. # # 05/29/00,05/30,10/11,10/20 Gerd Kortemeyer # 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; 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::lonmenu::registerurl(undef,'tex'). "\n\n"; } # ================================================================== Conversion $Apache::lontexconvert::messedup=0; sub converted { 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 { $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; } # ====================================================================== Footer sub footer { my $xmlstring=''; if ($ENV{'request.state'} eq 'construct') { $xmlstring.='
'.$errorstring.'
'; } else { &Apache::lonmsg::author_res_msg($ENV{'request.filename'},$errorstring); } # -------------------------------------------------------------------- End Body $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'); } } $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; __END__