Diff for /loncom/xml/lontexconvert.pm between versions 1.67 and 1.79

version 1.67, 2005/07/05 18:59:03 version 1.79, 2006/10/23 18:49:47
Line 42  package Apache::lontexconvert; Line 42  package Apache::lontexconvert;
 use strict;  use strict;
 use tth();  use tth();
 use vars qw($errorstring);  use vars qw($errorstring);
 use Apache();  #use Apache::lonxml();
 use Apache::lonmsg();  
 use Apache::lonxml();  
 use Apache::lonmenu();  
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonnet;  use Apache::lonnet;
   use lib '/home/httpd/lib/perl/';
   use LONCAPA;
    
   
 # ====================================================================== Header  # ====================================================================== Header
   
 sub init_tth {  sub init_tth {
     my $options=$env{'course.'.$env{'request.course.id'}.'.tthoptions'};      my $options=$env{'course.'.$env{'request.course.id'}.'.tthoptions'};
       if ($options =~ /\S/) {
    $options = ' '.$options;
       } else {
    undef($options);
       }
     if ($env{'browser.mathml'}) {      if ($env{'browser.mathml'}) {
  &tth::ttminit();   &tth::ttminit();
  if ($env{'browser.unicode'}) {   if ($env{'browser.unicode'}) {
     &tth::ttmoptions('-L -u1 '.$options);      &tth::ttmoptions('-L -u1'.$options);
  } else {   } else {
     &tth::ttmoptions('-L -u0 '.$options);      &tth::ttmoptions('-L -u0'.$options);
  }   }
     } else {      } else {
  &tth::tthinit();   &tth::tthinit();
  if ($env{'browser.unicode'}) {   if ($env{'browser.unicode'}) {
     &tth::tthoptions('-L -u1 '.$options);      &tth::tthoptions('-L -u1'.$options);
  } else {   } else {
     &tth::tthoptions('-L -u0 '.$options);      &tth::tthoptions('-L -u0'.$options);
  }   }
     }      }
 }  }
   
 sub header {  
     $errorstring='';  
     my $time=time;  
     &init_tth();  
     return &Apache::lonxml::xmlbegin().  
  "\n<head>\n".  
  &Apache::lonxml::fontsettings().  
  &Apache::lonmenu::registerurl(undef,'tex').  
  "\n</head>\n";  
 }  
   
 # ================================================================== Conversion  # ================================================================== Conversion
   
 $Apache::lontexconvert::messedup=0;  $Apache::lontexconvert::messedup=0;
Line 137  ENDCONV Line 131  ENDCONV
  $errorstring) {   $errorstring) {
  &Apache::lonnet::logthis("Trying to kill myself");   &Apache::lonnet::logthis("Trying to kill myself");
  $Apache::lontexconvert::messedup=1;   $Apache::lontexconvert::messedup=1;
  my $request=Apache->request();   if (ref($Apache::lonxml::request)) {
  $request->child_terminate();      $Apache::lonxml::request->child_terminate();
    } else {
       my $request;
       eval { $request=Apache->request; };
       if (!$request) {
    eval { $request=Apache2::RequestUtil->request; };
       }
       if ($request) {
    $request->child_terminate();
       } else {
    &Apache::lonnet::logthis("Unable to find a request to do child_terminate on");
       }
    }
     }      }
     return $xmlstring;      return $xmlstring;
 }  }
