Diff for /loncom/xml/lontexconvert.pm between versions 1.105 and 1.110

version 1.105, 2011/02/10 19:28:29 version 1.110, 2012/02/28 10:38:14
Line 50  use LONCAPA; Line 50  use LONCAPA;
 use URI::Escape;  use URI::Escape;
 use IO::Socket::INET;  use IO::Socket::INET;
   
   
   #
   # Table of substitutions to unicode characters.
   #
   my %unicode_translations = (
       '\rightleftharpoons'  => 0x21cc,
       ''             => 0x23a1,
       ''             => 0x23a2,
       ''             => 0x23a3,
       ''             => 0x23a4,
       ''             => 0x23a5,
       ''             => 0x23a6   
   );
   
   ##
   # 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  # ====================================================================== Header
   
 sub init_tth {  sub init_tth {
Line 93  sub convert_real { Line 126  sub convert_real {
     };      };
     &Apache::lonxml::start_alarm();      &Apache::lonxml::start_alarm();
     if ($env{'browser.mathml'}) {      if ($env{'browser.mathml'}) {
    &Apache::lonnet::logthis("mathml");
  $xmlstring=&tth::ttm($$texstring);   $xmlstring=&tth::ttm($$texstring);
  $xmlstring=~s/\<math\>/\<math xmlns=\"\&mathns\;\"\>/g;   $xmlstring=~s/\<math\>/\<math xmlns=\"\&mathns\;\"\>/g;
  $xmlstring=~s/\<br\>/\<br\/\>/g;   $xmlstring=~s/\<br\>/\<br\/\>/g;
  $xmlstring=~s/\<p\>/\<p\>\<\/p\>/g;   $xmlstring=~s/\<p\>/\<p\>\<\/p\>/g;
  $errorstring.=&tth::ttmerror();   $errorstring.=&tth::ttmerror();
     } else {      } else {
    &Apache::lonnet::logthis("tth");
  $xmlstring=&tth::tth($$texstring);   $xmlstring=&tth::tth($$texstring);
  $errorstring.=&tth::ttherror();   $errorstring.=&tth::ttherror();
  $xmlstring=~s-</font(\s*)>-</font>-g;   $xmlstring=~s-</font(\s*)>-</font>-g;
Line 106  sub convert_real { Line 141  sub convert_real {
     $xmlstring=~s/^\s*\<br clear\=\"all\"/\<br/s;      $xmlstring=~s/^\s*\<br clear\=\"all\"/\<br/s;
     $xmlstring=~s/^\s*//;      $xmlstring=~s/^\s*//;
     $xmlstring=~s/\s*$//;      $xmlstring=~s/\s*$//;
       &Apache::lonxml::end_alarm();
   
     #      #
     # \rightleftharpoons is not converted by tth but maps      #  Several strings produced by tth require
     # reasonably well to &#8660;.  If we get many more of these,      # transliteration -> unicode equivalents to render reliably
     # we're going to need to have a translation sub.      # in browsers. %unicode_translations is a table of
     #      # string->substitution which we now apply:
     my $lrharpoon = pack("U", 0x21cc);  
     $xmlstring=~s/\\rightleftharpoons/$lrharpoon/g;      foreach my $pattern (keys(%unicode_translations)) {
    my $unicode = $unicode_translations{$pattern};
    $xmlstring = &unicode_subst($xmlstring, $pattern, $unicode);
       }
   
   
     &Apache::lonxml::end_alarm();  
     return ($xmlstring,$errorstring);      return ($xmlstring,$errorstring);
 }  }
   
Line 165  sub clean_out_math_mode { Line 205  sub clean_out_math_mode {
   
 sub displaystyle {  sub displaystyle {
     my ($texstring)=@_;      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=~/[^\\]\$\$/ ||      if ($$texstring=~/[^\\]\$\$/ ||
  $$texstring=~/\\\[/ ||          $$texstring=~/\\\[/ ||
  $$texstring=~/\\displaystyle/) { return 1; }          $$texstring=~/\\displaystyle/ ||
           $$texstring=~/eqnarray/
          ) { return 1; }
     return 0;      return 0;
 }  }
   
   sub MathJax_converted {
       my $texstring=shift;
       my $tag='math/tex;';
       if (&displaystyle($texstring)) { $tag='math/tex; mode=display'; }
       &clean_out_math_mode($texstring);
       return &MathJax_header().
         '<script type="'.$tag.'">'.$$texstring.'</script>';
   }
   
   {
       #Relies heavily on the previous jsMath installation
       my @MathJax_sent_header;
       sub MathJax_reset {
           undef(@MathJax_sent_header);
       }
       sub MathJax_push {
           push(@MathJax_sent_header,0);
       }
       sub MathJax_header {
           if (!@MathJax_sent_header) {
               &Apache::lonnet::logthis("mismatched calls of MathJax_header and MathJax_process");
               return '';
           }
           return '' if $MathJax_sent_header[-1];
           $MathJax_sent_header[-1]=1;
           return
             '<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];
       #}
   }
   
   
 sub jsMath_converted {  sub jsMath_converted {
     my $texstring=shift;      my $texstring=shift;
     my $tag='span';      my $tag='span';
Line 239  sub init_math_support { Line 322  sub init_math_support {
  ($inherit_jsmath && &jsMath_state(-2))) {   ($inherit_jsmath && &jsMath_state(-2))) {
  return &Apache::lontexconvert::jsMath_header();   return &Apache::lontexconvert::jsMath_header();
     }      }
       &Apache::lontexconvert::MathJax_push();
       if (lc(&tex_engine()) eq 'mathjax') { # ||
           #($inherit_jsmath && &jsMath_state(-2))) {
           return &Apache::lontexconvert::MathJax_header();
       }
     return;      return;
 }  }
   
 sub mimetex_valign {  sub mimetex_valign {
     my ($esc_texstring)=@_;      my ($esc_texstring)=@_;
     my $valign = 0;      my $valign = 0;
     my $lonhost = $Apache::lonnet::perlvar{'lonHostID'};  
     my $hostname = &Apache::lonnet::hostname($lonhost);  
     my $path = '/cgi-bin/mimetex.cgi?'.$esc_texstring;      my $path = '/cgi-bin/mimetex.cgi?'.$esc_texstring;
     my $socket;      my $socket;
     &Apache::lonxml::start_alarm();      &Apache::lonxml::start_alarm();
     my $socket = IO::Socket::INET->new(PeerAddr => $hostname,      $socket = IO::Socket::INET->new(PeerAddr => 'localhost',
                                         PeerPort => 'http(80)',                                      PeerPort => 'http(80)',
                                         Proto    => 'tcp');                                      Proto    => 'tcp');
     if ($socket) {      if ($socket) {
         my $headreq = "HEAD $path HTTP/1.0\r\n\r\n";          my $headreq = "HEAD $path HTTP/1.0\r\n\r\n";
         print $socket $headreq;          print $socket $headreq;
Line 289  sub mimetex_converted { Line 375  sub mimetex_converted {
     my $valign = &mimetex_valign($esc_texstring);      my $valign = &mimetex_valign($esc_texstring);
     my $result='<img src="/cgi-bin/mimetex.cgi?'.$esc_texstring.'" style="vertical-align:'.$valign.'px" alt="'.$alt_string.'" />';      my $result='<img src="/cgi-bin/mimetex.cgi?'.$esc_texstring.'" style="vertical-align:'.$valign.'px" alt="'.$alt_string.'" />';
     if ($displaystyle) {      if ($displaystyle) {
  $result='<center>'.$result.'</center>';   $result='<div style="text-align:center">'.$result.'</div>';
     }      }
     return $result;      return $result;
 }  }
Line 301  sub converted { Line 387  sub converted {
  return &tth_converted($string);   return &tth_converted($string);
     } elsif ($mode =~ /jsmath/i) {      } elsif ($mode =~ /jsmath/i) {
  return &jsMath_converted($string);   return &jsMath_converted($string);
       } elsif ($mode =~ /mathjax/i) {
    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 509  Header Line 597  Header
   
 =item jsMath_converted()  =item jsMath_converted()
   
   =item MathJax_converted()
    - Mimics the jsMath functionality
   
 =item tex_engine()  =item tex_engine()
   

Removed from v.1.105  
changed lines
  Added in v.1.110


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>