--- loncom/xml/lontexconvert.pm 2010/04/27 20:29:20 1.103
+++ loncom/xml/lontexconvert.pm 2012/05/10 19:19:30 1.112.2.1
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# TeX Conversion Module
#
-# $Id: lontexconvert.pm,v 1.103 2010/04/27 20:29:20 faziophi Exp $
+# $Id: lontexconvert.pm,v 1.112.2.1 2012/05/10 19:19:30 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -49,7 +49,68 @@ use lib '/home/httpd/lib/perl/';
use LONCAPA;
use URI::Escape;
use IO::Socket::INET;
-use IO::Socket::SSL;
+
+
+#
+# Table of substitutions to unicode characters.
+#
+my %unicode_translations = (
+ '\rightleftharpoons' => 0x21cc,
+
+# Brackets - unicode is commented out with pure 8-bit ascii ugliness while we need it.
+
+# '' => 0x23a1,
+# '' => 0x23a2,
+# '' => 0x23a3, # when unicode catches up with browsers
+# '' => 0x23a4, # use these instead of the cheesey brackets below
+# '' => 0x23a5,
+# '' => 0x23a6
+ '' => 0x5b,
+ '' => 0x5b, # '['
+ '' => 0x5b,
+ '' => 0x5d, # ']'
+ '' => 0x5d,
+ '' => 0x5d,
+
+# Parens..again the unicode is commented out with the 8-bit ascii ugliness
+# turned on until browsers catch up with the unicode world.
+
+# '' => 0x239b,
+# '' => 0x239c,
+# '' => 0x239d,
+# '' => 0x239e,
+# '' => 0x239f,
+# '' => 0x23a0
+
+ '' => 0x28,
+ '' => 0x28, # '('
+ '' => 0x28,
+
+ '' => 0x29,
+ '' => 0x29, # '('
+ '' => 0x29
+
+
+);
+
+##
+# Utility to convert elements of a string to unicode:
+#
+# @param input - Input string
+# @param pattern - Pattern to convert
+# @param unicode - Unicode to substitute for pattern.
+#
+# @return string - resulting string.
+#
+sub unicode_subst {
+ my ($input, $pattern, $unicode) = @_;
+
+ my $char = pack('U', $unicode);
+
+ $input =~ s/$pattern/$char/g;
+
+ return $input;
+}
# ====================================================================== Header
@@ -107,15 +168,20 @@ sub convert_real {
$xmlstring=~s/^\s*\
unicode equivalents to render reliably
+ # in browsers. %unicode_translations is a table of
+ # string->substitution which we now apply:
+
+ foreach my $pattern (keys(%unicode_translations)) {
+ my $unicode = $unicode_translations{$pattern};
+ $xmlstring = &unicode_subst($xmlstring, $pattern, $unicode);
+ }
+
- &Apache::lonxml::end_alarm();
return ($xmlstring,$errorstring);
}
@@ -166,10 +232,12 @@ sub clean_out_math_mode {
sub displaystyle {
my ($texstring)=@_;
- #has a $$ or \[ or \displaystyle in it, guessinng it's display mode
+ #has a $$ or \[ or \displaystyle or eqnarray in it, guessinng it's display mode
if ($$texstring=~/[^\\]\$\$/ ||
- $$texstring=~/\\\[/ ||
- $$texstring=~/\\displaystyle/) { return 1; }
+ $$texstring=~/\\\[/ ||
+ $$texstring=~/\\displaystyle/ ||
+ $$texstring=~/eqnarray/
+ ) { return 1; }
return 0;
}
@@ -246,21 +314,12 @@ sub init_math_support {
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');
- }
+ $socket = IO::Socket::INET->new(PeerAddr => 'localhost',
+ PeerPort => 'http(80)',
+ Proto => 'tcp');
if ($socket) {
my $headreq = "HEAD $path HTTP/1.0\r\n\r\n";
print $socket $headreq;
@@ -269,12 +328,7 @@ sub mimetex_valign {
$valign = $1;
}
}
- if ($protocol eq 'https') {
- $socket->close(SSL_no_shutdown => 1,
- SSL_ctx_free => 1);
- } else {
- $socket->close();
- }
+ $socket->close();
}
&Apache::lonxml::end_alarm();
return $valign;
@@ -302,7 +356,7 @@ sub mimetex_converted {
my $valign = &mimetex_valign($esc_texstring);
my $result='';
if ($displaystyle) {
- $result='