[LON-CAPA-cvs] cvs: loncom /xml lontexconvert.pm

albertel lon-capa-cvs@mail.lon-capa.org
Fri, 19 Mar 2004 17:54:18 -0000


albertel		Fri Mar 19 12:54:18 2004 EDT

  Modified files:              
    /loncom/xml	lontexconvert.pm 
  Log:
  - fix problem with trying to call &xmlparse('<m>stuff</m>');
  
  
Index: loncom/xml/lontexconvert.pm
diff -u loncom/xml/lontexconvert.pm:1.35 loncom/xml/lontexconvert.pm:1.36
--- loncom/xml/lontexconvert.pm:1.35	Tue Mar  9 10:53:18 2004
+++ loncom/xml/lontexconvert.pm	Fri Mar 19 12:54:17 2004
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # TeX Conversion Module
 #
-# $Id: lontexconvert.pm,v 1.35 2004/03/09 15:53:18 albertel Exp $
+# $Id: lontexconvert.pm,v 1.36 2004/03/19 17:54:17 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -85,6 +85,38 @@
 # ================================================================== Conversion
 
 $Apache::lontexconvert::messedup=0;
+
+# we need this routine because &converted can get called from inside
+# of the safespace (through &xmlparse('<m>stuff</m>') which doesn't
+# allow the opcode for alarm, so we need to compile this before we get
+# into the safe space since opcode checks only occur at compile time
+sub convert_real {
+    my ($texstring)=@_;
+    my ($xmlstring,$errorstring);
+    local $SIG{SEGV}=sub { $Apache::lontexconvert::messedup=1; die; };
+    local $SIG{ALRM}=sub { 
+	$xmlstring='['.&mt("TeX unconverted due to errors").']';
+	$Apache::lontexconvert::messedup=1;
+	die &mt("TeX unconverted due to errors");
+    };
+    alarm($Apache::lonnet::perlvar{'lonScriptTimeout'});
+    if ($ENV{'browser.mathml'}) {
+	$xmlstring=&tth::ttm($$texstring);
+	$xmlstring=~s/\<math\>/\<math xmlns=\"\&mathns\;\"\>/g;
+	$xmlstring=~s/\<br\>/\<br\/\>/g;
+	$xmlstring=~s/\<p\>/\<p\>\<\/p\>/g;
+	$errorstring.=&tth::ttmerror();
+    } else {
+	$xmlstring=&tth::tth($$texstring);
+	$errorstring.=&tth::ttherror();
+	$xmlstring=~s-</font(\s*)>-</font>-g;
+    }
+    $xmlstring=~s/^\s*//;
+    $xmlstring=~s/\s*$//;
+    alarm(0);
+    return ($xmlstring,$errorstring);
+}
+
 sub converted {
     my $texstring=shift;
     my $xmlstring='['.&mt('UNDISPLAYABLE').']';
@@ -92,28 +124,7 @@
 	return '['.&mt('TeX unconverted due to previous errors').']';
     }
     eval(<<'ENDCONV');
-    {
-	local $SIG{SEGV}=sub { $Apache::lontexconvert::messedup=1; die; };
-	local $SIG{ALRM}=sub { 
-	    $xmlstring='['.&mt("TeX unconverted due to errors").']';
-	    $Apache::lontexconvert::messedup=1;
-	    die &mt("TeX unconverted due to errors"); };
-	alarm($Apache::lonnet::perlvar{'lonScriptTimeout'});
-	if ($ENV{'browser.mathml'}) {
-	    $xmlstring=&tth::ttm($$texstring);
-	    $xmlstring=~s/\<math\>/\<math xmlns=\"\&mathns\;\"\>/g;
-	    $xmlstring=~s/\<br\>/\<br\/\>/g;
-	    $xmlstring=~s/\<p\>/\<p\>\<\/p\>/g;
-	    $errorstring.=&tth::ttmerror();
-	} else {
-	    $xmlstring=&tth::tth($$texstring);
-	    $errorstring.=&tth::ttherror();
-	    $xmlstring=~s-</font(\s*)>-</font>-g;
-	}
-	$xmlstring=~s/^\s*//;
-	$xmlstring=~s/\s*$//;
-	alarm(0);
-    }
+    ($xmlstring,$errorstring)=&convert_real($texstring)
 ENDCONV
     if ($@) {
 	$errorstring.=&mt("Evaluation Error: ").$@;