version 1.112, 2012/03/11 14:46:46
|
version 1.112.2.4, 2014/06/18 06:48:47
|
Line 54 use IO::Socket::INET;
|
Line 54 use IO::Socket::INET;
|
# |
# |
# Table of substitutions to unicode characters. |
# Table of substitutions to unicode characters. |
# |
# |
|
|
|
my %unicode_harpoons = ( |
|
'\rightleftharpoons' => 0x21cc, |
|
); |
|
|
my %unicode_translations = ( |
my %unicode_translations = ( |
'\rightleftharpoons' => 0x21cc, |
|
|
|
# Brackets - unicode is commented out with pure 8-bit ascii ugliness while we need it. |
# Brackets - unicode for browsers/OS which support it. |
|
|
|
'' => 0x23a1, |
|
'' => 0x23a2, |
|
'' => 0x23a3, |
|
'' => 0x23a4, |
|
'' => 0x23a5, |
|
'' => 0x23a6, |
|
|
|
# Parens - unicode for browsers/OS which support it |
|
|
|
'' => 0x239b, |
|
'' => 0x239c, |
|
'' => 0x239d, |
|
'' => 0x239e, |
|
'' => 0x239f, |
|
'' => 0x23a0, |
|
|
|
); |
|
|
|
my %ascii_8bit_translations = ( |
|
|
|
# Brackets - pure 8-bit ascii ugliness for browsers/OS which can't handle unicode |
|
|
# '' => 0x23a1, |
|
# '' => 0x23a2, |
|
# '' => 0x23a3, # when unicode catches up with browsers |
|
# '' => 0x23a4, # use these instead of the cheesey brackets below |
|
# '' => 0x23a5, |
|
# '' => 0x23a6 |
|
'' => 0x5b, |
'' => 0x5b, |
'' => 0x5b, # '[' |
'' => 0x5b, # '[' |
'' => 0x5b, |
'' => 0x5b, |
Line 72 my %unicode_translations = (
|
Line 92 my %unicode_translations = (
|
'' => 0x5d, |
'' => 0x5d, |
'' => 0x5d, |
'' => 0x5d, |
|
|
# Parens..again the unicode is commented out with the 8-bit ascii ugliness |
# Parens - pure 8-bit ascii ugliness for browsers/OS which can't handle unicode |
# turned on until browsers catch up with the unicode world. |
|
|
|
# '' => 0x239b, |
|
# '' => 0x239c, |
|
# '' => 0x239d, |
|
# '' => 0x239e, |
|
# '' => 0x239f, |
|
# '' => 0x23a0 |
|
|
|
'' => 0x28, |
'' => 0x28, |
'' => 0x28, # '(' |
'' => 0x28, # '(' |
'' => 0x28, |
'' => 0x28, |
|
|
'' => 0x29, |
'' => 0x29, |
'' => 0x29, # '(' |
'' => 0x29, # '(' |
'' => 0x29 |
'' => 0x29, |
|
|
|
|
); |
); |
|
|
Line 171 sub convert_real {
|
Line 181 sub convert_real {
|
&Apache::lonxml::end_alarm(); |
&Apache::lonxml::end_alarm(); |
|
|
# |
# |
# Several strings produced by tth require |
# Several strings produced by tth require |
# transliteration -> unicode equivalents to render reliably |
# transliteration -> unicode equivalents to render reliably |
# in browsers. %unicode_translations is a table of |
# in browsers. %unicode_translations and %unicode_harpoons are tables of |
# string->substitution which we now apply: |
# string->substitution which we now apply. (%ascii_8bit_translations used |
|
# instead for Windows XP and mobile devices. |
|
|
|
my $use_ascii; |
|
if ($env{'browser.os'} eq 'win') { |
|
if (($env{'browser.osversion'}) && ($env{'browser.osversion'} < 6.0)) { |
|
$use_ascii = 1; |
|
} |
|
} |
|
if ($env{'browser.mobile'}) { |
|
$use_ascii = 1; |
|
} |
|
|
foreach my $pattern (keys(%unicode_translations)) { |
foreach my $pattern (keys(%unicode_translations)) { |
my $unicode = $unicode_translations{$pattern}; |
my $unicode = $unicode_translations{$pattern}; |
|
if ($use_ascii) { |
|
$unicode = $ascii_8bit_translations{$pattern}; |
|
} |
$xmlstring = &unicode_subst($xmlstring, $pattern, $unicode); |
$xmlstring = &unicode_subst($xmlstring, $pattern, $unicode); |
} |
} |
|
|
|
foreach my $pattern (keys(%unicode_harpoons)) { |
|
$xmlstring = &unicode_subst($xmlstring, $pattern, $unicode_harpoons{$pattern}); |
|
} |
|
|
return ($xmlstring,$errorstring); |
return ($xmlstring,$errorstring); |
} |
} |
Line 269 sub MathJax_converted {
|
Line 296 sub MathJax_converted {
|
return |
return |
'<script type="text/javascript" src="/adm/MathJax/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>'."\n"; |
'<script type="text/javascript" src="/adm/MathJax/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>'."\n"; |
} |
} |
#sub MathJax_process { |
|
# my $state = pop(@MathJax_sent_header); |
|
# return '' if !$state; |
|
# return "\n". |
|
# '<script type="text/javascript">MathJax.Process()</script>'."\n"; |
|
#} |
|
#sub MathJax_state { |
|
# my ($level) = @_; |
|
# return $MathJax_sent_header[$level]; |
|
#} |
|
} |
} |
|
|
|
|
Line 415 sub converted {
|
Line 432 sub converted {
|
} elsif ($mode =~ /jsmath/i) { |
} elsif ($mode =~ /jsmath/i) { |
return &jsMath_converted($string); |
return &jsMath_converted($string); |
} elsif ($mode =~ /mathjax/i) { |
} elsif ($mode =~ /mathjax/i) { |
return &MathJax_converted($string); |
return &MathJax_converted($string); |
} elsif ($mode =~ /mimetex/i) { |
} elsif ($mode =~ /mimetex/i) { |
return &mimetex_converted($string); |
return &mimetex_converted($string); |
} elsif ($mode =~ /raw/i) { |
} elsif ($mode =~ /raw/i) { |
Line 495 sub msgtexconverted {
|
Line 512 sub msgtexconverted {
|
foreach my $fragment (split(/(?:\<\;|\<)\/*algebra\s*(?:\>\;|\>)/i, |
foreach my $fragment (split(/(?:\<\;|\<)\/*algebra\s*(?:\>\;|\>)/i, |
$message)) { |
$message)) { |
if ($tex) { |
if ($tex) { |
my $algebra = &algebra($fragment, 'web', undef, undef, undef, undef, 'tth'); |
my $algebra = &algebra($fragment, 'web', undef, undef, undef, 'tth'); |
if ($email) { |
if ($email) { |
$outmessage.='</pre><tt>'.$algebra.'</tt><pre>'; |
$outmessage.='</pre><tt>'.$algebra.'</tt><pre>'; |
$tex=0; |
$tex=0; |
Line 580 sub postprocess_algebra {
|
Line 597 sub postprocess_algebra {
|
$string =~s/\\lim\\left\((.+?),(.+?),(.+?)\\right\)/\\lim_{$2\\to $3}$1/gs; |
$string =~s/\\lim\\left\((.+?),(.+?),(.+?)\\right\)/\\lim_{$2\\to $3}$1/gs; |
return $string; |
return $string; |
} |
} |
|
|
|
|
1; |
1; |
__END__ |
__END__ |
|
|
Line 625 Header
|
Line 644 Header
|
=item jsMath_converted() |
=item jsMath_converted() |
|
|
=item MathJax_converted() |
=item MathJax_converted() |
- Mimics the jsMath functionality |
- Mimics the jsMath functionality |
|
|
=item tex_engine() |
=item tex_engine() |
|
|