--- loncom/xml/lontexconvert.pm 2011/12/06 16:10:53 1.109
+++ loncom/xml/lontexconvert.pm 2013/09/22 02:04:31 1.112.2.3
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# TeX Conversion Module
#
-# $Id: lontexconvert.pm,v 1.109 2011/12/06 16:10:53 dseaton Exp $
+# $Id: lontexconvert.pm,v 1.112.2.3 2013/09/22 02:04:31 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -50,6 +50,68 @@ use LONCAPA;
use URI::Escape;
use IO::Socket::INET;
+
+#
+# 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
sub init_tth {
@@ -106,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);
}
@@ -202,19 +269,8 @@ sub MathJax_converted {
return
''."\n";
}
- #sub MathJax_process {
- # my $state = pop(@MathJax_sent_header);
- # return '' if !$state;
- # return "\n".
- # ''."\n";
- #}
- #sub MathJax_state {
- # my ($level) = @_;
- # return $MathJax_sent_header[$level];
- #}
}
-
sub jsMath_converted {
my $texstring=shift;
my $tag='span';
@@ -348,7 +404,7 @@ sub converted {
} elsif ($mode =~ /jsmath/i) {
return &jsMath_converted($string);
} elsif ($mode =~ /mathjax/i) {
- return &MathJax_converted($string);
+ return &MathJax_converted($string);
} elsif ($mode =~ /mimetex/i) {
return &mimetex_converted($string);
} elsif ($mode =~ /raw/i) {
@@ -428,7 +484,7 @@ sub msgtexconverted {
foreach my $fragment (split(/(?:\<\;|\<)\/*algebra\s*(?:\>\;|\>)/i,
$message)) {
if ($tex) {
- my $algebra = &algebra($fragment, 'web', undef, undef, undef, undef, 'tth');
+ my $algebra = &algebra($fragment, 'web', undef, undef, undef, 'tth');
if ($email) {
$outmessage.=''.$algebra.'
'; $tex=0; @@ -558,7 +614,7 @@ Header =item jsMath_converted() =item MathJax_converted() - - Mimics the jsMath functionality + - Mimics the jsMath functionality =item tex_engine()