--- loncom/xml/lontexconvert.pm 2008/02/06 10:16:00 1.87
+++ loncom/xml/lontexconvert.pm 2009/12/22 05:08:04 1.100
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# TeX Conversion Module
#
-# $Id: lontexconvert.pm,v 1.87 2008/02/06 10:16:00 foxr Exp $
+# $Id: lontexconvert.pm,v 1.100 2009/12/22 05:08:04 faziophi Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -47,7 +47,9 @@ use Apache::lonlocal;
use Apache::lonnet;
use lib '/home/httpd/lib/perl/';
use LONCAPA;
-
+use URI::Escape;
+use IO::Socket::INET;
+use IO::Socket::SSL;
# ====================================================================== Header
@@ -79,10 +81,7 @@ sub init_tth {
$Apache::lontexconvert::messedup=0;
-# we need this routine because &converted can get called from inside
-# of the safespace (through &xmlparse('stuff') which doesn't
-# allow the opcode for alarm, so we need to compile this before we get
-# into the safe space since opcode checks only occur at compile time
+
sub convert_real {
my ($texstring)=@_;
my ($xmlstring,$errorstring);
@@ -219,7 +218,9 @@ sub jsMath_converted {
sub tex_engine {
if (exists($env{'form.texengine'})) {
- return $env{'form.texengine'};
+ if ($env{'form.texengine'} ne '') {
+ return $env{'form.texengine'};
+ }
}
if ($env{'request.course.id'}
&& exists($env{'course.'.$env{'request.course.id'}.'.texengine'})) {
@@ -242,16 +243,64 @@ sub init_math_support {
return;
}
+sub mimetex_valign {
+ my ($esc_texstring)=@_;
+ my $valign = 0;
+ my $lonhost = $Apache::lonnet::perlvar{'lonHostID'};
+ my $hostname = &Apache::lonnet::hostname($lonhost);
+ my $protocol = $Apache::lonnet::protocol{$lonhost};
+ my $path = '/cgi-bin/mimetex.cgi?'.$esc_texstring;
+ my $socket;
+ &Apache::lonxml::start_alarm();
+ if ($protocol eq 'https') {
+ $socket = IO::Socket::SSL->new(PeerAddr => $hostname,
+ PeerPort => 'https(443)',
+ Proto => 'tcp');
+ } else {
+ $socket = IO::Socket::INET->new(PeerAddr => $hostname,
+ PeerPort => 'http(80)',
+ Proto => 'tcp');
+ }
+ if ($socket) {
+ my $headreq = "HEAD $path HTTP/1.0\r\n\r\n";
+ print $socket $headreq;
+ while (<$socket>) {
+ if (/Vertical\-Align\:\s*?([\-\d]+)/) {
+ $valign = $1;
+ }
+ }
+ if ($protocol eq 'https') {
+ $socket->close(SSL_no_shutdown => 1,
+ SSL_ctx_free => 1);
+ } else {
+ $socket->close();
+ }
+ }
+ &Apache::lonxml::end_alarm();
+ return $valign;
+}
+
sub mimetex_converted {
my $texstring=shift;
+
+# Alt-Argument for screen readers
+ my $alt_string=$$texstring;
+ $alt_string=~s/\"/\'\'/g;
+
+# Is this displaystyle?
+
my $displaystyle=&displaystyle($texstring);
+# Remove math environment delimiters
+
&clean_out_math_mode($texstring);
if ($displaystyle) {
$$texstring='\\displaystyle \\Large '.$$texstring;
}
- my $result='';
+ my $esc_texstring = &uri_escape($$texstring);
+ my $valign = &mimetex_valign($esc_texstring);
+ my $result='';
if ($displaystyle) {
$result='
'.$result.'';
}
@@ -267,6 +316,8 @@ sub converted {
return &jsMath_converted($string);
} elsif ($mode =~ /mimetex/i) {
return &mimetex_converted($string);
+ } elsif ($mode =~ /raw/i) {
+ return $$string;
}
return &tth_converted($string);
}
@@ -284,23 +335,37 @@ sub to_convert {
sub smiley {
my $expression=shift;
if ($env{'browser.imagesuppress'} eq 'on') { return $expression; }
- my %smileys=('\:\-\)' => 'smiley',
- '8\-\)' => 'coolsmile',
- '8\-(I|\|)' => 'coolindiff',
- ':\-(I|\|)' => 'neutral',
- '\:\-(o|O|\(\))' => 'shocked',
- ':\-\(' => 'frowny',
- '\;\-\)' => 'wink',
- '\:\-P' => 'baeh',
- '\:\-(\\\|\\/)' => 'hrrm',
- '\:\-D' => 'bigsmile',
- '\:\-C' => 'angry',
- '\:(\'|\`)\-\(' => 'cry',
- '\:\-(X|\#)' => 'lipsrsealed',
- '\:\-S' => 'huh');
+ my %smileys=(
+ '\:\-*\)' => 'face-smile.png',
+ '8\-\)' => 'face-cool.png',
+ '8\-(I|\|)' => 'face-glasses.png',
+ ':\-*(I|\|)' => 'face-plain.png',
+ '\:\-(o|O|\(\))' => 'face-surprise.png',
+ ':\-*\(' => 'face-sad.png',
+ '\;\-*\)' => 'face-wink.png',
+ '\:\-*(P|p)' => 'face-raspberry.png',
+ '\:\-(\\\|\\/)' => 'face-uncertain.png',
+ '\:\-*D' => 'face-smile-big.png',
+ '\:\-*(C|\@)' => 'face-angry.png',
+ '\:(\'|\`)\-*\(' => 'face-crying.png',
+ '\:\-*(X|x|\#)' => 'face-quiet.png',
+ '\:\-*(s|S)' => 'face-uncertain.png',
+ '\:\-*\$' => 'face-embarrassed.png',
+ '\:\-*\*' => 'face-kiss.png',
+ '\+O\(' => 'face-sick.png',
+ '(\<\;3|\(heart\))' => 'heart.png',
+ '\(rose\)' => 'rose.png',
+ '\(pizza\)' => 'food-pizza.png',
+ '\(cake\)' => 'food-cake.png',
+ '\(ninja\)' => 'face-ninja.png',
+ '\(pirate\)' => 'face-pirate.png',
+ '\((agree|yes)\)' => 'opinion-agree.png',
+ '\((disagree|nay)\)' => 'opinion-disagree.png',
+ '(o|O)\-*\)' => 'face-angel.png',
+ );
my $iconpath=$Apache::lonnet::perlvar{'lonIconsURL'};
foreach my $smiley (keys(%smileys)) {
- $expression=~s/$smiley/\/gs;
+ $expression=~s/$smiley/\/gs;
}
return $expression;
}
@@ -351,7 +416,7 @@ sub msgtexconverted {
sub algebra {
use AlgParser;
- my ($string,$target,$style)=@_;
+ my ($string,$target,$style,$parstack,$safeeval)=@_;
my $parser = new AlgParserWithImplicitExpand;
$string=&prepare_algebra($string);
my $ret = $parser->parse($string);
@@ -368,7 +433,9 @@ sub algebra {
$latex='\\ensuremath{'.$latex.'}';
}
if ($target eq 'web' || $target eq 'analyze') {
- $result = &converted(\$latex);
+ my $display=&Apache::lonxml::get_param('display',$parstack,$safeeval);
+ $result = &converted(\$latex,$display);
+# $result = &converted(\$latex);
} else {
$result = $latex;
}
@@ -415,8 +482,78 @@ sub postprocess_algebra {
__END__
+=pod
+
+=head1 NAME
+
+Apache::lontexconvert;
+
+=head1 SYNOPSIS
+
+Access to tth/ttm
+
+This is part of the LearningOnline Network with CAPA project
+described at http://www.lon-capa.org.
+
+
+=head1 SUBROUTINES
+
+=over
+
+=item init_tth()
+
+Header
+
+=item convert_real()
+
+ we need this routine because &converted can get called from inside
+ of the safespace (through &xmlparse('stuff') which doesn't
+ allow the opcode for alarm, so we need to compile this before we get
+ into the safe space since opcode checks only occur at compile time
+
+=item tth_converted()
+
+
+=item clean_out_math_mode()
+
+
+=item displaystyle()
+
+
+=item jsMath_converted()
+
+
+=item tex_engine()
+
+
+=item init_math_support()
+
+
+=item mimetex_converted()
+
+
+=item converted()
+
+
+=item to_convert()
+
+message display
+
+=item smiley()
+
+???
+
+=item msgtexconverted()
+
+=item algebra()
+
+=item prepare_algebra()
+
+=item postprocess_algebra()
+=back
+=cut