Line 170  sub jsMath_converted { Line 176  sub jsMath_converted {
 }  }
   
 {  {
     my $jsMath_sent_header;      my @jsMath_sent_header;
     sub jsMath_reset {      sub jsMath_reset {
  $jsMath_sent_header=0;   undef(@jsMath_sent_header);
       }
       sub jsMath_push {
    push(@jsMath_sent_header,0);
     }      }
     sub jsMath_header {      sub jsMath_header {
  return '' if $jsMath_sent_header;   return '' if $jsMath_sent_header[-1];
  $jsMath_sent_header=1;   $jsMath_sent_header[-1]=1;
  return   return
             '<script type="text/javascript">              '<script type="text/javascript">
                      function NoFontMessage () {}                       function NoFontMessage () {}
                        jsMath = {Parser: {prototype: {environments: {\'eqnarray*\' :[\'Array\',null,null,\'rcl\',[5/18,5/18],3,\'D\']}}}};
                    </script>'."\n".                     </script>'."\n".
     '<script src="/adm/jsMath/jsMath.js"></script>'."\n";      '<script type="text/javascript" src="/adm/jsMath/jsMath.js"></script>'."\n";
     }      }
     sub jsMath_process {      sub jsMath_process {
  return '' if !$jsMath_sent_header;   my $state = pop(@jsMath_sent_header);
    return '' if !$state;
  return '<script type="text/javascript">jsMath.Process()</script>';   return '<script type="text/javascript">jsMath.Process()</script>';
     }      }
 }  }
   
   sub init_math_support {
       &init_tth();
       &Apache::lontexconvert::jsMath_push();
       if ($env{'environment.texengine'} eq 'jsMath' ||
    $env{'form.texengine'}        eq 'jsMath' ) {
    return &Apache::lontexconvert::jsMath_header();
       }
       return;
   }
   
 sub mimetex_converted {  sub mimetex_converted {
     my $texstring=shift;      my $texstring=shift;
     my $displaystyle=&displaystyle($texstring);      my $displaystyle=&displaystyle($texstring);
Line 198  sub mimetex_converted { Line 219  sub mimetex_converted {
     if ($displaystyle) {      if ($displaystyle) {
  $$texstring='\\displaystyle \\Large '.$$texstring;   $$texstring='\\displaystyle \\Large '.$$texstring;
     }      }
     my $result='<img src="/cgi-bin/mimetex.cgi?'.&Apache::lonnet::escape($$texstring).'" />';      my $result='<img src="/cgi-bin/mimetex.cgi?'.&escape($$texstring).'" />';
     if ($displaystyle) {      if ($displaystyle) {
  $result='<center>'.$result.'</center>';   $result='<center>'.$result.'</center>';
     }      }
Line 208  sub mimetex_converted { Line 229  sub mimetex_converted {
 sub converted {  sub converted {
     my ($string,$mode)=@_;      my ($string,$mode)=@_;
     if ($mode eq '') { $mode=$env{'environment.texengine'}; }      if ($mode eq '') { $mode=$env{'environment.texengine'}; }
     if ($mode eq 'tth') {      if ($mode =~ /tth/i) {
  return &tth_converted($string);   return &tth_converted($string);
     } elsif ($mode eq 'jsMath') {      } elsif ($mode =~ /jsmath/i) {
  return &jsMath_converted($string);   return &jsMath_converted($string);
     } elsif ($mode eq 'mimetex') {      } elsif ($mode =~ /mimetex/i) {
  return &mimetex_converted($string);   return &mimetex_converted($string);
     }      }
     return &tth_converted($string);      return &tth_converted($string);
 }  }
   
 # ====================================================================== Footer  
   
 sub footer {  
   my $xmlstring='';  
   if ($env{'request.state'} eq 'construct') {  
       $xmlstring.='<address>'.$errorstring.'</address>';  
   } else {  
       &Apache::lonmsg::author_res_msg($env{'request.filename'},$errorstring);  
   }  
 # -------------------------------------------------------------------- End Body  
   $xmlstring.=&Apache::lonxml::xmlend();  
   return $xmlstring;  
 }  
   
 # ------------------------------------------------------------ Message display  # ------------------------------------------------------------ Message display
   
 sub to_convert {  sub to_convert {
Line 260  sub smiley { Line 267  sub smiley {
  '\:\-(X|\#)' => 'lipsrsealed',   '\:\-(X|\#)' => 'lipsrsealed',
  '\:\-S' => 'huh');   '\:\-S' => 'huh');
     my $iconpath=$Apache::lonnet::perlvar{'lonIconsURL'};      my $iconpath=$Apache::lonnet::perlvar{'lonIconsURL'};
     foreach (keys %smileys) {      foreach my $smiley (keys(%smileys)) {
  $expression=~s/$_/\<img src="$iconpath\/$smileys{$_}.gif" \/\>/gs;    $expression=~s/$smiley/\<img src="$iconpath\/$smileys{$smiley}.gif" \/\>/gs; 
     }      }
     return $expression;      return $expression;
 }  }
Line 272  sub msgtexconverted { Line 279  sub msgtexconverted {
     &init_tth();      &init_tth();
     my $outmessage='';      my $outmessage='';
     my $tex=0;      my $tex=0;
     foreach (split(/(?:\&lt\;|\<)\/*m\s*(?:\&gt\;|\>)/i,$message)) {      foreach my $fragment (split(/(?:\&lt\;|\<)\/*m\s*(?:\&gt\;|\>)/i,$message)) {
  if ($tex) {   if ($tex) {
     if ($email) {      if ($email) {
  $outmessage.='</pre><tt>'.&to_convert($_).'</tt><pre>'; $tex=0;   $outmessage.='</pre><tt>'.&to_convert($fragment).'</tt><pre>';
    $tex=0;
     } else {      } else {
  $outmessage.=&to_convert($_); $tex=0;   $outmessage.=&to_convert($fragment);
    $tex=0;
     }      }
  } else {   } else {
             $outmessage.=&smiley($_); $tex=1;              $outmessage.=&smiley($fragment);
       $tex=1;
  }   }
     }      }
     $message=$outmessage; $outmessage=''; $tex=0;      $message=$outmessage; $outmessage=''; $tex=0;
     foreach (split(/(?:\&lt\;|\<)\/*algebra\s*(?:\&gt\;|\>)/i,$message)) {      foreach my $fragment (split(/(?:\&lt\;|\<)\/*algebra\s*(?:\&gt\;|\>)/i,
    $message)) {
  if ($tex) {   if ($tex) {
     if ($email) {      if ($email) {
  $outmessage.='</pre><tt>'.&algebra($_,'web').'</tt><pre>'; $tex=0;   $outmessage.='</pre><tt>'.&algebra($fragment,'web').'</tt><pre>';
    $tex=0;
     } else {      } else {
  $outmessage.=&algebra($_,'web'); $tex=0;   $outmessage.=&algebra($fragment,'web');
    $tex=0;
     }      }
  } else {   } else {
             $outmessage.=$_; $tex=1;              $outmessage.=$fragment;
       $tex=1;
  }   }
     }      }
     if (wantarray) {      if (wantarray) {
Line 346  sub postprocess_algebra { Line 360  sub postprocess_algebra {
     # moodle had these and I don't know why, ignoring them for now      # moodle had these and I don't know why, ignoring them for now
     # $string =~s/\\fun/ /g;      # $string =~s/\\fun/ /g;
   
     # remove the extra () in the denominator of a \frac  
     $string =~s/\\frac{(.+?)}{\\left\((.+?)\\right\)}/\\frac{$1}{$2}/gs;  
       
     # sqrt(3,4) means the 4 root of 3      # sqrt(3,4) means the 4 root of 3
     $string =~s/\\sqrt{([^,]+),([^\}]+)}/\\sqrt[$2]{$1}/gs;      $string =~s/\\sqrt{([^,]+),([^\}]+)}/\\sqrt[$2]{$1}/gs;
   

Removed from v.1.67  
changed lines
  Added in v.1.79


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